c++/1612: incorrect ambiguous overload message (template related)

jeremy.barnes@idilia.com jeremy.barnes@idilia.com
Sun Apr 1 00:00:00 GMT 2001


>Number:         1612
>Category:       c++
>Synopsis:       incorrect ambiguous overload message (template related)
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Thu Jan 11 00:26:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Jeremy Barnes
>Release:        gcc version 2.97 20010110 (experimental)
>Organization:
>Environment:
i386-pc-linux-gnu 
>Description:
The compiler incorrectly tells me that there are ambiguous
default constructors when instantiating the vector class:

#include <vector>
#include <fstream>

class my_t {
public:
    my_t() {};
private:
    std::vector<int> v;
};

int main() {}

[jeremy@luggage tmp]$ /usr/bin/g++ vector_test.cc

vector_test.cc: In constructor `my_t::my_t()':
vector_test.cc:6: call of overloaded `vector()' is ambiguous
/usr/local/include/g++-v3/bits/stl_vector.h:252: candidates are:
   std::vector<_Tp, _Alloc>::vector(unsigned int = 0) [with _Tp = int, _Alloc =
   std::allocator<int>]
/usr/local/include/g++-v3/bits/stl_vector.h:244:
   std::vector<_Tp, _Alloc>::vector(typename std::_Vector_base<_Tp,
   _Alloc>::allocator_type& = typename std::_Vector_base<_Tp,
   _Alloc>::allocator_type()) [with _Tp = int, _Alloc = std::allocator<int>] 

However, if I remove the #include <fstream> line, or swap the
order of the two #includes above, the problem disappears.

I don't think that this is a symptom of the STL classes that
were used; more likely there is some type of side effect
when processing something in the <fstream> class that is
causing the problem.

I suspect that this is a template bug.

(Full preprocessor output attached -- sorry I couldn't
find an example that didn't include these two header
files).
>How-To-Repeat:
Run the program above.
>Fix:
(Workarounds)

* Juggle #includes so that those template classes that are
giving you grief appear before other #includes

Or

* Instantiate an instance of the class/method before you
  #include the problem header file:
#include <vector>
std::vector<int> v1;  // instantiate problem constructor
#include <fstream>

// ... (no error now)
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="vector_test.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="vector_test.ii"

IyAxICJ2ZWN0b3JfdGVzdC5jYyIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3ZlY3Rv
ciIgMSAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgi
IDEgMwojIDMwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yYW5nZV9lcnJvcnMuaCIg
MSAzCiMgMjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmFuZ2VfZXJyb3Jz
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbmZpZy5oIiAx
IDMKIyAyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yYW5nZV9lcnJvcnMu
aCIgMiAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmFuZ2VfZXJy
b3JzLmgiIDMKbmFtZXNwYWNlIHN0ZCB7CnZvaWQgX19zdGxfdGhyb3dfcmFuZ2VfZXJyb3IoY29u
c3QgY2hhciogX19tc2cpOwp2b2lkIF9fc3RsX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFy
KiBfX21zZyk7Cn0KIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0
b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25maWcuaCIg
MSAzCiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yZWxvcHMuaCIgMSAz
CiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmVsb3BzLmgiIDMKbmFt
ZXNwYWNlIHN0ZCB7IG5hbWVzcGFjZSByZWxfb3BzIHsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAg
cmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29s
IG9wZXJhdG9yPihjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gX195
IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKfSB9CiMgMzcg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFpci5oIiAxIDMKIyAzNCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZCB7
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVm
IF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7
CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNlY29uZChfVDIoKSkge30K
ICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNv
bmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29u
c3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNl
Y29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQg
PT0gX195LnNlY29uZDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAg
KCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsK
ICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9U
MSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195
IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+
JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4KCgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoY29uc3QgX1Qx
JiBfX3gsIGNvbnN0IF9UMiYgX195KQoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9f
eSk7Cn0KCn0KIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0
cy5oIiAxIDMKIyAxOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRz
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbmZpZy5oIiAx
IDMKIyAyMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDIg
MwojIDU3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwp0
ZW1wbGF0ZSA8Ym9vbCBfVHJ1dGg+IHN0cnVjdCBfQm9vbCB7fTsKdHlwZWRlZiBfQm9vbDx0cnVl
PiBfX3RydWVfdHlwZTsKdHlwZWRlZiBfQm9vbDxmYWxzZT4gX19mYWxzZV90eXBlOwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgODEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxzZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BPRF90eXBl
Owp9OwojIDk2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIg
Mwp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQg
Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hv
cnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBs
b25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91Ymxl
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CiMgMzAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVk
ZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQg
Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25l
ZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9O
b3JtYWw7Cn07CgoKbmFtZXNwYWNlIHN0ZCB7CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
ciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn07Cgp0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNf
bm9ybWFsX2l0ZXJhdG9yPCBzdGQ6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh
aW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA0MiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDM5ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwojIDEgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL2JpdHMvYysrY29uZmln
LmgiIDEgMyA0CiMgMzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUv
Mi45Ny9pbmNsdWRlL2JpdHMvYysrY29uZmlnLmgiIDMgNAojIDEgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL2JpdHMvb3NfZGVmaW5lcy5oIiAx
IDMgNAojIDQzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIuOTcv
aW5jbHVkZS9iaXRzL29zX2RlZmluZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMyA0CiMgMjUwICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMyA0CiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMgNAojIDI1MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDIgMyA0CiMgMjc4ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNs
dWRlL2dudS9zdHVicy5oIiAxIDMgNAojIDI3OSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIg
MyA0CiMgNDQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9p
bmNsdWRlL2JpdHMvb3NfZGVmaW5lcy5oIiAyIDMgNAojIDM1ICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMg
NAojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwoj
IDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMwojIDEg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMgNAojIDE0NyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4
LWdudS8yLjk3L2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMg
MTk5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVk
ZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0MSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyA0MSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAojIDI3ICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQgIi91
c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzIDQKCgoKZXh0ZXJuIHZvaWQgKiBtZW1jcHkgKHZvaWQg
KiBfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICogX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICogbWVtbW92ZSAodm9pZCAqIF9fZGVz
dCwgX19jb25zdCB2b2lkICogX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gdm9pZCAqIG1lbWNjcHkgKHZvaWQgKiBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fc3JjLCBp
bnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqIG1lbXNldCAo
dm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBt
ZW1jbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9pZCAqIF9fczIsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqIG1lbWNociAoX19jb25zdCB2b2lkICogX19z
LCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICogcmF3bWVt
Y2hyIChfX2NvbnN0IHZvaWQgKiBfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hh
ciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc3RyY21wIChf
X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAo
Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIg
MSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9f
bG9jYWxlX3N0cnVjdAp7CiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbNl07CgoKICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVf
dG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAx
MDAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzIDQKCgpleHRlcm4gaW50IF9fc3RyY29sbF9s
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wp
IHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19j
b25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwpl
eHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKIyAxNDYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CmV4dGVybiBjaGFyICpz
dHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFy
ICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCk7CgoKCgpleHRl
cm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNo
YXIgKl9fcmVqZWN0KSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBj
aGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIg
KnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KSB0aHJv
dyAoKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19j
b25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cmNhc2Vz
dHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkgdGhy
b3cgKCk7CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNr
LCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJ0
b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxp
bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmlj
dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLCBjaGFyICoqX19yZXN0cmlj
dCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIgKipf
X3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwojIDE5NCAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAzIDQKZXh0ZXJuIHZvaWQgKiBtZW1tZW0gKF9fY29uc3Qgdm9pZCAqIF9faGF5c3RhY2ss
IHNpemVfdCBfX2hheXN0YWNrbGVuLCBfX2NvbnN0IHZvaWQgKiBfX25lZWRsZSwgc2l6ZV90IF9f
bmVlZGxlbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICogX19tZW1wY3B5ICh2b2lkICog
X19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fcmVzdHJpY3QgX19zcmMsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgKiBtZW1wY3B5ICh2b2lkICogX19yZXN0cmlj
dCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhy
b3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcs
IHNpemVfdCBfX21heGxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGlu
dCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cmVycm9yX3IgKGludCBf
X2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CmV4dGVybiBj
aGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZs
ZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqIF9fcywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKiBfX3Ny
Yywgdm9pZCAqIF9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnpl
cm8gKHZvaWQgKiBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAo
X19jb25zdCB2b2lkICogX19zMSwgX19jb25zdCB2b2lkICogX19zMiwgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg
dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBf
X2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoY29uc3QpKTsKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKX19leHRlbnNpb25fXyBleHRlcm4g
aW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVf
XyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpf
X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpIHRocm93ICgpOwpleHRlcm4gaW50IHN0cmNhc2VjbXAg
KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z
Miwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wg
KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbG9j
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpf
X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0
cmluZ3AsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93
ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3Rw
Y3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJp
Y3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpl
eHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv
aWQgKiBtZW1mcm9iICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoj
IDM1MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKfQojIDQ0ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICBleHRl
cm4gIkMiIHZvaWQqIG1lbWNweSh2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiAgZXh0ZXJu
ICJDIiB2b2lkKiBtZW1tb3ZlKHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKICBleHRlcm4g
IkMiIGNoYXIqIHN0cmNweShjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgY2hhciog
c3RybmNweShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBjaGFyKiBz
dHJjYXQoY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cm5jYXQoY2hh
ciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgaW50IG1lbWNtcChjb25zdCB2
b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBpbnQgc3RyY21wKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgc3RyY29sbChjb25zdCBjaGFy
KiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHN0cm5jbXAoY29uc3QgY2hhciosIGNv
bnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgc2l6ZV90IHN0cnhmcm0oY2hhciosIGNv
bnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgdm9pZCogbWVtY2hyKGNvbnN0IHZvaWQq
LCBpbnQsIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBjaGFyKiBzdHJjaHIoY29uc3QgY2hhciosIGlu
dCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyKiwgY29uc3QgY2hhciop
OwogIGV4dGVybiAiQyIgY2hhciogc3RycGJyayhjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwog
IGV4dGVybiAiQyIgY2hhciogc3RycmNocihjb25zdCBjaGFyKiwgaW50KTsKICBleHRlcm4gIkMi
IHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGNo
YXIqIHN0cnN0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgY2hhciog
c3RydG9rKGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiB2b2lkKiBtZW1zZXQodm9p
ZCosIGludCwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGNoYXIqIHN0cmVycm9yKGludCk7CiAgZXh0
ZXJuICJDIiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIqKTsKfQojIDQ0ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMSAi
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvbGlt
aXRzLmgiIDMgNAojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUv
Mi45Ny9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMgNAoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAoj
IDEzMCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1
ZGUvbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAyNiAi
L3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzIDQKIyAyNyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoKCgojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzIDQKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bv
c2l4MV9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMyA0
CiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzIDQKIyAxICIvdXNyL2luY2x1
ZGUvbGludXgvbGltaXRzLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xp
bS5oIiAyIDMgNAojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMgNAoj
IDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvcG9zaXgyX2xpbS5oIiAxIDMgNAojIDM1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDEgMyA0CiMgMzQgIi91c3Iv
aW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRp
b19saW0uaCIgMSAzIDQKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMyA0
CiMgMzkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyAxMzEgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoj
IDggIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRl
L3N5c2xpbWl0cy5oIiAyIDMgNAojIDEyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMt
bGludXgtZ251LzIuOTcvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyA0MSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDIgMwojIDQ1ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMg
NAojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwoj
IDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCgoK
IyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjYgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgc3Ry
dWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYg
c3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxkaXZf
dDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGlu
dCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwojIDgwICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXgg
KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19u
cHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRo
cm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv
dyAoKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25z
dCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBpbnQgc3Ry
dG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50
IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4
dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UpIHRocm93ICgpOwojIDEzMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz
dHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDE1NyAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMgNAojIDE1OCAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4gdW5z
aWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0
cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBk
b3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCmV4dGVy
biBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0
ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CiMgMTk2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gZG91YmxlIF9fc3Ry
dG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBf
X3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25n
IGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50
IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRv
dWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoK
CgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgoKX19leHRlbnNpb25f
XwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2Nv
bnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKiBfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CiMgMzMzICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsK
CgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAojIDI3ICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjcgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDIgMyA0CgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kz
ODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMCAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzIDQKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2No
YXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMyA0CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5
cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBf
X2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5
cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRf
dCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2lu
dCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lu
b190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7
CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlw
ZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIGxvbmcgaW50
IF9fcmxpbV90Owp0eXBlZGVmIF9fcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBf
X2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90
OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVk
ZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRl
ZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21h
c2s7CiMgMTAwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QK
ICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21h
c2spKV07CgoKCgoKICB9IF9fZmRfc2V0OwoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBf
X2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9s
b25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5
cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNu
dDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBf
X29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzIDQKIyAyMyAiL3Vzci9p
bmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Nj
aGVkLmgiIDEgMyA0CiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMgNApzdHJ1Y3Qg
X19zY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNy
L2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzIDQKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFz
dGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwp9OwoKCgp0eXBl
ZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5
cGVkZWYgc3RydWN0CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsK
ICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVk
OwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJf
c2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFk
X2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBf
X2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsK
CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsK
Cgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0
CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3Ig
X19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19t
X2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0
ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25j
ZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRo
cmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9k
ZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBf
cHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQg
X19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoK
CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTUxICIvdXNyL2luY2x1
ZGUvYml0cy90eXBlcy5oIiAyIDMgNAojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg
MyA0CgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7
CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYg
X19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19m
c2lkX3QgZnNpZF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5v
X3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9f
ZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9k
ZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9f
dWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9f
b2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBf
X2lkX3QgaWRfdDsKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCnR5cGVkZWYgX19k
YWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCnR5cGVkZWYgX19r
ZXlfdCBrZXlfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIyA1NyAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg
MSAzIDQKIyA1OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKCgp0eXBlZGVmIF9fY2xvY2tf
dCBjbG9ja190OwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMgNAoj
IDY5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNAoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90
OwojIDEyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCiMgMSAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvc3RkZGVmLmgiIDEg
MyA0CiMgMTI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxNzAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMyA0CnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlf
XykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElf
XykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lf
XykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElf
XykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMy
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg
aW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVk
ZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsK
IyAxOTIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Vu
ZGlhbi5oIiAxIDMgNAojIDIyICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMgNAojIDEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIg
MyA0CiMgMzUgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvZW5kaWFuLmgiIDEgMyA0CiMgMzYgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzIDQKIyAx
OTMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzIDQK
IyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3NlbGVjdC5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAy
IDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMyA0CiMgMjMgIi91c3Iv
aW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzIDQKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoK
Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8g
KDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMSAzIDQKIyA4MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1lc3Bl
YwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyAz
OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKCmV4dGVybiAiQyIgewoKCgoKCnN0
cnVjdCB0aW1ldmFsOwoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKCgp0eXBlZGVmIF9fZmRf
c2V0IGZkX3NldDsKIyA3NCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CmV4dGVybiBp
bnQgX19zZWxlY3QgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0ICpf
X3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVv
dXQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBfX2ZkX3NldCAq
X19yZWFkZmRzLCBfX2ZkX3NldCAqX193cml0ZWZkcywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLCBz
dHJ1Y3QgdGltZXZhbCAqX190aW1lb3V0KSB0aHJvdyAoKTsKIyA4NyAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMyA0CmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQg
Kl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywg
Y29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0IF9fc2lnc2V0X3QgKl9fc2ln
bWFzaykgdGhyb3cgKCk7CgoKCgoKfQojIDE5NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy
IDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzIDQKIyAxOTkgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxr
Y250X3Q7CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYgX19mc2ZpbGNu
dF90IGZzZmlsY250X3Q7CgoKCgoKCgp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0
eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRf
dCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoK
CgoKCgpleHRlcm4gaW50MzJfdCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lk
IHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lk
ICogaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogX19zdGF0ZWJ1Ziwgc2l6
ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKiBzZXRzdGF0ZSAodm9p
ZCAqIF9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewog
ICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsK
ICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAg
ICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFu
ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBz
dHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRl
X3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3RhdGVidWYsIHNp
emVfdCBfX3N0YXRlbGVuLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yICh2b2lkICogX19yZXN0cmljdCBfX3N0
YXRlYnVmLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQg
KHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5z
aWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4
ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f
eHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJv
dyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp
WzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwp
IHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNo
b3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNp
Z25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKc3RydWN0IGRyYW5kNDhfZGF0
YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCB4WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50
IGFbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBv
bGRfeFszXTsKICAgIGludCBpbml0OwogIH07CgoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBkb3VibGUgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy
LCBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBs
cmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcg
aW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbnJhbmQ0OF9y
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp
Y3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0
IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9f
c2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJu
IGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwgc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1
bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm
ZXIpIHRocm93ICgpOwojIDQ3NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIHZv
aWQgKiBtYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgKiBjYWxs
b2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
dm9pZCAqIHJlYWxsb2MgKHZvaWQgKiBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7Cgpl
eHRlcm4gdm9pZCBmcmVlICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBj
ZnJlZSAodm9pZCAqIF9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2Nh
LmgiIDEgMyA0CiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMyA0CiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzIDQK
CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMyA0Cgpl
eHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqIGFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhy
b3cgKCk7CgoKCgoKfQojIDQ5MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKZXh0
ZXJuIHZvaWQgKiB2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv
aWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsK
CgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IF9fb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9p
ZCAqIF9fYXJnKSwgdm9pZCAqIF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgb25fZXhpdCAo
dm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqIF9fYXJnKSwgdm9pZCAqIF9fYXJn
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAo
aW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoK
CgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFy
ICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgdW5zZXRl
bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVh
cmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNTY2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApl
eHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhy
b3cgKCk7CiMgNTk1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqcmVh
bHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsIGNoYXIgKl9fcmVzdHJpY3Qg
X19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3Qp
IChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5f
dCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKiBic2VhcmNoIChfX2NvbnN0IHZv
aWQgKiBfX2tleSwgX19jb25zdCB2b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90
IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCgoKZXh0ZXJuIHZvaWQgcXNvcnQg
KHZvaWQgKiBfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9m
bl90IF9fY29tcGFyKTsKCgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBf
X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KSB0aHJvdyAoKQog
ICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAo
aW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19k
ZW5vbSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVu
c2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsIGxvbmcg
bG9uZyBpbnQgX19kZW5vbSkgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwojIDY1MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKmVjdnQg
KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp
bnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqZmN2dCAo
ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChk
b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAq
X19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCmV4
dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQg
Kl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7Cgpl
eHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hh
ciAqX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcWVjdnRfciAo
bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNw
dCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90
IF9fbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmlj
dCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7
CiMgNjk1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gaW50IG1ibGVuIChfX2Nv
bnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2Mg
KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3
Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0
cmljdCBfX3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24p
IHRocm93ICgpOwojIDcxOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGludCBy
cG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDcyOSAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3Ry
aWN0IF9fb3B0aW9ucCwgX19jb25zdCBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5z
LCBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cgKCk7CiMgNzM4ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkp
IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj
aGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFt
ZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKfQojIDQ0ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCgoKCgpuYW1lc3BhY2Ugc3Rk
CnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwojIDY1ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwogIGV4dGVybiAiQyIgZG91YmxlIGF0
b2YoY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IGF0b2koY29uc3QgY2hhciopOwogIGV4
dGVybiAiQyIgbG9uZyBpbnQgYXRvbChjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBkb3VibGUg
c3RydG9kKGNvbnN0IGNoYXIqLCBjaGFyKiopOwogIGV4dGVybiAiQyIgZmxvYXQgc3RydG9mKGNv
bnN0IGNoYXIqLCBjaGFyKiopOwogIGV4dGVybiAiQyIgbG9uZyBpbnQgc3RydG9sKGNvbnN0IGNo
YXIqLCBjaGFyKiosIGludCk7CiAgZXh0ZXJuICJDIiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3Vs
KGNvbnN0IGNoYXIqLCBjaGFyKiosIGludCk7CiAgZXh0ZXJuICJDIiBpbnQgcmFuZCh2b2lkKTsK
ICBleHRlcm4gIkMiIHZvaWQgc3JhbmQodW5zaWduZWQgaW50KTsKICBleHRlcm4gIkMiIHZvaWQq
IGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2b2lkIGZyZWUodm9pZCopOwog
IGV4dGVybiAiQyIgdm9pZCogbWFsbG9jKHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2b2lkKiByZWFs
bG9jKHZvaWQqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgdm9pZCBhYm9ydCh2b2lkKTsKICBleHRl
cm4gIkMiIGludCBhdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKTsKICBleHRlcm4gIkMiIHZvaWQg
ZXhpdChpbnQpOwogIGV4dGVybiAiQyIgdm9pZCBfRXhpdChpbnQpOwogIGV4dGVybiAiQyIgY2hh
cipnZXRlbnYoY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHN5c3RlbShjb25zdCBjaGFy
Kik7CiAgZXh0ZXJuICJDIiB2b2lkKiBic2VhcmNoKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKiwg
c2l6ZV90LCBzaXplX3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmNvbXApKGNv
bnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CiAgZXh0ZXJuICJDIiB2b2lkIHFzb3J0KHZvaWQq
LCBzaXplX3QsIHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqY29tcCkoY29u
c3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKICBleHRlcm4gIkMiIGludCBhYnMoaW50KTsKICBl
eHRlcm4gIkMiIGxvbmcgaW50IGxhYnMobG9uZyBpbnQpOwogIGV4dGVybiAiQyIgZGl2X3QgZGl2
KGludCwgaW50KTsKICBleHRlcm4gIkMiIGxkaXZfdCBsZGl2KGxvbmcgaW50LCBsb25nIGludCk7
CiAgZXh0ZXJuICJDIiBpbnQgbWJsZW4oY29uc3QgY2hhciosIHNpemVfdCk7CiAgZXh0ZXJuICJD
IiBpbnQgbWJ0b3djKHdjaGFyX3QqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMi
IGludCB3Y3RvbWIoY2hhciosIHdjaGFyX3QpOwogIGV4dGVybiAiQyIgc2l6ZV90IG1ic3Rvd2Nz
KHdjaGFyX3QqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHNpemVfdCB3Y3N0
b21icyhjaGFyKiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7CiMgMTE5ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwogIGV4dGVybiAiQyIgbG9uZyBkb3Vi
bGUgc3RydG9sZChjb25zdCBjaGFyKiwgY2hhcioqKTsKCn0KIyA0NiAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9uZXciIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMwoj
cHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3N0
ZGRlZiIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgMzMgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24i
CgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBleGNlcHRpb24gewpwdWJs
aWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBiYWRfZXhjZXB0aW9uIDog
cHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1
YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFu
ZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7Cgp0ZXJtaW5h
dGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxlcik7CnZvaWQgdGVybWlu
YXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5leHBlY3RlZF9oYW5kbGVy
IHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lkIHVuZXhwZWN0ZWQgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAo
KTsKCn0KCn0KIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9uZXciIDIgMwoKZXh0ZXJu
ICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhj
ZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0
aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7
fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAgdHlwZWRlZiB2b2lkICgqbmV3
X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyIChuZXdfaGFuZGxlcik7
Cgp9CgoKdm9pZCAqb3BlcmF0b3IgbmV3IChzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2Fs
bG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10gKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRf
YWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdICh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyAoc3RkOjpz
aXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3
W10gKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3Bl
cmF0b3IgZGVsZXRlICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9p
ZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93
KCk7CgoKaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2Up
IHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0
ZDo6c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9CiMgNDgg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCgoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDM3
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9j
Kytjb25maWcuaCIgMSAzIDQKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pb3Nmd2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
d2NoYXIuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3dj
aGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIu
OTcvaW5jbHVkZS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMgNAojIDQwICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2NzdGRpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBj
LWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9jKytjb25maWcuaCIgMSAzIDQKIyA0MCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkYXJnLmgiIDEgMwojIDQwICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRhcmcuaCIgMwojIDEgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMg
NAojIDQzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5j
bHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xp
c3Q7CiMgMTEwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIuOTcv
aW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyA0
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkYXJnLmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp2YV9saXN0Owp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MSAzIDQKIyAyNyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCmV4dGVy
biAiQyIgewoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUv
Mi45Ny9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MiAzIDQKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8y
Ljk3L2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0CiMgMzkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAy
IDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMgNAojIDQxICIvdXNyL2lu
Y2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7
CiMgNTcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVk
ZS9fR19jb25maWcuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMgNAoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMyA0CiMgMTAgIi91c3IvaW5jbHVkZS9f
R19jb25maWcuaCIgMiAzIDQKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBj
LWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzEyICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9zdGRkZWYuaCIgMyA0
CnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp
Zy5oIiAyIDMgNAojIDM1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMgNAp0eXBlZGVmIGlu
dCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm
IGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
SElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMgNAoj
IDQ4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0CiMgNDkgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAyIDMgNAojIDE1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMg
NApzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE2NCAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMgNAp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21h
cmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3Ni
dWY7CgoKCiAgaW50IF9wb3M7CiMgMTg3ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0Cn07Cgpz
dHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsK
ICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9f
d3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7
CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9f
c2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7
CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hh
aW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0
OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVf
b2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDIz
MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKICBpbnQg
X3VudXNlZDJbMTZdOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVj
dCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3Bs
dXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9z
dGRlcnJfOwojIDI2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAp0eXBlZGVmIF9fc3NpemVf
dCBfX2lvX3JlYWRfZm4gKHZvaWQgKiBfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25i
eXRlcyk7CiMgMjcxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CnR5cGVkZWYgX19zc2l6ZV90
IF9faW9fd3JpdGVfZm4gKHZvaWQgKiBfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1Ziwgc2l6
ZV90IF9fbik7CiMgMjgwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CnR5cGVkZWYgaW50IF9f
aW9fc2Vla19mbiAodm9pZCAqIF9fY29va2llLCBfX29mZl90IF9fcG9zLCBpbnQgX193KTsKCgp0
eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICogX19jb29raWUpOwoKCgoKdHlwZWRlZiBf
X2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2Zu
IGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vl
a19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9u
X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRl
X2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7
Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0
aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsK
ICBzdHJ1Y3QgX0lPX0ZJTEUgX19maWxlOwogIGNvbnN0IHZvaWQgKl9fdnRhYmxlOwogIHZvaWQg
Kl9fY29va2llOwogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jdGlvbnM7Cn07
CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwojIDMzNyAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMgNApleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl
eHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVy
biB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBf
SU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5
bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDM2MyAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMgNApleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNv
bnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwg
Y29uc3QgY2hhciAqX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwoKZXh0ZXJu
IF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgp
OwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRo
cm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2
NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9J
T19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVl
X2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgp9CiMgNTggIi91c3IvaW5jbHVk
ZS9zdGRpby5oIiAyIDMgNAoKCgp0eXBlZGVmIF9fb2ZmX3QgZnBvc190OwoKCgoKdHlwZWRlZiBf
X29mZjY0X3QgZnBvczY0X3Q7CiMgMTEwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMyA0CiMgMTExICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMiAzIDQKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0
OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgoKZXh0ZXJuIGludCByZW1vdmUgKF9fY29uc3Qg
Y2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBj
aGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklM
RSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTQwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MyA0CmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBjaGFy
ICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3Ig
KGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTYwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4
dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9f
cGZ4KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpm
b3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX21vZGVzLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyMDMgIi91
c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rl
cykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqZmRvcGVu
IChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
RklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9f
aW9fZnVuY3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNo
YXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLCBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2
YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBp
bnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVm
ZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz
aXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmlj
dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
X19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdnNwcmludGYgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9f
Z251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9y
bWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IF9fdnNucHJpbnRmIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CmV4dGVybiBpbnQgdnNu
cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoK
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoK
CgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mLCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVy
biBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAq
Kl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0
aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg
MykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHBy
aW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJv
dyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkp
OwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCgogICAgIF9fYXR0cmli
dXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2Nh
bmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19h
cmcpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywg
MSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19h
cmcpIHRocm93ICgpCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9f
LCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2Vk
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAo
dm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoK
CgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9j
a2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cg
KCk7CiMgNDEzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBfX3NzaXplX3QgX19n
ZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLCBzaXplX3QgKl9fcmVzdHJpY3Qg
X19uLCBpbnQgX19kZWxpbWl0ZXIsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0
ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLCBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAoY2hh
ciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVu
Z2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90
IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19u
LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IGZ3
cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLCBzaXpl
X3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90
IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLCBz
aXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBz
aXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp
emVfdCBfX3NpemUsIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19v
ZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwojIDQ5MyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gaW50IGZz
ZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cg
KCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9f
cmVzdHJpY3QgX19wb3MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19z
dHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTI3ICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29m
ZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRl
bGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmdldHBvczY0IChG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykgdGhy
b3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBv
czY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
c3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpl
eHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vy
cmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19j
b25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3Mp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgp
OwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0
IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3Ry
dWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cgKCk7CiMgNjE0ICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CiMgNjM4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0Cn0KIyA0NSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCiMgNTYgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNp
bmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICBleHRlcm4gIkMiIGludCByZW1vdmUoY29u
c3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHJlbmFtZShjb25zdCBjaGFyKiwgY29uc3QgY2hh
ciopOwogIGV4dGVybiAiQyIgRklMRSogdG1wZmlsZSh2b2lkKTsKICBleHRlcm4gIkMiIGNoYXIq
IHRtcG5hbShjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgZmNsb3NlKEZJTEUqKTsKICBleHRlcm4g
IkMiIGludCBmZmx1c2goRklMRSopOwogIGV4dGVybiAiQyIgRklMRSogZm9wZW4oY29uc3QgY2hh
ciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIEZJTEUqIGZyZW9wZW4oY29uc3QgY2hhcios
IGNvbnN0IGNoYXIqLCBGSUxFKik7CiAgZXh0ZXJuICJDIiB2b2lkIHNldGJ1ZihGSUxFKiwgY2hh
ciopOwogIGV4dGVybiAiQyIgaW50IHNldHZidWYoRklMRSosIGNoYXIqLCBpbnQsIHNpemVfdCk7
CiAgZXh0ZXJuICJDIiBpbnQgZnByaW50ZihGSUxFKiwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0
ZXJuICJDIiBpbnQgZnNjYW5mKEZJTEUqLCBjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMi
IGludCBwcmludGYoY29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgc2NhbmYoY29u
c3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgc25wcmludGYoY2hhciAqLCBzaXplX3Qs
IGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNwcmludGYoY2hhciAqLCBjb25z
dCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBzc2NhbmYoY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHZmcHJpbnRmKEZJTEUqLCBjb25zdCBjaGFy
KiwgdmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdmZzY2FuZihGSUxFKiwgY29uc3QgY2hhcios
IHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZwcmludGYoY29uc3QgY2hhciosIHZhX2xpc3Qp
OwogIGV4dGVybiAiQyIgaW50IHZzY2FuZihjb25zdCBjaGFyKiwgdmFfbGlzdCk7CiAgZXh0ZXJu
ICJDIiBpbnQgdnNucHJpbnRmKGNoYXIqLCBzaXplX3QsIGNvbnN0IGNoYXIqLCB2YV9saXN0KTsK
ICBleHRlcm4gIkMiIGludCB2c3ByaW50ZihjaGFyKiwgY29uc3QgY2hhciosIHZhX2xpc3QpOwog
IGV4dGVybiAiQyIgaW50IHZzc2NhbmYoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCB2YV9saXN0
KTsKICBleHRlcm4gIkMiIGludCBmZ2V0YyhGSUxFICopOwogIGV4dGVybiAiQyIgY2hhciAqZmdl
dHMoY2hhciosIGludCwgRklMRSopOwogIGV4dGVybiAiQyIgaW50IGZwdXRjKGludCwgRklMRSop
OwogIGV4dGVybiAiQyIgaW50IGZwdXRzKGNvbnN0IGNoYXIqLCBGSUxFKik7CiAgZXh0ZXJuICJD
IiBpbnQgZ2V0YyhGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZ2V0Y2hhcih2b2lkKTsKICBleHRl
cm4gIkMiIGNoYXIgKmdldHMoY2hhciopOwogIGV4dGVybiAiQyIgaW50IHB1dGMoaW50LCBGSUxF
Kik7CiAgZXh0ZXJuICJDIiBpbnQgcHV0Y2hhcihpbnQpOwogIGV4dGVybiAiQyIgaW50IHB1dHMo
Y29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHVuZ2V0YyhpbnQsIEZJTEUqKTsKICBleHRl
cm4gIkMiIHNpemVfdCBmcmVhZCh2b2lkKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUqKTsKICBleHRl
cm4gIkMiIHNpemVfdCBmd3JpdGUoY29uc3Qgdm9pZCosIHNpemVfdCwgc2l6ZV90LCBGSUxFKik7
CiAgZXh0ZXJuICJDIiBpbnQgZmdldHBvcyhGSUxFKiwgZnBvc190Kik7CiAgZXh0ZXJuICJDIiBp
bnQgZnNlZWsoRklMRSosIGxvbmcgaW50LCBpbnQpOwogIGV4dGVybiAiQyIgaW50IGZzZXRwb3Mo
RklMRSosIGNvbnN0IGZwb3NfdCopOwogIGV4dGVybiAiQyIgbG9uZyBpbnQgZnRlbGwoRklMRSop
OwogIGV4dGVybiAiQyIgdm9pZCByZXdpbmQoRklMRSopOwogIGV4dGVybiAiQyIgdm9pZCBjbGVh
cmVycihGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZmVvZihGSUxFKik7CiAgZXh0ZXJuICJDIiBp
bnQgZmVycm9yKEZJTEUqKTsKICBleHRlcm4gIkMiIHZvaWQgcGVycm9yKGNvbnN0IGNoYXIqKTsK
fQojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRhcmcuaCIgMSAzCiMg
NDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwoKCgoj
IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMgNAojIDI3ICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjggIi91c3IvaW5j
bHVkZS93Y2hhci5oIiAyIDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAoj
IDMyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQK
IyAzOSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CiMgNTMgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBjb3VudDsKICB3aW50X3QgdmFsdWU7Cn0g
bWJzdGF0ZV90OwojIDc3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0CnN0cnVjdCB0bTsKCgpl
eHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCgpl
eHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4
dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3
Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3NjbXAg
KF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFy
X3QgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB3Y3NjYXNlY21w
IChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0
IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1
ZGUveGxvY2FsZS5oIiAxIDMgNAojIDExMyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0Cgpl
eHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qg
d2NoYXJfdCAqX19zMiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBf
X3djc25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf
X3MyLCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHdjc2NvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKIyAxMzYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKZXh0ZXJuIGludCBfX3djc2Nv
bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIF9fbG9j
YWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAod2No
YXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uLCBfX2xvY2FsZV90
IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hh
cl90ICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hyIChfX2NvbnN0IHdj
aGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndj
c3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoK
CmV4dGVybiBzaXplX3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3
Y2hhcl90ICpfX3JlamVjdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2Nv
bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KSB0aHJvdyAoKTsK
CmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0
IHdjaGFyX3QgKl9fYWNjZXB0KSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChf
X2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpIHRo
cm93ICgpOwojIDE3NCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNApleHRlcm4gd2NoYXJfdCAq
d2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fZGVsaW0sIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBzaXplX3QgX193Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKTsKZXh0
ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHNpemVfdCB3Y3NubGVuIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVu
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY2hyIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd21l
bWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3Qg
KndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndt
ZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNldCAod2NoYXJfdCAqX19zLCB3Y2hh
cl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2ludF90IGJ0b3djIChp
bnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3RvYiAod2ludF90IF9fYykgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoX19jb25zdCBtYnN0YXRlX3QgKl9fcHMpIHRocm93
ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2Ms
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sIG1ic3RhdGVfdCAqX19w
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAoY2hhciAqX19yZXN0cmljdCBf
X3MsIHdjaGFyX3QgX193YywgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoK
CgpleHRlcm4gc2l6ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz
aXplX3QgX19uLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgpleHRlcm4g
c2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwg
bWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwojIDI0NyAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMgNApleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2RzdCwgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLCBt
YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3
Y3NydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fZHN0LCBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMs
IHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBzaXplX3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgX19jb25z
dCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4s
IG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVk
ZS93Y2hhci5oIiAzIDQKZXh0ZXJuIGludCB3Y3dpZHRoICh3aW50X3QgX19jKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgd2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7
CgoKCgpleHRlcm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBp
bnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdW5z
aWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK
CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg
bG9uZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy
LCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoK
CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19u
cHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7
CiMgMzU1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3hsb2Nh
bGUuaCIgMSAzIDQKIyAzNTYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAoKCgpleHRlcm4g
bG9uZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2wgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19leHRl
bnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVy
biB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgX193Y3N0
b2RfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4gZmxv
YXQgX193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9j
KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2ludGVy
bmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRy
LCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK
CgoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQg
X193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwg
d2NoYXJfdCAqKiBfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2Nz
dG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cg
KCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193
Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdj
aGFyX3QgKiogX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo
cm93ICgpOwojIDQ4MiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNApleHRlcm4gd2NoYXJfdCAq
d2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93ICgp
OwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdj
aGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKIyA1MDIgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAzIDQKfQojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3
Y2hhci5oIiAyIDMKIyA2MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2No
YXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDM5ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKCm5hbWVzcGFjZSBz
dGQgewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBzdHJ1Y3QgY2hhcl90cmFpdHM7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPiBjbGFzcyBhbGxvY2F0b3I7CgoKICB0ZW1wbGF0ZTw+
IGNsYXNzIGNoYXJfdHJhaXRzPGNoYXI+OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICBjbGFzcyBiYXNpY19p
b3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4gPgogIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg
Y2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgY2xhc3MgYmFzaWNfb3N0cmVhbTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiA+CiAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg
ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICBjbGFzcyBiYXNpY19z
dHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2Nh
dG9yPF9DaGFyVD4gPgogIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAg
ICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogIGNsYXNzIGJh
c2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9j
ID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgY2xhc3MgYmFzaWNf
aWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
ID4KICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICBjbGFzcyBpc3RyZWFtYnVm
X2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgog
IGNsYXNzIGlvc19iYXNlOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1N0YXRlPiBzdHJ1Y3QgZnBvczsK
CgoKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCgoKCgogIHR5cGVkZWYg
YmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJl
YW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBi
YXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFy
PiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAg
dHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNp
Y19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1
ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07
CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2lj
X2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKIyAxNDggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaW9zZndkLmgiIDMKfQojIDUzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9pdGVyYXRvcl9iYXNlLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9jb25jZXB0X2NoZWNrcy5oIiAxIDMKIyAyMzIgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBfTXV0YWJsZV90cmFpdCB7CiAgdHlwZWRlZiBfVHAgX1R5cGU7Cn07CnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBfTXV0YWJsZV90cmFpdDxjb25zdCBfVHA+IHsKICB0eXBlZGVmIF9U
cCBfVHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UeXBlPgp2b2lkIF9fc2lua191bnVzZWRf
d2FybmluZyhfVHlwZSkgeyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGVYLCBjbGFzcyBfVHlwZVk+
CnN0cnVjdCBfU1RMX0NPTlZFUlRfRVJST1IgewogIHN0YXRpYyB2b2lkCiAgX190eXBlX1hfaXNf
bm90X2NvbnZlcnRpYmxlX3RvX3R5cGVfWShfVHlwZVggX194LCBfVHlwZVkpIHsKICAgIF9UeXBl
WSBfX3kgPSBfX3g7CiAgICBfX3NpbmtfdW51c2VkX3dhcm5pbmcoX195KTsKICB9Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UeXBlPiBzdHJ1Y3QgX19jaGVja19lcXVhbCB7IH07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1R5cGVYLCBjbGFzcyBfVHlwZVk+CnN0cnVjdCBfU1RMX1NBTUVfVFlQRV9FUlJPUiB7
CiAgc3RhdGljIHZvaWQKICBfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1koX1R5cGVYICwgX1R5
cGVZICkgewogICAgX19jaGVja19lcXVhbDxfVHlwZVg+IHQxID0gX19jaGVja19lcXVhbDxfVHlw
ZVk+KCk7CiAgfQp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9GdW5jLCBjbGFzcyBfUmV0PgpzdHJ1
Y3QgX1NUTF9HRU5FUkFUT1JfRVJST1IgewogIHN0YXRpYyBfUmV0IF9fZ2VuZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbihfRnVuYyYgX19mKSB7CiAgICByZXR1cm4gX19mKCk7CiAgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9GdW5jPgpzdHJ1Y3QgX1NUTF9HRU5FUkFUT1JfRVJST1I8X0Z1bmMs
IHZvaWQ+IHsKICBzdGF0aWMgdm9pZCBfX2dlbmVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24o
X0Z1bmMmIF9fZikgewogICAgX19mKCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfRnVuYywg
Y2xhc3MgX1JldCwgY2xhc3MgX0FyZz4Kc3RydWN0IF9TVExfVU5BUllfRlVOQ1RJT05fRVJST1Ig
ewogIHN0YXRpYyBfUmV0CiAgX191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb24o
X0Z1bmMmIF9fZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX0FyZyYgX19hcmcpIHsKICAgIHJldHVybiBfX2YoX19hcmcpOwogIH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfRnVuYywgY2xhc3MgX0FyZz4Kc3RydWN0IF9TVExfVU5BUllfRlVOQ1RJT05fRVJS
T1I8X0Z1bmMsIHZvaWQsIF9Bcmc+IHsKICBzdGF0aWMgdm9pZAogIF9fdW5hcnlfZnVuY3Rpb25f
cmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9GdW5jJiBfX2YsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BcmcmIF9fYXJnKSB7CiAgICBfX2YoX19hcmcpOwog
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBj
bGFzcyBfU2Vjb25kPgpzdHJ1Y3QgX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1IgewogIHN0YXRp
YyBfUmV0CiAgX19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9GdW5jJiBf
X2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9GaXJz
dCYgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1NlY29uZCYgX19zZWNvbmQpIHsKICAgIHJldHVybiBfX2YoX19maXJzdCwgX19zZWNvbmQp
OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vj
b25kPgpzdHJ1Y3QgX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8X0Z1bmMsIHZvaWQsIF9GaXJz
dCwgX1NlY29uZD4gewogIHN0YXRpYyB2b2lkCiAgX19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1l
bnRfdmlvbGF0aW9uKF9GdW5jJiBfX2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9GaXJzdCYgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsKICAgIF9fZihfX2Zp
cnN0LCBfX3NlY29uZCk7CiAgfQp9OwojIDMzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2NvbmNlcHRfY2hlY2tzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJz
dCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SIHsgc3Rh
dGljIF9SZXQgX19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKGNv
bnN0IF9GaXJzdCYgX19maXJzdCwgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9f
Zmlyc3QgPT0gX19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0
dXJuIF9fZmlyc3QgPT0gX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX05PVF9FUVVBTF9F
UlJPUiB7IHN0YXRpYyBfUmV0IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbihjb25zdCBfRmlyc3QmIF9fZmlyc3QsIGNvbnN0IF9TZWNvbmQmIF9fc2Vjb25kKSB7
IHJldHVybiBfX2ZpcnN0ICE9IF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vj
b25kKSB7IHJldHVybiBfX2ZpcnN0ICE9IF9fc2Vjb25kOyB9IH07CnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+IHN0cnVjdCBfU1RMX0JJTkFSWV9PUF9M
RVNTX1RIQU5fRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBf
X3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA8IF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmlu
YXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNv
bmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0IDwgX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklO
QVJZX09QX0xFU1NfRVFVQUxfRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBf
U2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA8PSBfX3NlY29uZDsgfSBzdGF0aWMg
X1JldCBfX2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0ZpcnN0JiBfX2Zp
cnN0LCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA8PSBfX3NlY29uZDsgfSB9
Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPiBzdHJ1
Y3QgX1NUTF9CSU5BUllfT1BfR1JFQVRFUl9USEFOX0VSUk9SIHsgc3RhdGljIF9SZXQgX19jb25z
dF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKGNvbnN0IF9GaXJzdCYgX19m
aXJzdCwgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmlyc3QgPiBfX3NlY29u
ZDsgfSBzdGF0aWMgX1JldCBfX2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24o
X0ZpcnN0JiBfX2ZpcnN0LCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCA+IF9f
c2Vjb25kOyB9IH07CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfRmlyc3QsIGNsYXNzIF9T
ZWNvbmQ+IHN0cnVjdCBfU1RMX0JJTkFSWV9PUF9HUkVBVEVSX0VRVUFMX0VSUk9SIHsgc3RhdGlj
IF9SZXQgX19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKGNvbnN0
IF9GaXJzdCYgX19maXJzdCwgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJuIF9fZmly
c3QgPj0gX19zZWNvbmQ7IH0gc3RhdGljIF9SZXQgX19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uKF9GaXJzdCYgX19maXJzdCwgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0dXJu
IF9fZmlyc3QgPj0gX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9G
aXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX1BMVVNfRVJST1IgeyBz
dGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24o
Y29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBfX3NlY29uZCkgeyByZXR1cm4g
X19maXJzdCArIF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vjb25kKSB7IHJl
dHVybiBfX2ZpcnN0ICsgX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX1RJTUVTX0VSUk9S
IHsgc3RhdGljIF9SZXQgX19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uKGNvbnN0IF9GaXJzdCYgX19maXJzdCwgY29uc3QgX1NlY29uZCYgX19zZWNvbmQpIHsgcmV0
dXJuIF9fZmlyc3QgKiBfX3NlY29uZDsgfSBzdGF0aWMgX1JldCBfX2JpbmFyeV9vcGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb24oX0ZpcnN0JiBfX2ZpcnN0LCBfU2Vjb25kJiBfX3NlY29uZCkg
eyByZXR1cm4gX19maXJzdCAqIF9fc2Vjb25kOyB9IH07CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+IHN0cnVjdCBfU1RMX0JJTkFSWV9PUF9ESVZJREVf
RVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBfX3NlY29uZCkg
eyByZXR1cm4gX19maXJzdCAvIF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmluYXJ5X29wZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNvbmQmIF9fc2Vj
b25kKSB7IHJldHVybiBfX2ZpcnN0IC8gX19zZWNvbmQ7IH0gfTsKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gc3RydWN0IF9TVExfQklOQVJZX09QX1NV
QlRSQUNUX0VSUk9SIHsgc3RhdGljIF9SZXQgX19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uKGNvbnN0IF9GaXJzdCYgX19maXJzdCwgY29uc3QgX1NlY29uZCYgX19z
ZWNvbmQpIHsgcmV0dXJuIF9fZmlyc3QgLSBfX3NlY29uZDsgfSBzdGF0aWMgX1JldCBfX2JpbmFy
eV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0ZpcnN0JiBfX2ZpcnN0LCBfU2Vjb25k
JiBfX3NlY29uZCkgeyByZXR1cm4gX19maXJzdCAtIF9fc2Vjb25kOyB9IH07CnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+IHN0cnVjdCBfU1RMX0JJTkFS
WV9PUF9NT0RfRVJST1IgeyBzdGF0aWMgX1JldCBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb24oY29uc3QgX0ZpcnN0JiBfX2ZpcnN0LCBjb25zdCBfU2Vjb25kJiBf
X3NlY29uZCkgeyByZXR1cm4gX19maXJzdCAlIF9fc2Vjb25kOyB9IHN0YXRpYyBfUmV0IF9fYmlu
YXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRmlyc3QmIF9fZmlyc3QsIF9TZWNv
bmQmIF9fc2Vjb25kKSB7IHJldHVybiBfX2ZpcnN0ICUgX19zZWNvbmQ7IH0gfTsKIyAzNjAgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrcy5oIiAzCnN0cnVjdCBf
U1RMX0VSUk9SIHsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UeXBlPgogIHN0YXRpYyBfVHlwZQogIF9f
ZGVmYXVsdF9jb25zdHJ1Y3Rvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX1R5cGUpIHsKICAgIHJl
dHVybiBfVHlwZSgpOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CiAgc3RhdGljIF9UeXBl
CiAgX19hc3NpZ25tZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfVHlwZSBfX2Ep
IHsKICAgIF9fYSA9IF9fYTsKICAgIHJldHVybiBfX2E7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBf
VHlwZT4KICBzdGF0aWMgX1R5cGUKICBfX2NvcHlfY29uc3RydWN0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uKF9UeXBlIF9fYSkgewogICAgX1R5cGUgX19jKF9fYSk7CiAgICByZXR1cm4gX19jOwog
IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CiAgc3RhdGljIF9UeXBlCiAgX19jb25zdF9wYXJh
bWV0ZXJfcmVxdWlyZWRfZm9yX2NvcHlfY29uc3RydWN0b3IoX1R5cGUgLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UeXBlJiBfX2IpIHsK
ICAgIF9UeXBlIF9fYyhfX2IpOwogICAgcmV0dXJuIF9fYzsKICB9CiAgdGVtcGxhdGUgPGNsYXNz
IF9UeXBlPgogIHN0YXRpYyBfVHlwZQogIF9fY29uc3RfcGFyYW1ldGVyX3JlcXVpcmVkX2Zvcl9h
c3NpZ25tZW50X29wZXJhdG9yKF9UeXBlIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHlwZSYgX19iKSB7CiAgICBfX2EgPSBf
X2I7CiAgICByZXR1cm4gX19hOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CiAgc3RhdGlj
IF9UeXBlCiAgX19sZXNzX3RoYW5fY29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX1R5
cGUgX19hLCBfVHlwZSBfX2IpIHsKICAgIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2E7CiAgICBy
ZXR1cm4gX19iOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CiAgc3RhdGljIF9UeXBlCiAg
X19lcXVhbGl0eV9jb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfVHlwZSBfX2EsIF9U
eXBlIF9fYikgewogICAgaWYgKF9fYSA9PSBfX2IgfHwgX19hICE9IF9fYikgcmV0dXJuIF9fYTsK
ICAgIHJldHVybiBfX2I7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CiAgc3RhdGlj
IHZvaWQKICBfX2RlcmVmZXJlbmNlX29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfSXRl
cmF0b3IgX19pKSB7CiAgICBfX3NpbmtfdW51c2VkX3dhcm5pbmcoKl9faSk7CiAgfQogIHRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CiAgc3RhdGljIHZvaWQKICBfX2RlcmVmZXJlbmNlX29wZXJh
dG9yX2FuZF9hc3NpZ25tZW50X3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfSXRlcmF0b3IgX19pKSB7
CiAgICAqX19pID0gKl9faTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KICBzdGF0
aWMgdm9pZAogIF9fcHJlaW5jcmVtZW50X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihf
SXRlcmF0b3IgX19pKSB7CiAgICArK19faTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRv
cj4KICBzdGF0aWMgdm9pZAogIF9fcG9zdGluY3JlbWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb24oX0l0ZXJhdG9yIF9faSkgewogICAgX19pKys7CiAgfQogIHRlbXBsYXRlIDxjbGFz
cyBfSXRlcmF0b3I+CiAgc3RhdGljIHZvaWQKICBfX3ByZWRlY3JlbWVudF9vcGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSkgewogICAgLS1fX2k7CiAgfQogIHRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CiAgc3RhdGljIHZvaWQKICBfX3Bvc3RkZWNyZW1lbnRfb3Bl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVyYXRvciBfX2kpIHsKICAgIF9faS0tOwog
IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yLCBjbGFzcyBfVHlwZT4KICBzdGF0aWMgdm9p
ZAogIF9fcG9zdGluY3JlbWVudF9vcGVyYXRvcl9hbmRfYXNzaWdubWVudF9yZXF1aXJlbWVudF92
aW9sYXRpb24oX0l0ZXJhdG9yIF9faSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UeXBlIF9fdCkgewogICAgKl9faSsrID0g
X190OwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CiAg
c3RhdGljIF9JdGVyYXRvcgogIF9faXRlcmF0b3JfYWRkaXRpb25fYXNzaWdubWVudF9yZXF1aXJl
bWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pIHsKICAgIF9faSArPSBf
X247CiAgICByZXR1cm4gX19pOwogIH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yLCBjbGFz
cyBfRGlzdGFuY2U+CiAgc3RhdGljIF9JdGVyYXRvcgogIF9faXRlcmF0b3JfYWRkaXRpb25fcmVx
dWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVyYXRvciBfX2ksIF9EaXN0YW5jZSBfX24pIHsKICAgIF9f
aSA9IF9faSArIF9fbjsKICAgIF9faSA9IF9fbiArIF9faTsKICAgIHJldHVybiBfX2k7CiAgfQog
IHRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KICBzdGF0aWMgX0l0
ZXJhdG9yCiAgX19pdGVyYXRvcl9zdWJ0cmFjdGlvbl9hc3NpZ25tZW50X3JlcXVpcmVtZW50X3Zp
b2xhdGlvbihfSXRlcmF0b3IgX19pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikgewogICAgX19pIC09IF9fbjsK
ICAgIHJldHVybiBfX2k7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3IsIGNsYXNzIF9E
aXN0YW5jZT4KICBzdGF0aWMgX0l0ZXJhdG9yCiAgX19pdGVyYXRvcl9zdWJ0cmFjdGlvbl9yZXF1
aXJlbWVudF92aW9sYXRpb24oX0l0ZXJhdG9yIF9faSwgX0Rpc3RhbmNlIF9fbikgewogICAgX19p
ID0gX19pIC0gX19uOwogICAgcmV0dXJuIF9faTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVy
YXRvciwgY2xhc3MgX0Rpc3RhbmNlPgogIHN0YXRpYyBfRGlzdGFuY2UKICBfX2RpZmZlcmVuY2Vf
b3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9JdGVyYXRvciBfX2ksIF9JdGVyYXRvciBf
X2osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UgX19uKSB7CiAgICBfX24gPSBfX2kgLSBfX2o7CiAgICByZXR1cm4gX19uOwogIH0KICB0ZW1w
bGF0ZSA8Y2xhc3MgX0V4cCwgY2xhc3MgX1R5cGUsIGNsYXNzIF9EaXN0YW5jZT4KICBzdGF0aWMg
X1R5cGUKICBfX2VsZW1lbnRfYWNjZXNzX29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihf
RXhwIF9feCwgX1R5cGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX24pIHsKICAgIHJldHVybiBfX3hbX19uXTsKICB9CiAgdGVt
cGxhdGUgPGNsYXNzIF9FeHAsIGNsYXNzIF9UeXBlLCBjbGFzcyBfRGlzdGFuY2U+CiAgc3RhdGlj
IHZvaWQKICBfX2VsZW1lbnRfYXNzaWdubWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b24oX0V4cCBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9UeXBlKiBfX3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pIHsKICAgIF9feFtfX25dID0gKl9fdDsK
ICB9Cgp9OwoKCgpuYW1lc3BhY2Ugc3RkIHsKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4gc3Ry
dWN0IGl0ZXJhdG9yX3RyYWl0czsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgpzdHJ1Y3QgX192
YWx1ZV90eXBlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb24gewogIHR5cGVk
ZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlIHZhbHVl
X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CnN0cnVjdCBfX2RpZmZlcmVuY2VfdHlw
ZV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsKICB0eXBlZGVmIHR5cGVu
YW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg
ICBkaWZmZXJlbmNlX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CnN0cnVjdCBfX3Jl
ZmVyZW5jZV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsKICB0eXBlZGVm
IHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6cmVmZXJlbmNlIHJlZmVyZW5j
ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4Kc3RydWN0IF9fcG9pbnRlcl90eXBlX2RlZmlu
aXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsKICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRl
cmF0b3JfdHJhaXRzPF9JdGVyPjo6cG9pbnRlciBwb2ludGVyOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9JdGVyPgpzdHJ1Y3QgX19pdGVyYXRvcl9jYXRlZ29yeV90eXBlX2RlZmluaXRpb25fcmVxdWly
ZW1lbnRfdmlvbGF0aW9uIHsKICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRz
PF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5Owp9
OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UeXBlPgpzdHJ1Y3QgX0Fzc2lnbmFibGVfY29uY2VwdF9z
cGVjaWZpY2F0aW9uIHsKICBzdGF0aWMgdm9pZCBfQXNzaWduYWJsZV9yZXF1aXJlbWVudF92aW9s
YXRpb24oX1R5cGUgX19hKSB7CiAgICBfU1RMX0VSUk9SOjpfX2Fzc2lnbm1lbnRfb3BlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9fYSk7CiAgICBfU1RMX0VSUk9SOjpfX2NvcHlfY29uc3Ry
dWN0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9fYSk7CiAgICBfU1RMX0VSUk9SOjpfX2NvbnN0
X3BhcmFtZXRlcl9yZXF1aXJlZF9mb3JfY29weV9jb25zdHJ1Y3RvcihfX2EsX19hKTsKICAgIF9T
VExfRVJST1I6Ol9fY29uc3RfcGFyYW1ldGVyX3JlcXVpcmVkX2Zvcl9hc3NpZ25tZW50X29wZXJh
dG9yKF9fYSxfX2EpOwogIH0KfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHlwZT4Kc3RydWN0IF9E
ZWZhdWx0Q29uc3RydWN0aWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb24gewogIHN0YXRpYyB2b2lk
IF9EZWZhdWx0Q29uc3RydWN0aWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX1R5cGUgX19hKSB7
CiAgICBfU1RMX0VSUk9SOjpfX2RlZmF1bHRfY29uc3RydWN0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uKF9fYSk7CiAgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+CnN0cnVjdCBfRXF1YWxp
dHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7CiAgc3RhdGljIHZvaWQgX0VxdWFs
aXR5Q29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX1R5cGUgX19hKSB7CiAgICBfU1RM
X0VSUk9SOjpfX2VxdWFsaXR5X2NvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9fYSwg
X19hKTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UeXBlPgpzdHJ1Y3QgX0xlc3NUaGFuQ29t
cGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb24gewogIHN0YXRpYyB2b2lkIF9MZXNzVGhhbkNv
bXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9UeXBlIF9fYSkgewogICAgX1NUTF9FUlJP
Ujo6X19sZXNzX3RoYW5fY29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX19hLCBfX2Ep
OwogIH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Ucml2aWFsSXRlcmF0b3I+CnN0cnVjdCBfVHJp
dmlhbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7CnN0YXRpYyB2b2lkCl9Ucml2aWFs
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9Ucml2aWFsSXRlcmF0b3IgX19pKSB7CiAg
dHlwZWRlZiB0eXBlbmFtZQogICAgX192YWx1ZV90eXBlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJl
bWVudF92aW9sYXRpb248X1RyaXZpYWxJdGVyYXRvcj46OgogICAgdmFsdWVfdHlwZSBfX1Q7Cgog
IF9Bc3NpZ25hYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfVHJpdmlhbEl0ZXJhdG9yPjo6CiAg
ICBfQXNzaWduYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKCiAgX0RlZmF1bHRDb25z
dHJ1Y3RpYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfVHJpdmlhbEl0ZXJhdG9yPjo6CiAgICBf
RGVmYXVsdENvbnN0cnVjdGlibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CgogIF9FcXVh
bGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9Ucml2aWFsSXRlcmF0b3I+OjoK
ICAgIF9FcXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CgogIF9T
VExfRVJST1I6Ol9fZGVyZWZlcmVuY2Vfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9f
aSk7Cn0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHJpdmlhbEl0ZXJhdG9yPgpzdHJ1Y3QgX011dGFi
bGVfVHJpdmlhbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7CnN0YXRpYyB2b2lkCl9N
dXRhYmxlX1RyaXZpYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX1RyaXZpYWxJdGVy
YXRvciBfX2kpIHsKICBfVHJpdmlhbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfVHJp
dmlhbEl0ZXJhdG9yPjo6CiAgICBfVHJpdmlhbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bihfX2kpOwoKICBfU1RMX0VSUk9SOjpfX2RlcmVmZXJlbmNlX29wZXJhdG9yX2FuZF9hc3NpZ25t
ZW50X3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwp9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4Kc3RydWN0IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlv
biB7CnN0YXRpYyB2b2lkCl9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfSW5w
dXRJdGVyYXRvciBfX2kpIHsKCiAgX1RyaXZpYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248X0lucHV0SXRlcmF0b3I+OjoKICAgIF9Ucml2aWFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uKF9faSk7CgogIF9fZGlmZmVyZW5jZV90eXBlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJl
bWVudF92aW9sYXRpb248X0lucHV0SXRlcmF0b3I+KCk7CiAgX19yZWZlcmVuY2VfdHlwZV9kZWZp
bml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfSW5wdXRJdGVyYXRvcj4oKTsKICBfX3BvaW50
ZXJfdHlwZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfSW5wdXRJdGVyYXRvcj4o
KTsKICBfX2l0ZXJhdG9yX2NhdGVnb3J5X3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92aW9s
YXRpb248X0lucHV0SXRlcmF0b3I+KCk7CgogIF9TVExfRVJST1I6Ol9fcHJlaW5jcmVtZW50X29w
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwogIF9TVExfRVJST1I6Ol9fcG9zdGlu
Y3JlbWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKfQp9OwoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXJhdG9yPgpzdHJ1Y3QgX091dHB1dEl0ZXJhdG9yX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbiB7CnN0YXRpYyB2b2lkCl9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb24oX091dHB1dEl0ZXJhdG9yIF9faSkgewoKICBfQXNzaWduYWJsZV9jb25jZXB0
X3NwZWNpZmljYXRpb248X091dHB1dEl0ZXJhdG9yPjo6CiAgICBfQXNzaWduYWJsZV9yZXF1aXJl
bWVudF92aW9sYXRpb24oX19pKTsKCiAgX19pdGVyYXRvcl9jYXRlZ29yeV90eXBlX2RlZmluaXRp
b25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9PdXRwdXRJdGVyYXRvcj4oKTsKCiAgX1NUTF9FUlJP
Ujo6X19kZXJlZmVyZW5jZV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKICBf
U1RMX0VSUk9SOjpfX3ByZWluY3JlbWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24o
X19pKTsKICBfU1RMX0VSUk9SOjpfX3Bvc3RpbmNyZW1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uKF9faSk7CiAgX1NUTF9FUlJPUjo6CiAgICBfX3Bvc3RpbmNyZW1lbnRfb3BlcmF0
b3JfYW5kX2Fzc2lnbm1lbnRfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSwgKl9faSk7Cn0KfTsK
CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnN0cnVjdCBfRm9yd2FyZEl0ZXJh
dG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbiB7CnN0YXRpYyB2b2lkCl9Gb3J3YXJkSXRlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9Gb3J3YXJkSXRlcmF0b3IgX19pKSB7CgogIF9JbnB1dEl0
ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfRm9yd2FyZEl0ZXJhdG9yPjo6CiAgICBfSW5w
dXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnN0cnVjdCBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uIHsKc3RhdGljIHZvaWQKX011dGFibGVfRm9yd2FyZEl0ZXJhdG9y
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfRm9yd2FyZEl0ZXJhdG9yIF9faSkgewogIF9Gb3J3YXJk
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9Gb3J3YXJkSXRlcmF0b3I+OjoKICAgIF9G
b3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CgogIF9PdXRwdXRJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248X0ZvcndhcmRJdGVyYXRvcj46OgogICAgX091dHB1
dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwp9Cn07CgoKCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPgpzdHJ1Y3QgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb24gewpzdGF0aWMgdm9pZApfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faSkgewoK
ICBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yPjo6CiAgICBfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kp
OwoKICBfU1RMX0VSUk9SOjpfX3ByZWRlY3JlbWVudF9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb24oX19pKTsKICBfU1RMX0VSUk9SOjpfX3Bvc3RkZWNyZW1lbnRfb3BlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uKF9faSk7Cn0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yPgpzdHJ1Y3QgX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbiB7CnN0YXRpYyB2b2lkCl9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRv
cl9yZXF1aXJlbWVudF92aW9sYXRpb24oCiAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9f
aSkKewogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3I+OjoKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uKF9faSk7CgogIF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3Nw
ZWNpZmljYXRpb248X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OgogICAgX011dGFibGVfRm9yd2Fy
ZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwogIHR5cGVkZWYgdHlwZW5hbWUK
ICAgIF9fdmFsdWVfdHlwZV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPAog
ICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5cGUgX19UOwogIHR5cGVuYW1lIF9N
dXRhYmxlX3RyYWl0PF9fVD46Ol9UeXBlKiBfX3RtcF9wdHIgPSAwOwoKICBfU1RMX0VSUk9SOjoK
ICAgIF9fcG9zdGluY3JlbWVudF9vcGVyYXRvcl9hbmRfYXNzaWdubWVudF9yZXF1aXJlbWVudF92
aW9sYXRpb24oX19pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqX190bXBfcHRyKTsKfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRBY2NJdGVyPgpzdHJ1Y3QgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbiB7CnN0YXRpYyB2b2lkCl9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb24oX1JhbmRBY2NJdGVyIF9faSkgewoKICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfUmFuZEFjY0l0ZXI+OjoKICAgIF9CaWRpcmVjdGlvbmFs
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9faSk7CgogIF9MZXNzVGhhbkNvbXBhcmFi
bGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9SYW5kQWNjSXRlcj46OgogICAgX0xlc3NUaGFuQ29t
cGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pKTsKICB0eXBlZGVmIHR5cGVuYW1lCiAg
ICAgICAgX192YWx1ZV90eXBlX3R5cGVfZGVmaW5pdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb248
X1JhbmRBY2NJdGVyPgogICAgICAgIDo6dmFsdWVfdHlwZQogICAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHR5cGVuYW1lCiAgICAgICAgX19kaWZmZXJlbmNlX3R5cGVfdHlwZV9kZWZpbml0aW9uX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjxfUmFuZEFjY0l0ZXI+CiAgICAgICAgOjpkaWZmZXJlbmNlX3R5
cGUKICAgIF9EaXN0OwogIHR5cGVkZWYgdHlwZW5hbWUgX011dGFibGVfdHJhaXQ8X0Rpc3Q+Ojpf
VHlwZSBfTXV0RGlzdDsKCgogIF9TVExfRVJST1I6Ol9faXRlcmF0b3JfYWRkaXRpb25fYXNzaWdu
bWVudF9yZXF1aXJlbWVudF92aW9sYXRpb24oX19pLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX011dERpc3QoKSk7CiAg
X1NUTF9FUlJPUjo6X19pdGVyYXRvcl9hZGRpdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19p
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9NdXREaXN0KCkpOwogIF9TVExfRVJST1I6OgogICAgX19pdGVyYXRvcl9zdWJ0cmFjdGlvbl9h
c3NpZ25tZW50X3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2ksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NdXREaXN0KCkpOwogIF9T
VExfRVJST1I6Ol9faXRlcmF0b3Jfc3VidHJhY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9f
aSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTXV0RGlzdCgpKTsKICBfU1RMX0VSUk9SOjpfX2RpZmZlcmVuY2Vfb3BlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uKF9faSwgX19pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX011dERpc3QoKSk7CiAgdHlwZW5hbWUgX011
dGFibGVfdHJhaXQ8dmFsdWVfdHlwZT46Ol9UeXBlKiBfX2R1bW15X3B0ciA9IDA7CiAgX1NUTF9F
UlJPUjo6X19lbGVtZW50X2FjY2Vzc19vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX19p
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZHVtbXlfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9NdXREaXN0KCkpOwp9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRBY2NJdGVyPgpzdHJ1Y3QgX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uIHsKc3RhdGljIHZvaWQKX011dGFibGVfUmFuZG9tQWNjZXNzSXRl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9SYW5kQWNjSXRlciBfX2kpCnsKICBfUmFuZG9t
QWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9SYW5kQWNjSXRlcj46OgogICAg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2kpOwoKICBfTXV0
YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9SYW5kQWNj
SXRlcj46OgogICAgX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbihfX2kpOwogIHR5cGVkZWYgdHlwZW5hbWUKICAgICAgICBfX3ZhbHVlX3R5cGVfdHlw
ZV9kZWZpbml0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfUmFuZEFjY0l0ZXI+CiAgICAgICAg
Ojp2YWx1ZV90eXBlCiAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUKICAgICAgICBf
X2RpZmZlcmVuY2VfdHlwZV90eXBlX2RlZmluaXRpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9S
YW5kQWNjSXRlcj4KICAgICAgICA6OmRpZmZlcmVuY2VfdHlwZQogICAgX0Rpc3Q7CgogIHR5cGVu
YW1lIF9NdXRhYmxlX3RyYWl0PHZhbHVlX3R5cGU+OjpfVHlwZSogX190bXBfcHRyID0gMDsKCiAg
X1NUTF9FUlJPUjo6X19lbGVtZW50X2Fzc2lnbm1lbnRfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uKF9faSwKICAgICAgICAgICAgICAgICAgX190bXBfcHRyLCBfRGlzdCgpKTsKfQp9OwoK
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IHN0cnVjdCBfX3ZhbHVlX3R5cGVfX3R5cGVkZWZf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsgdHlwZWRlZiB0eXBlbmFtZSBUeXBlOjp2YWx1ZV90eXBl
IHZhbHVlX3R5cGU7IH07CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBzdHJ1Y3QgX19kaWZmZXJlbmNl
X3R5cGVfX3R5cGVkZWZfcmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsgdHlwZWRlZiB0eXBlbmFtZSBU
eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3Mg
VHlwZT4gc3RydWN0IF9fc2l6ZV90eXBlX190eXBlZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlvbiB7
IHR5cGVkZWYgdHlwZW5hbWUgVHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsgfTsKdGVtcGxhdGUg
PGNsYXNzIFR5cGU+IHN0cnVjdCBfX3JlZmVyZW5jZV9fdHlwZWRlZl9yZXF1aXJlbWVudF92aW9s
YXRpb24geyB0eXBlZGVmIHR5cGVuYW1lIFR5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7IH07CnRl
bXBsYXRlIDxjbGFzcyBUeXBlPiBzdHJ1Y3QgX19jb25zdF9yZWZlcmVuY2VfX3R5cGVkZWZfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uIHsgdHlwZWRlZiB0eXBlbmFtZSBUeXBlOjpjb25zdF9yZWZlcmVu
Y2UgY29uc3RfcmVmZXJlbmNlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gc3RydWN0IF9fcG9p
bnRlcl9fdHlwZWRlZl9yZXF1aXJlbWVudF92aW9sYXRpb24geyB0eXBlZGVmIHR5cGVuYW1lIFR5
cGU6OnBvaW50ZXIgcG9pbnRlcjsgfTsKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IHN0cnVjdCBfX2Nv
bnN0X3BvaW50ZXJfX3R5cGVkZWZfcmVxdWlyZW1lbnRfdmlvbGF0aW9uIHsgdHlwZWRlZiB0eXBl
bmFtZSBUeXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7IH07CgoKdGVtcGxhdGUgPGNs
YXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY2F0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uIHsKc3Rh
dGljIHZvaWQKX0FsbG9jYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb24oX0FsbG9jIF9fYSkgewoK
ICBfRGVmYXVsdENvbnN0cnVjdGlibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPF9BbGxvYz46Ogog
ICAgX0RlZmF1bHRDb25zdHJ1Y3RpYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbihfX2EpOwoKICBf
RXF1YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjxfQWxsb2M+OjoKICAgIF9F
cXVhbGl0eUNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uKF9fYSk7CgogIF9fdmFsdWVf
dHlwZV9fdHlwZWRlZl9yZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIF9fZGlmZmVy
ZW5jZV90eXBlX190eXBlZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfQWxsb2M+KCk7CiAgX19z
aXplX3R5cGVfX3R5cGVkZWZfcmVxdWlyZW1lbnRfdmlvbGF0aW9uPF9BbGxvYz4oKTsKICBfX3Jl
ZmVyZW5jZV9fdHlwZWRlZl9yZXF1aXJlbWVudF92aW9sYXRpb248X0FsbG9jPigpOwogIF9fY29u
c3RfcmVmZXJlbmNlX190eXBlZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfQWxsb2M+KCk7CiAg
X19wb2ludGVyX190eXBlZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfQWxsb2M+KCk7CiAgX19j
b25zdF9wb2ludGVyX190eXBlZGVmX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjxfQWxsb2M+KCk7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnZhbHVlX3R5cGUgX1RwOwoKCn0KfTsKIyAzOSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlLmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZCB7CgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0
X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlu
cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDog
cHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9y
IHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3Ry
dWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJl
ZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0
IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0
b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5j
ZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAm
IHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0
cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVy
OwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9DYXRlZ29yeSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Qs
CiAgICAgICAgICBjbGFzcyBfUG9pbnRlciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAm
PgpzdHJ1Y3QgaXRlcmF0b3IgewogIHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2Ug
cmVmZXJlbmNlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJh
dG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVn
b3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1
ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVu
Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBv
aW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJl
ZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8
X1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVy
ZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29u
c3QgX1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBj
b25zdCBfVHAmIHJlZmVyZW5jZTsKfTsKIyAxNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfaXRlcmF0b3JfYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5l
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRl
cmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9D
YXRlZ29yeSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25z
dCBfSXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4K
aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFs
dWVfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9j
YXRlZ29yeQppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNl
X3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0K
CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46OnZhbHVlX3R5cGUqCnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4g
X192YWx1ZV90eXBlKF9faSk7IH0KIyAyNjcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfaXRlcmF0b3JfYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlz
dGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBf
X24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgZG8geyB2b2lkICgqX194KSggX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yICkgPSBfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgPiA6Ol9SYW5kb21BY2Nlc3NJdGVyYXRv
cl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX19uICs9
IF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSYg
X19uKQp7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcmF0b3IgKSA9IF9JbnB1dEl0ZXJh
dG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcmF0b3IgPiA6Ol9JbnB1dEl0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfX2Rp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2Uo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVy
YXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojpk
aWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg
ICsrX19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgKSA9IF9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3Nw
ZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyYXRvciA+IDo6X1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICByZXR1
cm4gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgpp
bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlCmRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9y
Pjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICBkbyB7IHZvaWQgKCpfX3gpKCBf
SW5wdXRJdGVyYXRvciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
SW5wdXRJdGVyYXRvciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFz
dCwgX0NhdGVnb3J5KCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5j
ZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlz
dGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yICkgPSBfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0JpZGlyZWN0aW9uYWxJ
dGVyYXRvciA+IDo6X0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgaWYgKF9fbiA+PSAwKQogICAgd2hpbGUgKF9fbi0t
KSArK19faTsKICBlbHNlCiAgICB3aGlsZSAoX19uKyspIC0tX19pOwp9CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9p
ZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAg
ICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIGRvIHsg
dm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0gX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yID4gOjpfUmFu
ZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwogIF9faSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ks
IF9EaXN0YW5jZSBfX24pIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyYXRvciApID0g
X0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyYXRvciA+IDo6
X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0K
IyA1NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwoj
IDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFt
ZXNwYWNlIHN0ZCB7CgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGJhY2tfaW5z
ZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGlj
OgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsK
ICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBiYWNrX2luc2VydF9pdGVyYXRv
cihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgYmFja19pbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6
OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9
OwojIDcxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVybiBiYWNr
X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Nv
bnRhaW5lcj4KY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250
YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf
dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBleHBs
aWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigm
X194KSB7fQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0o
Y29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29u
dGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBmcm9u
dF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlz
OyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJh
dG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwojIDExMCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVy
PgppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVy
KF9Db250YWluZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRh
aW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9p
dGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUg
X0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBj
b250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNl
OwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVy
OjppdGVyYXRvciBfX2kpCiAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5z
ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29u
dGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNl
cnQoaXRlciwgX192YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0K
ICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp
czsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0
dXJuICp0aGlzOyB9Cn07CiMgMTUyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRv
cj4KaW5saW5lCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFpbmVy
JiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0
ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwg
X19pdGVyKF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwg
Y2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9EaXN0
YW5jZSA9IHB0cmRpZmZfdD4KY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsK
ICB0eXBlZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jl
ZmVyZW5jZSwgX0Rpc3RhbmNlPiBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVm
IF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlw
ZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGly
ZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNl
IG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBj
dXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkg
Y29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7
CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKyso
aW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJu
IF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1w
ID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwojIDIzOCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJl
dmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5j
ZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3Qg
cmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3Rh
bmNlPiYgX195KQp7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KIyAyNjcgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXJhdG9yPgpjbGFzcyByZXZlcnNlX2l0ZXJhdG9yCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBj
dXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh
dG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+
OjpyZWZlcmVuY2UKICAgICAgICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRl
cmF0b3JfdHlwZTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsK
CnB1YmxpYzoKICByZXZlcnNlX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJh
dG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJh
dG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KCiAgdGVtcGxh
dGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKCiAgaXRlcmF0b3Jf
dHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVyYXRv
ciooKSBjb25zdCB7CiAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICot
LV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVy
YXRvciooKSk7IH0KCgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190
bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYm
IG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9T
ZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJy
ZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2Vf
dHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50IC0gX19uKTsKICB9CiAg
X1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCAtPSBf
X247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5
cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCArIF9fbik7CiAgfQogIF9T
ZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgKz0gX19u
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNl
X3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9f
eS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJh
dG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0
dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0
b3I+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194
IDwgX195KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9f
eC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4Kb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQojIDgyMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0
ID0gcHRyZGlmZl90PiBjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yOwoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0Rpc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVy
YXRvcjxfVHAsIF9EaXN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9p
dGVyYXRvcjxfVHAsIF9EaXN0PiYpOwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Q+
CmNsYXNzIGlzdHJlYW1faXRlcmF0b3IgewoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
RDE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UMSwg
X0QxPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9U
MSwgX0QxPiYpOwoKCgoKCgpwcm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBf
TV92YWx1ZTsKICBib29sIF9NX2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01f
ZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRf
bWFya2VyKSAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9ICgqX01f
c3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVy
OwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CgogIGlzdHJlYW1faXRlcmF0b3IoKSA6
IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihmYWxzZSkge30KICBpc3RyZWFtX2l0ZXJh
dG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KICByZWZl
cmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KCiAgcG9pbnRlciBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgaXN0cmVhbV9p
dGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygpIHsKICAgIF9NX3JlYWQoKTsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisr
KGludCkgewogICAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiBfX3RtcCA9ICp0aGlzOwog
ICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKIyA4OTMgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9p
dGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX195KSB7CiAgcmV0dXJuIChfX3gu
X01fc3RyZWFtID09IF9feS5fTV9zdHJlYW0gJiYKICAgICAgICAgIF9feC5fTV9lbmRfbWFya2Vy
ID09IF9feS5fTV9lbmRfbWFya2VyKSB8fAogICAgICAgICBfX3guX01fZW5kX21hcmtlciA9PSBm
YWxzZSAmJiBfX3kuX01fZW5kX21hcmtlciA9PSBmYWxzZTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVh
bV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX195KSB7CiAgcmV0dXJuICEo
X194ID09IF9feSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3Mgb3N0cmVhbV9pdGVy
YXRvciB7CnByb3RlY3RlZDoKICBvc3RyZWFtKiBfTV9zdHJlYW07CiAgY29uc3QgY2hhciogX01f
c3RyaW5nOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j
ZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBf
TV9zdHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcywgY29uc3QgY2hh
ciogX19jKQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHt9CiAgb3N0cmVh
bV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgICAqX01f
c3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0
cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVy
YXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0
b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRv
cisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKIyA5NTUgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3Is
IHR5cGVuYW1lIF9Db250YWluZXI+CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMg
aXRlcmF0b3I8aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAog
ICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBl
LAogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46
OnBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46
OnJlZmVyZW5jZT4KewoKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGlj
OgogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3Jt
YWxfaXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9f
dHJhaXRzX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9j
YXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5
cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5
cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
X3RyYWl0c190eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0
c190eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01f
Y3VycmVudChfSXRlcmF0b3IoKSkgeyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNv
bnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFz
ZSgpKSB7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9j
dXJyZW50OyB9CgogIHBvaW50ZXIKICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3Vy
cmVudDsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1
cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9y
KysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBu
b3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVy
biAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJl
dHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBv
cGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9N
X2N1cnJlbnRbX19uXTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNv
bnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAq
dGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJl
bmNlX3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJy
ZW50ICsgX19uKTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0
IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhp
czsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNl
X3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50
IC0gX19uKTsgfQoKICBkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0
ZXJhdG9yX3R5cGUmIF9faSkgY29uc3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1
cnJlbnQ7IH0KCiAgY29uc3QgX0l0ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9j
dXJyZW50OyB9Cn07CgoKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J
dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAg
ICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBf
X3JocykKeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8
dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRh
aW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09
IF9fcmhzKTsgfQoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl
cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg
ICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhz
KQp7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+
CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JM
LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0K
CnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVu
YW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4g
IShfX3JocyA8IF9fbGhzKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h
bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+
PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs
CiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l
cj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3IsIF9Db250YWluZXI+Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24p
OyB9Cgp9CiMgNTcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQgewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
MSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfX2l0ZXJfc3dh
cChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopIHsKICBfVHAgX190
bXAgPSAqX19hOwogICpfX2EgPSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSB2b2lkIGl0ZXJf
c3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpIHsKICBkbyB7IHZvaWQg
KCpfX3gpKCBfRm9yd2FyZEl0ZXIxICkgPSBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIxID4gOjpfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
dm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlcjIgKSA9IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjIgPiA6Ol9NdXRhYmxlX0ZvcndhcmRJ
dGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAg
ZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+
Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2
YWx1ZV90eXBlICkgPSBfU1RMX0NPTlZFUlRfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9pc19ub3RfY29udmVydGlibGVf
dG9fdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZvaWQgKCpfX3gpKCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUgLCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgKSA9IF9TVExf
Q09OVkVSVF9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2
YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1
ZV90eXBlID46Ol9fdHlwZV9YX2lzX25vdF9jb252ZXJ0aWJsZV90b190eXBlX1k7IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CgogIF9faXRlcl9zd2FwKF9fYSwgX19iLCBfX3ZhbHVlX3R5cGUoX19h
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIHN3YXAoX1RwJiBfX2EsIF9U
cCYgX19iKSB7CiAgZG8geyB2b2lkICgqX194KSggX1RwICkgPSBfQXNzaWduYWJsZV9jb25jZXB0
X3NwZWNpZmljYXRpb248IF9UcCA+IDo6X0Fzc2lnbmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIF9UcCBfX3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7
CiAgX19iID0gX190bXA7Cn0KIyA5OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIG1p
bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBf
VHAgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAgPiA6
Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwoKICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iKSB7CiAgZG8geyB2b2lkICgqX194KSggX1RwICkgPSBfTGVzc1RoYW5D
b21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1RwID4gOjpfTGVzc1RoYW5Db21wYXJh
YmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgaWYg
KF9fYSA8IF9fYikgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CgogIGlmIChfX2NvbXAoX19iLCBf
X2EpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBf
VHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CgogIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1
cm4gX19iOyByZXR1cm4gX19hOwp9CiMgMTM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9P
dXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1
dF9pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1
cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyCl9fY29weShf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIF9EaXN0
YW5jZSopCnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAw
OyAtLV9fbikgewogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgICAr
K19fcmVzdWx0OwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CmlubGluZSBfVHAqCl9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw
KiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBz
aXplb2YoX1RwKSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
T3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKSB7CiAgcmV0dXJuIF9fY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29y
eShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9P
dXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X190cnVlX3R5cGUpIHsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAogICAgICAgICAg
ICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LCBfVHAq
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogIHJldHVy
biBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkgewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikgewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl
X3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBf
VHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9PdXRwdXRJdGVyKF9f
Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0
ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90
eXBlKSB7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192
YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwog
IHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3Vs
dCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0
dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9P
dXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICBkbyB7IHZvaWQg
KCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciAp
ID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6
Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVy
Pjo6X05vcm1hbCBfX05vcm1hbDsKICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KIyAzMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
KikKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICotLV9fcmVzdWx0ID0gKi0tX19s
YXN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2Ug
X19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAqLS1fX3Jlc3VsdCA9
ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyAzNjQgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0
aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9C
b29sVHlwZT4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVn
b3J5CiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
aWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsK
CiAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjIgX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAq
LCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBj
b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3QgcHRyZGlmZl90IF9O
dW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmly
c3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1cm4gX19yZXN1bHQgLSBfTnVtOwogIH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8
Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0
IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJl
dHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAg
ICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX2F1eChf
QkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVf
dHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3Bh
dGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9C
STI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9C
STEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJu
IF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2Uo
KSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9C
STIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBf
QkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKXsKICByZXR1cm4gX19jb3B5X2JhY2t3
YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1l
IF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9u
b3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVf
dHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05v
cm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRl
cmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKdGVt
cGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9i
YWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9f
cmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRl
cmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9v
dXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9Cgp0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgY29weV9i
YWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgZG8g
eyB2b2lkICgqX194KSggX0JJMSApID0gX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3Nw
ZWNpZmljYXRpb248IF9CSTEgPiA6Ol9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9C
STIgKSA9IF9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9CSTIgPiA6Ol9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTE+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX0NPTlZFUlRfRVJST1I8IHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9pc19ub3RfY29udmVydGlibGVf
dG9fdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29w
eV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1h
bCgpKTsKfQojIDQ2MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091
dHB1dEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+IF9fY29weV9uKF9JbnB1dEl0
ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGZvciAoIDsgX19jb3VudCA+IDA7
IC0tX19jb3VudCkgewogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAg
ICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4o
X19maXJzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JBSXRlciwgY2xhc3MgX1Np
emUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4K
X19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwKICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBf
UkFJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SQUl0ZXIs
IF9PdXRwdXRJdGVyPihfX2xhc3QsIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJ
dGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KX19jb3B5X24oX0lucHV0
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHJl
dHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1
dEl0ZXIsIF9PdXRwdXRJdGVyPgpjb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2Nv
dW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0
ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+
IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0
b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9y
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICByZXR1cm4g
X19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOwp9CgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGRvIHsgdm9p
ZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpf
T3V0cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBf
VHAmIF9fdmFsdWUpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1
dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJ
dGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAg
Zm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVl
OwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hhciog
X19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXImIF9fYykgewogIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0
KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChz
aWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICBjb25zdCBzaWduZWQgY2hhciYgX19jKSB7CiAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAg
bWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0
IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19s
YXN0LCBjb25zdCBjaGFyJiBfX2MpIHsKICBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2Zp
cnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3Qp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIHVuc2lnbmVkIGNoYXIqIGZpbGxf
bih1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKSB7CiAgZmlsbChfX2ZpcnN0LCBfX2Zp
cnN0ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1NpemU+CmlubGluZSBzaWduZWQgY2hhciogZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXpl
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykg
ewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCAr
IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgY2hhciogZmlsbF9uKGNoYXIq
IF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKSB7CiAgZmlsbChfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9CgoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CnBhaXI8X0lucHV0SXRl
cjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Mikg
ewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVyYXRvcl9jb25j
ZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194
KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwg
X0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICkgPSBfRXF1YWxpdHlDb21wYXJhYmxl
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXIxPjo6dmFsdWVfdHlwZSA+IDo6X0VxdWFsaXR5Q29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9FcXVhbGl0
eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID4gOjpfRXF1YWxpdHlDb21wYXJhYmxlX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0
MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJ
dGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJ
dGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0
ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjEgKSA9IF9J
bnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1
dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRlcmF0b3JfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAr
K19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEs
IF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lu
cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwog
IGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0
X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSgg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSApID0gX0Vx
dWFsaXR5Q29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgPiA6Ol9FcXVhbGl0eUNvbXBhcmFibGVf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZv
aWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90
eXBlICkgPSBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSA+IDo6X0VxdWFsaXR5
Q29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikK
ICAgIGlmICgqX19maXJzdDEgIT0gKl9fZmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0
dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRl
cjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZG8geyB2
b2lkICgqX194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lm
aWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJ
dGVyMiApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVy
MiA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf
X2ZpcnN0MikKICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg
ICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBh
cmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3Jf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAo
Kl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFy
YWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyMT46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZvaWQgKCpfX3gpKCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkgPSBfTGVz
c1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGZvciAoIDsg
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19f
Zmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAg
ICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVy
biBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
MiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194
KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwg
X0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0g
X0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lu
cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAg
ICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0
MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0
MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJzdDEg
PT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9CgppbmxpbmUgYm9vbApsZXhpY29n
cmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBzaXplX3Qg
X19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xh
c3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBf
X2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBf
X3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlubGluZSBib29sIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0Miwg
Y29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUo
KGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW50IF9f
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAq
X19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp
CiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIGlm
IChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2ZpcnN0MSA9PSBfX2xhc3Qx
KTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9CgppbmxpbmUgaW50Cl9fbGV4aWNv
Z3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3Qx
OwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3Qg
aW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19s
ZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdAogICAgICAgICAgICAgICAg
ICAgICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9fbGVuMSA8IF9fbGVuMiA/IC0xIDog
MSkpOwp9CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCBj
aGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7Cgog
IHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xh
c3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMj4KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgZG8geyB2b2lk
ICgqX194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVy
MiApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+
IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyMT46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90
eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKCiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9j
b25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
Mj46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxf
Y29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCn0K
IyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA0NyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9uZXciIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNTMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDU0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3N0cmluZy5oIiAxIDMKIyA1NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nh
c3NlcnQuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fz
c2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNAojIDM1ICIvdXNyL2lu
Y2x1ZGUvYXNzZXJ0LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAoj
IDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIgMyA0CiMgNTggIi91c3IvaW5jbHVkZS9hc3Nl
cnQuaCIgMyA0CmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29u
c3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLCB1bnNpZ25lZCBpbnQg
X19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHRocm93ICgpCgoKCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9m
YWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLCB1bnNpZ25lZCBpbnQgX19s
aW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHRocm93ICgpCgoKCiAgICAgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKfQojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAzCiMgNTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgOTEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxsb2MuaCIgMwpuYW1lc3BhY2Ugc3RkIHsKIyAxMDggIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xhc3Mg
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQqIF9TX29v
bV9tYWxsb2Moc2l6ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNp
emVfdCk7CgoKICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsK
CgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZv
aWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1
bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0
aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICB7CiAgICBmcmVlKF9fcCk7
CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVf
dCBfX25ld19zeikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19z
eik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3As
IF9fbmV3X3N6KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9f
c2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29s
ZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29t
X2hhbmRsZXIgPSBfX2Y7CiAgICByZXR1cm4oX19vbGQpOwogIH0KCn07CgoKCgp0ZW1wbGF0ZSA8
aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21h
bGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZv
aWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90
IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19y
ZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21h
bGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5k
bGVyKSB7IHRocm93IHN0ZDo6YmFkX2FsbG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hh
bmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19y
ZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2
b2lkKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lk
KiBfX3AsIHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsK
ICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxvY19o
YW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19t
eV9tYWxsb2NfaGFuZGxlcikgeyB0aHJvdyBzdGQ6OmJhZF9hbGxvYygpOyB9CiAgICAgICAgKCpf
X215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9f
bik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0eXBl
ZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRlbXBsYXRlPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVibGljOgogICAg
c3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24g
PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAg
c3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6
YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAq
IF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0
ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo
X1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsg
fQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxvYyB7Cgpw
cml2YXRlOgoKICBlbnVtIHtfU19leHRyYSA9IDh9OwoKCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lk
KiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9B
bGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVz
dWx0ID0gX19uOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKICBz
dGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFy
KiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgodm9pZCkgKCgq
KHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90
KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGxvYy5oIiwgMjMwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgIF9BbGxvYzo6ZGVh
bGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZv
aWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19z
eikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsK
ICAgICgodm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChfX2Fz
c2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIsIDIzNywgX19QUkVUVFlfRlVOQ1RJT05f
XyksIDApKSk7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikKICAgICAgX0FsbG9jOjpyZWFs
bG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQpIF9TX2V4dHJhLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgKihz
aXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBf
U19leHRyYTsKICB9Cgp9OwoKCgoKdHlwZWRlZiBtYWxsb2NfYWxsb2MgYWxsb2M7CnR5cGVkZWYg
bWFsbG9jX2FsbG9jIHNpbmdsZV9jbGllbnRfYWxsb2M7CiMgNTg4ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3Mg
YWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6
ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAg
dHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJl
bmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBz
dHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cgog
IGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhy
b3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9y
PF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIg
YWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9p
bnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0K
CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAg
cmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24g
KiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVh
bGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9j
YXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNv
bnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2
b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBf
VHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9
Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVm
IHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50
ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBz
dHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJu
IHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewog
IHJldHVybiBmYWxzZTsKfQojIDY2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9f
YWxsb2NhdG9yIHsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5
cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5j
ZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3Ry
dWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7
CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19h
bGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5k
ZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihj
b25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRl
cmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkg
dGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1
cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBj
b25zdCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNv
bnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2Fz
dDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQog
ICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlw
ZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6
ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsg
cmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2lu
dGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9p
ZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNp
emVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1
Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsK
ICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICBy
ZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVy
biBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoK
CgoKCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVt
cGxhdGUgPGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2Fs
bG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9B
bGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIGZhbHNl
Owp9CiMgODAwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFp
dHMKewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6IHJlYmluZDxfVHA+OjpvdGhlcgogICAgICAgICAgYWxs
b2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpj
b25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNz
OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0
czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5j
ZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190
eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19p
bnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0
b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7
Cn07CiMgODQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf
VHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu
Y2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9B
bGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxs
b2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX1RwMSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAg
ICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK
ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwojIDg3NyAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2Fs
bG9jYXRvcjxfVHAxLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJv
b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRl
YnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U
cCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwojIDg5MiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCn0KIyAzMyAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL25ldyIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfY29uc3RydWN0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7CiMgNDYgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9U
MSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDIm
IF9fdmFsdWUpIHsKbmV3ICgodm9pZCopIF9fcCkgX1QxKF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3ICgodm9p
ZCopIF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9EZXN0
cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+X1RwKCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCl9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQp7CiAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgZGVzdHJveSgmKl9fZmlyc3Qp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgX19kZXN0
cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkg
e30KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2
b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig
X19sYXN0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhh
c190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7CiAgX19k
ZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9Ucml2aWFsX2Rlc3RydWN0b3IoKSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBfRGVzdHJveShfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX19kZXN0
cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKaW5saW5lIHZv
aWQgX0Rlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShpbnQqLCBp
bnQqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShsb25nKiwgbG9uZyopIHt9CmlubGluZSB2b2lk
IF9EZXN0cm95KGZsb2F0KiwgZmxvYXQqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShkb3VibGUq
LCBkb3VibGUqKSB7fQoKaW5saW5lIHZvaWQgX0Rlc3Ryb3kod2NoYXJfdCosIHdjaGFyX3QqKSB7
fQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgY29uc3Ry
dWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBfQ29uc3RydWN0KF9fcCwgX192
YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEq
IF9fcCkgewogIF9Db25zdHJ1Y3QoX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l
IHZvaWQgZGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9EZXN0cm95KF9fcG9pbnRlcik7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBkZXN0cm95KF9G
b3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICBfRGVz
dHJveShfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp9CiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQgewoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBf
Rm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVy
biBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVk
X2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsK
ICB0cnkgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3Vy
KQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBfX2N1cjsK
ICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7IHRocm93OyB9Owp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf
VHA+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9h
dXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgog
IHVuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICByZXR1cm4g
X191bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fcmVzdWx0KSk7Cn0KCmlubGluZSBj
aGFyKiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciog
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7
CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJu
IF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCoKdW5pbml0
aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jl
c3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICBy
ZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CnBhaXI8X0lucHV0
SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAg
X0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5IHsKICAgIGZvciAoIDsgX19jb3Vu
dCA+IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgm
Kl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0
ZXI+KF9fZmlyc3QsIF9fY3VyKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0
LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9SYW5kb21BY2Nl
c3NJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19j
b3VudDsKICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigKICAg
ICAgICAgICAgICAgICBfX2xhc3QsCiAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0
ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmly
c3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQs
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np
emUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJ
dGVyPgp1bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291
bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVy
biBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZv
aWQKX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9f
dHJ1ZV90eXBlKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9h
dXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJ
dGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgewogICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7
ICsrX19jdXIpCiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9CiAgY2F0Y2goLi4u
KSB7IF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIHZvaWQgX191bmlu
aXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194LCBfVHAxKikK
ewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lz
X1BPRDsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9J
c19QT0QoKSk7Cgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cmlu
bGluZSB2b2lkIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9m
aWxsKF9fZmlyc3QsIF9fbGFzdCwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGlu
ZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X3gsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9G
b3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwg
X19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgewog
ICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9f
Y3VyLCBfX3gpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3ko
X19maXJzdCwgX19jdXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRl
cgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s
IGNvbnN0IF9UcCYgX194LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0
czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2Zp
bGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0
ZXIKdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwg
Y29uc3QgX1RwJiBfX3gpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbihfX2ZpcnN0
LCBfX24sIF9feCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQojIDIzMCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxp
bmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgdHJ5IHsK
ICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsK
ICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7IHRocm93OyB9Owp9
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1
dEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9y
d2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQp7CiAgdW5pbml0aWFsaXplZF9maWxsKF9f
cmVzdWx0LCBfX21pZCwgX194KTsKICB0cnkgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9f
cmVzdWx0LCBfX21pZCk7IHRocm93OyB9Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFs
aXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJ
dGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsK
ICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX2ZpcnN0Mik7CiAgdHJ5IHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9f
bGFzdDIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQy
KTsgdGhyb3c7IH07Cn0KCn0KIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92
ZWN0b3IuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVj
dG9yLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZXhjZXB0aW9uX3N1
cHBvcnQuaCIgMSAzCiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9leGNlcHRp
b25fc3VwcG9ydC5oIiAzCm5hbWVzcGFjZSBzdGQgewoKCgogIGV4dGVybiB2b2lkIF9fb3V0X29m
X3JhbmdlKGNvbnN0IGNoYXIgKl9fc3RyKTsKICBleHRlcm4gdm9pZCBfX2xlbmd0aF9lcnJvcihj
b25zdCBjaGFyICpfX3N0cik7CiMgNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9l
eGNlcHRpb25fc3VwcG9ydC5oIiAzCn0KIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF92ZWN0b3IuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9jb25jZXB0X2NoZWNrcy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF92ZWN0b3IuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsKIyA1NCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNl
IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9
CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBf
TV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRf
b2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h
bGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2Vu
ZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy
biBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl
KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5k
ZWFsbG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVl
PiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh
dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9
CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0
YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3Rl
ZDoKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0
b3JhZ2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24p
CiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVh
bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2Nh
dGUoX19wLCBfX24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3Ry
dWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxv
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv
Yz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg
X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFz
ZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewog
ICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7
CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3Jf
YmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7IH0KfTsKIyAxNTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVj
dG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9U
cD4gPgpjbGFzcyB2ZWN0b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPgp7
CgoKICB0eXBlZGVmIHZvaWQgKCogX19mdW5jX1RwX0Fzc2lnbmFibGUpKCBfVHAgKTsgdGVtcGxh
dGUgPF9fZnVuY19UcF9Bc3NpZ25hYmxlIF9UcDE+IHN0cnVjdCBfX2R1bW15X3N0cnVjdF9fVHBf
QXNzaWduYWJsZSB7IH07IHN0YXRpYyBfX2R1bW15X3N0cnVjdF9fVHBfQXNzaWduYWJsZTwgX0Fz
c2lnbmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfVHA+OjpfQXNzaWduYWJsZV9yZXF1aXJl
bWVudF92aW9sYXRpb24+IF9fZHVtbXlfcHRyX19UcF9Bc3NpZ25hYmxlOwoKcHJpdmF0ZToKICB0
eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8
X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90
eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwg
dmVjdG9yX3R5cGU+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3Rf
cG9pbnRlciwgdmVjdG9yX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlw
ZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl
OwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j
YXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8
Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKCgoKCgoKcHJvdGVjdGVkOgoK
ICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGU7
CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7CiAgdXNp
bmcgX0Jhc2U6Ol9NX2VuZF9vZl9zdG9yYWdlOwoKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2Vy
dF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5z
ZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgaXRlcmF0
b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoKICBy
ZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVu
ZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0
dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciBy
ZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcihiZWdpbigpKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVy
biBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNv
bnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KICBzaXplX3R5
cGUgY2FwYWNpdHkoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9y
KF9NX2VuZF9vZl9zdG9yYWdlKSAtIGJlZ2luKCkpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAg
ICB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNp
emVfdHlwZSBfX24pIHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVu
Y2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBf
X24pOyB9CgoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAg
IGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX291dF9vZl9yYW5nZSgidmVjdG9yIik7
CiAgfQoKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgIHsgX01fcmFuZ2VfY2hlY2so
X19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5
cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtf
X25dOyB9CgoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVjdG9yKHNpemVfdHlwZSBf
X24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAgeyBfTV9maW5p
c2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQoKICBl
eHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoX19uLCBhbGxvY2F0b3Jf
dHlwZSgpKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwg
X19uLCBfVHAoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkK
ICAgIDogX0Jhc2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgX01fZmlu
aXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0
KTsgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdy
YWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFs
aXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7CiAg
ICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9N
X3N0YXJ0ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3Rh
cnQsIF9fbiwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsK
ICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKICB9CiMgMjg4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3ZlY3Rvci5oIiAzCiAgfnZlY3RvcigpIHsgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNo
KTsgfQoKICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwg
X0FsbG9jPiYgX194KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgaWYgKGNh
cGFjaXR5KCkgPCBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXpl
KCk7CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX24sIF9NX3N0
YXJ0LCBfTV9maW5pc2gpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAg
ICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsK
ICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0gX190bXAgKyBfX29sZF9z
aXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgfQogIH0K
CgoKCgoKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7IF9N
X2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5
cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJh
dG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0
LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4K
ICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBf
X3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBf
X3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9pZCBfTV9hc3NpZ25f
ZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90
eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv
aWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKCiAgcmVmZXJlbmNlIGZyb250KCkgeyBy
ZXR1cm4gKmJlZ2luKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVy
biAqYmVnaW4oKTsgfQogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9
CiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0K
CiAgdm9pZCBwdXNoX2JhY2soY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfTV9maW5pc2ggIT0g
X01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAg
ICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCks
IF9feCk7CiAgfQogIHZvaWQgcHVzaF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9l
bmRfb2Zfc3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9m
aW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOwogIH0KICB2
b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KSB7CiAgICBzdGQ6OnN3YXAoX01fc3Rh
cnQsIF9feC5fTV9zdGFydCk7CiAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNo
KTsKICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdl
KTsKICB9CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAm
IF9feCkgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYg
KF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7
CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAg
fQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pLCBfX3gp
OwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv
ciBfX3Bvc2l0aW9uKSB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7
CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0g
ZW5kKCkpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwog
ICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsK
ICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p
bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2Vy
dF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0
b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6ZV90
eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01fcmFu
Z2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m
aXJzdCkpOwogIH0KCgoKCgogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBl
IF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9f
eCk7IH0KCiAgdm9pZCBfTV9maWxsX2luc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBf
X24sIGNvbnN0IF9UcCYgX194KTsKCiAgdm9pZCBwb3BfYmFjaygpIHsKICAgIC0tX01fZmluaXNo
OwogICAgZGVzdHJveShfTV9maW5pc2gpOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBf
X3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNvcHko
X19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgIC0tX01fZmluaXNoOwogICAg
ZGVzdHJveShfTV9maW5pc2gpOwogICAgcmV0dXJuIF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9y
IGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaXRlcmF0b3Ig
X19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOwogICAgZGVzdHJveShfX2ksIGVuZCgp
KTsKICAgIF9NX2ZpbmlzaCA9IF9NX2ZpbmlzaCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJl
dHVybiBfX2ZpcnN0OwogIH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNv
bnN0IF9UcCYgX194KSB7CiAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgZXJhc2Uo
YmVnaW4oKSArIF9fbmV3X3NpemUsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgp
LCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUg
X19uZXdfc2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CiAgdm9pZCBjbGVhcigp
IHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvcj4KICBwb2ludGVyIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVf
dHlwZSBfX24sIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKewogICAg
cG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewogICAgICB1bmlu
aXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBf
X24pOyB0aHJvdzsgfTsKICB9CiMgNDY5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3ZlY3Rvci5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg
X01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykK
ICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hf
YmFjaygqX19maXJzdCk7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+
CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRf
aXRlcmF0b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0LCBfX24pOwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAg
X01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBf
X3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5n
ZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBf
QWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBf
X3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9f
eC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gs
IGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhpY29ncmFwaGlj
YWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYg
X194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29u
c3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j
PiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwg
X194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9w
ZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1Rw
LCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29uc3QgdmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICBy
ZXR1cm4gIShfX3ggPCBfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4KdmVjdG9yPF9UcCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25z
dCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBj
b25zdCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBh
Y2l0eSgpKSB7CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hs
ZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9m
aW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNpemUoKSA+PSBfX3hs
ZW4pIHsKICAgICAgaXRlcmF0b3IgX19pKGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVn
aW4oKSkpOwogICAgICBkZXN0cm95KF9faSwgZW5kKCkpOwogICAgfQogICAgZWxzZSB7CiAgICAg
IGNvcHkoX194LmJlZ2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAg
IHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9m
aW5pc2gpOwogICAgfQogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJl
dHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZl
Y3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVl
X3R5cGUmIF9fdmFsKQp7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZlY3RvcjxfVHAs
IF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgIF9fdG1wLnN3
YXAoKnRoaXMpOwogIH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsKICAgIGZpbGwoYmVnaW4o
KSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9N
X2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVyYXNlKGZpbGxf
bihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQgdmVjdG9yPF9U
cCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKSB7CiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7CiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAgKl9f
Y3VyID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJhc2UoX19jdXIs
IGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbGVuID0gMDsK
ICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKCiAgaWYgKF9fbGVuID4gY2FwYWNp
dHkoKSkgewogICAgcG9pbnRlciBfX3RtcChfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19m
aXJzdCwgX19sYXN0KSk7CiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgX01f
ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBf
TV9zdGFydCA9IF9fdG1wOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9z
dGFydCArIF9fbGVuOwogIH0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4pIHsKICAgIGl0ZXJh
dG9yIF9fbmV3X2ZpbmlzaChjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpKTsKICAgIGRl
c3Ryb3koX19uZXdfZmluaXNoLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2gu
YmFzZSgpOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9fZmlyc3Q7CiAg
ICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgY29weShfX2ZpcnN0LCBfX21pZCwgX01fc3Rh
cnQpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9N
X2ZpbmlzaCk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p
ZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24s
IGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkg
ewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2Zp
bmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlv
biwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwogICAg
Kl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUg
X19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3Np
emUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9N
X2FsbG9jYXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQp
OwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJh
dG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaC5iYXNl
KCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmlu
aXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICBj
YXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxv
Y2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShi
ZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3Rv
cmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAg
X01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVy
YXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkg
ewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2Zp
bmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0g
MiksCiAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpfX3Bv
c2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3Np
emUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAg
PyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2Nh
dGUoX19sZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgIHRy
eSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9z
dGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19f
bmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9z
aXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IChkZXN0cm95
KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19s
ZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFs
bG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0
YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9l
bmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9p
bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24gIT0g
MCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0g
X19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f
ZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2Zp
bmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAg
IHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNo
KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
dGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwoX19w
b3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2Ug
ewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVtc19h
ZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVy
OwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9N
X2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgZmls
bChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAg
ZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBj
b25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7
CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0
ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19u
ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIF9fbmV3
X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25l
d19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5p
bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gpOwogICAgICB9
CiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBf
TV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAg
IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh
cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3
X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAg
ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0K
ICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5z
ZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkgewogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsr
X19wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3Jh
bmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2Zp
cnN0LCBfX2xhc3QsIF9fbik7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0g
X01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIg
PSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5p
c2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6
ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBf
TV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRf
ZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJh
dG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVy
KTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsK
ICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAg
IF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQs
IF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f
b2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3Rh
cnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3
X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNo
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAg
ICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRp
b24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0
Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2Nh
dGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9OwoKICAgICAgZGVzdHJveShf
TV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5k
X29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFz
ZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRf
b2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQojIDg3
MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp9CiMgMzYg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXh0L3N0bF9idmVjdG9yLmgiIDEgMwojIDM0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4dC9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBzdGQg
ewoKc3RhdGljIGNvbnN0IGludCBfX1dPUkRfQklUID0gaW50KDgqc2l6ZW9mKHVuc2lnbmVkIGlu
dCkpOwoKCgoKCgpzdHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewogIHVuc2lnbmVkIGludCogX01fcDsK
ICB1bnNpZ25lZCBpbnQgX01fbWFzazsKICBfQml0X3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIF9f
eCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX01fcChfX3gpLCBfTV9tYXNrKF9feSkge30KCnB1
YmxpYzoKICBfQml0X3JlZmVyZW5jZSgpIDogX01fcCgwKSwgX01fbWFzaygwKSB7fQogIG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhKCEoKl9NX3AgJiBfTV9tYXNrKSk7IH0KICBfQml0
X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGJvb2wgX194KQogIHsKICAgIGlmIChfX3gpICpfTV9wIHw9
IF9NX21hc2s7CiAgICBlbHNlICpfTV9wICY9IH5fTV9tYXNrOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gp
CiAgICB7IHJldHVybiAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykgPT0g
Ym9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7CiAgfQogIHZvaWQg
ZmxpcCgpIHsgKl9NX3AgXj0gX01fbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfQml0X3Jl
ZmVyZW5jZSBfX3gsIF9CaXRfcmVmZXJlbmNlIF9feSkKewogIGJvb2wgX190bXAgPSBfX3g7CiAg
X194ID0gX195OwogIF9feSA9IF9fdG1wOwp9CgpzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlIDog
cHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pgp7CiAgdW5zaWdu
ZWQgaW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9vZmZzZXQ7CgogIF9CaXRfaXRlcmF0b3Jf
YmFzZSh1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX01fcChfX3gp
LCBfTV9vZmZzZXQoX195KSB7fQoKICB2b2lkIF9NX2J1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zm
c2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsKICAgICAgX01fb2Zmc2V0ID0gMDsKICAgICAgKytf
TV9wOwogICAgfQogIH0KICB2b2lkIF9NX2J1bXBfZG93bigpIHsKICAgIGlmIChfTV9vZmZzZXQt
LSA9PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9fV09SRF9CSVQgLSAxOwogICAgICAtLV9NX3A7
CiAgICB9CiAgfQoKICB2b2lkIF9NX2luY3IocHRyZGlmZl90IF9faSkgewogICAgZGlmZmVyZW5j
ZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsKICAgIF9NX3AgKz0gX19uIC8gX19XT1JEX0JJ
VDsKICAgIF9fbiA9IF9fbiAlIF9fV09SRF9CSVQ7CiAgICBpZiAoX19uIDwgMCkgewogICAgICBf
TV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX24gKyBfX1dPUkRfQklUOwogICAgICAtLV9NX3A7
CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uOwogIH0KCiAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAg
ICByZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPT0gX19pLl9NX29mZnNldDsK
ICB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0
IHsKICAgIHJldHVybiBfTV9wIDwgX19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9NX3AgJiYgX01f
b2Zmc2V0IDwgX19pLl9NX29mZnNldCk7CiAgfQogIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfQml0
X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPT0gX19pKTsK
ICB9CiAgYm9vbCBvcGVyYXRvcj4oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0
IHsKICAgIHJldHVybiBfX2kgPCAqdGhpczsKICB9CiAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IF9C
aXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gIShfX2kgPCAqdGhpcyk7
CiAgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29u
c3QgewogICAgcmV0dXJuICEoKnRoaXMgPCBfX2kpOwogIH0KfTsKCmlubGluZSBwdHJkaWZmX3QK
b3BlcmF0b3ItKGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX194LCBjb25zdCBfQml0X2l0ZXJh
dG9yX2Jhc2UmIF9feSkgewogIHJldHVybiBfX1dPUkRfQklUICogKF9feC5fTV9wIC0gX195Ll9N
X3ApICsgX194Ll9NX29mZnNldCAtIF9feS5fTV9vZmZzZXQ7Cn0KCgpzdHJ1Y3QgX0JpdF9pdGVy
YXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jhc2UKewogIHR5cGVkZWYgX0JpdF9yZWZlcmVu
Y2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAgdHlwZWRl
ZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwoKICBfQml0X2l0ZXJhdG9yKCkgOiBfQml0X2l0ZXJh
dG9yX2Jhc2UoMCwgMCkge30KICBfQml0X2l0ZXJhdG9yKHVuc2lnbmVkIGludCogX194LCB1bnNp
Z25lZCBpbnQgX195KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9CgogIHJl
ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiByZWZlcmVuY2UoX01fcCwgMVUgPDwg
X01fb2Zmc2V0KTsgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAg
aXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3Rt
cDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGl0ZXJh
dG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsK
ICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01f
aW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItPShk
aWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3Qgewog
ICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQog
IGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVy
YXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CgogIHJlZmVy
ZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsgcmV0dXJuICooKnRoaXMgKyBf
X2kpOyB9Cn07CgppbmxpbmUgX0JpdF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwg
Y29uc3QgX0JpdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0KCgpzdHJ1Y3Qg
X0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jhc2UKewogIHR5cGVk
ZWYgYm9vbCByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl
ZGVmIGNvbnN0IGJvb2wqIHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNv
bnN0X2l0ZXJhdG9yOwoKICBfQml0X2NvbnN0X2l0ZXJhdG9yKCkgOiBfQml0X2l0ZXJhdG9yX2Jh
c2UoMCwgMCkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKHVuc2lnbmVkIGludCogX194LCB1bnNp
Z25lZCBpbnQgX195KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9CiAgX0Jp
dF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpCiAgICA6IF9CaXRfaXRl
cmF0b3JfYmFzZShfX3guX01fcCwgX194Ll9NX29mZnNldCkge30KCiAgY29uc3RfcmVmZXJlbmNl
IG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBfQml0X3JlZmVyZW5jZShfTV9wLCAxVSA8
PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9N
X2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0
b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1w
X3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci0t
KCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0
ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlz
OwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJh
dG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVy
ZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsK
ICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19p
OwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29u
c3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAt
PSBfX2k7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBf
X2kpIHsKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsKICB9Cn07CgppbmxpbmUgX0JpdF9jb25z
dF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0JpdF9jb25zdF9pdGVy
YXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0KIyAyNTEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvZXh0L3N0bF9idmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3Is
IGJvb2wgX19pc19zdGF0aWM+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0
b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9y
X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxv
Y2F0b3IoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDAp
IHt9Cgpwcm90ZWN0ZWQ6CiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikK
ICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKChfX24gKyBfX1dPUkRfQklU
IC0gMSkvX19XT1JEX0JJVCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01f
c3RhcnQuX01fcCkKICAgICAgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5f
TV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
IC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVuc2lnbmVk
IGludCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBfTV9kYXRhX2FsbG9j
YXRvcjsKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNo
OwogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9BbGxvY2F0b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jYXRvciwgdHJ1ZT4g
ewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K
CiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0
YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgog
IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+
OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CgogIHVuc2lnbmVkIGludCogX01f
Yml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUo
KF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0
ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0
ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zf
c3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsK
ICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9y
YWdlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX0J2ZWN0b3JfYmFzZQogIDog
cHVibGljIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsK
ICB0eXBlZGVmIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4K
ICAgICAgICAgIF9CYXNlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2Nh
dG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9CdmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgfl9CdmVjdG9yX2Jhc2UoKSB7IF9CYXNlOjpf
TV9kZWFsbG9jYXRlKCk7IH0KfTsKIyAzNjIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXh0
L3N0bF9idmVjdG9yLmgiIDMKICAgfQojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfdmVjdG9yLmgiIDEgMwojIDM2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leHQv
c3RsX2J2ZWN0b3IuaCIgMiAzCiBuYW1lc3BhY2Ugc3RkIHsKIyAzNzQgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvZXh0L3N0bF9idmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4K
Y2xhc3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4gOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+
CnsKcHVibGljOgogIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
Qml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsK
ICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgYm9vbCog
Y29uc3RfcG9pbnRlcjsKCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVk
ZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCgogIHR5cGVkZWYgcmV2ZXJz
ZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgog
IHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBh
bGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgewog
ICAgcmV0dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigpOwogIH0KCnBy
b3RlY3RlZDoKCiAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7CiAg
dXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOwogIHVzaW5nIF9CdmVj
dG9yX2Jhc2U8X0FsbG9jPjo6X01fc3RhcnQ7CiAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+
OjpfTV9maW5pc2g7CiAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3Rv
cmFnZTsKCgpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pIHsK
ICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgIF9N
X3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgZGlm
ZmVyZW5jZV90eXBlKF9fbik7CiAgfQogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bv
c2l0aW9uLCBib29sIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9z
dG9yYWdlKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9m
aW5pc2ggKyAxKTsKICAgICAgKl9fcG9zaXRpb24gPSBfX3g7CiAgICAgICsrX01fZmluaXNoOwog
ICAgfQogICAgZWxzZSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIgKiBzaXpl
KCkgOiBfX1dPUkRfQklUOwogICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhf
X2xlbik7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRl
cmF0b3IoX19xLCAwKSk7CiAgICAgICpfX2krKyA9IF9feDsKICAgICAgX01fZmluaXNoID0gY29w
eShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRf
QklUOwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICB9CiAgfQoKCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgX01fc3RhcnQgPSBpdGVy
YXRvcigpOwogICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gMDsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgcHVz
aF9iYWNrKCpfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
PgogIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2Zp
cnN0LCBfX2xhc3QsIF9fbik7CiAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBjb3B5KF9fZmly
c3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgICBfX3BvcyA9IGluc2VydChfX3Bv
cywgKl9fZmlyc3QpOwogICAgICArK19fcG9zOwogICAgfQogIH0KCiAgdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3Np
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRl
cmF0b3JfdGFnKSB7CiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgc2l6ZV90eXBl
IF9fbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgaWYg
KGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bv
c2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAg
IGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICBfTV9maW5pc2ggKz0g
ZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90
eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICB1bnNpZ25lZCBp
bnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29w
eShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICBfX2kgPSBj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9z
aXRpb24sIGVuZCgpLCBfX2kpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9l
bmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklU
OwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQogIH0K
CgoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRlcmF0b3Ig
ZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1
cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJi
ZWdpbigpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsK
ICB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihi
ZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgIHJl
dHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogIH0KCiAgc2l6ZV90eXBlIHNp
emUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVf
dHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICBzaXplX3R5
cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9y
KF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogIH0KICBib29sIGVtcHR5KCkgY29u
c3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShz
aXplX3R5cGUgX19uKQogICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f
bikpOyB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QK
ICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoKCiAgdm9p
ZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICBpZiAoX19uID49IHRo
aXMtPnNpemUoKSkKICAgICAgX19zdGxfdGhyb3dfcmFuZ2VfZXJyb3IoInZlY3Rvcjxib29sPiIp
OwogIH0KCiAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICB7IF9NX3JhbmdlX2NoZWNr
KF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90
eXBlIF9fbikgY29uc3QKICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylb
X19uXTsgfQoKCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBh
bGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICB2
ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLAogICAgICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0J2ZWN0b3JfYmFzZTxf
QWxsb2M+KF9fYSkKICB7CiAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0
Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICB9CgogIGV4cGxp
Y2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxs
b2NhdG9yX3R5cGUoKSkKICB7CiAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0
YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICB9CgogIHZlY3Rvcihjb25zdCB2ZWN0
b3ImIF9feCkgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX194LmdldF9hbGxvY2F0b3IoKSkgewog
ICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5l
bmQoKSwgX01fc3RhcnQpOwogIH0KCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2
b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9f
dHJ1ZV90eXBlKSB7CiAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0Ll9N
X3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogIH0KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01faW5pdGlhbGl6ZV9yYW5nZShfX2Zp
cnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2Ep
CiAgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9J
bnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9f
bGFzdCwgX0ludGVncmFsKCkpOwogIH0KIyA2MDUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
ZXh0L3N0bF9idmVjdG9yLmgiIDMKICB+dmVjdG9yKCkgeyB9CgogIHZlY3RvciYgb3BlcmF0b3I9
KGNvbnN0IHZlY3RvciYgX194KSB7CiAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7
CiAgICBpZiAoX194LnNpemUoKSA+IGNhcGFjaXR5KCkpIHsKICAgICAgX01fZGVhbGxvY2F0ZSgp
OwogICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgfQogICAgY29weShfX3guYmVn
aW4oKSwgX194LmVuZCgpLCBiZWdpbigpKTsKICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZm
ZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgoKCgogIHZv
aWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgIGlmIChfX24gPiBz
aXplKCkpIHsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194
ID8gfjAgOiAwKTsKICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9feCk7CiAgICB9
CiAgICBlbHNlIHsKICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkpOwogICAgICBmaWxs
KF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgfQog
IH0KCiAgdm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmlsbF9hc3NpZ24o
X19uLCBfX3gpOyB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg
YXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewog
ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3Jh
bCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50
ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3Np
Z25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAg
ICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwgKGJvb2wpIF9fdmFsKTsgfQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IF9NX2Fz
c2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICBpdGVyYXRvciBfX2N1ciA9IGJl
Z2luKCk7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyAr
K19fY3VyLCArK19fZmlyc3QpCiAgICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQogICAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogICAgZWxzZQogICAgICBp
bnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpIHsKICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgICBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICAgIGlmIChfX2xlbiA8IHNpemUoKSkKICAgICAgZXJh
c2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgICBlbHNlIHsKICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19taWQs
IHNpemUoKSk7CiAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIGJlZ2luKCkpOwogICAgICBpbnNl
cnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwogICAgfQogIH0KCgoKICB2b2lkIHJlc2VydmUoc2l6
ZV90eXBlIF9fbikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgdW5zaWduZWQg
aW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZmluaXNoID0gY29weShiZWdp
bigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg
ICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9
IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgIH0KICB9CgogIHJl
ZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZy
b250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0
dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1
cm4gKihlbmQoKSAtIDEpOyB9CiAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgIGlmIChf
TV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgKl9NX2ZpbmlzaCsrID0g
X194OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lk
IHN3YXAodmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9feCkgewogICAgc3RkOjpzd2FwKF9NX3N0YXJ0
LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7
CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7
CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJv
b2woKSkgewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwog
ICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24g
PT0gZW5kKCkpCiAgICAgICpfTV9maW5pc2grKyA9IF9feDsKICAgIGVsc2UKICAgICAgX01faW5z
ZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQoK
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2go
aXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19u
LCBfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01f
aW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX2luc2VydF9yYW5nZShfX3Bv
cywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJ
dGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19w
b3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQojIDc4MyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9leHQvc3RsX2J2ZWN0b3IuaCIgMwogIHZvaWQgX01fZmlsbF9p
bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAg
IGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19u
KSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRp
ZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsg
ZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNl
X3R5cGUoX19uKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXpl
KCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9h
bGxvYyhfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlv
biwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAg
X01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBl
KF9fbikpOwogICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIF9NX3N0YXJ0
ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIH0KICB9CgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICBfTV9maWxsX2luc2VydChf
X3Bvc2l0aW9uLCBfX24sIF9feCk7CiAgfQoKICB2b2lkIHBvcF9iYWNrKCkgeyAtLV9NX2Zpbmlz
aDsgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bv
c2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9f
cG9zaXRpb24pOwogICAgICAtLV9NX2ZpbmlzaDsKICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0K
ICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAg
IF9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCk7CiAgICByZXR1cm4gX19m
aXJzdDsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0g
Ym9vbCgpKSB7CiAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgZXJhc2UoYmVnaW4o
KSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwgZW5kKCkpOwogICAgZWxzZQogICAgICBp
bnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgZmxpcCgp
IHsKICAgIGZvciAodW5zaWduZWQgaW50KiBfX3AgPSBfTV9zdGFydC5fTV9wOyBfX3AgIT0gX01f
ZW5kX29mX3N0b3JhZ2U7ICsrX19wKQogICAgICAqX19wID0gfipfX3A7CiAgfQoKICB2b2lkIGNs
ZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KfTsKCgoKCnR5cGVkZWYgdmVjdG9yPGJv
b2wsIGFsbG9jPiBiaXRfdmVjdG9yOwojIDg5MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9l
eHQvc3RsX2J2ZWN0b3IuaCIgMwp9CiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfdmVjdG9yLmgiIDIgMwojIDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvdmVjdG9y
IiAyIDMKIyAyICJ2ZWN0b3JfdGVzdC5jYyIgMgoKc3RkOjp2ZWN0b3I8aW50PiB2MTsKCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9mc3RyZWFtIiAxIDMKCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2lvcy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pb3MuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
aW9zZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
cy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMg
MzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyAzNyAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAxIDMKIyAzOCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvZnBvcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxp
bnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9jKytpby5oIiAxIDMgNAojIDM1ICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9iaXRzL2MrK2lvLmgi
IDMgNAojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAojIDM2ICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9iaXRzL2MrK2lvLmgiIDIg
MyA0CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1w
Yy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL2JpdHMvYysraW8uaCIgMiAzIDQKIyAxICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9iaXRzL2MrK3Ro
cmVhZHMuaCIgMSAzIDQKIyAzOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4
LWdudS8yLjk3L2luY2x1ZGUvYml0cy9jKyt0aHJlYWRzLmgiIDMgNAojIDEgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL2JpdHMvYysrY29uZmln
LmgiIDEgMyA0CiMgNDAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUv
Mi45Ny9pbmNsdWRlL2JpdHMvYysrdGhyZWFkcy5oIiAyIDMgNAoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvcHRocmVhZC5oIiAxIDMgNAojIDE4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzIDQKIyAxOSAiL3Vzci9pbmNsdWRlL3B0aHJl
YWQuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMyA0CiMgMjMgIi91c3Iv
aW5jbHVkZS9zY2hlZC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzIDQK
IyAyNCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAxIDMgNAojIDI3ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzIDQKCgojIDEg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAy
IDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzIDQKIyA0NyAiL3Vzci9p
bmNsdWRlL2JpdHMvc2NoZWQuaCIgMyA0CnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBz
Y2hlZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGlu
dCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssIGludCBfX2ZsYWdz
LCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKCn0KIyAzMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi
IDIgMyA0CgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fc2NoZWRfc2V0cGFyYW0gKF9fcGlk
X3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0
IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3NjaGVkX2dl
dHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93
ICgpOwpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19zY2hlZF9zZXRzY2hl
ZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRf
cGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIg
KF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
Kl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0c2NoZWR1bGVyIChf
X3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9f
cGlkX3QgX19waWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19zY2hlZF95aWVsZCAodm9pZCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgp
OwpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29y
aXRobSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9f
YWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfcnJfZ2V0X2ludGVydmFs
IChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMg
Kl9fdCkgdGhyb3cgKCk7Cgp9CiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CiMg
MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MyA0CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMg
MzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dGltZS5oIiAxIDMgNAojIDQzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNAojIDk1ICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzIDQKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9t
aW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1f
eWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBs
b25nIGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCmV4
dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUg
KHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGlt
ZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbWF4c2l6ZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBf
X2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGNoYXIgKnN0cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2ZtdCwg
c3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1l
IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0g
KmxvY2FsdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHN0cnVjdCB0bSAqX19nbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1l
ciwgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKZXh0ZXJuIHN0cnVjdCB0
bSAqZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIHN0cnVjdCB0
bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2Fs
dGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLCBzdHJ1Y3QgdG0gKl9f
cmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29u
c3Qgc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29u
c3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVf
ciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwgY2hhciAqX19yZXN0cmljdCBf
X2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAq
X19yZXN0cmljdCBfX3RpbWVyLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gY2hhciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJu
IGxvbmcgaW50IF9fdGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRl
cm4gdm9pZCB0enNldCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4
dGVybiBsb25nIGludCB0aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRp
bWVfdCAqX193aGVuKSB0aHJvdyAoKTsKIyAyMjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApl
eHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4g
dGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGR5c2l6ZSAoaW50IF9feWVhcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAg
KF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLCBzdHJ1Y3QgdGltZXNw
ZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKIyAyNTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMg
NApleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUg
KF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDI3MiAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMyA0CmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zdHJpbmcsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Jlc2J1ZnApIHRocm93ICgpOwoKCgoK
fQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRl
L3NpZ25hbC5oIiAxIDMgNAojIDI5ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAojIDMwICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgi
IDIgMyA0CgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEg
MyA0CiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzIDQKIyA0OSAiL3Vzci9pbmNsdWRl
L3NpZ25hbC5oIiAzIDQKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwojIDM2MiAiL3Vzci9p
bmNsdWRlL3NpZ25hbC5oIiAzIDQKfQojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMgNAojIDI2ICIvdXNy
L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDQ5ICIvdXNyL2luY2x1
ZGUvcHRocmVhZC5oIiAzIDQKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBU
SFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVE
LAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9T
WVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVU
RVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVY
X0VSUk9SQ0hFQ0tfTlAKCiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRF
WF9GQVNUX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNV
UlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJP
UkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFM
Cgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VT
U19TSEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwK
ICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZF
Ul9XUklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQ
VEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CgoKCgoKCnN0cnVjdCBfcHRocmVhZF9j
bGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAqX19h
cmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIg
Kl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFE
X0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAg
UFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE0MSAiL3Vzci9pbmNsdWRlL3B0aHJl
YWQuaCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAqX190aHJlYWQs
IF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUp
ICh2b2lkICopLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHB0aHJlYWRfdCBw
dGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAo
cHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cgKCk7CgoKZXh0
ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4gKHB0aHJl
YWRfdCBfX3RoLCB2b2lkICoqX190aHJlYWRfcmV0dXJuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0dHJfdCAqX19h
dHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAo
cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAoX19jb25zdCBwdGhyZWFkX2F0
dHJfdCAqX19hdHRyLCBpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBfX2Nv
bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0
ciwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBf
X3BvbGljeSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9s
aWN5IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCAqX19wb2xpY3kpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0aHJlYWRf
YXR0cl90ICpfX2F0dHIsIGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0
ciwgaW50ICpfX2luaGVyaXQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9z
ZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2NvcGUpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIsIGludCAqX19zY29wZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCBfX2d1YXJk
c2l6ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJkc2l6ZSAo
X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgKl9fZ3VhcmRzaXplKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAocHRocmVh
ZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwgdm9pZCAqKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCBfX3N0
YWNrc2l6ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6
ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgKl9fc3RhY2tzaXplKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRf
dCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGljeSwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFy
YW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJh
bSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50ICpfX3BvbGljeSwgc3RydWN0IHNjaGVk
X3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y29u
Y3VycmVuY3kgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJy
ZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9t
dXRleF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsIF9fY29uc3QgcHRocmVhZF9tdXRl
eGF0dHJfdCAqX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl
eF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsIF9fY29uc3QgcHRocmVhZF9tdXRleGF0
dHJfdCAqX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0
ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90
ICpfX211dGV4KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0
aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRf
bXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9f
bXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFk
X211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9t
dXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0
dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IChw
dGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRf
bXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0
ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJl
YWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9f
a2luZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAo
X19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCAqX19raW5kKSB0aHJvdyAo
KTsKIyAzMjMgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gaW50IHB0aHJlYWRf
Y29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kLCBfX2NvbnN0IHB0aHJlYWRfY29uZGF0
dHJfdCAqX19jb25kX2F0dHIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9k
ZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90
ICpfX2NvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCwgcHRo
cmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19hYnN0aW1l
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJl
YWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u
ZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3J3
bG9jaywgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3
bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJl
YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j
aykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJl
YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpf
X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kg
KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3Qg
Kl9fYXR0ciwgaW50ICpfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50
IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dl
dGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50ICpfX3By
ZWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9u
cCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50IF9fcHJlZikgdGhyb3cgKCk7CiMg
NDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBfX3B0aHJlYWRfa2V5
X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAqX19rZXksIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAo
dm9pZCAqKSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVh
ZF9rZXlfdCAqX19rZXksIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9r
ZXlfdCBfX2tleSwgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBwdGhyZWFkX3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5LCBfX2NvbnN0IHZvaWQg
Kl9fcG9pbnRlcikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICpfX3B0aHJlYWRfZ2V0c3BlY2lm
aWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwpleHRlcm4gdm9pZCAqcHRocmVhZF9n
ZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNDQ1ICIvdXNyL2lu
Y2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBfX3B0aHJlYWRfb25jZSAocHRocmVhZF9v
bmNlX3QgKl9fb25jZV9jb250cm9sLCB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgdGhy
b3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9j
b250cm9sLCB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQgKl9fb2xk
c3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZSAoaW50
IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9j
YW5jZWwgKHB0aHJlYWRfdCBfX3RocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwdGhy
ZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDQ4MSAiL3Vzci9pbmNsdWRlL3B0aHJl
YWQuaCIgMyA0CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhy
ZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiks
IHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA0OTEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMg
NApleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0IF9wdGhyZWFkX2NsZWFu
dXBfYnVmZmVyICpfX2J1ZmZlciwgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CiMgNTAyICIvdXNy
L2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNo
X2RlZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLCB2b2lkICgq
X19yb3V0aW5lKSAodm9pZCAqKSwgdm9pZCAqX19hcmcpIHRocm93ICgpOwojIDUxMyAiL3Vzci9p
bmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jl
c3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIGludCBfX2V4
ZWN1dGUpIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIg
MSAzIDQKIyAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMgNApleHRlcm4gaW50
IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LCBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fbmV3bWFz
aywgX19zaWdzZXRfdCAqX19vbGRtYXNrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8pIHRocm93ICgpOwojIDUxOSAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKIyA1MzQgIi91c3IvaW5jbHVkZS9wdGhyZWFk
LmgiIDMgNApleHRlcm4gaW50IF9fcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2
b2lkKSwgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2
b2lkKSwgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAo
dm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIF9fcHRocmVhZF9pbml0aWFsaXplICh2b2lk
KSB0aHJvdyAoKTsKCn0KIyA0NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4
LWdudS8yLjk3L2luY2x1ZGUvYml0cy9jKyt0aHJlYWRzLmgiIDIgMyA0CiMgNjQgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL2JpdHMvYysrdGhy
ZWFkcy5oIiAzIDQKbmFtZXNwYWNlIHN0ZCB7CiAgdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgX19t
dXRleHRfdHlwZTsKfQojIDM4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGludXgt
Z251LzIuOTcvaW5jbHVkZS9iaXRzL2MrK2lvLmgiIDIgMyA0CgpuYW1lc3BhY2Ugc3RkIHsKCgog
IHR5cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsK
CgoKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCgogIHR5cGVkZWYgX19tdXRleHRf
dHlwZSBfX2NfbG9jazsKCgoKCgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGVfdHlwZTsKCgogIHN0
cnVjdCBfX2lvc19mbGFncwogewogICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7CgogICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfZml4ZWQgPSAweDAwMDQ7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4
MDAwODsKICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfcmlnaHQgPSAweDAwODA7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlm
aWMgPSAweDAxMDA7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgw
MjAwOwogICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
dXBwZXJjYXNlID0gMHg0MDAwOwogICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3Rm
aWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zh
aWxiaXQgPSAweDA0OwoKCiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7
CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2luID0gMHgwODsKICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cgp9CiMgNDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoKICAgIHByaXZh
dGU6CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdDsKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKCiAg
ICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0KSB7IF9N
X3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX3N0KF9fc3RhdGVfdHlwZSgpKSwgX01f
b2ZmKHN0cmVhbW9mZigpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRl
X3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX3N0KF9fc3QpLCBfTV9vZmYo
X19vZmYpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4gX01f
b2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikgeyBf
TV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0
b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0K
CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QgeyBy
ZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRv
ciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdCB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01f
b2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2Zm
KSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGU+
CiAgICBpbmxpbmUgZnBvczxfU3RhdGU+CiAgICBvcGVyYXRvcisoY29uc3QgZnBvczxfU3RhdGU+
JiBfX3Bvcywgc3RyZWFtb2ZmIF9fb2ZmKQogICAgewogICAgICBmcG9zPF9TdGF0ZT4gdChfX3Bv
cyk7CiAgICAgIHJldHVybiB0ICs9IF9fb2ZmOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
U3RhdGU+CiAgICBpbmxpbmUgZnBvczxfU3RhdGU+CiAgICBvcGVyYXRvci0oY29uc3QgZnBvczxf
U3RhdGU+JiBfX3Bvcywgc3RyZWFtb2ZmIF9fb2ZmKQogICAgewogICAgICBmcG9zPF9TdGF0ZT4g
dChfX3Bvcyk7CiAgICAgIHJldHVybiB0IC09IF9fb2ZmOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfU3RhdGU+CiAgICBpbmxpbmUgc3RyZWFtb2ZmCiAgICBvcGVyYXRvci0oY29uc3QgZnBv
czxfU3RhdGU+JiBfX3BvczEsIGNvbnN0IGZwb3M8X1N0YXRlPiYgX19wb3MyKQogICAgeyByZXR1
cm4gX19wb3MxLl9NX3Bvc2l0aW9uKCkgLSBfX3BvczIuX01fcG9zaXRpb24oKTsgfQoKfQojIDQw
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgpuYW1l
c3BhY2Ugc3RkIHsKCgoKCgoKCiAgICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7
CiMgNTkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAzCiAg
dGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzCiAgICB7CiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBp
bnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYg
c3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoK
ICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh
cl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAog
ICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAg
ICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChj
b25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1
cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBj
aGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAg
ewogICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCiAgICAgICAg
ICBpZiAoIWVxKF9fczFbX19pXSwgX19zMltfX2ldKSkKICAgICAgICAgICAgcmV0dXJuIGx0KF9f
czFbX19pXSwgX19zMltfX2ldKSA/IC0xIDogMTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoK
ICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAg
ICAgIHsKICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsKICAgICAgICB3aGlsZSAo
Kl9fcCkgKytfX3A7CiAgICAgICAgcmV0dXJuIChfX3AgLSBfX3MpOwogICAgICB9CgogICAgICBz
dGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBz
aXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgewogICAgICAgIGZvciAoY29u
c3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVfdChfX3AgLSBfX3MpIDwgX19uOyArK19fcCkK
ICAgICAgICAgIGlmICgqX19wID09IF9fYSkgcmV0dXJuIF9fcDsKICAgICAgICByZXR1cm4gMDsK
ICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9f
czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gKGNo
YXJfdHlwZSopIG1lbW1vdmUoX19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpOyB9
CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29u
c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBl
KikgbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQoKICAgICAg
c3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19u
LCBjaGFyX3R5cGUgX19hKQogICAgICB7CiAgICAgICAgZm9yIChjaGFyX3R5cGUqIF9fcCA9IF9f
czsgX19wIDwgX19zICsgX19uOyArK19fcCkKICAgICAgICAgIGFzc2lnbigqX19wLCBfX2EpOwog
ICAgICAgIHJldHVybiBfX3M7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAg
dG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGNoYXJfdHlw
ZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3Qg
Y2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBi
b29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlw
ZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgc3Rh
dGVfdHlwZQogICAgICBfU19nZXRfc3RhdGUoY29uc3QgcG9zX3R5cGUmIF9fcG9zKSB7IHJldHVy
biBfX3Bvcy5zdGF0ZSgpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0xKTsgfQoKICAgICAgc3RhdGljIGludF90eXBl
CiAgICAgIF9TX2VvcygpIHsgcmV0dXJuIGNoYXJfdHlwZSgpOyB9CgogICAgICBzdGF0aWMgaW50
X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBl
cV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9OwoKCiAg
dGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVk
ZWYgY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IGludF90eXBlOwog
ICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYg
b2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0
aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f
YzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNv
bnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVy
biBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJf
dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwg
X19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSog
X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBt
ZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5n
dGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSog
X19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAg
ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNo
YXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hh
cl90eXBlKj4obWVtbW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJf
dHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg
c2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5
KF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3Np
Z24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAg
ICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBf
X2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAg
ICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2Mp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihfX2MpKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29u
c3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBf
X2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBzdGF0ZV90eXBlCiAgICAgIF9TX2dldF9zdGF0
ZShjb25zdCBwb3NfdHlwZSYgX19wb3MpIHsgcmV0dXJuIF9fcG9zLnN0YXRlKCk7IH0KCiAgICAg
IHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlw
ZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBfU19lb3MoKSB7IHJldHVy
biBjaGFyX3R5cGUoKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29u
c3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19j
OyB9CiAgfTsKIyAyOTMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0
cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
c3RydWN0IF9DaGFyX3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAg
X0NoYXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAg
ICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1Ry
YWl0czo6ZXEoX01fYyxfX2EpOyB9CiAgICB9OwoKfQojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX3N0cmluZ19md2QuaCIgMSAzCiMgMTcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfc3RyaW5nX2Z3ZC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9jb25maWcuaCIgMSAzCiMgMTggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfc3RyaW5nX2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3N0cmluZ19md2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDIwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3N0cmluZ19md2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsKCnRlbXBsYXRlIDxjbGFz
cyBfQ2hhclQsCiAgICAgICAgICBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwK
ICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KY2xhc3MgYmFzaWNf
c3RyaW5nOwoKdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCgoKfQojIDQxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyA0MiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
Mzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9jKytjb25maWcuaCIgMSAzIDQKIyAz
OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAzCiMgMzkgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMSAzCiMgMzcgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9iaXRzL2MrK2NvbmZpZy5o
IiAxIDMgNAojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3N0cmluZ19md2Qu
aCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIg
MSAzCiMgMzAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uZmlnLmgiIDEgMwoj
IDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmVsb3BzLmgiIDEgMwojIDMy
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzMyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAzNCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2UuaCIgMSAzCiMgMzUg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAxIDMKIyAzNiAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyA0MCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDQxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNDIgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvZXhjZXB0aW9uX3N1cHBvcnQuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9hdG9taWNpdHkuaCIg
MSAzIDQKIyAyMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3
L2luY2x1ZGUvYml0cy9hdG9taWNpdHkuaCIgMyA0CnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsK
CnN0YXRpYyBpbmxpbmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkK
X19leGNoYW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192
YWwpCnsKICByZWdpc3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0
aWxlX18gKCJsb2NrOyB4YWRkbCAlMCwlMiIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIi
IChfX3Jlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwgIm0iICgq
X19tZW0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jl
c3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkK
X19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsK
ICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAgICAgICAgICAg
ICAgICAgICAgIDogOiAiaXIiIChfX3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1vcnkiKTsKfQoj
IDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZCB7CiMgODEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNp
Y19zdHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVi
bGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9j
IGFsbG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBl
IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlw
ZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVu
Y2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJl
bmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50
ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIg
Y29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBi
YXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNv
bnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4gY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYg
cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsK
ICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9y
OwoKICAgIHByaXZhdGU6CiMgMTE2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvYzo6cmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwoj
IDEzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAg
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBfU19tYXhfc2l6ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFsOwoKICAgICAgICBzaXplX3R5cGUgX01fbGVuZ3RoOwog
ICAgICAgIHNpemVfdHlwZSBfTV9jYXBhY2l0eTsKICAgICAgICBfQXRvbWljX3dvcmQgX01fcmVm
ZXJlbmNlczsKCiAgICAgICAgYm9vbAogICAgICAgIF9NX2lzX2xlYWtlZCgpIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA8IDA7IH0KCiAgICAgICAgYm9vbAogICAgICAgIF9N
X2lzX3NoYXJlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7IH0K
CiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9sZWFrZWQoKQogICAgICAgIHsgX01fcmVmZXJl
bmNlcyA9IC0xOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfc2hhcmFibGUoKQogICAg
ICAgIHsgX01fcmVmZXJlbmNlcyA9IDA7IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3Jl
ZmRhdGEoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxfQ2hhclQq
PiAodGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFyVCYKICAgICAgICBvcGVyYXRvcltdKHNpemVf
dCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAg
ICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29u
c3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7IHJldHVybiAoIV9NX2lzX2xlYWtlZCgpICYm
IF9fYWxsb2MxID09IF9fYWxsb2MyKSA/CiAgICAgICAgICAgIF9NX3JlZmNvcHkoKSA6IF9NX2Ns
b25lKF9fYWxsb2MxKTsgfQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRl
KHNpemVfdCwgY29uc3QgX0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3Nl
KGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2Fu
ZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9f
YSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxs
b2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93
KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwog
ICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoK
ICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKIyAy
MDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAg
ICAgIGlubGluZSBzdGF0aWMgYm9vbAogICAgICAgIF9TX2V4Y2Vzc19zbG9wKHNpemVfdCwgc2l6
ZV90KTsKCiAgICAgIH07CgoKICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAg
ICB7CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19h
KQogICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3AoX19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQq
IF9NX3A7CiAgICAgIH07CgogICAgcHVibGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAg
ICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXpl
X3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQp
ICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hh
clQqCiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9w
OyB9CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0
dXJuIChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVw
KCkgY29uc3QKICAgICAgeyByZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2Rh
dGEoKSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01f
aWVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7
IH0KCiAgICAgIHZvaWQKICAgICAgX01fbGVhaygpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3Jl
cCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAgIF9NX2xlYWtfaGFyZCgpOwogICAgICB9Cgog
ICAgICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAg
IHsKICAgICAgICBkbyB7IGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkgX19vdXRfb2ZfcmFuZ2Uo
Il9fcG9zID4gdGhpcy0+c2l6ZSgpIik7IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiBfTV9p
YmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikgY29uc3QKICAgICAgewogICAgICAgIGJv
b2wgX190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBzaXpl
X3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9z
OwogICAgICAgIHJldHVybiAoX01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAg
fQoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQK
ICAgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJh
dG9yIF9fazIpCiAgICAgICAgewogICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sx
LCArK19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAg
ICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9f
cCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9f
cCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAg
X1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRl
cmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIu
YmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQq
IF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNv
cHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9T
X2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJU
KiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEp
OyB9CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hh
cmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoK
ICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAg
YmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJp
bmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNv
bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgY29uc3Qg
X0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq
IF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhz
aXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsK
CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmlu
ZyhfSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNf
c3RyaW5nKCkKICAgICAgeyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9y
KCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhp
cy0+YXNzaWduKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9D
aGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0
b3IKICAgICAgYmVnaW4oKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVy
biBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAg
ICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7
IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygp
OwogICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAg
ICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1
cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2
ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICBy
YmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMt
PmVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyBy
ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVf
dHlwZQogICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5f
TV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5
cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBf
X24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAg
ICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2
b2lkCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAg
ICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9
CgoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3Bv
cykgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJl
bmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01f
bGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBj
b25zdF9yZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAg
ICAgIGRvIHsgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpIF9fb3V0X29mX3JhbmdlKCJfX24gPj0g
dGhpcy0+c2l6ZSgpIik7IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19u
XTsKICAgICAgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pCiAgICAg
IHsKICAgICAgICBkbyB7IGlmIChfX24gPj0gc2l6ZSgpKSBfX291dF9vZl9yYW5nZSgiX19uID49
IHNpemUoKSIpOyB9IHdoaWxlICgwKTsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJu
IF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVy
YXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChf
X3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hh
clQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6
ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5k
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
bik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBf
Q2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90
eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBs
YWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lk
CiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVu
ZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNz
aWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9j
aGVjayhfX3BvcyksIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgICB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
bikKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgX19zICsgX19uKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmFzc2lnbihfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf
X2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwg
X19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2li
ZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAg
aW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0
aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0
SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVw
bGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg
ICAgewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhp
cy0+cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01faWJlZ2luKCksIF9fc3RyLl9NX2llbmQoKSk7
CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAg
ICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAg
IGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShf
X3AsIF9fcCwgX19zdHIuX01fY2hlY2soX19wb3MyKSwKICAgICAgICAgICAgICAgICAgICAgIF9f
c3RyLl9NX2ZvbGQoX19wb3MyLCBfX24pKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3Ag
PSBfTV9jaGVjayhfX3Bvcyk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zLCBf
X3MgKyBfX24pOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAg
ICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2Vy
dChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2Mg
PSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2li
ZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgx
KSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVy
biB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcm
CiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQog
ICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9m
b2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwg
X01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3Ig
X19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0g
X01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9u
ICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVh
a2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBp
dGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAg
ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAg
ICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7
CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVn
aW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikK
ICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01f
Zm9sZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuYmVn
aW4oKSwgX19zdHIuZW5kKCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl
cGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIp
OwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBf
X24yKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3Mp
LCBfTV9mb2xkKF9fcG9zLCBfX24xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Ms
IF9fcyArIF9fbjIpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAg
IHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQo
X19wb3MsIF9fbjEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgdHJh
aXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24y
LCBfQ2hhclQgX19jKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hl
Y2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsKICAgICAgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f
aTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh
Y2UoX19pMSwgX19pMiwgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24p
CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCBfX3MgKyBfX24p
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl
cmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh
Y2UoX19pMSwgX19pMiwgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcyArIHRy
YWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw
bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBfX2syKQog
ICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwKICAgICAg
ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9y
X2NhdGVnb3J5KCkpOyB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0
ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAg
IF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Z3ZEl0ZXJhdG9yIF9f
azEsCiAgICAgICAgICAgICAgICAgICBfRndkSXRlcmF0b3IgX19rMiwgZm9yd2FyZF9pdGVyYXRv
cl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBf
Q2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9f
ZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2Vf
dHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVybiBfU19j
b25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAgICAgdGVt
cGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2Nv
bnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBf
X2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAg
ICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2Vu
ZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAg
ICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5J
dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg
ICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3Jh
bCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBz
dGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRl
ciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9p
dGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAgICAgICBz
dGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2VuZCwgX0Z3ZEl0
ZXIgX19iZWcsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25zdHJ1Y3Qo
c2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgcHVi
bGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBzd2FwKGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAgY29uc3Qg
X0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90eXBlIF9f
biA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtf
X25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsKICAgICAg
fQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0
YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90
eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0ci5kYXRh
KCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChj
b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAw
KSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9z
KSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsg
fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0g
MCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9m
aXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmlu
ZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5w
b3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCks
IF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0
X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNv
bnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu
ZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z
ID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bvcyk7IH0K
CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9
CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9f
bikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19z
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19j
LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k
X2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9
IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIu
ZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp
bmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90eXBlCiAg
ICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9
IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBf
X3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg
IGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u
c3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAs
IHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAgZG8geyBpZiAoX19w
b3MgPiB0aGlzLT5zaXplKCkpIF9fb3V0X29mX3JhbmdlKCJfX3BvcyA+IHRoaXMtPnNpemUoKSIp
OyB9IHdoaWxlICgwKTsKICAgICAgICByZXR1cm4gYmFzaWNfc3RyaW5nKCp0aGlzLCBfX3Bvcywg
X19uKTsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikgY29uc3QKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAg
c2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6ZSk7CgogICAgICAgIGludCBfX3Ig
PSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOwog
ICAgICAgIGlmICghX19yKQogICAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsKICAgICAg
ICByZXR1cm4gX19yOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0OwoK
ICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEs
IGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9z
Miwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3Qg
X0NoYXJUKiBfX3MpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6
ZV90eXBlIF9fbjIgPSBucG9zKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgY29u
c3QgX0NoYXJUKgogICAgICBfU19maW5kKGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFy
VCogX19lbmQsIF9DaGFyVCBfX2MpOwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9N
X2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRv
cisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4g
X19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19z
dHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4K
ICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19s
aHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAg
IG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X2xocywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0
ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJU
IF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190
eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19s
aHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0
dXJuIF9fc3RyOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y
aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
CiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAg
ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19s
aHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBf
Q2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp
ICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9
IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0
dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9f
bGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNv
bXBhcmUoX19saHMpID4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg
ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQog
ICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBy
ZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9
IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9f
bGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykKICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9f
bGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo
cywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz
LmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21w
YXJlKF9fbGhzKSA8PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChf
X3Jocyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv
cGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAg
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKfQojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDEgMwojIDMwICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVmLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMwpuYW1lc3BhY2Ugc3RkIHsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnBhaXI8X1RwKiwgcHRyZGlmZl90PgpfX2dldF90ZW1wb3JhcnlfYnVmZmVy
KHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgz
NjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7
CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9UcCogX190bXAgPSAoX1RwKikgbWFsbG9jKChz
aXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAgcmV0
dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0gMjsK
ICB9CgogIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9y
YXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pIHsKICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1
ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9CiMgNjcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfdGVtcGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9U
cCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAq
KSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kdm9pZCByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9f
cCkgewogIGZyZWUoX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNs
YXNzIF9UcD4KY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIgewpwcml2YXRlOgogIHB0cmRpZmZfdCBf
TV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90IF9NX2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCiAg
dm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47
CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgz
NjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9U
cCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1h
bGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAg
YnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXpl
X2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVf
YnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRf
ZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1YmxpYzoKICBwdHJkaWZmX3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQogIF9UcCogYmVnaW4oKSB7IHJl
dHVybiBfTV9idWZmZXI7IH0KICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xl
bjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlcmF0b3IgX19sYXN0KSB7CgoKCgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAgICAgX1Ry
aXZpYWw7CgoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX01fbGVuKTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlm
IChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJp
dmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBmcmVlKF9NX2J1ZmZlcik7IF9NX2J1ZmZl
ciA9IDA7IF9NX2xlbiA9IDA7IHRocm93OyB9OwogIH0KCiAgfl9UZW1wb3JhcnlfYnVmZmVyKCkg
ewogICAgZGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9N
X2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBv
cmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVy
Jikge30KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsCiAgICAgICAgICBj
bGFzcyBfVHAKCiAgICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKCiAgICAgICAgID4Kc3RydWN0IHRlbXBvcmFy
eV9idWZmZXIgOiBwdWJsaWMgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1Rw
Pgp7CiAgdGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlcmF0b3IgX19sYXN0KQogICAgOiBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9y
LCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkge30KICB+dGVtcG9yYXJ5X2J1ZmZlcigpIHt9Cn07Cgp9
CiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAxIDMKIyAz
NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgMzMgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQgewoKCgoK
CgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNl
LCBjbGFzcyBfVHA+CnZvaWQKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5k
ZXgsIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0g
MSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsg
X19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihf
X2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFy
ZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl
eCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBj
bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19wdXNoX2hlYXBfYXV4KF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNlKiwgX1RwKikKewogIF9fcHVzaF9oZWFwKF9fZmly
c3QsIF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlKDApLAogICAg
ICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIGRvIHsgdm9pZCAo
Kl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgPiA6Ol9N
dXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29t
cGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxl
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgX19wdXNo
X2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcCwKICAgICAg
ICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgIF9EaXN0YW5jZSBf
X3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9f
cGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9f
dG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAg
ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgIF9f
aG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8g
MjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBj
bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19wdXNoX2hlYXBfYXV4KF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wLAogICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKiwgX1RwKikKewogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0IC0g
X19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAt
IDEpKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
Y2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciAp
ID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBfX3B1c2hfaGVh
cF9hdXgoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFu
Y2VfdHlwZShfX2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZv
aWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNl
IF9faG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUp
CnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3Nl
Y29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8
IF9fbGVuKSB7CiAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3Qg
KyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihfX2Zp
cnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hv
bGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29u
ZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9f
Zmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsK
ICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9f
Zmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+Cmlu
bGluZSB2b2lkCl9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0Rpc3RhbmNlKikKewogICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19s
YXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcG9wX2hlYXBfYXV4KF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICBfVHAqKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xh
c3QgLSAxLAogICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2Rpc3RhbmNlX3R5cGUo
X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxp
bmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIGRvIHsgdm9pZCAo
Kl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgPiA6Ol9N
dXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29t
cGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxl
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgX19wb3Bf
aGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAg
ICAgICBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBf
RGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENo
aWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVu
KSB7CiAgICBpZiAoX19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3Qg
KyAoX19zZWNvbmRDaGlsZCAtIDEpKSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19m
aXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19o
b2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNv
bmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihf
X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7
CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChf
X2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVl
LCBfQ29tcGFyZSBfX2NvbXAsCiAgICAgICAgICAgX0Rpc3RhbmNlKikKewogICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFu
Y2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwg
X1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAx
LCBfX2xhc3QgLSAxLCBfVHAoKihfX2xhc3QgLSAxKSksIF9fY29tcCwKICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApwb3BfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwgX0NvbXBhcmUgX19jb21wKQp7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb248IF9SYW5kb21BY2Nlc3NJdGVyYXRvciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIF9f
cG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Nv
bXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAs
IGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwKICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwg
X0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9EaXN0
YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9f
bGVuIC0gMikvMjsKCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwg
X19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICBpZiAoX19w
YXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCm1ha2VfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIGRv
IHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyYXRvciApID0gX011dGFibGVfUmFuZG9t
QWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSApID0gX0xl
c3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5D
b21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
CiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBf
VHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg
PCAyKSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlz
dGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGlsZSAodHJ1ZSkgewogICAgX19h
ZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3Bh
cmVudCkpLAogICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgaWYgKF9fcGFyZW50ID09IDAp
IHJldHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKbWFrZV9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3Nw
ZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyYXRvciA+IDo6X011dGFibGVfUmFuZG9tQWNj
ZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAogICAgICAgICAgICAgIF9f
dmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4Kdm9pZCBzb3J0X2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKICBk
byB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgKSA9IF9NdXRhYmxlX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgKSA9IF9M
ZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFu
Q29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9f
bGFzdC0tKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3Mg
X0NvbXBhcmU+CnZvaWQKc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAog
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7
CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yICkgPSBfTXV0YWJsZV9S
YW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0
ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwp9CgoKCgoKfQoj
IDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCgoK
bmFtZXNwYWNlIHN0ZCB7CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3Qg
X1RwJiBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYg
X19jKSB7CiAgZG8geyB2b2lkICgqX194KSggX1RwICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2Nv
bmNlcHRfc3BlY2lmaWNhdGlvbjwgX1RwID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBpZiAoX19hIDwgX19iKQog
ICAgaWYgKF9fYiA8IF9fYykKICAgICAgcmV0dXJuIF9fYjsKICAgIGVsc2UgaWYgKF9fYSA8IF9f
YykKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9fYTsKICBlbHNlIGlm
IChfX2EgPCBfX2MpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYiA8IF9fYykKICAgIHJl
dHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJuIF9fYjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmCl9fbWVkaWFuKGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkgewogIGRv
IHsgYm9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgX1RwJiwgY29uc3QgX1RwJiApID0gX1NU
TF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCBfVHAsIF9UcD46Ol9fYmlu
YXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBpZiAoX19jb21wKF9fYSwgX19iKSkKICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAg
ICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgcmV0dXJu
IF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2NvbXAoX19hLCBf
X2MpKQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgcmV0
dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9GdW5jdGlvbj4KX0Z1bmN0aW9uIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpIHsKICBkbyB7IHZvaWQgKCpf
X3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248
IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpCiAgICBfX2YoKl9fZmlyc3QpOwogIHJldHVybiBfX2Y7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7
CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAg
KytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkK
ICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9fbGFz
dCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlw
X2NvdW50KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg
KytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsK
ICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0
OwogICAgKytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBjYXNl
IDM6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2Zp
cnN0OwogIGNhc2UgMjoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7
CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1
cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVy
biBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9QcmVkaWNhdGU+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0IC0g
X19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291
bnQpIHsKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19m
aXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19f
Zmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytf
X2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr
X19maXJzdDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgogICAg
aWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNh
c2UgMjoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19m
aXJzdDsKICBjYXNlIDE6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7
CiAgICArK19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0Owog
IH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lu
cHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewogIGRvIHsgdm9pZCAoKl9feCko
IF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lu
cHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSYsIF9UcCYgKSA9IF9TVExfQklOQVJZX09QX0VR
VUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZh
bHVlX3R5cGUsIF9UcD46Ol9fYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
Ym9vbCAoKl9feSkoIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6
dmFsdWVfdHlwZSYsIGNvbnN0IF9UcCYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBi
b29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUsIF9U
cD46OiBfX2NvbnN0X2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feSA9
IF9feTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19s
YXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5k
X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5w
dXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0
ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfUHJlZGljYXRlJiwgY29uc3QgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9VTkFS
WV9GVU5DVElPTl9FUlJPUjwgX1ByZWRpY2F0ZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIHJldHVybiBmaW5kX2lmKF9f
Zmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmlu
ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogIGRvIHsgdm9p
ZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9FcXVh
bGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0VxdWFsaXR5Q29tcGFyYWJsZV9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9
IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3Qg
PT0gKl9fbmV4dCkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0Owog
IH0KICByZXR1cm4gX19sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZG8geyB2b2lkICgqX194KSgg
X0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwg
X0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQmluYXJ5UHJlZGlj
YXRlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs
dWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQmluYXJ5UHJlZGljYXRl
LCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGU+Ojpf
X2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9G
b3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkg
ewogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICByZXR1cm4g
X19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCgoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2
b2lkIGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9U
cCYgX192YWx1ZSwKICAgICAgICAgICBfU2l6ZSYgX19uKSB7CiAgZG8geyB2b2lkICgqX194KSgg
X0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5w
dXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlID4gOjpfRXF1YWxpdHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyB2b2lkICgqX194KSggX1RwICkgPSBfRXF1
YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1RwID4gOjpfRXF1YWxpdHlD
b21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3Qg
PT0gX192YWx1ZSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAg
ICBfU2l6ZSYgX19uKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8g
eyBib29sICgqX194KSggX1ByZWRpY2F0ZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfVU5BUllfRlVOQ1RJT05fRVJST1I8
IF9QcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6
dmFsdWVfdHlwZT46Ol9fdW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247Cn0KCgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZG8geyB2b2lkICgqX194KSgg
X0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5w
dXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlID4gOjpfRXF1YWxpdHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyB2b2lkICgqX194KSggX1RwICkgPSBfRXF1
YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1RwID4gOjpfRXF1YWxpdHlD
b21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf
X24gPSAwOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgq
X19maXJzdCA9PSBfX3ZhbHVlKQogICAgICArK19fbjsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnRfaWYoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICBkbyB7IHZv
aWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfUHJlZGljYXRl
JiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBl
JiApID0gX1NUTF9VTkFSWV9GVU5DVElPTl9FUlJPUjwgX1ByZWRpY2F0ZSwgYm9vbCwgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X191bmFyeV9mdW5j
dGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9
IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJl
ZCgqX19maXJzdCkpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRlcjEg
c2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBf
X2xhc3QyKQp7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMSApID0gX0ZvcndhcmRJ
dGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjEgPiA6Ol9Gb3J3YXJk
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwog
IGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlcjIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wg
KCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5
cGUmLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUm
ICkgPSBfU1RMX0JJTkFSWV9PUF9FUVVBTF9FUlJPUjwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9vcGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb247IGJvb2wgKCpfX3kpKCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9PUF9FUVVB
TF9FUlJPUjwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2
YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVl
X3R5cGU+OjogX19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3kgPSBfX3k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBf
X2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBf
Rm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBf
X2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoK
CiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoK
ICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSkgewogICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19m
aXJzdDIpOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3Qx
OwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlmICgrK19f
Y3VycmVudCA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoKl9f
Y3VycmVudCA9PSAqX19wKSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJl
dHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAg
cmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmly
c3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVy
MiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEg
X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgICBfQmluYXJ5UHJlZCBfX3ByZWRpY2F0ZSkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9G
b3J3YXJkSXRlcjEgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
Rm9yd2FyZEl0ZXIxID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIy
ICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVy
MiA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX0JpbmFyeVByZWQmLCBjb25zdCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUmLCBjb25zdCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUmICkgPSBf
U1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0JpbmFyeVByZWQsIGJvb2wsIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25f
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCgoKICBpZiAo
X19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9f
Zmlyc3QxOwoKCiAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgKytfX3RtcDsKICBp
ZiAoX190bXAgPT0gX19sYXN0MikgewogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
IV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAg
IHJldHVybiBfX2ZpcnN0MTsKICB9CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogIF9f
cDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmly
c3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEpIHsKICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy
KSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg
ICAgICsrX19maXJzdDE7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgcmV0dXJu
IF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwogICAg
aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOwoKICAgIHdoaWxlIChf
X3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAgICBpZiAoKytfX3AgPT0gX19sYXN0
MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xh
c3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICAgICsrX19maXJzdDE7CiAgfQog
IHJldHVybiBfX2ZpcnN0MTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfSW50ZWdlciwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfSW50
ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgZG8geyB2b2lkICgqX194KSggX0Zv
cndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0Zv
cndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSApID0gX0VxdWFsaXR5Q29tcGFyYWJs
ZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfRXF1YWxpdHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyB2b2lkICgqX194KSggX1Rw
ICkgPSBfRXF1YWxpdHlDb21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1RwID4gOjpf
RXF1YWxpdHlDb21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKCiAgaWYgKF9fY291bnQgPD0gMCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2Ug
ewogICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAg
ICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgd2hpbGUg
KF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICsr
X19pOwogICAgICAgIC0tX19uOwogICAgICB9CiAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICBy
ZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19s
YXN0LCBfX3ZhbCk7CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0JpbmFy
eVByZWQ+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNv
bnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFy
eV9wcmVkKSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0
ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBk
byB7IGJvb2wgKCpfX3gpKCBfQmluYXJ5UHJlZCYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgX1RwJiApID0gX1NUTF9CSU5B
UllfRlVOQ1RJT05fRVJST1I8IF9CaW5hcnlQcmVkLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSwgX1RwPjo6X19iaW5hcnlfZnVuY3Rpb25f
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBpZiAoX19j
b3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QpIHsKICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkK
ICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICBfRm9y
d2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChfX2kgIT0g
X19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAg
ICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAg
ICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19pICE9IF9f
bGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgICBfX2ZpcnN0ID0g
X19pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMiBz
d2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikgewogIGRv
IHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlcjEgKSA9IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlcjEgPiA6Ol9NdXRhYmxlX0Zvcndh
cmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyMiApID0gX011dGFibGVfRm9yd2FyZEl0
ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyMiA+IDo6X011dGFibGVf
Rm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyMT46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyMj46OnZhbHVlX3R5cGUgKSA9IF9TVExfQ09OVkVSVF9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX2lzX25vdF9jb252
ZXJ0aWJsZV90b190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRvIHsgdm9pZCAo
Kl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlw
ZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSAp
ID0gX1NUTF9DT05WRVJUX0VSUk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyMj46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
MT46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfaXNfbm90X2NvbnZlcnRpYmxlX3RvX3R5cGVfWTsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7
CiAgcmV0dXJuIF9fZmlyc3QyOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfT3V0cHV0SXRlciwgY2xhc3MgX1VuYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zv
cm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkg
ewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCko
IF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBf
T3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX191bmFyeV9vcCgqX19maXJzdCk7CiAg
cmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlPcGVy
YXRpb24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlPcGVy
YXRpb24gX19iaW5hcnlfb3ApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0g
X0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lu
cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25j
ZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194
KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248
IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5
X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2UoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBfVHAm
IF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKSB7CiAgZG8geyB2b2lkICgqX194
KSggX0ZvcndhcmRJdGVyICkgPSBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgq
X194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUm
LCBfVHAmICkgPSBfU1RMX0JJTkFSWV9PUF9FUVVBTF9FUlJPUjwgYm9vbCwgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUsIF9UcD46Ol9fYmluYXJ5X29w
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgYm9vbCAoKl9feSkoIGNvbnN0IHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgX1RwJiAp
ID0gX1NUTF9CSU5BUllfT1BfRVFVQUxfRVJST1I8IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlLCBfVHA+OjogX19jb25zdF9iaW5hcnlfb3Bl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3kgPSBfX3k7IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CgogIGRvIHsgdm9pZCAoKl9feCkoIF9UcCAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX0NPTlZFUlRfRVJST1I8IF9UcCAs
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID46Ol9f
dHlwZV9YX2lzX25vdF9jb252ZXJ0aWJsZV90b190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2Zp
cnN0ID09IF9fb2xkX3ZhbHVlKQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+CnZv
aWQgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVl
KSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfTXV0YWJsZV9Gb3J3YXJk
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9NdXRhYmxl
X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfQ09OVkVSVF9FUlJPUjwgX1RwICwg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgPjo6X190
eXBlX1hfaXNfbm90X2NvbnZlcnRpYmxlX3RvX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfUHJlZGljYXRlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX1VOQVJZX0ZVTkNU
SU9OX0VSUk9SPCBfUHJlZGljYXRlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fdW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKl9fZmlyc3Qg
PSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xk
X3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lu
cHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJ
dGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJ
dGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRv
IHsgYm9vbCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFs
dWVfdHlwZSYsIF9UcCYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUsIF9UcD46Ol9fYmlu
YXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgYm9vbCAoKl9feSkoIGNvbnN0IHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IF9U
cCYgKSA9IF9TVExfQklOQVJZX09QX0VRVUFMX0VSUk9SPCBib29sLCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUsIF9UcD46OiBfX2NvbnN0X2JpbmFyeV9v
cGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feSA9IF9feTsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVz
dWx0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1
ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+Cl9P
dXRwdXRJdGVyIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1Rw
JiBfX25ld192YWx1ZSkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9JbnB1
dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0SXRl
cmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRv
IHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBf
UHJlZGljYXRlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlJiApID0gX1NUTF9VTkFSWV9GVU5DVElPTl9FUlJPUjwgX1ByZWRpY2F0ZSwgYm9v
bCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X191
bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkK
ICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0
OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfR2VuZXJhdG9yPgp2b2lkIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKSB7CiAgZG8geyB2b2lkICgqX194KSgg
X0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwg
X0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICgqX194KSggX0dlbmVyYXRvciYpID0gX1NUTF9HRU5F
UkFUT1JfRVJST1I8IF9HZW5lcmF0b3IsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X19nZW5lcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9HZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIGdlbmVyYXRl
X24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKSB7CiAg
ZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0
X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGZvciAoIDsgX19uID4gMDsg
LS1fX24sICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICByZXR1cm4gX19maXJz
dDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNs
YXNzIF9UcD4KX091dHB1dEl0ZXIgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIg
KSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6
X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3Jf
Y29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wg
KCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUm
LCBfVHAmICkgPSBfU1RMX0JJTkFSWV9PUF9FUVVBTF9FUlJPUjwgYm9vbCwgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlLCBfVHA+OjpfX2JpbmFyeV9vcGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IGJvb2wgKCpfX3kpKCBjb25zdCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUmLCBjb25zdCBfVHAmICkgPSBf
U1RMX0JJTkFSWV9PUF9FUVVBTF9FUlJPUjwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlLCBfVHA+OjogX19jb25zdF9iaW5hcnlfb3BlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3kgPSBfX3k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICghKCpfX2Zp
cnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICArK19f
cmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfT3V0cHV0SXRlciBy
ZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBf
X3ByZWQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5wdXRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQg
KCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX1ByZWRpY2F0
ZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlw
ZSYgKSA9IF9TVExfVU5BUllfRlVOQ1RJT05fRVJST1I8IF9QcmVkaWNhdGUsIGJvb2wsIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fdW5hcnlfZnVu
Y3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoIV9fcHJlZCgqX19m
aXJzdCkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAg
ICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKSB7
CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfTXV0YWJsZV9Gb3J3YXJkSXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9NdXRhYmxlX0Zv
cndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CiAgZG8geyBib29sICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcj46OnZhbHVlX3R5cGUmLCBfVHAmICkgPSBfU1RMX0JJTkFSWV9PUF9FUVVBTF9FUlJPUjwg
Ym9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUs
IF9UcD46Ol9fYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgYm9vbCAoKl9f
eSkoIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90
eXBlJiwgY29uc3QgX1RwJiApID0gX1NUTF9CSU5BUllfT1BfRVFVQUxfRVJST1I8IGJvb2wsIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlLCBfVHA+Ojog
X19jb25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3kgPSBfX3k7
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRvIHsgdm9pZCAoKl9feCkoIF9UcCAsIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX0NP
TlZFUlRfRVJST1I8IF9UcCAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+
Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX2lzX25vdF9jb252ZXJ0aWJsZV90b190eXBlX1k7IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBf
X3ZhbHVlKTsKICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJzdCA9
PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2Nv
cHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciByZW1vdmVfaWYoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0
ZXIgKSA9IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9G
b3J3YXJkSXRlciA+IDo6X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfUHJlZGlj
YXRlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUmICkgPSBfU1RMX1VOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfUHJlZGljYXRlLCBib29sLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fdW5h
cnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwoKICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0Zvcndh
cmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJz
dAogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xh
c3QsIF9fZmlyc3QsIF9fcHJlZCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikgewogIF9UcCBfX3ZhbHVlID0gKl9fZmly
c3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkK
ICAgIGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgIF9fdmFsdWUgPSAqX19maXJz
dDsKICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQogIHJldHVybiArK19fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu
ZSBfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3Jf
dGFnKSB7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCEoKl9fcmVz
dWx0ID09ICpfX2ZpcnN0KSkKICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4g
KytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyPgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0KSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0
SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8g
eyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3Nw
ZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSApID0gX0VxdWFs
aXR5Q29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0VxdWFsaXR5Q29tcGFyYWJsZV9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGUsCiAgICAgICAgICBjbGFzcyBfVHA+
Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQs
IF9UcCopIHsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQmluYXJ5UHJlZGljYXRlJiwgY29uc3QgX1Rw
JiwgY29uc3QgX1RwJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9CaW5hcnlQcmVk
aWNhdGUsIGJvb2wsIF9UcCwgX1RwPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7
CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAg
IGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9
ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsr
X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRl
ciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2Nv
cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBf
X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmlu
YXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn
KSB7CiAgZG8geyBib29sICgqX194KSggX0JpbmFyeVByZWRpY2F0ZSYsIGNvbnN0IHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5B
UllfRlVOQ1RJT05fRVJST1I8IF9CaW5hcnlQcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICAqX19yZXN1bHQgPSAq
X19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlf
cHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1
cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVl
X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZG8geyB2
b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZp
Y2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0
ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVy
ID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogIHJl
dHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3By
ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgq
X194KSggX0ZvcndhcmRJdGVyICkgPSBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9z
cGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lk
ICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5
cGUgKSA9IF9FcXVhbGl0eUNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0VxdWFsaXR5
Q29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CgogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgcmV0dXJuIHVu
aXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciB1bmlxdWUo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZG8geyB2b2lkICgqX194
KSggX0ZvcndhcmRJdGVyICkgPSBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgq
X194KSggX0JpbmFyeVByZWRpY2F0ZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJP
UjwgX0JpbmFyeVByZWRpY2F0ZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19m
aXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyPgp2b2lkIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAodHJ1ZSkKICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICByZXR1cm47CiAgICBlbHNlCiAgICAg
IGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcj4Kdm9pZCBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZykgewogIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgaXRlcl9zd2FwKF9fZmly
c3QrKywgLS1fX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpp
bmxpbmUgdm9pZCByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX0JpZGlyZWN0aW9uYWxJdGVy
ICkgPSBfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9u
PCBfQmlkaXJlY3Rpb25hbEl0ZXIgPiA6Ol9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgX19yZXZlcnNl
KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0
SXRlciByZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfQmlk
aXJlY3Rpb25hbEl0ZXIgKSA9IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZp
Y2F0aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIgPiA6Ol9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAo
Kl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgIC0tX19sYXN0OwogICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsKICAgICsrX19yZXN1bHQ7CiAg
fQogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0V1Y2xpZGVhblJpbmdF
bGVtZW50PgpfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19nY2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50
IF9fbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBf
X24pCnsKICB3aGlsZSAoX19uICE9IDApIHsKICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3Qg
PSBfX20gJSBfX247CiAgICBfX20gPSBfX247CiAgICBfX24gPSBfX3Q7CiAgfQogIHJldHVybiBf
X207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX0Zv
cndhcmRJdGVyIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosCiAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX2ZpcnN0ID09IF9f
bWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ID09IF9fbWlkZGxlKQogICAg
cmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogIGRv
IHsKICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYgKF9fZmlyc3QgPT0g
X19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgfSB3aGlsZSAoX19maXJzdDIg
IT0gX19sYXN0KTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3Q7CgogIF9f
Zmlyc3QyID0gX19taWRkbGU7CgogIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpIHsKICAgIHN3
YXAgKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl
KQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19s
YXN0KQogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogIH0KCiAgcmV0dXJuIF9fbmV3X21pZGRs
ZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5j
ZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcm90YXRlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIGRvIHsgdm9pZCAoKl9f
eCkoIF9CaWRpcmVjdGlvbmFsSXRlciApID0gX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0JpZGlyZWN0aW9uYWxJdGVyID4gOjpfTXV0YWJsZV9C
aWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsK
ICBpZiAoX19sYXN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fZmlyc3Q7CgogIF9fcmV2ZXJz
ZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgX19y
ZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoK
ICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAmJiBfX21pZGRsZSAhPSBfX2xhc3QpCiAgICBz
d2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkg
ewogICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnKCkpOwogICAgcmV0dXJuIF9fbGFzdDsKICB9CiAgZWxzZSB7CiAgICBfX3JldmVyc2UoX19m
aXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgcmV0dXJu
IF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JvdGF0ZShfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgKiwgX1Rw
ICopIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011dGFibGVf
UmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNz
SXRlciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBf
X2ZpcnN0OwogIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNl
IF9fbCA9IF9fbiAtIF9fazsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Qg
KyAoX19sYXN0IC0gX19taWRkbGUpOwoKICBpZiAoX19rID09IDApCiAgICByZXR1cm4gX19sYXN0
OwoKICBlbHNlIGlmIChfX2sgPT0gX19sKSB7CiAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21p
ZGRsZSwgX19taWRkbGUpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgX0Rpc3RhbmNlIF9f
ZCA9IF9fZ2NkKF9fbiwgX19rKTsKCiAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19k
OyBfX2krKykgewogICAgX1RwIF9fdG1wID0gKl9fZmlyc3Q7CiAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX3AgPSBfX2ZpcnN0OwoKICAgIGlmIChfX2sgPCBfX2wpIHsKICAgICAgZm9yIChfRGlzdGFu
Y2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICBpZiAoX19wID4gX19m
aXJzdCArIF9fbCkgewogICAgICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgIF9f
cCAtPSBfX2w7CiAgICAgICAgfQoKICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAg
IF9fcCArPSBfX2s7CiAgICAgIH0KICAgIH0KCiAgICBlbHNlIHsKICAgICAgZm9yIChfRGlzdGFu
Y2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7IF9faiArKykgewogICAgICAgIGlmIChfX3Ag
PCBfX2xhc3QgLSBfX2spIHsKICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAg
ICBfX3AgKz0gX19rOwogICAgICAgIH0KCiAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAg
ICAgICAgX19wIC09IF9fbDsKICAgICAgfQogICAgfQoKICAgICpfX3AgPSBfX3RtcDsKICAgICsr
X19maXJzdDsKICB9CgogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlciByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fbGFzdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX011
dGFibGVfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVy
ID4gOjpfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVybiBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwg
X19sYXN0LAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAg
ICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgcm90YXRl
X2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1
bHQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0
b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
dm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICByZXR1cm4gY29weShfX2ZpcnN0LCBf
X21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9CgoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5jZSBfX3JhbmRvbV9udW1iZXIoX0Rp
c3RhbmNlIF9fbikgewoKCgogIHJldHVybiBscmFuZDQ4KCkgJSBfX247Cgp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZmbGUoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0
ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3Jl
cXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly
c3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3Qg
KyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CnZvaWQg
cmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9f
cmFuZCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyICkgPSBfTXV0YWJs
ZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nl
c3NJdGVyID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy
ZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9
IF9fbGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kg
LSBfX2ZpcnN0KSArIDEpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxl
X24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbikK
ewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lk
ICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7
CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9f
bSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChf
X3JhbmRvbV9udW1iZXIoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2Zp
cnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5n
OwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAg
ICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxl
X24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFu
ZCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVyYXRv
cl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2
b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgX0Rpc3RhbmNlICgqX194KSgg
X1JhbmRvbU51bWJlckdlbmVyYXRvciYsIGNvbnN0IF9EaXN0YW5jZSYgKSA9IF9TVExfVU5BUllf
RlVOQ1RJT05fRVJST1I8IF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIF9EaXN0YW5jZSwgX0Rpc3Rh
bmNlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0YW5jZShfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19y
ZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFuZChfX3JlbWFpbmlu
ZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19vdXQ7CiAgICAg
IC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7CiAgfQogIHJl
dHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3Nh
bXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNl
IF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19m
aXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0
YW5jZSBfX00gPSBfX3JhbmRvbV9udW1iZXIoX190KTsKICAgIGlmIChfX00gPCBfX24pCiAgICAg
IF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX291
dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvciwgY2xhc3MgX0Rp
c3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewogIGRvIHsgX0Rpc3RhbmNlICgqX194
KSggX1JhbmRvbU51bWJlckdlbmVyYXRvciYsIGNvbnN0IF9EaXN0YW5jZSYgKSA9IF9TVExfVU5B
UllfRlVOQ1RJT05fRVJST1I8IF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIF9EaXN0YW5jZSwgX0Rp
c3RhbmNlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgX0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9f
bjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19m
aXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19maXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsKICAgIGlm
IChfX00gPCBfX24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsK
ICB9CgogIHJldHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9t
X3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291
dF9sYXN0KQp7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0
b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lk
ICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxl
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2ZpcnN0LCBfX291dF9sYXN0IC0gX19vdXRfZmly
c3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KaW5saW5lIF9SYW5k
b21BY2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2Vu
ZXJhdG9yJiBfX3JhbmQpCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyICkgPSBfSW5w
dXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIgPiA6Ol9JbnB1dEl0
ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBk
byB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011dGFibGVfUmFuZG9tQWNj
ZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNjZXNzSXRlciA+IDo6
X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fcmFuZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9f
cGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUg
X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsK
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICB3aGlsZSAoX19wcmVk
KCpfX2ZpcnN0KSkKICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsK
CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogIHdoaWxlICgrK19fbmV4dCAhPSBf
X2xhc3QpCiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgIHN3YXAoKl9fZmlyc3QsICpf
X25leHQpOwogICAgICArK19fZmlyc3Q7CiAgICB9CgogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxl
ICh0cnVlKSB7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQog
ICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQog
ICAgICAgICsrX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgLS1fX2xhc3Q7
CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJl
dHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgIC0t
X19sYXN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICBpdGVyX3N3YXAoX19maXJzdCwg
X19sYXN0KTsKICAgICsrX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIgcGFydGl0aW9uKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl
ZCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX011dGFibGVfRm9yd2Fy
ZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfTXV0YWJs
ZV9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9QcmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfVU5BUllf
RlVOQ1RJT05fRVJST1I8IF9QcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlPjo6X191bmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIHJldHVybiBfX3BhcnRpdGlv
bihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFz
cyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9y
d2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKSB7CiAgaWYgKF9fbGVuID09
IDEpCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgX0Zv
cndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAv
IDIpOwogIHJldHVybiByb3RhdGUoX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwg
X19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAg
IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAy
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz
cyBfUHJlZGljYXRlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19z
dGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9E
aXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXpl
KSB7CiAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgIF9Qb2ludGVyIF9f
cmVzdWx0MiA9IF9fYnVmZmVyOwogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19m
aXJzdCkKICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAqX19yZXN1bHQxID0g
Kl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg
ICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQyOwogICAgICB9CiAg
ICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICByZXR1cm4gX19yZXN1
bHQxOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgcmV0dXJuIHJvdGF0ZShfX3N0YWJs
ZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCwg
X19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplKSwKICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAg
ICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19taWRkbGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSkpOwog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfRm9yd2FyZEl0ZXIKX19zdGFibGVfcGFy
dGl0aW9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1RwKiwgX0Rpc3RhbmNlKikK
ewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBf
X2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRp
dGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1
Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihf
X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHN0
YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICBkbyB7IHZvaWQgKCpfX3gp
KCBfRm9yd2FyZEl0ZXIgKSA9IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X011dGFibGVfRm9yd2FyZEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpf
X3gpKCBfUHJlZGljYXRlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX1VOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfUHJlZGlj
YXRlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf
dHlwZT46Ol9fdW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19maXJz
dDsKICBlbHNlCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2F1eChfX2ZpcnN0LCBfX2xh
c3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2Vf
dHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9UcCBfX3Bpdm90KQp7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdoaWxlICgqX19m
aXJzdCA8IF9fcGl2b3QpCiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUg
KF9fcGl2b3QgPCAqX19sYXN0KQogICAgICAtLV9fbGFzdDsKICAgIGlmICghKF9fZmlyc3QgPCBf
X2xhc3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xh
c3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3Vh
cmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBf
X2NvbXApCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19w
aXZvdCkpCiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fY29tcChf
X3Bpdm90LCAqX19sYXN0KSkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19s
YXN0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0
KTsKICAgICsrX19maXJzdDsKICB9Cn0KCmNvbnN0IGludCBfX3N0bF90aHJlc2hvbGQgPSAxNjsK
CgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX191
bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3Zh
bCkgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAtLV9fbmV4dDsKICB3
aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9fbGFz
dCA9IF9fbmV4dDsKICAgIC0tX19uZXh0OwogIH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4K
dm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwg
X1RwIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogIC0tX19uZXh0OwogIHdo
aWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAg
IF9fbGFzdCA9IF9fbmV4dDsKICAgIC0tX19uZXh0OwogIH0KICAqX19sYXN0ID0gX192YWw7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9p
ZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikgewogIF9UcCBf
X3ZhbCA9ICpfX2xhc3Q7CiAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgIGNvcHlfYmFja3dh
cmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7CiAg
fQogIGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZT4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
IF9UcCosIF9Db21wYXJlIF9fY29tcCkgewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7CiAgaWYgKF9f
Y29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFz
dCwgX19sYXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3Vu
Z3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwsIF9fY29tcCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m
aXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmly
c3QsIF9faSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAh
PSBfX2xhc3Q7ICsrX19pKQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1
ZV90eXBlKF9fZmlyc3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKSB7CiAgZm9yIChfUmFuZG9tQWNjZXNz
SXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVk
X2xpbmVhcl9pbnNlcnQoX19pLCBfVHAoKl9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f
dW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCosIF9Db21wYXJlIF9f
Y29tcCkgewogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9f
bGFzdDsgKytfX2kpCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kp
LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9D
b21wYXJlPgppbmxpbmUgdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyPgp2b2lkIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQpOwogICAgX191
bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0
KTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f
ZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19j
b21wKSB7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19jb21w
KTsKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hv
bGQsIF9fbGFzdCwgX19jb21wKTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIF9T
aXplIF9fbGcoX1NpemUgX19uKSB7CiAgX1NpemUgX19rOwogIGZvciAoX19rID0gMDsgX19uICE9
IDE7IF9fbiA+Pj0gMSkgKytfX2s7CiAgcmV0dXJuIF9fazsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lkIF9faW50cm9zb3J0
X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAgICAgIF9TaXpl
IF9fZGVwdGhfbGltaXQpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVz
aG9sZCkgewogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQo
X19maXJzdCwgX19sYXN0LCBfX2xhc3QpOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVw
dGhfbGltaXQ7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVk
X3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
VHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBfX2ludHJvc29y
dF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0KTsKICAgIF9fbGFz
dCA9IF9fY3V0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9TaXplLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ludHJvc29ydF9sb29w
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2Rl
cHRoX2xpbWl0LCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
IF9fc3RsX3RocmVzaG9sZCkgewogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBw
YXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIHJldHVy
bjsKICAgIH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0
ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkv
MiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAx
KSwgX19jb21wKSksCiAgICAgICBfX2NvbXApOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwg
X19sYXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1pdCwgX19jb21wKTsKICAgIF9fbGFzdCA9IF9f
Y3V0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9p
ZCBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyICkgPSBfTXV0YWJsZV9S
YW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJ
dGVyID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRp
b247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSApID0gX0xlc3NU
aGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFi
bGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBpZiAo
X19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAg
ICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsKICAgIF9fZmluYWxfaW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVy
ICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248
IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgq
X194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VS
Uk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkg
ewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xh
c3QgLSBfX2ZpcnN0KSAqIDIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX2Zp
bmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICB9Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7
CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICByZXR1cm47CiAgfQog
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0
KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICBfX2lu
cGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgX19tZXJnZV93aXRob3V0X2J1
ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19t
aWRkbGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21w
YXJlPgp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D
b21wYXJlIF9fY29tcCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgcmV0dXJuOwogIH0KICBf
UmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkg
LyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsK
ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsKICBfX21l
cmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRfbG9vcChf
UmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKSB7CiAgX0Rpc3RhbmNlIF9fdHdv
X3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9f
dHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl
cF9zaXplLAogICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmly
c3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICBfX2Zp
cnN0ICs9IF9fdHdvX3N0ZXA7CiAgfQoKICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19s
YXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsg
X19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgIF9fcmVz
dWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMSwgY2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4K
dm9pZCBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9z
aXplLAogICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9EaXN0YW5j
ZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJz
dCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3Qg
KyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXpl
LCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAg
fQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVw
X3NpemUpOwoKICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAg
X19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQsCiAgICAgICAg
X19jb21wKTsKfQoKY29uc3QgaW50IF9fc3RsX2NodW5rX3NpemUgPSA3OwoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19jaHVua19pbnNl
cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfRGlzdGFuY2UgX19jaHVua19zaXpl
KQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgX19maXJz
dCArPSBfX2NodW5rX3NpemU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2Us
IGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5r
X3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9f
Y2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19j
aHVua19zaXplLCBfX2NvbXApOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgfQogIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZv
aWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSop
IHsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9Qb2ludGVyIF9fYnVm
ZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBf
X3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0
LCBfX3N0ZXBfc2l6ZSk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21l
cmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAg
ICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVm
ZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBj
bGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3Nv
cnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX0NvbXBhcmUgX19j
b21wKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBf
X2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXpl
ID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVu
KSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0
ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3NvcnRf
bG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29t
cCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fc3RhYmxl
X3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkgewog
IF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xlbiA+IF9fYnVm
ZmVyX3NpemUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUs
IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19t
aWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogIH0KICBlbHNlIHsKICAg
IF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChf
RGlzdGFuY2UqKTApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xh
c3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICB9CiAgX19tZXJnZV9hZGFwdGl2ZShfX2Zp
cnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZv
aWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRl
ciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZl
cl9zaXplLCBfQ29tcGFyZSBfX2NvbXApIHsKICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0g
X19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3Qg
KyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX3N0YWJsZV9zb3J0
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp
dmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dp
dGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX21lcmdlX3NvcnRfd2l0
aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBfX21lcmdlX2FkYXB0aXZl
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3Qp
LAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpp
bmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U
cCosIF9EaXN0YW5jZSopIHsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwg
X1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9f
aW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIGVsc2UKICAgIF9fc3RhYmxl
X3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0Nv
bXBhcmU+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX1RwKiwgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKSB7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9U
cD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lu
cGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogIGVsc2UKICAgIF9f
c3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXI+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGRvIHsg
dm9pZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJ
dGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0
YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJs
ZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1l
bnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBfX3N0YWJsZV9zb3J0X2F1
eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmly
c3QpLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2
b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAg
ZG8geyB2b2lkICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6
Ol9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUm
LCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlLCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlPjo6
X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hp
bGUgKDApOwoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3BhcnRp
YWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCop
IHsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICBpZiAoKl9faSA8ICpf
X2ZpcnN0KQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19p
KSwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwogIHNvcnRfaGVh
cChfX2ZpcnN0LCBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
cj4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGRvIHsgdm9p
ZCAoKl9feCkoIF9SYW5kb21BY2Nlc3NJdGVyICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0YWJs
ZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9j
b25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBfX3BhcnRpYWxfc29ydChfX2Zp
cnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZv
aWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApIHsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRk
bGUsIF9fY29tcCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19p
IDwgX19sYXN0OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICBf
X3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwgX19jb21wLAogICAg
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7CiAgc29ydF9oZWFwKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNz
SXRlciApID0gX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfUmFuZG9tQWNjZXNzSXRlciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9v
bCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElP
Tl9FUlJPUjwgX0NvbXBhcmUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBfX3BhcnRpYWxfc29ydChfX2Zp
cnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3Bh
cnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs
dF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSos
IF9UcCopIHsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9f
cmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19y
ZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9s
YXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJz
dDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2ZpcnN0OwogIH0KICBtYWtlX2hl
YXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAgIF9f
YWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAg
ICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCkpOwogICAgKytfX2ZpcnN0OwogIH0KICBzb3J0
X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgcmV0dXJuIF9fcmVz
dWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJ
dGVyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIg
PiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0gX011dGFi
bGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfUmFuZG9tQWNj
ZXNzSXRlciA+IDo6X011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfQ09O
VkVSVF9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90
eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf
dHlwZSA+OjpfX3R5cGVfWF9pc19ub3RfY29udmVydGlibGVfdG9fdHlwZV9ZOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwoKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxl
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRvIHsgdm9pZCAoKl9feCko
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSApID0gX0xl
c3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIHJldHVybiBf
X3BhcnRpYWxfc29ydF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVz
dWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9f
cmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUo
X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFz
cyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2Uq
LCBfVHAqKSB7CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBf
X3Jlc3VsdF9sYXN0OwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9f
cmVzdWx0X2ZpcnN0OwogIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxf
bGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmly
c3Q7CiAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICsrX19maXJzdDsKICB9CiAgbWFrZV9o
ZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRf
Zmlyc3QpKQogICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCks
CiAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVz
dWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfVHAoKl9fZmlyc3QpLAogICAgICAgICAg
ICAgICAgICAgIF9fY29tcCk7CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3Vs
dF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogIHJldHVybiBfX3Jlc3VsdF9y
ZWFsX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFs
X3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7
CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlciApID0gX0lucHV0SXRlcmF0b3JfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSgg
X1JhbmRvbUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxlX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cj46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX0NPTlZFUlRfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfaXNfbm90X2NvbnZl
cnRpYmxlX3RvX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyBib29sICgq
X194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VS
Uk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xh
dGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIHJldHVybiBfX3BhcnRpYWxfc29ydF9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKSB7CiAgd2hpbGUgKF9fbGFzdCAtIF9f
Zmlyc3QgPiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFy
ZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBpZiAoX19j
dXQgPD0gX19udGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgIGVsc2UKICAgICAgX19sYXN0
ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lk
ICgqX194KSggX1JhbmRvbUFjY2Vzc0l0ZXIgKSA9IF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vzc0l0ZXIgPiA6Ol9NdXRhYmxl
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2Nv
bmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92
aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIF9fbnRoX2VsZW1lbnQoX19maXJz
dCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f
bnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19udGgsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCos
IF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJz
dCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsK
ICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZQog
ICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X0NvbXBhcmU+CmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9f
eCkoIF9SYW5kb21BY2Nlc3NJdGVyICkgPSBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvcl9j
b25jZXB0X3NwZWNpZmljYXRpb248IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfTXV0YWJsZV9SYW5k
b21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9T
VExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0
aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIF9f
bnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3Qp
LCBfX2NvbXApOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX192YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwog
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYg
PSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRs
ZSwgX19oYWxmKTsKICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICBfX2ZpcnN0ID0g
X19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAt
IDE7CiAgICB9CiAgICBlbHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19m
aXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUg
X0ZvcndhcmRJdGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0
b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
dm9pZCAoKl9feCkoIF9UcCAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+
Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgX1RwLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2Ft
ZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRvIHsgdm9pZCAoKl9feCko
IF9UcCApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRpb248IF9UcCA+
IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3Zh
bCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBfRGlz
dGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9E
aXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4g
PiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0Owog
ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBf
X3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAg
IF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZQogICAgICBfX2xlbiA9
IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93
ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19j
b21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJh
dG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfVHAgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
Pjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZUEVfRVJST1I8IF9UcCwgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfbm90X3Nh
bWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IGJvb2wgKCpfX3gp
KCBfQ29tcGFyZSYsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYgKSA9IF9TVExfQklOQVJZX0ZVTkNU
SU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9vbCwgX1RwLCBfVHA+OjpfX2JpbmFyeV9mdW5jdGlvbl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgcmV0dXJuIF9f
bG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191
cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewog
IF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7
CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChf
X2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmly
c3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fdmFsIDwgKl9fbWlk
ZGxlKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19t
aWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7
CiAgICB9CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJk
SXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJk
SXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX1RwICwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VS
Uk9SPCBfVHAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90
eXBlID46Ol9fdHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgw
KTsKCiAgZG8geyB2b2lkICgqX194KSggX1RwICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgX1RwID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICByZXR1cm4gX191cHBlcl9ib3Vu
ZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFu
Y2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fdXBw
ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwg
X0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRk
bGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBf
X21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYg
KF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNl
IHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVu
ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5s
aW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0
ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0
ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9UcCAsIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJP
UjwgX1RwLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CgogIGRvIHsgYm9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgX1RwJiwgY29uc3QgX1RwJiAp
ID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCBfVHAsIF9UcD46
Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdo
aWxlICgwKTsKICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBf
X2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
Y2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAg
ICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2Fy
ZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewog
ICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFu
Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAg
X19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4g
LSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAg
IF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwog
ICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwog
ICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3Jp
Z2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+
KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfVHA+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5n
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf
X3ZhbCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVy
YXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8g
eyB2b2lkICgqX194KSggX1RwICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCBfVHAsIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25vdF9z
YW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgZG8geyB2b2lkICgqX194
KSggX1RwICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1Rw
ID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKICByZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9f
dmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9EaXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVh
bF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg
X1RwJiBfX3ZhbCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsK
ICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4p
OwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9f
cmlnaHQ7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAg
ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAg
aWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7
CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9
CiAgICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgIF9fbGVuID0gX19o
YWxmOwogICAgZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX3ZhbCwgX19jb21wKTsKICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAg
IF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21w
KTsKICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwg
X19yaWdodCk7CiAgICB9CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJ
dGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y
d2FyZEl0ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsK
ICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIgKSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVx
dWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAo
Kl9feCkoIF9UcCAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1
ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgX1RwLCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190
eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGRvIHsgYm9vbCAoKl9feCkoIF9Db21w
YXJlJiwgY29uc3QgX1RwJiwgY29uc3QgX1RwJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJS
T1I8IF9Db21wYXJlLCBib29sLCBfVHAsIF9UcD46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICByZXR1cm4gX19lcXVhbF9y
YW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAg
ICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFs
KSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2FyZEl0ZXJhdG9y
X2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2FyZEl0ZXJhdG9y
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZv
aWQgKCpfX3gpKCBfVHAgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZUEVfRVJST1I8IF9UcCwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfbm90X3NhbWVf
YXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBkbyB7IHZvaWQgKCpfX3gpKCBf
VHAgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfVHAgPiA6
Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xh
c3QsIF9fdmFsKTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+
CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIg
KSA9IF9Gb3J3YXJkSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIg
PiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0g
d2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9UcCAsIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwg
X1RwLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSA+
OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7Cgog
IGRvIHsgYm9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgX1RwJiwgY29uc3QgX1RwJiApID0g
X1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCBfVHAsIF9UcD46Ol9f
YmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBf
X3ZhbCwgX19jb21wKTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAq
X19pKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy
LCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5wdXRJ
dGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJdGVy
YXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8g
eyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3Bl
Y2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfT3V0
cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX091dHB1
dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25vdF9zYW1l
X2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGRvIHsgdm9pZCAoKl9feCko
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgKSA9IF9M
ZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxl
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAg
ICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx
OwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNv
cHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNz
IF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdl
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsg
dm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0
SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRl
cjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZUEVfRVJST1I8IHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfbm90X3NhbWVfYXNf
dHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgZG8geyB2b2lkICgqX194KSggX091
dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRw
dXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUmICkgPSBfU1RM
X0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoX19jb21wKCpfX2Zp
cnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsr
X19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog
ICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHko
X19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2
b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVu
MikgewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAo
X19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAg
ICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsKICB9CiAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0
YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICBfX2xlbjExID0g
X19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgX19zZWNv
bmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAg
IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0KICBlbHNlIHsK
ICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVu
MjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9f
c2Vjb25kX2N1dCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7
CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0gcm90YXRlKF9fZmly
c3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21p
ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21l
cmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sZW4xID09
IDAgfHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAy
KSB7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICBpdGVyX3N3YXAo
X19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQg
PSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIg
PSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwog
ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dl
cl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICBkaXN0
YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9CiAgZWxzZSB7CiAgICBf
X2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsK
ICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29u
ZF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4x
MSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0gcm90YXRlKF9f
Zmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVm
ZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsIF9fbGVuMjIs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZm
ZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcm90
YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl
bjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkgewogIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19idWZmZXJfZW5kOwogIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9f
YnVmZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwg
X19idWZmZXIpOwogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsK
ICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogIH0KICBl
bHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0gY29w
eShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgY29weShfX21pZGRsZSwgX19sYXN0
LCBfX2ZpcnN0KTsKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9l
bmQsIF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIHJldHVybiByb3RhdGUoX19maXJzdCwgX19taWRk
bGUsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
Mz4KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkgewogIGlm
IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIs
IF9fbGFzdDIsIF9fcmVzdWx0KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVy
biBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3Qx
OwogIC0tX19sYXN0MjsKICB3aGlsZSAodHJ1ZSkgewogICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFz
dDEpIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09
IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0
MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0t
X19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAg
ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwog
ICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVy
Z2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJz
dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1
cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2Zp
cnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFz
dDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7
CiAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAgKi0tX19yZXN1bHQg
PSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJu
IGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAtLV9f
bGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAg
ICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo
X19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAgICB9CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2Us
IGNsYXNzIF9Qb2ludGVyPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRk
bGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAg
ICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJf
c2l6ZSkgewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXpl
KSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19s
YXN0LCBfX2ZpcnN0KTsKICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsK
ICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZm
ZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9f
YnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1
dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgX0Rpc3RhbmNlIF9f
bGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICBfX2xlbjExID0gX19s
ZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgIF9fc2Vj
b25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAg
ICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgfQogICAg
ZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBhZHZhbmNlKF9fc2Vjb25k
X2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwg
X19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxl
ID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29u
ZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIs
IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg
X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAg
X19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShf
X25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAg
ICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlz
dGFuY2UsIGNsYXNzIF9Qb2ludGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19t
ZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX1BvaW50
ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9
IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJz
dCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs
IF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgfQogIGVsc2UgaWYgKF9fbGVu
MiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9f
bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwg
X19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9f
bWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgX0Rpc3RhbmNlIF9fbGVuMjIg
PSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICBfX2xlbjExID0gX19sZW4xIC8g
MjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgIF9fc2Vjb25kX2N1
dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsK
ICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNv
bmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0
LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgZGlzdGFuY2UoX19maXJz
dCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRs
ZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZl
KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAg
X19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xl
bjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf
X2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAq
LCBfRGlzdGFuY2UqKSB7CiAgX0Rpc3RhbmNlIF9fbGVuMSA9IDA7CiAgZGlzdGFuY2UoX19maXJz
dCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7CiAgZGlzdGFuY2Uo
X19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsKCiAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0
aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2lu
KCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwgX19sZW4xLCBfX2xlbjIpOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
IF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0Rpc3Rh
bmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBfRGlzdGFuY2UgX19s
ZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sZW4xKTsKICBfRGlzdGFu
Y2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBfX2xlbjIpOwoKICBf
VGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwg
X19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgX19tZXJnZV93aXRob3V0X2J1
ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwgX19jb21wKTsK
ICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9f
bGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFu
Y2UoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KaW5saW5lIHZvaWQgaW5wbGFjZV9tZXJnZShf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVjdGlvbmFs
SXRlciApID0gX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgX0JpZGlyZWN0aW9uYWxJdGVyID4gOjpfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
dm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+
Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlv
bjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5
cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9
PSBfX2xhc3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3Qp
LCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0
aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgaW5wbGFjZV9tZXJnZShfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194KSgg
X0JpZGlyZWN0aW9uYWxJdGVyICkgPSBfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIgPiA6Ol9NdXRhYmxlX0JpZGly
ZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0g
X1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9m
dW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoK
ICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICByZXR1
cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUo
X19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoKCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgaW5jbHVkZXMoX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpIHsKICBkbyB7IHZvaWQgKCpf
X3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9u
PCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBf
X3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkg
PSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpf
SW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAo
MCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46
OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBh
cmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcjE+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDIgPCAqX19m
aXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmly
c3QyKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmlyc3QxLCArK19fZmly
c3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgaW5jbHVk
ZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9f
Y29tcCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkgPSBfSW5wdXRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpfSW5wdXRJdGVyYXRvcl9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lk
ICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNh
dGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZUEVfRVJS
T1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUsIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgPjo6X190eXBl
X1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgZG8geyBi
b29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcjE+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBf
Q29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFs
dWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlw
ZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0
dXJuIGZhbHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAg
ICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICBy
ZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF91
bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICBkbyB7IHZvaWQg
KCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9u
OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIy
ICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIyID4g
OjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGls
ZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpfT3V0cHV0SXRlcmF0b3Jf
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9p
ZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5
cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkg
PSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6
dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CgoKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJhYmxlX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFs
dWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgZWxz
ZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICAr
K19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2Zp
cnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w
dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0
SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRl
cjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
dm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zp
b2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZ
UEVfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5
cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgPjo6
X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAg
ZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VS
Uk9SPCBfQ29tcGFyZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIx
Pjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFs
dWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7
CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAg
IGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsK
ICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3Qy
LCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1
dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIxICkgPSBf
SW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIxID4gOjpfSW5w
dXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNl
cHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVt
ZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gp
KCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwg
X091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBFX0VSUk9SPCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID46Ol9fdHlwZV9YX25v
dF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGRvIHsgdm9pZCAo
Kl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUg
KSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlID4gOjpfTGVzc1RoYW5Db21w
YXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCiAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3Qy
OwogICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIs
CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBh
cmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0
ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0gX0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVj
aWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlv
bGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9PdXRw
dXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0
SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194
OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NUTF9TQU1FX1RZUEVfRVJST1I8IHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgPjo6X190eXBlX1hfbm90X3NhbWVf
YXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgZG8geyBib29sICgqX194KSgg
X0NvbXBhcmUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2
YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6
dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFyZSwgYm9v
bCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5
X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQog
ICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAg
ICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICArK19fZmlyc3Qy
OwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0
MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19y
ZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIs
IGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgZG8geyB2b2lkICgqX194
KSggX0lucHV0SXRlcjEgKSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwg
X0lucHV0SXRlcjEgPiA6Ol9JbnB1dEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194
ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMiApID0g
X0lucHV0SXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMiA+IDo6X0lu
cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDAp
OwogIGRvIHsgdm9pZCAoKl9feCkoIF9PdXRwdXRJdGVyICkgPSBfT3V0cHV0SXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfT3V0cHV0SXRlciA+IDo6X091dHB1dEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZvaWQgKCpf
X3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICwg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSApID0gX1NU
TF9TQU1FX1RZUEVfRVJST1I8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46
OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVl
X3R5cGUgPjo6X190eXBlX1hfbm90X3NhbWVfYXNfdHlwZV9ZOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwoKCiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXIxPjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNp
ZmljYXRpb248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5
cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAg
ICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICsrX19maXJzdDI7
CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICBy
ZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXAp
IHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRlcmF0b3JfY29u
Y2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9f
eCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248
IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1dEl0ZXIgKSA9
IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJdGVyID4gOjpf
T3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyMT46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+
Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9hc190eXBlX1k7
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYs
IGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUm
LCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBl
JiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25f
cmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCgogIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19j
b21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7
CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChf
X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7
CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHko
X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyCnNl
dF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfSW5wdXRJdGVyMSApID0gX0lucHV0SXRl
cmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfSW5wdXRJdGVyMSA+IDo6X0lucHV0SXRlcmF0
b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsg
dm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIyICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNp
ZmljYXRpb248IF9JbnB1dEl0ZXIyID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX091dHB1
dEl0ZXIgKSA9IF9PdXRwdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9PdXRwdXRJ
dGVyID4gOjpfT3V0cHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7
IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyMT46OnZhbHVlX3R5cGUgLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcjI+Ojp2YWx1ZV90eXBlICkgPSBfU1RMX1NBTUVfVFlQRV9FUlJPUjwgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXIyPjo6dmFsdWVfdHlwZSA+OjpfX3R5cGVfWF9ub3Rfc2FtZV9h
c190eXBlX1k7IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBkbyB7IHZvaWQgKCpfX3gpKCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBlICkgPSBfTGVz
c1RoYW5Db21wYXJhYmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9y
ZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmly
c3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytf
X2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8
ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJz
dDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0Miwg
Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAg
ICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0
ZXIxICkgPSBfSW5wdXRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9JbnB1dEl0ZXIx
ID4gOjpfSW5wdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3
aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggX0lucHV0SXRlcjIgKSA9IF9JbnB1dEl0ZXJh
dG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlcjIgPiA6Ol9JbnB1dEl0ZXJhdG9y
X3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IHZv
aWQgKCpfX3gpKCBfT3V0cHV0SXRlciApID0gX091dHB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lm
aWNhdGlvbjwgX091dHB1dEl0ZXIgPiA6Ol9PdXRwdXRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSAsIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUgKSA9IF9TVExfU0FNRV9UWVBF
X0VSUk9SPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjE+Ojp2YWx1ZV90eXBl
LCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcjI+Ojp2YWx1ZV90eXBlID46Ol9f
dHlwZV9YX25vdF9zYW1lX2FzX3R5cGVfWTsgX194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGRv
IHsgYm9vbCAoKl9feCkoIF9Db21wYXJlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXIxPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyMj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJP
UjwgX0NvbXBhcmUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMT46
OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyMj46OnZhbHVl
X3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVz
dWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19y
ZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4K
X0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0KSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2Fy
ZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2Fy
ZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICBkbyB7IHZvaWQgKCpfX3gpKCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
Pjo6dmFsdWVfdHlwZSApID0gX0xlc3NUaGFuQ29tcGFyYWJsZV9jb25jZXB0X3NwZWNpZmljYXRp
b248IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlID4g
OjpfTGVzc1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9
IHdoaWxlICgwKTsKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBf
Rm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19s
YXN0KQogICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICBfX3Jlc3VsdCA9IF9fZmly
c3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0ZvcndhcmRJdGVyICkgPSBfRm9yd2Fy
ZEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyID4gOjpfRm9yd2Fy
ZEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsK
ICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElP
Tl9FUlJPUjwgX0NvbXBhcmUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
Pjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsg
X194ID0gX194OyB9IHdoaWxlICgwKTsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJu
IF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytf
X2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9f
cmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRl
ciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRl
ciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2Vw
dF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247
IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJu
IF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytf
X2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgX19y
ZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX0NvbXBhcmU+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRl
ciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRl
ciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX0NvbXBhcmUmLCBjb25zdCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9C
SU5BUllfRlVOQ1RJT05fRVJST1I8IF9Db21wYXJlLCBib29sLCB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVu
dF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7
CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAq
X19yZXN1bHQpKQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRfcGVybXV0
YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QpIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfQmlkaXJlY3Rpb25hbEl0ZXIgKSA9IF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIg
PiA6Ol9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBf
X3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlICkgPSBfTGVzc1RoYW5Db21wYXJh
YmxlX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRp
cmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUgPiA6Ol9MZXNzVGhhbkNvbXBhcmFibGVfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9f
Zmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAg
X19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1f
X2opKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2Uo
X19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9f
Zmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFs
c2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFz
cyBfQ29tcGFyZT4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKSB7CiAgZG8geyB2b2lkICgqX194KSggX0JpZGlyZWN0aW9uYWxJdGVyICkg
PSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0JpZGlyZWN0
aW9uYWxJdGVyID4gOjpfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlv
bjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7IGJvb2wgKCpfX3gpKCBfQ29tcGFyZSYs
IGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1
ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRl
cj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0NvbXBhcmUs
IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1
ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFs
dWVfdHlwZT46Ol9fYmluYXJ5X2Z1bmN0aW9uX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBm
YWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAo
X19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7
CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9f
aTsKICAgIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAg
ICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xh
c3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewog
ICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0K
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJvb2wgcHJldl9wZXJt
dXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bGFzdCkgewogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVjdGlvbmFsSXRlciApID0gX0JpZGly
ZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFsSXRl
ciA+IDo6X0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9
IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBh
cmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Jp
ZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZSA+IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0g
X19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsK
ICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCEoKi0tX19qIDwg
Kl9faSkpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJz
ZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0g
X19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBm
YWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs
YXNzIF9Db21wYXJlPgpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApIHsKICBkbyB7IHZvaWQgKCpfX3gpKCBfQmlkaXJlY3Rpb25hbEl0ZXIg
KSA9IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJl
Y3Rpb25hbEl0ZXIgPiA6Ol9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9Db21wYXJl
JiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZh
bHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJ
dGVyPjo6dmFsdWVfdHlwZSYgKSA9IF9TVExfQklOQVJZX0ZVTkNUSU9OX0VSUk9SPCBfQ29tcGFy
ZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZh
bHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2
YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJu
IGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlm
IChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9f
aTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0t
X19pOwogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAg
ICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9f
bGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7
CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVy
PgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRl
ciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3Qy
LCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIg
KSA9IF9JbnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6
X0lucHV0SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVyYXRv
cl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBi
b29sICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90
eXBlJiwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUm
ICkgPSBfU1RMX0JJTkFSWV9PUF9FUVVBTF9FUlJPUjwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZT46Ol9fYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50
X3Zpb2xhdGlvbjsgYm9vbCAoKl9feSkoIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfT1BfRVFVQUxfRVJST1I8
IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSwg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGU+OjogX19j
b25zdF9iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3kgPSBfX3k7IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxKQogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl
ciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKCpfX2ZpcnN0MSA9PSAqX19pdGVyKQog
ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0
ZT4KX0lucHV0SXRlciBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0
ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5
UHJlZGljYXRlIF9fY29tcCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9JbnB1dEl0ZXIgKSA9IF9J
bnB1dEl0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX0lucHV0SXRlciA+IDo6X0lucHV0
SXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwog
IGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25j
ZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1
aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgq
X194KSggX0JpbmFyeVByZWRpY2F0ZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8
IF9CaW5hcnlQcmVkaWNhdGUsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46
OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxKQogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl
ciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0
ZXIpKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsKfQojIDMwNTIg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIF9f
ZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAg
ICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBf
X2xhc3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQK
ICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwog
ICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0
OwogICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBf
X2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9
CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVy
MiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlcjEgX19maW5k
X2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywg
Zm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJl
ZGljYXRlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9f
bGFzdDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAg
IHdoaWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBz
ZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAg
ICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2Zp
cnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9CiAg
fQp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGly
ZWN0aW9uYWxJdGVyMj4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKQp7CiAgZG8geyB2b2lkICgqX194KSggX0JpZGlyZWN0aW9uYWxJdGVyMSAp
ID0gX0JpZGlyZWN0aW9uYWxJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9CaWRpcmVj
dGlvbmFsSXRlcjEgPiA6Ol9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVj
dGlvbmFsSXRlcjIgKSA9IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIyID4gOjpfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVp
cmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICB0eXBlZGVmIHJldmVy
c2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2
ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVy
MSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBf
UmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxh
c3QyKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVybiBfX2xhc3QxOwog
IGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNl
KCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsK
ICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFy
eVByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnLAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgZG8geyB2
b2lkICgqX194KSggX0JpZGlyZWN0aW9uYWxJdGVyMSApID0gX0JpZGlyZWN0aW9uYWxJdGVyYXRv
cl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9CaWRpcmVjdGlvbmFsSXRlcjEgPiA6Ol9CaWRpcmVj
dGlvbmFsSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUg
KDApOwogIGRvIHsgdm9pZCAoKl9feCkoIF9CaWRpcmVjdGlvbmFsSXRlcjIgKSA9IF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfQmlkaXJlY3Rpb25hbEl0ZXIy
ID4gOjpfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0g
X194OyB9IHdoaWxlICgwKTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9u
YWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rp
b25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAg
X1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2Vh
cmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJl
dHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9
IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJz
dDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCgoKCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgX0ZvcndhcmRJ
dGVyMQpmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0
MikKewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlcjEgKSA9IF9Gb3J3YXJkSXRlcmF0
b3JfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCBfRm9yd2FyZEl0ZXIxID4gOjpfRm9yd2FyZEl0ZXJh
dG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxlICgwKTsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIyICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyMiA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194
KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlJiwg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlJiApID0g
X1NUTF9CSU5BUllfT1BfRVFVQUxfRVJST1I8IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlPjo6X19iaW5hcnlfb3BlcmF0b3JfcmVxdWlyZW1lbnRf
dmlvbGF0aW9uOyBib29sICgqX195KSggY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfT1BfRVFVQUxfRVJS
T1I8IGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVf
dHlwZSwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBl
Pjo6IF9fY29uc3RfYmluYXJ5X29wZXJhdG9yX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX195ID0g
X195OyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJz
dDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNs
YXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxp
bmUgX0ZvcndhcmRJdGVyMQpmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy
ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk
SXRlcjIgX19sYXN0MiwKICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICBkbyB7
IHZvaWQgKCpfX3gpKCBfRm9yd2FyZEl0ZXIxICkgPSBfRm9yd2FyZEl0ZXJhdG9yX2NvbmNlcHRf
c3BlY2lmaWNhdGlvbjwgX0ZvcndhcmRJdGVyMSA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJl
bWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyB2b2lkICgqX194
KSggX0ZvcndhcmRJdGVyMiApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRp
b248IF9Gb3J3YXJkSXRlcjIgPiA6Ol9Gb3J3YXJkSXRlcmF0b3JfcmVxdWlyZW1lbnRfdmlvbGF0
aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgYm9vbCAoKl9feCkoIF9CaW5hcnlQ
cmVkaWNhdGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46
OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
Mj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX0JpbmFyeVBy
ZWRpY2F0ZSwgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2
YWx1ZV90eXBlLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVl
X3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9f
eDsgfSB3aGlsZSAoMCk7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEs
IF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdv
cnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m
aXJzdDIpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KYm9vbCBfX2lzX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3Bh
cmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsr
X19jaGlsZCkgewogICAgaWYgKF9fZmlyc3RbX19wYXJlbnRdIDwgX19maXJzdFtfX2NoaWxkXSkK
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKChfX2NoaWxkICYgMSkgPT0gMCkKICAgICAgKytf
X3BhcmVudDsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgpib29s
IF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU3RyaWN0V2Vha09yZGVyaW5n
IF9fY29tcCwKICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3Bh
cmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsr
X19jaGlsZCkgewogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFyZW50XSwgX19maXJzdFtfX2No
aWxkXSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDApCiAg
ICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgZG8geyB2b2lkICgqX194KSggX1Jh
bmRvbUFjY2Vzc0l0ZXIgKSA9IF9SYW5kb21BY2Nlc3NJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb248IF9SYW5kb21BY2Nlc3NJdGVyID4gOjpfUmFuZG9tQWNjZXNzSXRlcmF0b3JfcmVxdWly
ZW1lbnRfdmlvbGF0aW9uOyBfX3ggPSBfX3g7IH0gd2hpbGUgKDApOwogIGRvIHsgdm9pZCAoKl9f
eCkoIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5
cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0aW9uPCB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlID4gOjpfTGVz
c1RoYW5Db21wYXJhYmxlX3JlcXVpcmVtZW50X3Zpb2xhdGlvbjsgX194ID0gX194OyB9IHdoaWxl
ICgwKTsKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRl
cmluZz4KaW5saW5lIGJvb2wgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRl
cmluZyBfX2NvbXApCnsKICBkbyB7IHZvaWQgKCpfX3gpKCBfUmFuZG9tQWNjZXNzSXRlciApID0g
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yX2NvbmNlcHRfc3BlY2lmaWNhdGlvbjwgX1JhbmRvbUFjY2Vz
c0l0ZXIgPiA6Ol9SYW5kb21BY2Nlc3NJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9f
eCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX1N0cmljdFdlYWtPcmRl
cmluZyYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46
OnZhbHVlX3R5cGUmLCBjb25zdCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlJiApID0gX1NUTF9CSU5BUllfRlVOQ1RJT05fRVJST1I8IF9TdHJp
Y3RXZWFrT3JkZXJpbmcsIGJvb2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGU+OjpfX2JpbmFyeV9mdW5jdGlvbl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CgoKICByZXR1cm4gX19pc19oZWFwKF9fZmly
c3QsIF9fY29tcCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCkKewogIGRvIHsgdm9pZCAoKl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0Zvcndh
cmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmljYXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0Zvcndh
cmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7
CiAgZG8geyB2b2lkICgqX194KSggdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cj46OnZhbHVlX3R5cGUgKSA9IF9MZXNzVGhhbkNvbXBhcmFibGVfY29uY2VwdF9zcGVjaWZpY2F0
aW9uPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSA+
IDo6X0xlc3NUaGFuQ29tcGFyYWJsZV9yZXF1aXJlbWVudF92aW9sYXRpb247IF9feCA9IF9feDsg
fSB3aGlsZSAoMCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiB0cnVlOwoK
ICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsrX19uZXh0OyBfX25leHQg
IT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewogICAgaWYgKCpfX25leHQg
PCAqX19maXJzdCkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0dXJuIHRydWU7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CmJv
b2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewogIGRvIHsgdm9pZCAo
Kl9feCkoIF9Gb3J3YXJkSXRlciApID0gX0ZvcndhcmRJdGVyYXRvcl9jb25jZXB0X3NwZWNpZmlj
YXRpb248IF9Gb3J3YXJkSXRlciA+IDo6X0ZvcndhcmRJdGVyYXRvcl9yZXF1aXJlbWVudF92aW9s
YXRpb247IF9feCA9IF9feDsgfSB3aGlsZSAoMCk7CiAgZG8geyBib29sICgqX194KSggX1N0cmlj
dFdlYWtPcmRlcmluZyYsIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXI+Ojp2YWx1ZV90eXBlJiwgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcj46OnZhbHVlX3R5cGUmICkgPSBfU1RMX0JJTkFSWV9GVU5DVElPTl9FUlJPUjwgX1N0cmlj
dFdlYWtPcmRlcmluZywgYm9vbCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cj46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2
YWx1ZV90eXBlPjo6X19iaW5hcnlfZnVuY3Rpb25fcmVxdWlyZW1lbnRfdmlvbGF0aW9uOyBfX3gg
PSBfX3g7IH0gd2hpbGUgKDApOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJu
IHRydWU7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7
IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAo
X19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0
dXJuIHRydWU7Cn0KCgoKCgp9CiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfYWxnb3JpdGhtLmgiIDIgMwojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfc3RyaW5nLnRjYyIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9i
YXNpY19zdHJpbmcudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgX0NoYXJU
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9T
X3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBv
cyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNv
bnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf
dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1Nf
ZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBz
aXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIg
X19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAg
ICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5k
ICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9y
ZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBf
X2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19i
dWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsr
XSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVw
KiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpj
b3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0
aCA9IF9faTsKICAgICAgICB0cnkgewoKCgogICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9N
X2xlbmd0aDsKICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgp
ICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3It
Pl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJt
aW5hbDsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQog
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19i
ZWc7CiAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAg
ICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7
CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZkYXRhKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVu
KTsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICBfX3Ig
PSBfX2Fub3RoZXI7CiAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCAoLi4uKSB7CiAgICAgICAgICAgIF9fci0+
X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgICAgcmV0
dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcj4KICAgICAg
X0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICAg
IF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm
IF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAg
ICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2Uo
X19iZWcsIF9fZW5kKSk7CgogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0Fs
bG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAg
ICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0
cnkgewogICAgICAgICAgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9f
ZW5kKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKC4uLikgewogICAgICAgICAgX19yLT5fTV9k
ZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgICAgX19yLT5fTV9s
ZW5ndGggPSBfX2RuZXc7CgogICAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVw
OjpfU190ZXJtaW5hbDsKICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9B
bGxvYyYgX19hKQogICAgewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQog
ICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1JlcCog
X19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5IHsKICAgICAgICBpZiAo
X19uKQogICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwgX19u
LCBfX2MpOwogICAgICB9CiAgICAgIGNhdGNoICguLi4pIHsKICAgICAgICBfX3ItPl9NX2Rlc3Ry
b3koX19hKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9f
bjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAg
ICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBsdXMoX19zdHIuX01fcmVwKCktPl9NX2dyYWIo
X0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3IoKSksCiAgICAgICAgICAgICAgICAgX19zdHIu
Z2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpCiAg
ICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwgX0NoYXJUKCksIF9fYSks
IF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0
KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
c3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9jKCkpCiAgICB7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2lj
X3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAg
ICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2Rh
dGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpCiAg
ICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgY29uc3Qg
X0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9f
biwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0
IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgKyB0
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKHNp
emVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRh
cGx1cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5w
dXRJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29u
c3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAg
ewogICAgICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAgICAgICAgewoKICAgICAg
ICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAgICAgICAg
IF9DaGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9fc3RyLmdldF9h
bGxvY2F0b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAg
ICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
X1JlcDo6CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQogICAgewog
ICAgICBzaXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5ICsgMSkg
KiBzaXplb2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxsb2NhdGUo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X01fbGVha19o
YXJkKCkKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICBf
TV9tdXRhdGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXpl
X3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19s
ZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgpICsgX19w
b3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRfc2l6
ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8
fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9y
X3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX1JlcCogX19yID0gX1JlcDo6
X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBp
ZiAoX19wb3MpCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRh
KCksIF9NX2RhdGEoKSwgX19wb3MpOwogICAgICAgICAgICBpZiAoX19ob3dfbXVjaCkKICAgICAg
ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19s
ZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsK
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoICguLi4pIHsKICAgICAgICAgICAgX19yLT5fTV9k
aXNwb3NlKGdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQog
ICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX19y
LT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19s
ZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01f
ZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAg
ICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0
aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rl
cm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYg
KF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAg
ICAgICAgewogICAgICAgICAgZG8geyBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6ZSgpKSBfX2xl
bmd0aF9lcnJvcigiX19yZXMgPiB0aGlzLT5tYXhfc2l6ZSgpIik7IH0gd2hpbGUgKDApOwogICAg
ICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0No
YXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgp
KTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRh
KF9fdG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYgX19zKQogICAgewogICAg
ICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRf
c2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAg
ICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9h
bGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQogICAgICAgIHsKICAgICAgICAgIF9D
aGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkp
OwogICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAgICAgIH0KCiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5k
KCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihf
X3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAg
ICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9CiMgMzQ5ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcCoKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1NfY3JlYXRlKHNpemVfdCBfX2NhcGFj
aXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCiAgICB7CgoKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIGRvIHsg
aWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkgX19sZW5ndGhfZXJyb3IoIl9fY2FwYWNpdHkg
PiBfU19tYXhfc2l6ZSIpOyB9IHdoaWxlICgwKTsKCgoKCgoKCiAgICAgIHNpemVfdCBfX3NpemUg
PSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CgoKICAg
ICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2NhdGUoX19z
aXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBfX3AtPl9N
X2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUoKTsKICAg
ICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6
OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCiAg
ICB7CiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGggKyBfX3Jlcywg
X19hbGxvYyk7CiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5IHsK
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRh
dGEoKSwgX01fbGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoICguLi4pIHsKICAg
ICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAg
ICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZSBib29sCgoK
CgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBf
U19leGNlc3Nfc2xvcChzaXplX3QgX19zLCBzaXplX3QgX19yKQoKICAgIHsKICAgICAgcmV0dXJu
IDIgKiAoX19zIDw9IDE2ID8gMTYgOiBfX3MpIDwgX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5
cGUgX19uLCBfQ2hhclQgX19jKQogICAgewogICAgICBkbyB7IGlmIChfX24gPiBtYXhfc2l6ZSgp
KSBfX2xlbmd0aF9lcnJvcigiX19uID4gbWF4X3NpemUoKSIpOyB9IHdoaWxlICgwKTsKICAgICAg
c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikK
ICAgICAgICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChf
X24gPCBfX3NpemUpCiAgICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lu
cHV0SXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRl
cmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsK
ICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCks
IF9fcy5fTV9pZW5kKCkpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jgog
ICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVw
bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIgX19rMSwKICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMiwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAg
ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAgICAgICAgc2l6
ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5l
dyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19rMSwgX19rMikpOwoKICAgICAg
ICBkbyB7IGlmIChfX2RtYXggPD0gX19kbmV3KSBfX2xlbmd0aF9lcnJvcigiX19kbWF4IDw9IF9f
ZG5ldyIpOyB9IHdoaWxlICgwKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01f
aWJlZ2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgogICAg
ICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2Zm
LCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBz
aXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6
ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAgIHJldHVybiB0aGlzLT5y
ZXBsYWNlKF9NX2NoZWNrKF9fcG9zMSksIF9NX2ZvbGQoX19wb3MxLCBfX24xKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zdHIuX01fY2hlY2soX19wb3MyKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvczIsIF9fbjIpKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAg
ICBzaXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xl
biA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAg
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVn
aW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVuZCgpKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICB7CgoKCiAg
ICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0
aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgp
LCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9U
cmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X24pCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAg
ICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9f
bGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9f
cywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp
dHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAg
IGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUg
X19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFj
aXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgICByZXR1cm4gdGhpcy0+
cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3Qg
X0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry
YWl0cyxfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUg
X19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3Ry
OwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIu
YXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsK
ICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAg
ICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMu
c2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVu
ZChfX3N0cmluZ190eXBlOjpzaXplX3R5cGUoMSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5k
KF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg
c2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0g
X19pMiAtIF9faTE7CiAgICAgIHNpemVfdHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7
CiAgICAgIGRvIHsgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19u
MikgX19sZW5ndGhfZXJyb3IoIm1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0g
X19uMiIpOyB9IHdoaWxlICgwKTsKICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIp
OwoKICAgICAgaWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkg
KyBfX29mZjEsIF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBkbyB7
IGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkgX19vdXRfb2ZfcmFuZ2UoIl9fcG9zID4gdGhpcy0+
c2l6ZSgpIik7IH0gd2hpbGUgKDApOwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9f
cG9zKQogICAgICAgIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5
cGU6OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1NfZmluZChjb25zdCBfQ2hhclQqIF9fYmVnLCBjb25z
dCBfQ2hhclQqIF9fZW5kLCBfQ2hhclQgX19jKQogICAgewogICAgICByZXR1cm4gZmluZF9pZihf
X2JlZywgX19lbmQsIF9DaGFyX3RyYWl0c19tYXRjaDxfQ2hhclQsIF9UcmFpdHM+KF9fYykpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp
emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBm
aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNv
bnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0NoYXJU
KiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gdGhpcy0+
c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRh
ICsgX194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAg
IHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBl
IF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgY29uc3QgX0No
YXJUKiBfX2VuZCA9IF9fZGF0YSArIF9fc2l6ZTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19w
ID0gX1NfZmluZChfX2RhdGEgKyBfX3BvcywgX19lbmQsIF9fYyk7CiAgICAgICAgICBpZiAoX19w
ICE9IF9fZW5kKQogICAgICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsKICAgICAgICB9CiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAg
IF9fcG9zID0gc3RkOjptaW4oX19zaXplIC0gX19uICxfX3Bvcyk7CiAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywg
X19uKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAg
ICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6
ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7
CiAgICAgICAgICBzaXplX3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAgICAgIGlmIChfX3hw
b3MgPiBfX3BvcykKICAgICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAgICAgICAgZm9yICgr
K19feHBvczsgX194cG9zLS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEo
X01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsKICAg
ICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0
IF9DaGFyVCogX19lbmQgPSBfX3MgKyBfX247CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0
aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBf
X3AgPSBfU19maW5kKF9fcywgX19lbmQsIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYg
KF9fcCAhPSBfX2VuZCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAg
cmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAg
ICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAg
ICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSBf
U19maW5kKF9fcywgX19zICsgX19uLCBfTV9kYXRhKClbX19zaXplXSk7CiAgICAgICAgICAgICAg
aWYgKF9fcCAhPSBfX3MgKyBfX24pCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAg
ICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAgICAgfQogICAg
ICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBv
cyA9IF9fcG9zOwogICAgICBmb3IgKDsgX19uICYmIF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytf
X3hwb3MpCiAgICAgICAgaWYgKF9TX2ZpbmQoX19zLCBfX3MgKyBfX24sIF9NX2RhdGEoKVtfX3hw
b3NdKSA9PSBfX3MgKyBfX24pCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4g
bnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25z
dAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3Mg
PCBzaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEo
KVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5w
b3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt
PnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAgaWYg
KC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAg
ZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfU19maW5kKF9fcywgX19zICsgX19u
LCBfTV9kYXRhKClbX19zaXplXSkgPT0gX19zICsgX19uKQogICAgICAgICAgICAgICAgcmV0dXJu
IF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAg
ICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVf
dHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUg
PiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6
ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg
ICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAg
ICAgZG8geyBpZiAoX19wb3MgPiBfX3NpemUpIF9fb3V0X29mX3JhbmdlKCJfX3BvcyA+IF9fc2l6
ZSIpOyB9IHdoaWxlICgwKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXplIC0g
X19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXpl
KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z
LCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19y
c2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6
ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
CiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAg
ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUg
X19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgZG8geyBpZiAoX19wb3MxID4gX19zaXplKSBf
X291dF9vZl9yYW5nZSgiX19wb3MxID4gX19zaXplIik7IH0gd2hpbGUgKDApOwogICAgICBkbyB7
IGlmIChfX3BvczIgPiBfX29zaXplKSBfX291dF9vZl9yYW5nZSgiX19wb3MyID4gX19vc2l6ZSIp
OyB9IHdoaWxlICgwKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9f
cG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19w
b3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXpl
KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9f
cG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19y
b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFy
VCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9f
c2l6ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg
ICBiYXNpY19zdHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAg
ICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIGRvIHsgaWYgKF9fcG9zID4gX19zaXplKSBfX291dF9vZl9yYW5n
ZSgiX19wb3MgPiBfX3NpemUiKTsgfSB3aGlsZSAoMCk7CgogICAgICBzaXplX3R5cGUgX19vc2l6
ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUg
X19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xl
biA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpj
b21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAg
ICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAg
IHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlw
ZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJz
aXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNp
emUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEo
KSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9Cgp9CiMg
NDggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDQw
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDEgMwojIDM5ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAzCiMgMSAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9jKytjb25m
aWcuaCIgMSAzIDQKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5
cGUuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQKIyAyNiAiL3Vzci9p
bmNsdWRlL2N0eXBlLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMgNAoj
IDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90
eXBlcy5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzIDQKCmV4dGVybiAi
QyIgewojIDQwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Vu
ZGlhbi5oIiAxIDMgNAojIDQxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzIDQKCgoKCgoKZW51
bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgw
KSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgo
MSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwg
OCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAo
MykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8g
KCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUp
IDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50
ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBf
SVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4
KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4
KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgo
MSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8
PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEg
PDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVk
ZS9jdHlwZS5oIiAzIDQKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBl
X2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19j
b25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRlL2N0eXBl
LmgiIDMgNApleHRlcm4gaW50IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNh
bHBoYSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRocm93ICgpOwpl
eHRlcm4gaW50IGlzZGlnaXQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dlciAoaW50
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzcHJpbnQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXIg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBpc2JsYW5rIChpbnQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChp
bnQgX19jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHRvYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF90b3VwcGVy
IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDIx
MyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgi
IDEgMyA0CiMgMjE0ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzIDQKIyAyMjkgIi91c3IvaW5j
bHVkZS9jdHlwZS5oIiAzIDQKZXh0ZXJuIGludCBfX2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzYWxwaGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfX2lzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfX2lzbG93ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
X2lzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHJp
bnRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAo
aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkg
dGhyb3cgKCk7CgpleHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBf
X2wpIHRocm93ICgpOwojIDI3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAp9CiMgNDMgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDIgMwojIDYwICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAzCm5hbWVzcGFjZSBzdGQK
ewogIGV4dGVybiAiQyIgaW50IGlzYWxudW0oaW50IF9fYyk7CiAgZXh0ZXJuICJDIiBpbnQgaXNh
bHBoYShpbnQgX19jKTsKICBleHRlcm4gIkMiIGludCBpc2JsYW5rKGludCBfX2MpOwogIGV4dGVy
biAiQyIgaW50IGlzY250cmwoaW50IF9fYyk7CiAgZXh0ZXJuICJDIiBpbnQgaXNkaWdpdChpbnQg
X19jKTsKICBleHRlcm4gIkMiIGludCBpc2dyYXBoKGludCBfX2MpOwogIGV4dGVybiAiQyIgaW50
IGlzbG93ZXIoaW50IF9fYyk7CiAgZXh0ZXJuICJDIiBpbnQgaXNwcmludChpbnQgX19jKTsKICBl
eHRlcm4gIkMiIGludCBpc3B1bmN0KGludCBfX2MpOwogIGV4dGVybiAiQyIgaW50IGlzc3BhY2Uo
aW50IF9fYyk7CiAgZXh0ZXJuICJDIiBpbnQgaXN1cHBlcihpbnQgX19jKTsKICBleHRlcm4gIkMi
IGludCBpc3hkaWdpdChpbnQgX19jKTsKICBleHRlcm4gIkMiIGludCB0b2xvd2VyKGludCBfX2Mp
OwogIGV4dGVybiAiQyIgaW50IHRvdXBwZXIoaW50IF9fYyk7Cn0KIyA0MSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoK
ICB0ZW1wbGF0ZTx1bnNpZ25lZCBpbnQgX051bSwgaW50IF9TaGlmdCA9IChzaXplb2YodW5zaWdu
ZWQpICogOCkvMiwKICAgICAgICAgICB1bnNpZ25lZCBpbnQgX01hc2sgPSAofjB1ID4+IF9TaGlm
dCkgPgogICAgc3RydWN0IF9Db3VudF9vbmVzOwoKCgogIHRlbXBsYXRlPHVuc2lnbmVkIGludCBf
TnVtLCB1bnNpZ25lZCBpbnQgX01hc2s+CiAgICBzdHJ1Y3QgX0NvdW50X29uZXM8X051bSwgMCwg
X01hc2s+CiAgICB7CiAgICAgIGVudW0KICAgICAgewogICAgICAgIF9NX2NvdW50ID0gX051bQog
ICAgICB9OwogICAgfTsKCiAgdGVtcGxhdGU8dW5zaWduZWQgaW50IF9OdW0sIGludCBfU2hpZnQs
IHVuc2lnbmVkIGludCBfTWFzaz4KICAgIHN0cnVjdCBfQ291bnRfb25lcwogICAgewogICAgICBl
bnVtCiAgICAgIHsKICAgICAgICBfTV9oYWxmY291bnQgPSBfQ291bnRfb25lczxfTnVtLCBfU2hp
ZnQvMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX01hc2teKCh+X01hc2sp
Pj4oX1NoaWZ0LzIpKSkgPjo6X01fY291bnQsCiAgICAgICAgX01fY291bnQgPSAoX01faGFsZmNv
dW50Jl9NYXNrKSArICgoX01faGFsZmNvdW50Pj5fU2hpZnQpJl9NYXNrKQogICAgICB9OwogICAg
fTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY2xhc3MgYWxsb2NhdG9yOwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPiBjbGFzcyB2ZWN0b3I7CiAgY2xhc3MgbG9j
YWxlOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz
c3BhY2UoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0No
YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJULCBjb25z
dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUm
KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVu
Y3QoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFy
VCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJULCBjb25z
dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFy
VAogICAgdG9sb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jh
c2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxh
dGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBjbGFzcyBjdHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2U7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgog
ICAgY2xhc3MgY29kZWN2dDsKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwg
bWJzdGF0ZV90PjsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4
dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgbnVtX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1
bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3RfYnluYW1lOwoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZTsKICB0ZW1wbGF0
ZTw+IGNsYXNzIGNvbGxhdGU8Y2hhcj47CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBj
bGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxf
Q2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFz
cyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1
dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsKCgogIGNs
YXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X2dldDsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3Q7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBt
b25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCgogIGNsYXNzIGxvY2FsZQogIHsKICBw
dWJsaWM6CgogICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZh
Y2V0OwogICAgY2xhc3MgaWQ7CiAgICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3MgX0lt
cGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0Zh
Y2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxl
JikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBub25lID0gMDsKICAgIHN0
YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDEgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRl
Z29yeSBudW1lcmljID0gMSA8PCAxOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUg
PSAxIDw8IDI7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9IDEgPDwgMzsKICAgIHN0
YXRpYyBjb25zdCBjYXRlZ29yeSBtb25ldGFyeSA9IDEgPDwgNDsKICAgIHN0YXRpYyBjb25zdCBj
YXRlZ29yeSBtZXNzYWdlcyA9IDEgPDwgNTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwg
PSAoY29sbGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkgfAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtZXJpYyB8IHRpbWUgfCBtZXNzYWdlcyk7CgoKICAgIGlubGlu
ZQogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAgICBpbmxpbmUKICAgIGxvY2FsZShjb25zdCBsb2Nh
bGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFy
KiBfX3N0ZF9uYW1lKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBjb25zdCBj
aGFyKiBfX3N0ZF9uYW1lLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2Fs
ZSYgX19vdGhlciwgY29uc3QgbG9jYWxlJiBfX29uZSwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhl
ciwgX0ZhY2V0KiBfX2YpOwoKICAgIGlubGluZQogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAg
Y29uc3QgbG9jYWxlJgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3co
KTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21i
aW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcik7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0
OwoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0
aHJvdyAoKTsKCiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9f
b3RoZXIpIGNvbnN0IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19v
dGhlcikpOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoK
CiAgICBzdGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGlj
IGNvbnN0IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01f
aW1wbDsKCgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwq
IF9TX2dsb2JhbDsKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2NhdGVnb3JpZXNfbnVtID0gX0Nv
dW50X29uZXM8YWxsPjo6X01fY291bnQ7CiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2ZhY2V0c19u
dW0gPSAyNjsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhyb3coKTsKCiAgICBz
dGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgeyBpZiAoIV9TX2NsYXNz
aWMpIGNsYXNzaWMoKTsgfQoKICAgIHN0YXRpYyBpbnQKICAgIF9TX25vcm1hbGl6ZV9jYXRlZ29y
eShpbnQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJsaWM6CgogICAg
dHlwZWRlZiB2ZWN0b3I8ZmFjZXQqLCBhbGxvY2F0b3I8ZmFjZXQqPiA+IF9fdmVjX2ZhY2V0Owog
ICAgdHlwZWRlZiB2ZWN0b3I8c3RyaW5nLCBhbGxvY2F0b3I8c3RyaW5nPiA+IF9fdmVjX3N0cmlu
ZzsKCgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZh
Y2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9G
YWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7CiAgICBf
X3ZlY19mYWNldCogX01fZmFjZXRzOwogICAgX192ZWNfc3RyaW5nKiBfTV9jYXRlZ29yeV9uYW1l
czsKICAgIGJvb2wgX01faGFzX25hbWU7CiAgICBzdHJpbmcgX01fbmFtZTsKICAgIHN0YXRpYyBj
b25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxv
Y2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6
OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCog
Y29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9T
X2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRf
bWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1Nf
ZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNl
KCkgdGhyb3coKQogICAgeyArK19NX3JlZmVyZW5jZXM7IH0KCiAgICBpbmxpbmUgdm9pZAogICAg
X01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsKICAgICAgaWYgKF9NX3JlZmVyZW5j
ZXMtLSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGRlbGV0ZSB0
aGlzOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2goLi4uKSB7CiAgICAgICAgICB9CiAgICAg
ICAgfQogICAgfQoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKGNv
bnN0IF9JbXBsJiwgY29uc3Qgc3RyaW5nJiwgY2F0ZWdvcnksIHNpemVfdCk7CiAgICBfSW1wbChz
aXplX3QsIHNpemVfdCwgYm9vbCBfX2hhc19uYW1lID0gZmFsc2UsIHN0cmluZyBfX25hbWUgPSAi
KiIpOwogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdv
cmllcyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2Nh
dGVnb3J5KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsKCiAgICB2b2lk
CiAgICBfTV9yZXBsYWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOwoK
ICAgIHZvaWQKICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGZhY2V0Kik7
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBpbmxpbmUgdm9pZAogICAgICBf
TV9mYWNldF9pbml0KF9GYWNldCogX19mYWNldCkKICAgICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZf
RmFjZXQ6OmlkLCBfX2ZhY2V0KTsgfQoKICAgIHZvaWQKICAgIF9NX2NvbnN0cnVjdF9jb2xsYXRl
KGNvbnN0IGNoYXIqKTsKCiAgICB2b2lkCiAgICBfTV9jb25zdHJ1Y3RfY3R5cGUoY29uc3QgY2hh
ciopOwoKICAgIHZvaWQKICAgIF9NX2NvbnN0cnVjdF9tb25ldGFyeShjb25zdCBjaGFyKik7Cgog
ICAgdm9pZAogICAgX01fY29uc3RydWN0X251bWVyaWMoY29uc3QgY2hhciopOwoKICAgIHZvaWQK
ICAgIF9NX2NvbnN0cnVjdF90aW1lKGNvbnN0IGNoYXIqKTsKCiAgICB2b2lkCiAgICBfTV9jb25z
dHJ1Y3RfbWVzc2FnZXMoY29uc3QgY2hhciopOwoKICAgIGNhdGVnb3J5CiAgICBfTV9ub3JtYWxp
emVfY2F0ZWdvcnlfbmFtZXMoY29uc3Qgc3RyaW5nJiwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoK
ICBsb2NhbGU6OmxvY2FsZSgpIHRocm93KCkKICB7CiAgICBfU19pbml0aWFsaXplKCk7CiAgICAo
X01faW1wbCA9IF9TX2dsb2JhbCktPl9NX2FkZF9yZWZlcmVuY2UoKTsKICB9CgogIGxvY2FsZTo6
bG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKQogIHsgKF9NX2ltcGwgPSBfX290
aGVyLl9NX2ltcGwpLT5fTV9hZGRfcmVmZXJlbmNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQq
IF9fZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAx
KTsKICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mKTsKICAg
ICAgX01faW1wbC0+X01faGFzX25hbWUgPSBmYWxzZTsKICAgICAgX01faW1wbC0+X01fbmFtZSA9
ICIqIjsKICAgIH0KCiAgbG9jYWxlOjp+bG9jYWxlKCkgdGhyb3coKQogIHsgX01faW1wbC0+X01f
cmVtb3ZlX3JlZmVyZW5jZSgpOyB9CgoKICBjbGFzcyBsb2NhbGU6OmZhY2V0CiAgewogICAgZnJp
ZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwoKICBwcm90
ZWN0ZWQ6CiAgICBleHBsaWNpdAogICAgZmFjZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRocm93KCk7
CgogICAgdmlydHVhbAogICAgfmZhY2V0KCkgeyB9OwoKICBwcml2YXRlOgogICAgc2l6ZV90IF9N
X3JlZmVyZW5jZXM7CgogICAgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCk7Cgog
ICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgZmFjZXQoY29u
c3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgZmFjZXQmKTsKICB9OwoK
CgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJp
ZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAg
ICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsK
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFz
X2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93ICgpOwogIHB1YmxpYzoKICAgIGlkKCkgeyB9Owog
IHByaXZhdGU6CgoKCiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsKCgogICAgc3RhdGljIHNp
emVfdCBfU19oaWdod2F0ZXI7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7Cgog
ICAgaWQoY29uc3QgaWQmKTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBj
b25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUm
IF9fbG9jKSB0aHJvdygpOwoKfQojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jh
c2UuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5o
IiAzCm5hbWVzcGFjZSBzdGQgewoKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2Zt
dGZsYWdzX2VuZCA9IDEgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRv
ciYoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3Nf
Rm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsg
fQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwg
X0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxp
bnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZs
YWdzCiAgb3BlcmF0b3JeKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7
IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0
PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3Nf
Rm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwg
X19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdz
JiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoK
ICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBf
SW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5l
IF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcn4oX0lvc19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4g
X0lvc19GbXRmbGFncyh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09w
ZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2VuZCA9IDEgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3Nf
T3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19i
KQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGlj
X2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfChf
SW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVu
bW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9Cgog
IGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9z
X09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4o
X19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUK
ICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyBy
ZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0
b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9f
YSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXj0oX0lv
c19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2Eg
XiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcn4oX0lvc19PcGVubW9k
ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsg
fQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAxIDw8IDE2IH07
CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lv
c19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50Pihf
X2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAg
b3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4g
X0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19i
KSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19h
LCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxp
bnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3Rh
dGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsg
cmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0
b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2Eg
PSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19J
b3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19i
OyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkK
ICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51
bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxIDw8IDE2IH07CgoKICBjbGFz
cyBpb3NfYmFzZQogIHsKICBwdWJsaWM6CgoKICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhj
ZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShj
b25zdCBzdHJpbmcmIF9fc3RyKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmZhaWx1cmUoKTsKCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7CgogICAg
cHJpdmF0ZToKICAgICAgZW51bSB7IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAgY2hhciBfTV9u
YW1lW19NX2J1ZnNpemVdOwoKICAgIH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRm
bGFnczsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10ZmxhZ3MoX19p
b3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0g
Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
Zml4ZWQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZml4ZWQpOwogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIGludGVybmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVy
bmFsKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxh
Z3M6Ol9TX2xlZnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZtdGZsYWdzKF9f
aW9zX2ZsYWdzOjpfU19vY3QpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10
ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBz
Y2llbnRpZmljID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOwogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3No
b3diYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1Nfc2hvd3BvaW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93
cG9zID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lwd3MpOwogICAg
c3RhdGljIGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf
dW5pdGJ1Zik7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10ZmxhZ3Mo
X19pb3NfZmxhZ3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRq
dXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19i
YXNlZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1NfZmxvYXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRl
IGlvc3RhdGU7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9z
X2ZsYWdzOjpfU19iYWRiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0gaW9z
dGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGZh
aWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0YXRpYyBjb25z
dCBpb3N0YXRlIGdvb2RiaXQgPSBpb3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1v
ZGUgb3Blbm1vZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1vZGUoX19p
b3NfZmxhZ3M6Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRlID0gb3Blbm1v
ZGUoX19pb3NfZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5
ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1v
ZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwogICAgc3RhdGljIGNvbnN0IG9w
ZW5tb2RlIG91dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAgc3RhdGljIGNv
bnN0IG9wZW5tb2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsKCgog
ICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGly
IGJlZyA9IHNlZWtkaXIoMCk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPSBzZWVrZGly
KDEpOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsKIyAyMTQgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBlbnVtIGV2ZW50
CiAgICB7CiAgICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9ldmVudCwKICAgICAgY29weWZt
dF9ldmVudAogICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVudF9jYWxsYmFjaykgKGV2ZW50
LCBpb3NfYmFzZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0ZXJfY2FsbGJhY2soZXZlbnRf
Y2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0ZWQ6CgogICAgc3RyZWFtc2l6
ZSBfTV9wcmVjaXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOwogICAgZm10ZmxhZ3MgX01f
ZmxhZ3M7CgoKCiAgICBzdHJ1Y3QgX0NhbGxiYWNrX2xpc3QKICAgIHsKCiAgICAgIF9DYWxsYmFj
a19saXN0KiBfTV9uZXh0OwogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47CiAg
ICAgIGludCBfTV9pbmRleDsKICAgICAgaW50IF9NX3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNr
X2xpc3QoaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4LAogICAgICAg
ICAgICAgICAgICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYikKICAgICAgOiBfTV9uZXh0KF9fY2Ip
LCBfTV9mbihfX2ZuKSwgX01faW5kZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsgfQoKICAg
ICAgdm9pZAogICAgICBfTV9hZGRfcmVmZXJlbmNlKCkgeyArK19NX3JlZmNvdW50OyB9CgogICAg
ICBpbnQKICAgICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9NX3JlZmNvdW50LS07
IH0KICAgIH07CgogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7CgogICAgdm9pZAog
ICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhyb3coKTsKCiAgICB2b2lkCiAgICBf
TV9kaXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsKCgogICAgc3RydWN0IF9Xb3JkcwogICAgewogICAg
ICB2b2lkKiBfTV9wd29yZDsKICAgICAgbG9uZyBfTV9pd29yZDsKICAgIH07CgogICAgc3RhdGlj
IGNvbnN0IGludCBfU19sb2NhbF93b3JkcyA9IDg7CiAgICBfV29yZHMgX01fd29yZF9hcnJheVtf
U19sb2NhbF93b3Jkc107CiAgICBfV29yZHMgX01fZHVtbXk7CiAgICBfV29yZHMqIF9NX3dvcmRz
OwogICAgaW50IF9NX3dvcmRfbGltaXQ7CgogICAgX1dvcmRzJgogICAgX01fZ3Jvd193b3Jkcyhp
bnQgX19pbmRleCk7CgoKICAgIGxvY2FsZSBfTV9pb3NfbG9jYWxlOwoKICAgIHZvaWQKICAgIF9N
X2luaXQoKTsKCiAgcHVibGljOgoKCgoKCiAgICBjbGFzcyBJbml0CiAgICB7CiAgICAgIGZyaWVu
ZCBjbGFzcyBpb3NfYmFzZTsKICAgIHB1YmxpYzoKICAgICAgSW5pdCgpOwogICAgICB+SW5pdCgp
OwogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0OwogICAgICBi
b29sIF9NX3N5bmNlZF93aXRoX3N0ZGlvOwogICAgICBmaWxlYnVmKiBfTV9jb3V0OwogICAgICBm
aWxlYnVmKiBfTV9jaW47CiAgICAgIGZpbGVidWYqIF9NX2NlcnI7CgoKCgoKICAgIH07CgoKICAg
IGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFnczsgfQoK
ICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAg
ICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgPSBfX2ZtdGZsOwog
ICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZt
dGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAg
ICAgIF9NX2ZsYWdzIHw9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBp
bmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3MgX19tYXNr
KQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyAm
PSB+X19tYXNrOwogICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7CiAgICAgIHJl
dHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRmKGZtdGZsYWdzIF9f
bWFzaykgeyBfTV9mbGFncyAmPSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAg
IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKICAgIGlubGluZSBz
dHJlYW1zaXplCiAgICBwcmVjaXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAgICB7CiAgICAgIHN0
cmVhbXNpemUgX19vbGQgPSBfTV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNpc2lvbiA9IF9fcHJl
YzsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUK
ICAgIHdpZHRoKHN0cmVhbXNpemUgX193aWRlKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xk
ID0gX01fd2lkdGg7CiAgICAgIF9NX3dpZHRoID0gX193aWRlOwogICAgICByZXR1cm4gX19vbGQ7
CiAgICB9CgogICAgc3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9
IHRydWUpOwoKCiAgICBsb2NhbGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAg
IGlubGluZSBsb2NhbGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7
IH0KCgogICAgc3RhdGljIGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAgICBpbmxpbmUgbG9u
ZyYKICAgIGl3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4
IDwgX01fd29yZF9saW1pdCkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3Jkc1tfX2l4
XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01faXdvcmQ7CiAg
ICB9CgogICAgaW5saW5lIHZvaWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9X
b3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQogICAgICAgICAgICAgICAgICAg
ICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJu
IF9fd29yZC5fTV9wd29yZDsKICAgIH0KCgogICAgfmlvc19iYXNlKCk7CgogIHByb3RlY3RlZDoK
ICAgIGlvc19iYXNlKCk7CgoKICBwcml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2Um
KTsKCiAgICBpb3NfYmFzZSYKICAgIG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9OwoK
CiAgaW5saW5lIGlvc19iYXNlJgogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg
IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9
CgogIGlubGluZSBpb3NfYmFzZSYKICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNl
OwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7
CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jh
c2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3Bvcyhpb3NfYmFzZSYgX19i
YXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBfX2Jh
c2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4g
X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3NraXB3cyhpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNl
OwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4g
X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVuaXRidWYoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jh
c2UpCiAgewogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6
OmFkanVzdGZpZWxkKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNl
JgogIGxlZnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6
bGVmdCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu
c2V0Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4g
X19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsK
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaGV4KGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJh
c2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG9j
dChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlv
c19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9z
X2Jhc2UmCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3Nf
YmFzZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRmaWVs
ZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCn0KIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9zdHJlYW1idWYuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfc3RyZWFtYnVmLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYt
cGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMgNAojIDM4ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAzOSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAzCiMgNDAgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgNDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RhdGlj
IHN0cmVhbXNpemUKICAgIF9TX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJh
aXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYKICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
VHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpp
bnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9z
X3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90
eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+
IF9fc3RyZWFtYnVmX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaW9zPGNoYXJfdHlw
ZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5
cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcl90
eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9y
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbWJ1Zl9p
dGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZyaWVuZCBzdHJlYW1zaXpl
CiAgICAgIF9TX2NvcHlfc3RyZWFtYnVmczw+KGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190
eXBlPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq
IF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6CgoKCgoK
CiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplOwoK
CiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9idWZfdW5p
ZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJfdHlwZSog
X01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90eXBlKiBf
TV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJfdHlwZSog
X01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgogICAgICBs
b2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsKCgog
ICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2J1Zl9mY3R5cGU7CgoKCgoKCiAgICAgIGludF90
eXBlIF9NX3BiYWNrX3NpemU7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2s7CiAgICAgIGNoYXJf
dHlwZSogX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfZW5kX3Nh
dmU7CiAgICAgIGJvb2wgX01fcGJhY2tfaW5pdDsKCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJh
Y2tfY3JlYXRlKCkKICAgICAgewogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkKICAgICAgICAg
IHsKICAgICAgICAgICAgaW50X3R5cGUgX19kaXN0ID0gX01faW5fZW5kIC0gX01faW5fY3VyOwog
ICAgICAgICAgICBpbnRfdHlwZSBfX2xlbiA9IG1pbihfTV9wYmFja19zaXplLCBfX2Rpc3QpOwog
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3VyLCBfX2xlbik7
CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX01faW5fY3VyOwogICAgICAgICAgICBf
TV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9w
YmFjaywgX01fcGJhY2ssIF9NX3BiYWNrICsgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19p
bml0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgfQoKCgoKICAgICAgdm9pZAogICAgICBfTV9w
YmFja19kZXN0cm95KCkKICAgICAgewogICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAg
ICAgewoKICAgICAgICAgICAgaW50X3R5cGUgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJh
Y2s7CgoKICAgICAgICAgICAgaW50X3R5cGUgX19vZmZfZW5kID0gMDsKICAgICAgICAgICAgaW50
X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9lbmQgLSBfTV9wYmFjazsKICAgICAgICAgICAgaW50
X3R5cGUgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVmOwogICAgICAgICAg
ICBpZiAoX19wYmFja19sZW4gPiBfX3NhdmVfbGVuKQogICAgICAgICAgICAgIF9fb2ZmX2VuZCA9
IF9fcGJhY2tfbGVuIC0gX19zYXZlX2xlbjsKCiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVm
LCBfTV9wYmFja19jdXJfc2F2ZSArIF9fb2ZmX2N1ciwKICAgICAgICAgICAgICAgICAgICAgICBf
TV9wYmFja19lbmRfc2F2ZSArIF9fb2ZmX2VuZCk7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9z
YXZlID0gX19udWxsOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9fbnVsbDsKICAg
ICAgICAgICAgX01fcGJhY2tfaW5pdCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICB9CiMgMTgz
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCiAgICAg
IHZvaWQKICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAg
IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOwoKICAgICAgICBfTV9vdXRf
Y3VyICs9IF9fbjsKICAgICAgICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAg
ICAgICBfTV9pbl9jdXIgKz0gX19uOwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2Vu
ZCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAg
ICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAg
ICAgICAgIH0KICAgICAgfQojIDIwNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9zdHJlYW1idWYuaCIgMwogICAgICB2b2lkCiAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKHZv
aWQpCiAgICAgIHsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAg
IHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1Zik7CiAgICAgICAgaWYgKF9NX21vZGUg
JiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYsIF9NX2J1Zik7CiAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2RldGVybWluYXRlKG9mZl90eXBlIF9fb2Zm
KQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47
CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAg
ICBpZiAoX190ZXN0aW4pCiAgICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVm
LCBfTV9idWYsIF9NX2J1ZiArIF9fb2ZmKTsKICAgICAgICAgICAgaWYgKCFfX3Rlc3RvdXQpCiAg
ICAgICAgICAgICAgX01fYnVmX3NpemUgPSBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oX19vZmYpOwog
ICAgICAgICAgfQogICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgICB0aGlzLT5zZXRwKF9N
X2J1ZiwgX01fYnVmICsgX19vZmYpOwoKICAgICAgfQoKICAgICAgYm9vbAogICAgICBfTV9pc19p
bmRldGVybWluYXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBib29sIF9fcmV0ID0gZmFsc2U7CiAg
ICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pCiAgICAgICAgICBfX3JldCA9IF9NX2lu
X2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09IF9NX2luX2VuZDsKICAgICAgICBpZiAo
X01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICBfX3JldCA9IF9NX291dF9iZWcgPT0g
X01fb3V0X2N1ciAmJiBfTV9vdXRfY3VyID09IF9NX291dF9lbmQ7CiAgICAgICAgcmV0dXJuIF9f
cmV0OwogICAgICB9CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfc3RyZWFt
YnVmKCkKICAgICAgewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAgICAgX01f
YnVmX3NpemUgPSAwOwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAgX01fbW9k
ZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgICBfTV9idWZfZmN0eXBlID0gX19udWxs
OwogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwoKICAgICAgfQoKCiAgICAgIGxv
Y2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAg
bG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7
CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9j
KCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAg
ICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9j
YWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYo
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRi
dWYoX19zLCBfX24pOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBl
IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAg
eyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBv
c190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkK
ICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQK
ICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1z
aXplCiAgICAgIGluX2F2YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAg
ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7
CiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNr
X2N1cl9zYXZlOwogICAgICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9j
dXIgLSBfTV9wYmFjazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9fcGJh
Y2tfbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9f
cmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0KICAgICAgICBl
bHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dtYW55YygpOwogICAgICAgIHJldHVybiBf
X3JldDsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewogICAg
ICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVybiAo
dGhpcy0+c2J1bXBjKCkgPT0gX19lb2YgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAgICB9
CgogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBlCiAgICAgIHNn
ZXRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9j
dXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6dG9faW50X3R5cGUoKmdwdHIoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0
aGlzLT51bmRlcmZsb3coKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0
cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAg
ICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CgoKICAgICAgaW50X3R5cGUKICAg
ICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0
YygpOwoKCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAg
c3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1
Zl9zaXplKDApLAogICAgICBfTV9idWZfc2l6ZV9vcHQoc3RhdGljX2Nhc3Q8aW50X3R5cGU+KDgx
OTIpKSwgX01fYnVmX3VuaWZpZWQoZmFsc2UpLAogICAgICBfTV9pbl9iZWcoMCksIF9NX2luX2N1
cigwKSwgX01faW5fZW5kKDApLCBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLAogICAgICBf
TV9vdXRfZW5kKDApLCBfTV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2Nh
bGUobG9jYWxlKCkpLAogICAgICBfTV9idWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19z
aXplKDEpLCBfTV9wYmFjayhfX251bGwpLAogICAgICBfTV9wYmFja19jdXJfc2F2ZShfX251bGwp
LCBfTV9wYmFja19lbmRfc2F2ZShfX251bGwpLCBfTV9wYmFja19pbml0KGZhbHNlKQogICAgICB7
IF9NX2J1Zl9mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4odGhpcy0+Z2V0bG9jKCkp
OyB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBlYmFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX2lu
X2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBncHRyKCkgY29uc3QgeyByZXR1cm4gX01f
aW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4g
X01faW5fZW5kOyB9CgogICAgICB2b2lkCiAgICAgIGdidW1wKGludCBfX24pIHsgX01faW5fY3Vy
ICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFy
X3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAgICB7CiAgICAgICAgX01faW5f
YmVnID0gX19nYmVnOwogICAgICAgIF9NX2luX2N1ciA9IF9fZ25leHQ7CiAgICAgICAgX01faW5f
ZW5kID0gX19nZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9f
Z2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwg
aW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBwYmFzZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcHB0cigp
IGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZXBw
dHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5kOyB9CgogICAgICB2b2lkCiAgICAgIHBidW1w
KGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0cChj
aGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpCiAgICAgIHsKICAgICAgICBfTV9v
dXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5k
OwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KSAmJiBfX3BiZWcgJiYgX19w
ZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0OwoKCgoKCiAg
ICAgICAgX01fYnVmX3NpemUgPSBtYXgoX01fYnVmX3NpemUsIHN0YXRpY19jYXN0PGludF90eXBl
PihfX3BlbmQgLSBfX3BiZWcpKTsKICAgICAgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAg
aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgICAgewogICAgICAgIF9NX2J1Zl9sb2NhbGVf
aW5pdCA9IHRydWU7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAg
IHsKICAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAgICAgICAgX01fYnVmX2Zj
dHlwZSA9ICZ1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfTV9idWZfbG9jYWxlKTsKICAgICAgICAg
fQogICAgICB9CgoKICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLF9UcmFp
dHM+KgogICAgICBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSkKICAgICAgeyByZXR1cm4g
dGhpczsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9mZl90eXBlLCBp
b3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3Nf
YmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlw
ZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3MocG9zX3R5cGUs
CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jh
c2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAg
dmlydHVhbCBpbnQKICAgICAgc3luYygpIHsgcmV0dXJuIDA7IH0KCgogICAgICB2aXJ0dWFsIHN0
cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQoKICAgICAgdmlydHVhbCBz
dHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoK
ICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQogICAgICB7IHJldHVybiB0
cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdWZsb3co
KQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg
ICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0aGlzLT51bmRlcmZsb3coKSA9PSBfX3JldDsKICAgICAg
ICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5k
OwoKICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAgewog
ICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsK
ICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmllZCAm
JiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICArK19NX291dF9jdXI7CiAg
ICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCBp
bnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAg
ICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFt
c2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsK
CiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFpdHNf
dHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQojIDUwMCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgcHJp
dmF0ZToKICAgICAgYmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKTsKCiAg
ICAgIF9fc3RyZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0cmVhbWJ1Zl90
eXBlJik7CgogICAgfTsKCn0KIyA0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv
cy5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5o
IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAxIDMK
IyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAzCm5hbWVz
cGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCgoKCiAgICA6IHB1YmxpYyBvdXRwdXRfaXRl
cmF0b3IKCiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICAgIGlubGlu
ZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSB0aHJvdyAoKQog
ICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoZmFsc2UpIHsgfQoKICAgICAg
b3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQogICAgICA6
IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKGZhbHNlKSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRl
cmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAgICAgIG9zdHJlYW1idWZfaXRl
cmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0K
CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgYm9v
bAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX2ZhaWxlZDsg
fQoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29s
IF9NX2ZhaWxlZDsKIyA5NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRl
ci5oIiAzCiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBpbmxpbmUgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JgogICAg
b3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcj0oX0NoYXJUIF9f
YykKICAgIHsKICAgICAgaWYgKCFfTV9mYWlsZWQgJiYKICAgICAgICAgIF9UcmFpdHM6OmVxX2lu
dF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksX1RyYWl0czo6ZW9mKCkpKQogICAgICBfTV9mYWls
ZWQgPSB0cnVlOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMTM1ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDMKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQs
IGNsYXNzIF9UcmFpdHM+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1Ymxp
YyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6
b2ZmX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewog
ICAgcHVibGljOgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Omlu
dF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZpdGVyX3R5cGU7CgogICAgICBpc3RyZWFt
YnVmX2l0ZXJhdG9yKCkgdGhyb3coKQogICAgICA6IF9NX2lzdHJlYW1idWYoX19udWxsKSwgX01f
YygtMikgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0
aHJvdygpCiAgICAgIDogX01faXN0cmVhbWJ1ZihfX3MucmRidWYoKSksIF9NX2MoLTIpIHsgfQoK
ICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdygpCiAg
ICAgIDogX01faXN0cmVhbWJ1ZihfX3MpLCBfTV9jKC0yKSB7IH0KCgoKCiAgICAgIGNoYXJfdHlw
ZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7CgogICAgICAgIGNoYXJfdHlwZSBfX3Jl
dDsKICAgICAgICBpZiAoX01faXN0cmVhbWJ1ZiAmJiBfTV9jICE9IHN0YXRpY19jYXN0PGludF90
eXBlPigtMikpCiAgICAgICAgICBfX3JldCA9IF9NX2M7CiAgICAgICAgZWxzZSBpZiAoX01faXN0
cmVhbWJ1ZikKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9p
c3RyZWFtYnVmLT5zZ2V0YygpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHN0YXRp
Y19jYXN0PGNoYXJfdHlwZT4odHJhaXRzX3R5cGU6OmVvZigpKTsKICAgICAgICByZXR1cm4gX19y
ZXQ7CiAgICAgIH0KCiAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYKICAgICAgb3BlcmF0b3Ir
KygpCiAgICAgIHsKICAgICAgICBpZiAoX01faXN0cmVhbWJ1ZikKICAgICAgICAgIF9NX2lzdHJl
YW1idWYtPnNidW1wYygpOwogICAgICAgIF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgIH0KCgoKCgogICAgICBjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUKICAgICAgb3Bl
cmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBpZiAoX01faXN0cmVhbWJ1ZikKICAgICAgICAg
IF9NX2MgPSBfTV9pc3RyZWFtYnVmLT5zYnVtcGMoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgIH0KCgogICAgICBib29sCiAgICAgIGVxdWFsKGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlw
ZSYgX19iKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSAhX01faXN0cmVhbWJ1ZiB8fCBfTV9pc3RyZWFt
YnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIGJvb2wgX19iZW9mID0gIV9fYi5fTV9pc3Ry
ZWFtYnVmCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX2IuX01faXN0cmVhbWJ1Zi0+c2dldGMo
KSA9PSBfX2VvZjsKICAgICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3Ro
aXNlb2YgJiYgIV9fYmVvZikpOwogICAgICB9CgoKCgogICAgICBib29sCiAgICAgIGVxdWFsKGNv
bnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYgX19iKSBjb25zdAogICAgICB7CiAgICAgICAgaW50
X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNlb2Yg
PSAhX01faXN0cmVhbWJ1ZiB8fCBfTV9pc3RyZWFtYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAg
ICAgIGJvb2wgX19iZW9mID0gIV9fYi5fTV9pc3RyZWFtYnVmCiAgICAgICAgICAgICAgICAgICAg
ICB8fCBfX2IuX01faXN0cmVhbWJ1Zi0+c2dldGMoKSA9PSBfX2VvZjsKICAgICAgICByZXR1cm4g
KF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwogICAgICB9
CgoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBzdHJlYW1idWZfdHlwZSogX01faXN0cmVhbWJ1
ZjsKICAgICAgaW50X3R5cGUgX01fYzsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0
IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAg
ICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsg
cmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25z
dCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJu
ICFfX2EuZXF1YWwoX19iKTsgfQoKfQojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3MgOiBwdWJsaWMg
aW9zX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg
X1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlw
ZV90eXBlOwoKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19vc3Ry
ZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9p
dGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJUPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19p
c3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByaXZhdGU6CiAgICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBjaGFyX3R5cGUgX01fZmls
bDsKICAgICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CgogICAgcHJvdGVjdGVkOgogICAgICBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwogICAgICBpb3N0YXRl
IF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2lvc19m
Y3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAgY29u
c3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CgogICAgICBpbmxpbmUg
Y29uc3QgX19jdHlwZV90eXBlKgogICAgICBfTV9nZXRfZmN0eXBlX2lvcyh2b2lkKQogICAgICB7
IHJldHVybiBfTV9pb3NfZmN0eXBlOyB9CgogICAgICBpbmxpbmUgY29uc3QgX19udW1nZXRfdHlw
ZSoKICAgICAgX01fZ2V0X2ZudW1nZXQodm9pZCkKICAgICAgeyByZXR1cm4gX01fZm51bWdldDsg
fQoKICAgICAgaW5saW5lIGNvbnN0IF9fbnVtcHV0X3R5cGUqCiAgICAgIF9NX2dldF9mbnVtcHV0
KHZvaWQpCiAgICAgIHsgcmV0dXJuIF9NX2ZudW1wdXQ7IH0KCiAgICAgIG9wZXJhdG9yIHZvaWQq
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFz
aWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIG9wZXJhdG9yISgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsgfQoKICAgICAgaW5saW5lIGlvc3RhdGUK
ICAgICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsg
fQoKICAgICAgaW5saW5lIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJp
dCkKICAgICAgewogICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQogICAgICAgICAgX01fc3RyZWFt
YnVmX3N0YXRlID0gX19zdGF0ZTsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZf
c3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0OwogICAgICAgIGlmICgodGhpcy0+cmRzdGF0ZSgpICYg
dGhpcy0+ZXhjZXB0aW9ucygpKSkKICAgICAgICAgIHRocm93IGZhaWx1cmUoImJhc2ljX2lvczo6
Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICB9CgogICAgICBpbmxpbmUg
dm9pZAogICAgICBzZXRzdGF0ZShpb3N0YXRlIF9fc3RhdGUpCiAgICAgIHsgdGhpcy0+Y2xlYXIo
dGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGdv
b2QoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKICAgICAg
aW5saW5lIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3Rh
dGUoKSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgaW5saW5lIGJvb2wKICAgICAgZmFpbCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJpdCkp
ICE9IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBpb3N0
YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRpb247
IH0KCiAgICAgIGlubGluZSB2b2lkCiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkK
ICAgICAgewogICAgICAgIF9NX2V4Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMtPmNs
ZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNpdAogICAgICBi
YXNpY19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jh
c2UoKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJh
c2ljX2lvcygpIHsgfQoKCiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoKICAgICAgaW5s
aW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9IF9f
dGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgaW5saW5lIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qCiAgICAgIHJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni
KTsKCiAgICAgIGJhc2ljX2lvcyYKICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhz
KTsKCiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9NX2ZpbGw7IH0KCiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5
cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IF9NX2ZpbGw7CiAgICAg
ICAgX01fZmlsbCA9IF9fY2g7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKICAgICAg
bG9jYWxlCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgY2hhcgogICAg
ICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICBjaGFy
X3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCiAgICAg
IGJhc2ljX2lvcygpIDogaW9zX2Jhc2UoKQogICAgICB7IH0KCiAgICAgIHZvaWQKICAgICAgaW5p
dChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CiAgICB9OwoKfQojIDQ2
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAzOCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL2JpdHMvc3Rk
X2xpbWl0cy5oIiAxIDMgNAojIDQ1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtcGMtbGlu
dXgtZ251LzIuOTcvaW5jbHVkZS9iaXRzL3N0ZF9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9jKytjb25m
aWcuaCIgMSAzIDQKIyA0NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdu
dS8yLjk3L2luY2x1ZGUvYml0cy9zdGRfbGltaXRzLmgiIDIgMyA0CiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2kzODYtcGMtbGludXgtZ251LzIuOTcvaW5jbHVkZS9mbG9hdC5oIiAxIDMgNAojIDQxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NmbG9hdC5oIiAyIDMKIyA0NyAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9z
dGRfbGltaXRzLmgiIDIgMyA0CgpuYW1lc3BhY2Ugc3RkIHsKCiAgICBlbnVtIGZsb2F0X3JvdW5k
X3N0eWxlIHsKICAgICAgICByb3VuZF9pbmRldGVybWluYXRlID0gLTEsCiAgICAgICAgcm91bmRf
dG93YXJkX3plcm8gPSAwLAogICAgICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLAogICAgICAgIHJv
dW5kX3Rvd2FyZF9pbmZpbml0eSA9IDIsCiAgICAgICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0
eSA9IDMKICAgIH07CgogICAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUgewogICAgICAgIGRlbm9y
bV9pbmRldGVybWluYXRlID0gLTEsCiAgICAgICAgZGVub3JtX2Fic2VudCA9IDAsCiAgICAgICAg
ZGVub3JtX3ByZXNlbnQgPSAxCiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3Ry
dWN0IG51bWVyaWNfbGltaXRzIHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
aXplZCA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
ZXhhY3QgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCiAgICAg
ICAgc3RhdGljIF9UcCBlcHNpbG9uKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+
KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBxdWlldF9OYU4o
KSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBzdGF0aWMg
X1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
IH0KICAgICAgICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PF9UcD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19pbmZpbml0eSgpOwogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPiBfVHAgX19saW1pdHNfcXVpZXRfTmFOKCk7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IF9UcCBfX2xpbWl0c19zaWduYWxpbmdfTmFOKCk7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IF9UcCBfX2xpbWl0c19kZW5vcm1fbWluKCk7CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVt
ZXJpY19saW1pdHM8Ym9vbD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp
emVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHRydWU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4Owog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgYm9vbCBl
cHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgYm9v
bCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBib29s
IGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDAp
OyB9CiAgICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CiAgICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5n
X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQog
ICAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj
NTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRl
PD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjaGFyIG1pbigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0KICAgICAgICBzdGF0aWMgY2hhciBtYXgoKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBz
dGF0aWMgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAg
ICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9
CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx
MCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAg
IHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIGNo
YXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxj
aGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7
CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07
CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+IHsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0
YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0xMjgpOyB9
CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAxMjc7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy
dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBlcHNp
bG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMg
c2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHF1aWV0X05h
TigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7
IH0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0
aWMgc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy
dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91
bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4gewogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBz
dGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMjU1OyB9
CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNo
YXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgdW5z
aWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0
X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRy
dWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAg
IH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2hvcnQ+IHsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRp
YyBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0zMjc2NyAtMSk7IH0KICAg
ICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMyNzY3OyB9
CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTU7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBzaG9ydCByb3VuZF9lcnJvcigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw
ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFs
aW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0KICAgICAgICBz
dGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQogICAgICAgIHN0
YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHNob3J0PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBm
YWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNz
X2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSBy
b3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD4gewogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNo
b3J0IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVu
c2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiA2NTUzNTsgfQoKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2OwogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzMTAgPSA0OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHVuc2ln
bmVkIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWll
dF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9
CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CgogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs
byA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8aW50PiB7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBz
dGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDcgLTEp
OyB9CiAgICAgICAgc3RhdGljIGludCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMjE0
NzQ4MzY0NzsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGludCByb3VuZF9l
cnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHko
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAg
IHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBp
bnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
YXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm
YWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgaW50PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgo
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKDIxNDc0ODM2NDcgKiAyVSArIDEpOyB9CgogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9IDk7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXBzaWxvbigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3Vu
ZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v
cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll
YzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3TCAtMSk7IH0KICAgICAgICBzdGF0aWMg
bG9uZyBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0KCiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIGxvbmcg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDAp
OyB9CiAgICAgICAgc3RhdGljIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRlbm9y
bV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0K
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
X3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0
czx1bnNpZ25lZCBsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVUwgKyAxKTsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzMTAgPSA5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3Vu
ZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v
cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
b25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9
CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk
ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAg
IHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGZsb2F0PiB7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgZmxvYXQg
bWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMTc1NDk0MzVlLTM4RjsgfQogICAgICAg
IHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2Ur
MzhGOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMjQ7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDc7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjE5MjA5MjkwZS0wN0Y7IH0KICAgICAgICBzdGF0
aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4wZjsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMjU7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zNzsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudCA9IDEyODsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudDEwID0gMzg7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNl
bnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog
ICAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQogICAgICAg
IHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PigwKTsgfQogICAgICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t
b2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91
YmxlPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAyLjIy
NTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgbWF4KCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMxMCA9IDE1OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBy
YWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEzMWUtMTY7IH0KICAgICAgICBzdGF0aWMgZG91Ymxl
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMDsgfQoKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMDIxOwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50ID0gMTAyNDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw
ID0gMzA4OwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg
ICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9CiAgICAgICAg
c3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgZG91YmxlIGRlbm9ybV9taW4o
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigwKTsgfQoKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8
bG9uZyBkb3VibGU+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CgogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0KICAgICAgICBzdGF0aWMg
bG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3
MjMxNzY1MDJlKzQ5MzJMOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE5OwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGxv
bmcgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4wODQyMDIxNzI0
ODU1MDQ0MzQwMWUtMTlMOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMEw7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQgPSAtMTYzODE7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQxMCA9IC00OTMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gMTYzODQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDQ5MzI7
CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRp
YyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcXVpZXRf
TmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigw
KTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQogICAgICAgIHN0
YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07Cgp9CiMg
MzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQgewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxf
Q2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0
eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIGlzdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBu
dW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CiAgICAgIHR5
cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKICAgICAg
c3RyZWFtc2l6ZSBfTV9nY291bnQ7CgogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAg
YmFzaWNfaXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7CiAgICAgICAgdGhp
cy0+aW5pdChfX3NiKTsKICAgICAgICBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOwogICAgICB9
CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pc3RyZWFtKCkKICAgICAgewogICAgICAgIF9N
X2djb3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAgICAgX01fZm51bWdldCA9IF9fbnVsbDsKICAg
ICAgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgq
X19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsK
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24pOwoKICAg
ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAgICAgIF9f
aXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsKCiAgICAg
IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwojIDEyOCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDMKICAgICAgX19p
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fZik7CgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgaW5s
aW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N
X2djb3VudDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZvaWQpOwoKICAgICAgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9f
ZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBl
KiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiBnZXQoX19zLCBfX24sIHRoaXMt
PndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVh
bWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQogICAgICB7IHJldHVy
biBnZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBf
X2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFy
X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIGdldGxpbmUoX19zLCBf
X24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGln
bm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0cmFpdHNfdHlwZTo6
ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lkKTsKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAg
ICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
bik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lkKTsKCiAgICAgIGludAogICAg
ICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbGcodm9pZCk7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7CgogICAgcHJpdmF0
ZToKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9faXN0cmVh
bV90eXBlJik7CgogICAgICBiYXNpY19pc3RyZWFtKGNvbnN0IF9faXN0cmVhbV90eXBlJik7Cgog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
Y2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAg
ICAgdHlwZWRlZiBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAg
ZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
cywgYm9vbCBfX25vc2tpcHdzID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0
dXJuIF9NX29rOyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNf
aXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyBy
ZXR1cm4gKF9faW4gPj4gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xh
c3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2Mp
CiAgICB7IHJldHVybiAoX19pbiA+PiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry
ZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJu
IChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNs
YXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykK
ICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBi
YXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBw
dWJsaWM6CgoKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19p
c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
IF9fb3N0cmVhbV90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zdHJlYW0oYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICAgIDogX19pc3RyZWFtX3R5
cGUoX19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbAog
ICAgICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOwoKfQojIDM4
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDEgMwojIDM3ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMwojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEgMwojIDM4ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNz
IGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz
PgogICAgewogICAgcHVibGljOgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBf
VHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVD4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQs
IF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9D
aGFyVD4gX19jdHlwZV90eXBlOwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29zdHJlYW0o
X19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAg
ICB2aXJ0dWFsCiAgICAgIH5iYXNpY19vc3RyZWFtKCkKICAgICAgeyBfTV9mbnVtcHV0ID0gX19u
dWxsOyB9CgoKICAgICAgY2xhc3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoK
CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYg
KCpfX3BmKShfX29zdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpIChpb3NfYmFzZSYp
KTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIF9fbik7Cgog
ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbik7
CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChib29sIF9fbik7CgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChzaG9ydCBfX24pCiAgICAgIHsKICAg
ICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6
OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYg
aW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBy
ZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAgfQoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgX19u
KQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KF9fbikpOyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpbnQg
X19uKQogICAgICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+Zmxh
Z3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6
Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3Bl
cmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19uKSkpOwogICAgICAgIGVs
c2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9f
bikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNp
Z25lZCBpbnQgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmc+KF9fbikpOyB9CiMgMTM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX29zdHJlYW0uaCIgMwogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I8PChkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KGZsb2F0IF9fZikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxk
b3VibGU+KF9fZikpOyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChs
b25nIGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo
Y29uc3Qgdm9pZCogX19wKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBw
dXQoY2hhcl90eXBlIF9fYyk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgd3JpdGUoY29u
c3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBmbHVzaCgpOwoKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxwKCk7CgogICAgICBf
X29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3AocG9zX3R5cGUpOwoKICAgICAgX19vc3RyZWFtX3R5
cGUmCiAgICAgIHNlZWtwKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7CgogICAgcHJpdmF0
ZToKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fb3N0cmVh
bV90eXBlJik7CgogICAgICBiYXNpY19vc3RyZWFtKGNvbnN0IF9fb3N0cmVhbV90eXBlJik7Cgog
ICAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAg
ICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29z
OwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08
X0NoYXJULF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAg
IGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2Vw
dGlvbigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01f
b3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBi
b29sKCkKICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291
dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJl
dHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBs
YXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNo
YXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9
CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwg
dW5zaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hh
cj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFz
cyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7
CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs
IGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19v
c3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQog
ICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykp
OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lk
ZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9UcmFp
dHM6Ol9TX2VvcygpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNo
KCk7IH0KCn0KIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFt
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19maWxlLmgi
IDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfZmlsZS5oIiAz
CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1
ZGUvYml0cy9jKytjb25maWcuaCIgMSAzIDQKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL2Jhc2ljX2ZpbGUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pb3MuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9i
YXNpY19maWxlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZCB7CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICBzdHJ1Y3QgX19iYXNpY19maWxlX2Jhc2U6IHB1YmxpYyBfX2NfZmlsZV90
eXBlCiAgewogICAgdmlydHVhbAogICAgfl9fYmFzaWNfZmlsZV9iYXNlKCkgeyB9OwoKICAgIHZp
cnR1YWwgaW50CiAgICBvdmVyZmxvdyhpbnQgX19jID0gKC0xKSkgPSAwOwoKICAgIHZpcnR1YWwg
aW50CiAgICB1bmRlcmZsb3coKSA9IDA7CgogICAgdmlydHVhbCBpbnQKICAgIHVmbG93KCkgPSAw
OwoKICAgIHZpcnR1YWwgaW50CiAgICBwYmFja2ZhaWwoaW50IF9fYykgPSAwOwoKICAgIHZpcnR1
YWwgc3RyZWFtc2l6ZQogICAgeHNwdXRuKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9f
bikgPSAwOwoKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgeHNnZXRuKF9DaGFyVCogX19zLCBz
dHJlYW1zaXplIF9fbikgPSAwOwoKICAgIHZpcnR1YWwgc3RyZWFtb2ZmCiAgICBzZWVrb2ZmKHN0
cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgIGlvc19i
YXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KSA9IDA7
CgogICAgdmlydHVhbCBzdHJlYW1vZmYKICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLAogICAg
ICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jh
c2U6Om91dCkgPSAwOwoKICAgIHZpcnR1YWwgc3RyZWFtYnVmKgogICAgc2V0YnVmKF9DaGFyVCog
X19iLCBpbnQgX19sZW4pID0gMDsKCiAgICB2aXJ0dWFsIGludAogICAgc3luYygpID0gMDsKCiAg
ICB2aXJ0dWFsIGludAogICAgZG9hbGxvY2F0ZSgpID0gMDsKCiAgICB2aXJ0dWFsIHN0cmVhbXNp
emUKICAgIHN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikgPSAwOwoKICAgIHZp
cnR1YWwgc3RyZWFtc2l6ZQogICAgc3lzX3dyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1z
aXplIF9fbikgPSAwOwoKICAgIHZpcnR1YWwgc3RyZWFtb2ZmCiAgICBzeXNfc2VlayhzdHJlYW1v
ZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5KSA9IDA7CgogICAgdmlydHVhbCBpbnQK
ICAgIHN5c19jbG9zZSgpID0gMDsKCiAgICB2aXJ0dWFsIGludAogICAgc3lzX3N0YXQodm9pZCog
X192KSA9IDA7CgogICAgdmlydHVhbCBpbnQKICAgIHNob3dtYW55YygpID0gMDsKCiAgICB2aXJ0
dWFsIHZvaWQKICAgIGltYnVlKHZvaWQqIF9fdikgPSAwOwogIH07CgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KCgoKICAgIGNsYXNzIF9fYmFzaWNfZmlsZQoKICAgIHsKCiAgICAgIGlu
dCBfTV9maWxlbm87CiAgICAgIF9fY19maWxlX3R5cGUqIF9NX2NmaWxlOwoKCgoKCiAgICBwdWJs
aWM6CiAgICAgIF9fYmFzaWNfZmlsZShfX2NfbG9jayogX19sb2NrID0gMCk7CgogICAgICB2b2lk
CiAgICAgIF9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlLCBpbnQmIF9fcF9t
b2RlLCBpbnQmIF9fcndfbW9kZSwKICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fY19tb2RlKTsK
CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19uYW1lLCBpb3Nf
YmFzZTo6b3Blbm1vZGUgX19tb2RlLCBpbnQgX19wcm90ID0gMDY2NCk7CgoKCgoKICAgICAgX19i
YXNpY19maWxlKgogICAgICBzeXNfb3BlbihpbnQgX19mZCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f
bW9kZSk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIGNsb3NlKCk7CgogICAgICBib29sCiAg
ICAgIGlzX29wZW4oKTsKCgogICAgICBpbnQgZ2V0X2ZpbGVubyh2b2lkKTsKCgoKCgogICAgICB2
aXJ0dWFsCiAgICAgIH5fX2Jhc2ljX2ZpbGUoKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIG92
ZXJmbG93KGludCBfX2MgPSAoLTEpKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHVuZGVyZmxv
dygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgdWZsb3coKTsKCiAgICAgIHZpcnR1YWwgaW50
CiAgICAgIHBiYWNrZmFpbChpbnQgX19jKTsKCgoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQog
ICAgICB4c3B1dG4oY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCgoKCiAgICAg
IHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUg
X19uKTsKCgoKCiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmCiAgICAgIHNlZWtvZmYoc3RyZWFtb2Zm
IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6
b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CgoKCgogICAg
ICB2aXJ0dWFsIHN0cmVhbW9mZgogICAgICBzZWVrcG9zKHN0cmVhbW9mZiBfX3BvcywKICAgICAg
ICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jh
c2U6Om91dCk7CgogICAgICB2aXJ0dWFsIHN0cmVhbWJ1ZioKICAgICAgc2V0YnVmKF9DaGFyVCog
X19iLCBpbnQgX19sZW4pOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpOwoKICAgICAg
dmlydHVhbCBpbnQKICAgICAgZG9hbGxvY2F0ZSgpOwoKCgoKICAgICAgdmlydHVhbCBzdHJlYW1z
aXplCiAgICAgIHN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbik7CgoKCgogICAg
ICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc3lzX3dyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBz
dHJlYW1zaXplIF9fbik7CgoKCgogICAgICB2aXJ0dWFsIHN0cmVhbW9mZgogICAgICBzeXNfc2Vl
ayhzdHJlYW1vZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5KTsKCiAgICAgIHZpcnR1
YWwgaW50CiAgICAgIHN5c19jbG9zZSgpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3lzX3N0
YXQodm9pZCogX192KTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHNob3dtYW55YygpOwoKICAg
ICAgdmlydHVhbCB2b2lkCiAgICAgIGltYnVlKHZvaWQqIF9fdik7CiAgICB9Owp9CiMgNDAgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAxIDMKIyAzNyAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2
LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9jKytjb25maWcuaCIgMSAzIDQKIyA0MCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMiAzCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAxIDMgNAojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2N0aW1lLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2NrX3Q7CiAg
dXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgZXh0ZXJuICJDIiBjbG9ja190IGNsb2Nr
KHZvaWQpOwogIGV4dGVybiAiQyIgZG91YmxlIGRpZmZ0aW1lKHRpbWVfdCwgdGltZV90KTsKICBl
eHRlcm4gIkMiIHRpbWVfdCBta3RpbWUoc3RydWN0IHRtKik7CiAgZXh0ZXJuICJDIiB0aW1lX3Qg
dGltZSh0aW1lX3QqKTsKICBleHRlcm4gIkMiIGNoYXIqIGFzY3RpbWUoY29uc3Qgc3RydWN0IHRt
Kik7CiAgZXh0ZXJuICJDIiBjaGFyKiBjdGltZShjb25zdCB0aW1lX3QqKTsKICBleHRlcm4gIkMi
IHN0cnVjdCB0bSogZ210aW1lKGNvbnN0IHRpbWVfdCopOwogIGV4dGVybiAiQyIgc3RydWN0IHRt
KiBsb2NhbHRpbWUoY29uc3QgdGltZV90Kik7CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3RyZnRpbWUo
Y2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIGNvbnN0IHN0cnVjdCB0bSopOwp9CiMgNDAgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDEgMwojIDM4ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzCiNwcmFnbWEgaW50ZXJmYWNlICJ0eXBlaW5mbyIKCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDQxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAyIDMKCmV4dGVybiAiQysrIiB7CgoKbmFtZXNw
YWNlIF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CgoKbmFtZXNwYWNl
IHN0ZCB7CgpjbGFzcyB0eXBlX2luZm8gewpwdWJsaWM6CgoKCgogIHZpcnR1YWwgfnR5cGVfaW5m
byAoKTsKCnByaXZhdGU6CgogIHR5cGVfaW5mbyYgb3BlcmF0b3I9IChjb25zdCB0eXBlX2luZm8m
KTsKICB0eXBlX2luZm8gKGNvbnN0IHR5cGVfaW5mbyYpOwoKcHJvdGVjdGVkOgogIGNvbnN0IGNo
YXIgKl9fbmFtZTsKCnByb3RlY3RlZDoKICBleHBsaWNpdCB0eXBlX2luZm8gKGNvbnN0IGNoYXIg
Kl9fbik6IF9fbmFtZSAoX19uKSB7IH0KCnB1YmxpYzoKIyA4NyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My90eXBlaW5mbyIgMwogIGJvb2wgYmVmb3JlIChjb25zdCB0eXBlX2luZm8mIF9fYXJn
KSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgY29uc3QgY2hh
ciogbmFtZSAoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiAgYm9vbCBvcGVyYXRvcj09
IChjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lID09IF9f
YXJnLl9fbmFtZTsgfQogIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykg
Y29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09IChfX2FyZyk7IH0KCgoKCnB1YmxpYzoKCiAg
dmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wICgpIGNvbnN0OwoKICB2aXJ0dWFsIGJvb2wgX19p
c19mdW5jdGlvbl9wICgpIGNvbnN0OwoKCgoKCgogIHZpcnR1YWwgYm9vbCBfX2RvX2NhdGNoIChj
b25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogIHZpcnR1YWwgYm9vbCBf
X2RvX3VwY2FzdCAoY29uc3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7Cgp9
OwoKY2xhc3MgYmFkX2Nhc3QgOiBwdWJsaWMgZXhjZXB0aW9uIHsKcHVibGljOgogIGJhZF9jYXN0
KCkgeyB9CiAgdmlydHVhbCB+YmFkX2Nhc3QoKSB7IH0KfTsKCmNsYXNzIGJhZF90eXBlaWQgOiBw
dWJsaWMgZXhjZXB0aW9uIHsKIHB1YmxpYzoKICBiYWRfdHlwZWlkICgpIHsgfQogIHZpcnR1YWwg
fmJhZF90eXBlaWQgKCkgeyB9Cn07Cgp9Cgp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfaW9zLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCgogIHN0
cnVjdCBfQmFkX3VzZV9mYWNldCA6IHB1YmxpYyBiYWRfY2FzdAogIHsKICAgIF9CYWRfdXNlX2Zh
Y2V0KCkgdGhyb3coKSB7fQoKICAgIF9CYWRfdXNlX2ZhY2V0KF9CYWRfdXNlX2ZhY2V0IGNvbnN0
JiBfX2IpIHRocm93KCkKICAgIDogYmFkX2Nhc3QoX19iKSB7IH0KCiAgICBfQmFkX3VzZV9mYWNl
dCYKICAgIG9wZXJhdG9yPShfQmFkX3VzZV9mYWNldCBjb25zdCYgX19iKSB0aHJvdygpCiAgICB7
CiAgICAgIHN0YXRpY19jYXN0PGJhZF9jYXN0Kj4odGhpcyktPm9wZXJhdG9yPShfX2IpOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgdmlydHVhbCBjaGFyIGNvbnN0KgogICAgd2hhdCgp
IGNvbnN0IHRocm93KCk7CgogICAgdmlydHVhbAogICAgfl9CYWRfdXNlX2ZhY2V0KCkgdGhyb3co
KTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAg
ICBfVXNlX2ZhY2V0X2ZhaWx1cmVfaGFuZGxlcihjb25zdCBsb2NhbGUmKQogICAgeyB0aHJvdyBf
QmFkX3VzZV9mYWNldCgpOyB9CgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBj
LWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9jdHlwZV9iYXNlLmgiIDEgMyA0CiMgNTAgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNsdWRlL2JpdHMv
Y3R5cGVfYmFzZS5oIiAzIDQKICBzdHJ1Y3QgY3R5cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNv
bnN0IGludCogX190b190eXBlOwoKCgogICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwog
ICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSBfSVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBt
YXNrIGxvd2VyID0gX0lTbG93ZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2Fs
cGhhOwogICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBj
b25zdCBtYXNrIHhkaWdpdCA9IF9JU3hkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNl
ID0gX0lTc3BhY2U7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCA9IF9JU3ByaW50OwogICAg
c3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSBfSVNncmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNr
IGNudHJsID0gX0lTY250cmw7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0
OwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0gPSBfSVNhbG51bTsKICB9OwojIDg2ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1
YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBpcyhtYXNr
IF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19t
LCBfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlw
ZSAqX19sbywgY29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2Fu
X2lzKF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nh
bl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9f
aGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG93LCBjb25zdCBjaGFyX3R5cGUq
IF9faGlnaCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvdywgX19o
aWdoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvdywgY29uc3QgY2hhcl90eXBl
KiBfX2hpZ2gpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sb3csIF9f
aGlnaCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19jKTsgfQoKICAgICAgY29uc3QgY2hhcioKICAg
ICAgd2lkZW4oY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwgY2hhcl90eXBl
KiBfX3RvKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xvdywgX19oaWdo
LCBfX3RvKTsgfQoKICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBf
X2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1
bHQpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5
cGUqIF9fbG93LCBjb25zdCBjaGFyX3R5cGUqIF9faGlnaCwKICAgICAgICAgICAgICBjaGFyIF9f
ZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3co
X19sb3csIF9faGlnaCwgX19kZmF1bHQsIF9fdG8pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBl
eHBsaWNpdAogICAgICBfX2N0eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBs
b2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fi
c3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9f
bSwgY2hhcl90eXBlIF9fYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpLAogICAgICAgICAgICBtYXNrKiBfX3ZlYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlw
ZSogX19sbywKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0g
MDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNr
IF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
X3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRv
X3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG93LCBjb25zdCBjaGFyX3R5cGUq
IF9faGlnaCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9s
b3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sb3csIGNvbnN0IGNoYXJfdHlwZSogX19o
aWdoKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihj
aGFyKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVu
KGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsCiAgICAgICAgICAgICAgIGNo
YXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9f
bmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG93
LCBjb25zdCBjaGFyX3R5cGUqIF9faGlnaCwKICAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0
LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0No
YXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1hc2s7CgogICAgICBleHBsaWNpdAog
ICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0No
YXJUPihfX3JlZnMpIHsgfQoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICBwcm90ZWN0
ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVt
cGxhdGU8PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9i
YXNlPGNoYXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBl
OwoKICAgIHByaXZhdGU6CgogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIGNvbnN0
JiBfTV90b3VwcGVyOwogICAgICBfX3RvX3R5cGUgY29uc3QmIF9NX3RvbG93ZXI7CiAgICAgIGNv
bnN0IG1hc2sqIGNvbnN0JiBfTV9jdGFibGU7CiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOwoK
ICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSk7
CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwgYm9v
bCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBpbmxpbmUgYm9vbAog
ICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNo
YXIqCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sq
IF9fdmVjKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX2lzKG1h
c2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdDsKCiAg
ICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hh
ciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3Q7CgogICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgY29uc3QgbWFzayoKICAgICAgdGFibGUo
KSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAgICBjb25zdCBt
YXNrKgogICAgICBjbGFzc2ljX3RhYmxlKCkgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9jdGFi
bGU7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBl
IF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMo
Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAg
IG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg
ICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBf
X2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl
KiBfX2xvdywgY29uc3QgY2hhcl90eXBlKiBfX2hpZ2gpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj
aGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvdywgY29u
c3QgY2hhcl90eXBlKiBfX2hpZ2gpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg
ICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAg
IGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsCiAgICAgICAg
ICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAg
ICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xv
dywgY29uc3QgY2hhcl90eXBlKiBfX2hpZ2gsCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVs
dCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0
eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xv
Yyk7CiMgMzgwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5o
IiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2lu
Y2x1ZGUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzIDQKIyAzNyAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pMzg2LXBjLWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9jdHlwZV9pbmxpbmUuaCIg
MyA0CiAgYm9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0
CiAgeyByZXR1cm4gX01fdGFibGVbX19jXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgogIGN0eXBl
PGNoYXI+OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNr
KiBfX3ZlYykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAgICpfX3Zl
YysrID0gX01fdGFibGVbKl9fbG93KytdOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0
IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9f
bG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19o
aWdoICYmICEoX01fdGFibGVbKl9fbG93XSAmIF9fbSkpCiAgICAgICsrX19sb3c7CiAgICByZXR1
cm4gX19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX25vdCht
YXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7
CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAoX01fdGFibGVbKl9fbG93
XSAmIF9fbSkgIT0gMCkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CiMgMzgx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1Ymxp
YyBjdHlwZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwg
c2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+
Y3R5cGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1l
PGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgoKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAxIDMKIyAxNzEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMKICBjbGFzcyBjb2RlY3Z0X2Jh
c2UKICB7CiAgcHVibGljOgogICAgZW51bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBh
cnRpYWwsCiAgICAgIGVycm9yLAogICAgICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRl
VD4KICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBp
bnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlw
ZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90
eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3Qg
aW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQs
CiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg
ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1
cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsK
ICAgICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwg
ZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICBl
eHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5z
aGlmdChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAog
ICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUq
JiBfX2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBf
X3RvX2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsK
ICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBf
X2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9f
dG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93
KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAg
ICBhbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19h
bHdheXNfbm9jb252KCk7IH0KCiAgICAgIGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlw
ZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0
IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBp
bnQKICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBf
X2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0
KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFz
ZSgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9f
c3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRl
cm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAg
ICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAg
ICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVh
bCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlw
ZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90
eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBk
b19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUq
JiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0g
MDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9
IDA7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRo
cm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRl
X3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3Qg
ZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1
YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07CgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt
ZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3Ry
YWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYg
X0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7
CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6
OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCxfRXh0ZXJuVCxfU3RhdGVU
PiAoX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVj
dnQoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBf
RXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJu
VCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKIyA1OTIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9jb2RlY3Z0LmgiIDMKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIs
IGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNo
YXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hh
ciBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBl
ZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoK
ICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJl
c3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25z
dCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f
dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190
b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3Rh
dGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
X2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJu
X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rp
bmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19u
b2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3Ro
KGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsK
IyA2OTggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0
ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBf
RXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAg
Y29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNv
ZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihfX3JlZnMpIHsgfQogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQogICAgfTsKIyA0
MDQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBf
TnVtZXJpY19nZXQ7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3Mg
X0Zvcm1hdF9jYWNoZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gdHJhaXRzX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CgoKICAgICAgZnJp
ZW5kIGNsYXNzIGxvY2FsZTsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICAgICAgZnJpZW5kIGNsYXNzIF9OdW1lcmljX2dldDsKICAgICAgZnJpZW5k
IGNsYXNzIG51bV9nZXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ8X0NoYXJU
PjsKICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFz
cyBtb25leV9nZXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfcHV0PF9DaGFyVD47
CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9wdXQ8X0NoYXJUPjsKCgoKCiAgICAgIHN0YXRpYyBp
bnQgX1NfcHdvcmRfaXg7CgoKCiAgICAgIGJvb2wgX01fdmFsaWQ7CgoKCiAgICAgIHN0YXRpYyBj
b25zdCBjaGFyIF9TX2xpdGVyYWxzW107CgoKCgogICAgICBlbnVtCiAgICAgIHsKICAgICAgICBf
U19taW51cywKICAgICAgICBfU19wbHVzLAogICAgICAgIF9TX3gsCiAgICAgICAgX1NfWCwKICAg
ICAgICBfU19kaWdpdHMsCiAgICAgICAgX1NfZGlnaXRzX2VuZCA9IF9TX2RpZ2l0cyArIDE2LAog
ICAgICAgIF9TX3VkaWdpdHMgPSBfU19kaWdpdHNfZW5kLAogICAgICAgIF9TX3VkaWdpdHNfZW5k
ID0gX1NfdWRpZ2l0cyArIDE2LAogICAgICAgIF9TX2VlID0gX1NfZGlnaXRzICsgMTQsCiAgICAg
ICAgX1NfRWUgPSBfU191ZGlnaXRzICsgMTQKICAgICAgfTsKCgoKCiAgICAgIGNoYXJfdHlwZSBf
TV9kZWNpbWFsX3BvaW50OwoKCgoKCiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwoK
CgogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFtZTsKICAgICAgc3RyaW5nX3R5cGUgX01fZmFs
c2VuYW1lOwoKCgogICAgICBib29sIF9NX3VzZV9ncm91cGluZzsKCgoKICAgICAgc3RyaW5nIF9N
X2dyb3VwaW5nOwoKICAgICAgX0Zvcm1hdF9jYWNoZSgpOwoKICAgICAgfl9Gb3JtYXRfY2FjaGUo
KSB0aHJvdygpIHsgfQoKCgoKICAgICAgc3RhdGljIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioKICAg
ICAgX1NfZ2V0KGlvc19iYXNlJiBfX2lvcyk7CgogICAgICB2b2lkCiAgICAgIF9NX3BvcHVsYXRl
KGlvc19iYXNlJik7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jYWxsYmFjayhpb3NfYmFz
ZTo6ZXZlbnQgX19ldmVudCwgaW9zX2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKTsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludCBfRm9ybWF0X2NhY2hlPF9D
aGFyVD46Ol9TX3B3b3JkX2l4OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25z
dCBjaGFyIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6CiAgICBfU19saXRlcmFsc1tdID0gIi0reFgw
MTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OUFCQ0RFRiI7CgogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRf
Y2FjaGU8Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19nZXQKICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
SW5JdGVyIGl0ZXJfdHlwZTsKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5h
bWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyBudW1fZ2V0OwogICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1l
X2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgog
ICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
ciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyBudW1fcHV0OwogICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBj
bGFzcyB0aW1lX3B1dDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9J
bkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfcHV0OwoKICAgIHByaXZhdGU6CiAgICAg
IGV4cGxpY2l0CiAgICAgIF9OdW1lcmljX2dldCgpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+
X051bWVyaWNfZ2V0KCkgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZ2V0X2RpZ2l0cyhp
dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG51bV9nZXQgOiBw
dWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBl
ZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2Nh
bGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0g
MCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0
KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzaG9ydCYgX192KSBj
b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
LCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9f
aW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQojIDU5NSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0
KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAog
ICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
Z25lZCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBf
X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVy
biBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CiMgNjE3ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRv
dWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19n
ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAg
ICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1fZ2V0KCkgeyB9CgoKCgoKICAgICAgdm9pZAog
ICAgICBfTV9leHRyYWN0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGNoYXIq
IF9feHRyYywKICAgICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwgYm9vbCBfX2ZwID0gdHJ1ZSkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CgoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl
LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgc2hvcnQmKSBjb25zdDsKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz
ZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgaW50JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19nZXQgKGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19i
YXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKCgoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
CiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBp
b3NfYmFzZSYsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25l
ZCBpbnQmKSBjb25zdDsKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJf
dHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJikgY29uc3Q7CgoKCgoKICAgICAgdmlydHVhbCBpdGVy
X3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVy
X3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
bG9uZyBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl
dChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsCiAgICAgICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtX2dldDxjaGFy
LCBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46OgogICAgX01fZXh0cmFjdChpc3RyZWFtYnVm
X2l0ZXJhdG9yPGNoYXI+IF9fYmVnLAogICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9y
PGNoYXI+IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsCiAgICAgICAgICAgICAgIGludCYgX19iYXNlLCBi
b29sIF9fZnApIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19wdXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlw
ZTsKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX051bWVyaWNfcHV0KCkgeyB9
CgogICAgICB2aXJ0dWFsCiAgICAgIH5fTnVtZXJpY19wdXQoKSB7IH0KICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0
IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAg
ICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19m
aWxsLCBib29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2Zp
bGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAg
ICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9f
cywgX19mLCBfX2ZpbGwsIF9fdik7IH0KIyA3NjEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25z
dAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAg
aXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5
cGUgX19maWxsLAogICAgICAgICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVy
biBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAg
ICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBf
X2YsIF9fZmlsbCwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+
bnVtX3B1dCgpIHsgfTsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy
X3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBj
aGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3Q7CgoKCgoKCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmls
bCwgdW5zaWduZWQgbG9uZykgY29uc3Q7CgoKCgoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg
ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91Ymxl
IF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90
eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFz
ZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikgY29uc3Q7CiAgICB9OwoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6
aWQgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGNsYXNzIF9QdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBw
dWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVj
aW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2RlY2ltYWxfcG9pbnQoKTsgfQoK
ICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVy
biBkb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGRvX2dyb3VwaW5nKCk7IH0KICAgIHByb3RlY3RlZDoKCiAgICAg
IGV4cGxpY2l0CiAgICAgIF9QdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0
KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fUHVuY3QoKSB7IH0KCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBk
b190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsg
fQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7
IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9k
ZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKICAgICAgc3Ry
aW5nIF9NX2dyb3VwaW5nOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHZvaWQKICAgICAgX01faW5p
dChjaGFyX3R5cGUgX19kLCBjaGFyX3R5cGUgX190LCBjb25zdCBzdHJpbmcmIF9fZykKICAgICAg
ewogICAgICAgIF9NX2RlY2ltYWxfcG9pbnQgPSBfX2Q7CiAgICAgICAgX01fdGhvdXNhbmRzX3Nl
cCA9IF9fdDsKICAgICAgICBfTV9ncm91cGluZyA9IF9fZzsKICAgICAgfQogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX051bXB1bmN0IDogcHVibGljIF9QdW5j
dDxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAg
ICBzdHJpbmdfdHlwZQogICAgICB0cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3Ry
dWVuYW1lKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIGRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBs
aWNpdAogICAgICBfTnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogX1B1bmN0PF9DaGFyVD4g
KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fTnVtcHVuY3QoKSB7IH0KCiAgICAg
IHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19m
YWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7IH0KCiAgICBwcml2
YXRlOgogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFtZTsKICAgICAgc3RyaW5nX3R5cGUgX01f
ZmFsc2VuYW1lOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHZvaWQKICAgICAgX01fYm9vbG5hbWVz
X2luaXQoY29uc3Qgc3RyaW5nX3R5cGUmIF9fdCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZikKICAg
ICAgewogICAgICAgIF9NX3RydWVuYW1lID0gX190OwogICAgICAgIF9NX2ZhbHNlbmFtZSA9IF9f
ZjsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3Mg
bnVtcHVuY3QgOiBwdWJsaWMgX051bXB1bmN0PF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBl
eHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBfTnVtcHVuY3Q8X0No
YXJUPihfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVt
cHVuY3QoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2Fs
ZTo6aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PGNo
YXI+OjpudW1wdW5jdChzaXplX3QgX19yZWZzKTogX051bXB1bmN0PGNoYXI+KF9fcmVmcykKICAg
IHsKICAgICAgX01faW5pdCgnLicsICcsJywgIiIpOwogICAgICBfTV9ib29sbmFtZXNfaW5pdCgi
dHJ1ZSIsICJmYWxzZSIpOwogICAgfQojIDk0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CiAgICBw
dWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1
bmN0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3Rl
ZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3RfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0
ZW1wbGF0ZTw+CiAgICBudW1wdW5jdF9ieW5hbWU8Y2hhcj46Om51bXB1bmN0X2J5bmFtZShjb25z
dCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBjbGFzcyBfQ29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJs
aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25z
dCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgIGNvbnN0
IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IGRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdf
dHlwZQogICAgICB0cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9f
aGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsgfQoKICAg
ICAgbG9uZwogICAgICBoYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hp
KSBjb25zdAogICAgICB7IHJldHVybiBkb19oYXNoKF9fbG8sIF9faGkpOyB9CgogIHByb3RlY3Rl
ZDoKICAgICAgZXhwbGljaXQKICAgICAgX0NvbGxhdGUoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9j
YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgfl9Db2xsYXRlKCkgeyB9CgogICAgICB2aXJ0
dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFy
VCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0No
YXJUKiBfX2hpMikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBk
b190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0
ID0gMDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19s
bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdCA9IDA7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlIDogcHVibGljIF9Db2xsYXRlPF9DaGFyVD4K
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0
CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVmcyA9IDApIDogX0NvbGxhdGU8X0NoYXJUPiAoX19y
ZWZzKSB7IH0KCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByb3RlY3RlZDoKICAg
ICAgdmlydHVhbAogICAgICB+Y29sbGF0ZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0
ZTw+CiAgICBjbGFzcyBjb2xsYXRlPGNoYXI+IDogcHVibGljIF9Db2xsYXRlPGNoYXI+CiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVm
IGJhc2ljX3N0cmluZzxjaGFyPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNv
bGxhdGUoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog
ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2xsYXRlKCk7CgogICAgICB2aXJ0
dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IGNoYXIqIF9fbG8xLCBjb25zdCBjaGFyKiBf
X2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2xvMiwgY29uc3QgY2hhciogX19o
aTIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cmFuc2Zvcm0o
Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGxvbmcKICAgICAgZG9faGFzaChjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBj
b25zdDsKICAgIH07CiMgMTA4NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxh
dGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZV9ieW5hbWUo
Y29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp
cnR1YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAg
ICBjb2xsYXRlX2J5bmFtZTxjaGFyPjo6Y29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVf
dCBfX3JlZnMpOwoKCgoKCiAgY2xhc3MgdGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0g
ZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0
IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1Ymxp
YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVy
IGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAo
X19yZWZzKSwgX01fZGF5bmFtZXMoMCksIF9NX21vbnRobmFtZXMoMCkgeyB9CgogICAgICBkYXRl
b3JkZXIKICAgICAgZGF0ZV9vcmRlcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2RhdGVfb3Jk
ZXIoKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF90aW1lKGl0ZXJfdHlwZSBfX3MsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfdGltZShf
X3MsIF9fZW5kLCBfX2YsIF9fZXJyLCBfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0
X2RhdGUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGRvX2dldF9kYXRlKF9fcywgX19lbmQsIF9fZiwgX19lcnIsIF9fdCk7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0X3dlZWtkYXkoX19z
LF9fZW5kLF9fZixfX2VycixfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRo
bmFtZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAog
ICAgICB7IHJldHVybiBkb19nZXRfbW9udGhuYW1lKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfeWVhcihfX3MsX19l
bmQsX19mLF9fZXJyLF9fdCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAg
fnRpbWVfZ2V0KCkKICAgICAgewogICAgICAgIGRlbGV0ZSBbXSBfTV9tb250aG5hbWVzOwogICAg
ICAgIGRlbGV0ZSBbXSBfTV9kYXluYW1lczsKICAgICAgfQoKICAgICAgdmlydHVhbCBkYXRlb3Jk
ZXIKICAgICAgZG9fZGF0ZV9vcmRlcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRpbWVfYmFzZTo6
eW1kOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5
cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiAsIHRtKiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBl
ICwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSog
KSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg
ICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf
X3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFt
ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRl
cl90eXBlICwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
ICwgdG0qICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICBtdXRhYmxlIGJhc2lj
X3N0cmluZzxfQ2hhclQ+KiBfTV9kYXluYW1lczsKICAgICAgbXV0YWJsZSBiYXNpY19zdHJpbmc8
X0NoYXJUPiogX01fbW9udGhuYW1lczsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVf
Z2V0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPihfX3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1Ymxp
YyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5
cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRp
bWVfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9CgoK
ICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgLCBjaGFy
X3R5cGUgLAogICAgICAgICAgY29uc3QgdG0qICwgY29uc3QgX0NoYXJUKiAsCiAgICAgICAgICBj
b25zdCBfQ2hhclQqICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp
bGwsCiAgICAgICAgICBjb25zdCB0bSogX190bWIsIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2Rp
ZmllciA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBf
X3RtYiwgX19mb3JtYXQsIF9fbW9kaWZpZXIpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH50aW1lX3B1dCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiwgY2hhcl90eXBlLCBjb25zdCB0bSogLAog
ICAgICAgICAgICAgY2hhciAsIGNoYXIgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBs
b2NhbGU6OmlkIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFt
ZSA6IHB1YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPgogICAgewogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRl
cl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIq
LCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPiAo
X19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0
X2J5bmFtZSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIGNsYXNzIG1vbmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAg
ICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
PiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGlj
aXQKICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19y
ZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90
eXBlIF9fZW5kLCBib29sIF9faW50bCwKICAgICAgICAgIGlvc19iYXNlJiBfX2YsIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9fZiwgX19lcnIsIF9fdW5pdHMpOyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwg
Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dl
dChfX3MsIF9fZW5kLCBfX2ludGwsIF9fZiwgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAs
CiAgICAgICAgICAgICBpb3NfYmFzZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAg
ICAgbG9uZyBkb3VibGUmICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9v
bCAsCiAgICAgICAgICAgICBpb3NfYmFzZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAg
ICAgICAgc3RyaW5nX3R5cGUmICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6
OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBs
b2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp
ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBs
b2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJf
dHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgY2hhcl90eXBl
IF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0
KF9fcywgX19pbnRsLCBfX2YsIF9fZmlsbCwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAgICAg
ICAgICBjaGFyX3R5cGUgX19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9fZGlnaXRz
KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9v
bCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwKICAgICAgICAgICAgIGxvbmcgZG91YmxlICkgY29u
c3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk
b19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwKICAgICAg
ICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg
IGxvY2FsZTo6aWQgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgc3RydWN0IG1v
bmV5X2Jhc2UKICB7CiAgICBlbnVtIHBhcnQgeyBub25lLCBzcGFjZSwgc3ltYm9sLCBzaWduLCB2
YWx1ZSB9OwogICAgc3RydWN0IHBhdHRlcm4geyBjaGFyIGZpZWxkWzRdOyB9OwoKICAgIHN0YXRp
YyBjb25zdCBwYXR0ZXJuIF9TX2RlZmF1bHRfcGF0dGVybjsKICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfTW9uZXlwdW5jdCA6IHB1YmxpYyBfUHVuY3Q8X0NoYXJU
PiwgcHVibGljIG1vbmV5X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190
eXBlOwoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7
IHJldHVybiBkb19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBwb3Np
dGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcG9zaXRpdmVfc2lnbigpOyB9Cgog
ICAgICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1
cm4gZG9fbmVnYXRpdmVfc2lnbigpOyB9CgogICAgICBpbnQKICAgICAgZnJhY19kaWdpdHMoKSBj
b25zdAogICAgICB7IHJldHVybiBkb19mcmFjX2RpZ2l0cygpOyB9CgogICAgICBwYXR0ZXJuCiAg
ICAgIHBvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBkb19wb3NfZm9ybWF0KCk7IH0K
CiAgICAgIHBhdHRlcm4KICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv
X25lZ19mb3JtYXQoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX01v
bmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogX1B1bmN0PF9DaGFyVD4gKF9fcmVmcykgeyB9
CgogICAgICB2aXJ0dWFsCiAgICAgIH5fTW9uZXlwdW5jdCgpIHsgfQoKICAgICAgdmlydHVhbCBz
dHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGJh
c2ljX3N0cmluZzxfQ2hhclQ+KCk7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAg
ZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZzxfQ2hh
clQ+KCk7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fbmVnYXRpdmVfc2ln
bigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZzxfQ2hhclQ+KCk7IH0KCiAgICAg
IHZpcnR1YWwgaW50CiAgICAgIGRvX2ZyYWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAog
ICAgICB7IHJldHVybiBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47IH0KCiAgICAgIHZp
cnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4g
bW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVibGljIF9N
b25leXB1bmN0PF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlw
ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KHNpemVfdCBfX3Jl
ZnMgPSAwKSA6IF9Nb25leXB1bmN0PF9DaGFyVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5cHVuY3Q8
X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu
dGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3Rf
YnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULF9JbnRsPgogICAgewogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry
aW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBf
SW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIq
LCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5tb25leXB1bmN0X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQs
IF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwg
ZmFsc2U+OjoKICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZz
KTsKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjo6CiAgICBt
b25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CiMgMTQ4MyAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHN0cnVjdCBt
ZXNzYWdlc19iYXNlCiAgewogICAgdHlwZWRlZiBpbnQgY2F0YWxvZzsKICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfTWVzc2FnZXMgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldCwgcHVibGljIG1lc3NhZ2VzX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0
cmluZ190eXBlOwoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxj
aGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJldHVybiBkb19v
cGVuKF9fcywgX19sb2MpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBf
X2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2MsX19zZXQsX19tc2dpZCxfX3MpOyB9CgogICAgICB2
b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiBkb19jbG9z
ZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfTWVzc2FnZXMo
c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmly
dHVhbAogICAgICB+X01lc3NhZ2VzKCkgeyB9CgoKCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAg
ICBkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9f
Z2V0KGNhdGFsb2csIGludCwgaW50ICwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25z
dAogICAgICB7IHJldHVybiBfX2RmYXVsdDsgfQoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGRv
X2Nsb3NlIChjYXRhbG9nKSBjb25zdCB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIF9NZXNzYWdlczxfQ2hhclQ+CiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKICAgICAgc3RhdGljIGxvY2FsZTo6
aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlcyhzaXplX3QgX19yZWZzID0gMCkg
OiBfTWVzc2FnZXM8X0NoYXJUPiAoX19yZWZzKSB7IH0KICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbAogICAgICB+bWVzc2FnZXMoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdl
czxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVm
cyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXNfYnlu
YW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBtZXNzYWdlc19ieW5hbWU8Y2hhcj46
Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CiMgMTU3MiAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCBfX2Ms
IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQgX19jLCBjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYykuaXMoY3R5cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJUIF9fYywgY29uc3QgbG9j
YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp
LmlzKGN0eXBlX2Jhc2U6OmNudHJsLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg
X19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhj
dHlwZV9iYXNlOjp1cHBlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBpbmxpbmUgYm9vbCBpc2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg
ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl
Ojpsb3dlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNhbHBoYShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxw
aGEsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBf
X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c3B1bmN0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf
ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19jKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGln
aXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnhkaWdpdCwgX19jKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbG51bShf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxudW0sIF9fYyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmdyYXBoLCBfX2MpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJUIF9f
YywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hh
clQ+ID4oX19sb2MpLnRvdXBwZXIoX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg
X19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b2xv
d2VyKF9fYyk7IH0KfQojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xv
Y2FsZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2Zh
Y2V0cy50Y2MiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl
X2ZhY2V0cy50Y2MiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nl
cnJuby5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJy
bm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMgNAojIDI5ICIvdXNyL2luY2x1
ZGUvZXJybm8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMzAg
Ii91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5v
LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMgNAoKCgojIDEgIi91
c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzIDQKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJy
bm8uaCIgMiAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzIDQKIyAzNiAi
L3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMyA0CmV4dGVybiBpbnQgZXJybm87CgoKZXh0ZXJu
IGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzIDQKIyA1NSAiL3Vzci9p
bmNsdWRlL2Vycm5vLmgiIDMgNApleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUs
ICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5ICIvdXNyL2luY2x1ZGUv
ZXJybm8uaCIgMyA0CnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgZXh0ZXJu
ICJDIiBpbnQgKCpfX2Vycm5vX2xvY2F0aW9uICgpKTsKfQojIDM2ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxl
LmgiIDEgMyA0CiMgMjYgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0CiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQK
CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUvMi45Ny9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMgNAojIDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMyA0Cgpl
eHRlcm4gIkMiIHsKIyA0NSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKc3RydWN0IGxjb252
CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgog
IGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1
cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhv
dXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsK
ICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJh
Y19kaWdpdHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsK
CiAgY2hhciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNo
YXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKfTsKCgoKZXh0ZXJuIGNoYXIgKnNl
dGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2NhbGUpIHRocm93ICgp
OwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRocm93ICgpOwojIDEw
OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5o
IiAxIDMgNAojIDExMCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMgNAoKCgoKCgoKZXh0ZXJu
IF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hh
ciAqX19sb2NhbGUsIF9fbG9jYWxlX3QgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gX19s
b2NhbGVfdCBfX2R1cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpl
eHRlcm4gdm9pZCBfX2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsK
Cgp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgZXh0ZXJuICJDIiBjaGFyKiBz
ZXRsb2NhbGUoaW50LCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBzdHJ1Y3QgbGNvbnYqIGxv
Y2FsZWNvbnYodm9pZCk7Cn0KIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xv
Y2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NzdGRsaWIuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9s
b2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LXBj
LWxpbnV4LWdudS8yLjk3L2luY2x1ZGUvYml0cy9zdGRfbGltaXRzLmgiIDEgMyA0CiMgMzkgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMSAzCiMgMTggIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDE5ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDIwICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyAyMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlLmgiIDEgMwojIDIyICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgMjMgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAyNCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDM0ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ug
c3RkIHsKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmNsYXNz
IHJhd19zdG9yYWdlX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Gb3J3YXJkSXRlcmF0b3IgX01f
aXRlcjsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7
CgogIGV4cGxpY2l0IHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0b3IgX194KSA6
IF9NX2l0ZXIoX194KSB7fQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yJiBvcGVyYXRvciooKSB7IHJl
dHVybiAqdGhpczsgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgX1Rw
JiBfX2VsZW1lbnQpIHsKICAgIGNvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3Is
IF9UcD4mIG9wZXJhdG9yKysoKSB7CiAgICArK19NX2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gb3BlcmF0b3Ir
KyhpbnQpIHsKICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4g
X190bXAgPSAqdGhpczsKICAgICsrX01faXRlcjsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CiMg
NzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5o
IiAzCn0KIyAyNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkIHsKCgoKCiB0ZW1wbGF0ZTxjbGFzcyBfVHAxPiBzdHJ1Y3QgYXV0
b19wdHJfcmVmIHsKICAgX1RwMSogX01fcHRyOwogICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKSA6
IF9NX3B0cihfX3ApIHt9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IGNsYXNzIGF1dG9fcHRy
IHsKcHJpdmF0ZToKICBfVHAqIF9NX3B0cjsKCnB1YmxpYzoKICB0eXBlZGVmIF9UcCBlbGVtZW50
X3R5cGU7CgogIGV4cGxpY2l0IGF1dG9fcHRyKF9UcCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0
cihfX3ApIHt9CiAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2Eu
cmVsZWFzZSgpKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGF1dG9fcHRyKGF1dG9fcHRy
PF9UcDE+JiBfX2EpIHRocm93KCkKICAgIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9CgoKICBh
dXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRocm93KCkgewogICAgcmVzZXQoX19h
LnJlbGVhc2UoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9U
cDE+CiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpIHsK
ICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCgoKCgoKICB+
YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KCiAgX1RwJiBvcGVyYXRvciooKSBjb25zdCB0
aHJvdygpIHsKICAgIHJldHVybiAqX01fcHRyOwogIH0KICBfVHAqIG9wZXJhdG9yLT4oKSBjb25z
dCB0aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9UcCogZ2V0KCkgY29uc3QgdGhy
b3coKSB7CiAgICByZXR1cm4gX01fcHRyOwogIH0KICBfVHAqIHJlbGVhc2UoKSB0aHJvdygpIHsK
ICAgIF9UcCogX190bXAgPSBfTV9wdHI7CiAgICBfTV9wdHIgPSAwOwogICAgcmV0dXJuIF9fdG1w
OwogIH0KICB2b2lkIHJlc2V0KF9UcCogX19wID0gMCkgdGhyb3coKSB7CiAgICBpZiAoX19wICE9
IF9NX3B0cikgewogICAgICBkZWxldGUgX01fcHRyOwogICAgICBfTV9wdHIgPSBfX3A7CiAgICB9
CiAgfQojIDEwMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIg
MwpwdWJsaWM6CiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkKICAg
IDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0
cl9yZWY8X1RwPiBfX3JlZikgdGhyb3coKSB7CiAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMt
PmdldCgpKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0
cjsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBv
cGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0
cl9yZWY8X1RwPih0aGlzLT5yZWxlYXNlKCkpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9w
ZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHI8X1Rw
MT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKCn07Cgp9CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3NidWZfaXRlci5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs
YXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0
IGxvY2FsZSYgX19vdGhlcikKICAgIHsKICAgICAgbG9jYWxlIF9fY29weSgqdGhpcyk7CiAgICAg
IF9fY29weS5fTV9pbXBsLT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9GYWNl
dDo6aWQpOwogICAgICBfX2NvcHkuX01faW1wbC0+X01faGFzX25hbWUgPSBmYWxzZTsKICAgICAg
cmV0dXJuIF9fY29weTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9y
KCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3MyKSBjb25zdAogICAgewoKCiAgICAgIHR5cGVkZWYgc3RkOjpjb2xsYXRlPF9D
aGFyVD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlKiBfX2Zjb2xs
ID0gJnVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4gKF9fZmNv
bGwtPmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBfX3MyLmRhdGEoKSArIF9f
czIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
IGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewog
ICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0OwogICAg
ICBsb2NhbGU6OmlkJiBfX2lkID0gX0ZhY2V0OjppZDsKICAgICAgc2l6ZV90IF9faSA9IF9faWQu
X01faW5kZXg7CiAgICAgIF9fdmVjX2ZhY2V0KiBfX2ZhY2V0ID0gX19sb2MuX01faW1wbC0+X01f
ZmFjZXRzOwogICAgICBjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2ZwID0gKCpfX2ZhY2V0KVtfX2ld
OwogICAgICBpZiAoX19pID49IF9fZmFjZXQtPnNpemUoKSB8fCBfX2ZwID09IDApCiAgICAgICAg
cmV0dXJuIF9Vc2VfZmFjZXRfZmFpbHVyZV9oYW5kbGVyPF9GYWNldD4oX19sb2MpOwogICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZnApOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBf
X2xvYykgdGhyb3coKQogICAgewogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2Zh
Y2V0IF9fdmVjX2ZhY2V0OwogICAgICBsb2NhbGU6OmlkJiBfX2lkID0gX0ZhY2V0OjppZDsKICAg
ICAgc2l6ZV90IF9faSA9IF9faWQuX01faW5kZXg7CiAgICAgIF9fdmVjX2ZhY2V0KiBfX2ZhY2V0
ID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICByZXR1cm4gKF9faSA8IF9fZmFjZXQt
PnNpemUoKSAmJiAoKl9fZmFjZXQpW19faV0gIT0gMCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9DaGFyVD4KICAgIF9Jbkl0ZXIKICAgIF9fbWF0
Y2hfcGFyYWxsZWwoX0luSXRlciBfX3MsIF9Jbkl0ZXIgX19lbmQsIGludCBfX250YXJncywKICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9fdGFyZ2V0cywK
ICAgICAgICAgICAgICAgICAgICAgaW50KiBfX21hdGNoZXMsIGludCYgX19yZW1haW4sIGJvb2wm
IF9fZW9mKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5n
X3R5cGU7CiAgICAgIF9fZW9mID0gZmFsc2U7CiAgICAgIGZvciAoaW50IF9fdGkgPSAwOyBfX3Rp
IDwgX19udGFyZ3M7ICsrX190aSkKICAgICAgICBfX21hdGNoZXNbX190aV0gPSBfX3RpOwogICAg
ICBfX3JlbWFpbiA9IF9fbnRhcmdzOwogICAgICBzaXplX3QgX19wb3MgPSAwOwogICAgICBkbwog
ICAgICAgIHsKICAgICAgICAgIHsKICAgICAgICAgICAgaW50IF9fdGkgPSAwOwogICAgICAgICAg
ICBmb3IgKDtfX3RpIDwgX19yZW1haW4gJiYKICAgICAgICAgICAgICAgICAgIF9fcG9zID09IF9f
dGFyZ2V0c1tfX21hdGNoZXNbX190aV1dLnNpemUoKTsgKytfX3RpKQogICAgICAgICAgICAgIHsg
fQogICAgICAgICAgICBpZiAoX190aSA9PSBfX3JlbWFpbikKICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBpZiAoX19wb3MgPT0gMCkgX19yZW1haW4gPSAwOwogICAgICAgICAgICAgICAg
cmV0dXJuIF9fczsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19z
ID09IF9fZW5kKQogICAgICAgICAgICBfX2VvZiA9IHRydWU7CiAgICAgICAgICBib29sIF9fbWF0
Y2hlZCA9IGZhbHNlOwogICAgICAgICAgZm9yIChpbnQgX190aSA9IDA7IF9fdGkgPCBfX3JlbWFp
bjsgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSYgX190
YXJnZXQgPSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGldXTsKICAgICAgICAgICAgICBpZiAoX19w
b3MgPCBfX3RhcmdldC5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IGlmIChfX2VvZiB8fCBfX3RhcmdldFtfX3Bvc10gIT0gKl9fcykKICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX190aV0gPSBfX21hdGNoZXNbLS1f
X3JlbWFpbl07CiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgKytfX3RpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19t
YXRjaGVkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAgICAgICAg
KytfX3BvczsKICAgICAgICAgICAgfQogICAgICAgICAgZm9yIChpbnQgX190aSA9IDA7IF9fdGkg
PCBfX3JlbWFpbjspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MgPiBfX3Rh
cmdldHNbX19tYXRjaGVzW19fdGldXS5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIF9fbWF0Y2hlc1tfX3RpXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsKICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKytf
X3RpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICB3aGlsZSAoX19yZW1haW4pOwogICAg
ICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfRm9y
bWF0X2NhY2hlPF9DaGFyVD46Ol9Gb3JtYXRfY2FjaGUoKQogICAgOiBfTV92YWxpZCh0cnVlKSwg
X01fdXNlX2dyb3VwaW5nKGZhbHNlKQogICAgeyB9CgogIHRlbXBsYXRlPD4KICAgIF9Gb3JtYXRf
Y2FjaGU8Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsKCiAgdGVtcGxhdGU8PgogICAgX0Zvcm1hdF9j
YWNoZTx3Y2hhcl90Pjo6X0Zvcm1hdF9jYWNoZSgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICB2b2lkCiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9NX3BvcHVsYXRlKGlvc19i
YXNlJiBfX2lvKQogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYyAoKTsKICAg
ICAgbnVtcHVuY3Q8X0NoYXJUPiBjb25zdCYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hh
clQ+ID4oX19sb2MpOwogICAgICBfTV90cnVlbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAg
X01fZmFsc2VuYW1lID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAgX01fdGhvdXNhbmRzX3NlcCA9
IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICAgICBfTV9kZWNpbWFsX3BvaW50ID0gX19ucC5kZWNp
bWFsX3BvaW50KCk7CiAgICAgIF9NX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBf
TV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5zaXplKCkgIT0gMCAmJiBfTV9ncm91cGluZy5k
YXRhKClbMF0gIT0gMDsKICAgICAgX01fdmFsaWQgPSB0cnVlOwogICAgfQoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQKICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6CiAg
ICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldiwgaW9zX2Jhc2UmIF9faW9zLCBpbnQg
X19peCkgdGhyb3coKQogICAgewogICAgICB2b2lkKiYgX19wID0gX19pb3MucHdvcmQoX19peCk7
CiAgICAgIHN3aXRjaCAoX19ldikKICAgICAgICB7CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6ZXJh
c2VfZXZlbnQ6CiAgICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hh
clQ+Kj4gKF9fcCk7IF9fcCA9IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIGlvc19i
YXNlOjpjb3B5Zm10X2V2ZW50OgoKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIF9fcCA9IG5l
dyBfRm9ybWF0X2NhY2hlPF9DaGFyVD47CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCguLi4p
IHsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgaW9zX2Jhc2U6Omlt
YnVlX2V2ZW50OgogICAgICAgICAgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4o
X19wKS0+X01fdmFsaWQgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kgog
ICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19nZXQoaW9zX2Jhc2UmIF9faW9zKQogICAgewog
ICAgICBpZiAoIV9TX3B3b3JkX2l4KQogICAgICAgIF9TX3B3b3JkX2l4ID0gaW9zX2Jhc2U6Onhh
bGxvYygpOwogICAgICB2b2lkKiYgX19wID0gX19pb3MucHdvcmQoX1NfcHdvcmRfaXgpOwoKCiAg
ICAgIGlmIChfX3AgPT0gMCkKICAgICAgICB7CiAgICAgICAgICBhdXRvX3B0cjxfRm9ybWF0X2Nh
Y2hlPF9DaGFyVD4gPiBfX2FwKG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4pOwogICAgICAgICAg
X19pb3MucmVnaXN0ZXJfY2FsbGJhY2soJl9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfY2FsbGJh
Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19wd29yZF9peCk7CiAgICAg
ICAgICBfX3AgPSBfX2FwLnJlbGVhc2UoKTsKICAgICAgICB9CiAgICAgIF9Gb3JtYXRfY2FjaGU8
X0NoYXJUPiogX19uY3AgPSBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFyVD4qPihfX3Ap
OwogICAgICBpZiAoIV9fbmNwLT5fTV92YWxpZCkKICAgICAgICBfX25jcC0+X01fcG9wdWxhdGUo
X19pb3MpOwoKICAgICAgcmV0dXJuIF9fbmNwOwogICAgfQojIDI1NiAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgbnVtX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYgLAog
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCBjaGFyKiAsCiAgICAgICAgICAgICAg
IGludCYgLCBib29sICkgY29uc3QKICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQK
ICAgIG51bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4
dHJhY3QoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2JlZywKICAgICAgICAgICAgICAgaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwK
ICAgICAgICAgICAgICAgYm9vbCBfX2ZwKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwg
X0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wm
IF9fdikgY29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpi
b29sYWxwaGEpKQogICAgICAgIHsKCgoKCgoKICAgICAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsn
XDAnfTsKICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfTV9leHRyYWN0KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgICAgIGNo
YXIqIF9fc2FuaXR5OwogICAgICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAg
ICAgICBsb25nIF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAg
ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgJiYgX19s
IDw9IDEKICAgICAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09
ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgICAgICBfX3YgPSBf
X2w7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0
OwogICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBfRm9y
bWF0X2NhY2hlPGNoYXJfdHlwZT4gX19mY2FjaGVfdHlwZTsKICAgICAgICAgIF9fZmNhY2hlX3R5
cGUqIF9fZm10ID0gX19mY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW8pOwogICAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUuY19zdHIoKTsKICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19mYWxzZSA9IF9fZm10LT5fTV9mYWxzZW5hbWUuY19zdHIoKTsK
ICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RydWVsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgo
X190cnVlKSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZWxlbiA9IF9fdHJhaXRz
X3R5cGU6Omxlbmd0aChfX2ZhbHNlKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19wb3Mg
PSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX3BvcykKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNoYXJfdHlwZSBfX2MgPSAqX19iZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBf
X2MgPT0gX19mYWxzZVtfX3Bvc107CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19jID09
IF9fdHJ1ZVtfX3Bvc107CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh
aWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYgX19wb3MgPT0gX19mYWxzZWxlbikKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBf
X3BvcyA9PSBfX3RydWVsZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f
diA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJyIHw9
IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0
ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9f
YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2Vyciwgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBf
X3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBj
aGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxv
bmcgX19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShf
X2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJj
ICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAg
ICAgICAgJiYgX19sID49ICgtMzI3NjcgLTEpICYmIF9fbCA8PSAzMjc2NykKICAgICAgICBfX3Yg
PSBzdGF0aWNfY2FzdDxzaG9ydD4oX19sKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0
PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGludCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl0gPSB7J1ww
J307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsK
ICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgX19sID0gc3RydG9s
KF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNl
OjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9
PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAgJiYgX19sID49
ICgtMjE0NzQ4MzY0NyAtMSkgJiYgX19sIDw9IDIxNDc0ODM2NDcpCiAgICAgICAgX192ID0gc3Rh
dGljX2Nhc3Q8aW50PihfX2wpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv
bmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAg
ICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAg
KCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgX19sID0gc3RydG9sKF9feHRy
YywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWls
Yml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAn
ICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX2w7CiAgICAg
IGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBf
X2JlZzsKICAgIH0KIyA0NTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVf
ZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QK
ICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7
CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jh
c2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9IDA7CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAm
X19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQp
CiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYg
KCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX3VsIDw9IDY1NTM1KQog
ICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsKICAgICAgZWxz
ZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVn
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAgewoK
CgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAg
X01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFs
c2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gMDsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nhbml0
eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAg
ICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID09IDAKICAgICAgICAgICYmIF9fdWwgPD0gKDIxNDc0ODM2NDcgKiAy
VSArIDEpKQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX191bCk7CiAg
ICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVy
biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl
dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0
CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsKICAgICAgaW50IF9fYmFz
ZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9f
YmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9j
YXRpb24gKCkpID0gMDsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMs
ICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJp
dCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm
JiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX191bDsKICAgICAg
ZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9f
YmVnOwogICAgfQojIDU2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m
YWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgewoKCgog
ICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01f
ZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7
CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAw
OwoKICAgICAgZmxvYXQgX19mID0gc3RydG9mKF9feHRyYywgJl9fc2FuaXR5KTsKCgoKICAgICAg
aWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9
IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09
IDApCiAgICAgICAgX192ID0gX19mOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
ZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9
OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAg
ICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGRvdWJsZSBfX2QgPSBzdHJ0b2Qo
X194dHJjLCAmX19zYW5pdHkpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0
KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYm
ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX2Q7CiAgICAgIGVs
c2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgIHsK
CgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAg
IF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIHRy
dWUpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gMDsKICAgICAgbG9uZyBkb3VibGUgX19sZCA9IHN0cnRvbGQoX194dHJjLCAmX19zYW5pdHkp
OwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19z
YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlv
biAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX2xkOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CiMgNjg0ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu
dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIGlvc19iYXNl
OjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7
CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFz
ZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBw
ZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9f
Zm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CgoKCgogICAg
ICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0
cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoK
CiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsK
ICAgICAgdm9pZCogX192cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0cnRvdWwoX194dHJj
LCAmX19zYW5pdHksIF9fYmFzZSkpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWls
Yml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAn
ICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX3ZwOwogICAg
ICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgoKICAgICAgX19pby5m
bGFncyhfX2ZtdCk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgaW5saW5lIF9PdXRJdGVyCiAgICBf
U19maWxsKF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZyk7CgogIHRl
bXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+CiAgICBfUmFJdGVyCiAg
ICBfU19maWxsKF9SYUl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nLAogICAg
ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgZmlsbF9uKF9f
cywgX19maWxsKTsKICAgICAgcmV0dXJuIF9fcyArIF9fcGFkZGluZzsKICAgIH0KCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIsIHR5cGVuYW1lIF9UYWc+CiAg
ICBfT3V0SXRlcgogICAgX1NfZmlsbChfT3V0SXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBf
X3BhZGRpbmcsIF9UYWcpCiAgICB7CiAgICAgIHdoaWxlICgtLV9fcGFkZGluZyA+PSAwKSB7ICpf
X3MgPSBfX2ZpbGw7ICsrX19zOyB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgaW5saW5lIF9PdXRJdGVy
CiAgICBfU19maWxsKF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZykK
ICAgIHsKICAgICAgcmV0dXJuIF9TX2ZpbGwoX19zLCBfX2ZpbGwsIF9fcGFkZGluZywKICAgICAg
ICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9PdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdv
cnkoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ
dGVyPgogICAgX091dEl0ZXIKICAgIF9TX3BhZF9udW1lcmljKF9PdXRJdGVyIF9fcywgaW9zX2Jh
c2U6OmZtdGZsYWdzICwKICAgICAgICAgICAgICAgICAgIF9DaGFyVCAsIGludCAsCiAgICAgICAg
ICAgICAgICAgICBfQ2hhclQgY29uc3QqICwgX0NoYXJUIGNvbnN0KiAsCiAgICAgICAgICAgICAg
ICAgICBfQ2hhclQgY29uc3QqICkKICAgIHsKCiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJUPgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+
CiAgICBfU19wYWRfbnVtZXJpYyhvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19zLCBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19mbGFncywKICAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX2ZpbGws
IGludCBfX3dpZHRoLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICBf
Q2hhclQgY29uc3QqIF9fbWlkZGxlLCBfQ2hhclQgY29uc3QqIF9fbGFzdCkKICAgIHsKICAgICAg
dHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19vdXRfaXRlcjsKICAgICAgaW50
IF9fcGFkZGluZyA9IF9fd2lkdGggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICAgIGlmIChfX3Bh
ZGRpbmcgPCAwKQogICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFn
cyBfX2FmbGFncyA9IF9fZmxhZ3MgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgIGJvb2wg
X190ZXN0ZmllbGQgPSBfX3BhZGRpbmcgPT0gMCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6bGVm
dAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19hZmxhZ3MgPT0gaW9zX2Jhc2U6OmludGVy
bmFsOwoKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbWlkZGxlKQogICAgICAgIHsKICAgICAgICAg
IGlmICghX190ZXN0ZmllbGQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfU19maWxsKF9f
cywgX19maWxsLCBfX3BhZGRpbmcpOwogICAgICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fcyk7CiAgICAgICAg
fQogICAgICBfX291dF9pdGVyIF9fczIgPSBfX3M7CgogICAgICBpZiAoX19wYWRkaW5nICYmIF9f
YWZsYWdzICE9IGlvc19iYXNlOjpsZWZ0KQogICAgICAgIHsKICAgICAgICAgIF9TX2ZpbGwoX19z
MiwgX19maWxsLCBfX3BhZGRpbmcpOwogICAgICAgICAgX19wYWRkaW5nID0gMDsKICAgICAgICB9
CiAgICAgIF9fb3V0X2l0ZXIgX19zMyA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19zMik7CiAg
ICAgIGlmIChfX3BhZGRpbmcpCiAgICAgICAgX1NfZmlsbChfX3MzLCBfX2ZpbGwsIF9fcGFkZGlu
Zyk7CiAgICAgIHJldHVybiBfX3MzOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091
dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90
eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2Fj
aGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX2dldChfX2lvKTsK
ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CgogICAgICBp
ZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIHJldHVybiBfU19mb3JtYXQo
X19zLCBfX2lvLCBfX2ZpbGwsIGZhbHNlLCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7CiAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUqIF9fbGFzdDsKICAgICAgICAgIGlmIChfX3YpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBfX2ZpcnN0ID0gX19mbXQtPl9NX3RydWVuYW1lLmRhdGEoKTsKICAgICAgICAg
ICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQtPl9NX3RydWVuYW1lLnNpemUoKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJz
dCA9IF9fZm10LT5fTV9mYWxzZW5hbWUuZGF0YSgpOwogICAgICAgICAgICAgIF9fbGFzdCA9IF9f
Zmlyc3QgKyBfX2ZtdC0+X01fZmFsc2VuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcyk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19z
OwogICAgfQoKCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAg
IF9TX2dyb3VwX2RpZ2l0cyhfQ2hhclQqIF9fcywgX0NoYXJUIF9fZ3JzZXAsIGNoYXIgY29uc3Qq
IF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCogX19ncmVuZCwgX0No
YXJUIGNvbnN0KiBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19s
YXN0KQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+ICpfX2dyb3VwaW5nKQogICAg
ICAgIHsKICAgICAgICAgIF9fcyA9IF9TX2dyb3VwX2RpZ2l0cyhfX3MsIF9fZ3JzZXAsCiAgICAg
ICAgICAgICAgKF9fZ3JvdXBpbmcgKyAxID09IF9fZ3JlbmQgPyBfX2dyb3VwaW5nIDogX19ncm91
cGluZyArIDEpLAogICAgICAgICAgICAgIF9fZ3JlbmQsIF9fZmlyc3QsIF9fbGFzdCAtICpfX2dy
b3VwaW5nKTsKICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19ncm91cGluZzsKICAgICAg
ICAgICpfX3MrKyA9IF9fZ3JzZXA7CiAgICAgICAgfQogICAgICBkbwogICAgICAgIHsKICAgICAg
ICAgICpfX3MrKyA9ICpfX2ZpcnN0Kys7CiAgICAgICAgfQogICAgICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QpOwogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciwgdHlwZW5hbWUgX1ZhbHVlVD4KICAgIF9PdXRJdGVy
CiAgICBfU19mb3JtYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmls
bCwgYm9vbCBfX25lZywKICAgICAgICAgICAgICBfVmFsdWVUIF9fdikKICAgIHsKCiAgICAgIGNv
bnN0IGxvbmcgX01fcm9vbSA9IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCAqIDIg
KyA0OwogICAgICBfQ2hhclQgX19kaWdpdHNbX01fcm9vbV07CiAgICAgIF9DaGFyVCogX19mcm9u
dCA9IF9fZGlnaXRzICsgX01fcm9vbTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3Mg
PSBfX2lvLmZsYWdzKCk7CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQg
PSBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgY2hhciBjb25zdCog
X190YWJsZSA9IF9fZm10LT5fU19saXRlcmFscyArIF9fZm10LT5fU19kaWdpdHM7CgogICAgICBp
b3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSAoX19mbGFncyAmIF9faW8uYmFzZWZpZWxk
KTsKICAgICAgX0NoYXJUKiBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgaWYgKF9fYmFzZWZp
ZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBp
b3NfYmFzZTo6dXBwZXJjYXNlKQogICAgICAgICAgICBfX3RhYmxlICs9IDE2OwogICAgICAgICAg
ZG8KICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbX192ICYgMTVdOwogICAgICAgICAg
d2hpbGUgKChfX3YgPj49IDQpICE9IDApOwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7
CiAgICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQtPl9T
X3ggKwogICAgICAgICAgICAgICAgICAgICAgICgoX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNh
c2UpID8gMSA6IDApXTsKICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jh
c2U6Om9jdCkKICAgICAgICB7CiAgICAgICAgICBkbwogICAgICAgICAgICAqLS1fX2Zyb250ID0g
X190YWJsZVtfX3YgJiA3XTsKICAgICAgICAgIHdoaWxlICgoX192ID4+PSAzKSAhPSAwKTsKICAg
ICAgICAgIGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgJiYg
c3RhdGljX2Nhc3Q8Y2hhcj4oKl9fZnJvbnQpICE9IF9fdGFibGVbMF0pCiAgICAgICAgICAgICot
LV9fZnJvbnQgPSBfX3RhYmxlWzBdOwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIGRvCiAgICAgICAgICAgICot
LV9fZnJvbnQgPSBfX3RhYmxlW19fdiAlIDEwXTsKICAgICAgICAgIHdoaWxlICgoX192IC89IDEw
KSAhPSAwKTsKICAgICAgICAgIF9fc2lnbl9lbmQgPSBfX2Zyb250OwoKICAgICAgICAgIGlmIChf
X25lZyB8fCAoX19mbGFncyAmIGlvc19iYXNlOjpzaG93cG9zKSkKICAgICAgICAgICAgKi0tX19m
cm9udCA9IF9fZm10LT5fU19saXRlcmFsc1tfX2ZtdC0+X1NfcGx1cyAtIF9fbmVnXTsKICAgICAg
ICB9CgoKICAgICAgaWYgKCFfX2ZtdC0+X01fdXNlX2dyb3VwaW5nICYmICFfX2lvLndpZHRoKCkp
CiAgICAgICAgcmV0dXJuIGNvcHkoX19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29tLCBfX3MpOwoK
ICAgICAgaWYgKCFfX2ZtdC0+X01fdXNlX2dyb3VwaW5nKQogICAgICAgIHJldHVybiBfU19wYWRf
bnVtZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0aCgwKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19mcm9udCwgX19zaWduX2VuZCwgX19kaWdpdHMgKyBfTV9yb29t
KTsKCiAgICAgIF9DaGFyVCogX19wID0gX19kaWdpdHM7CiAgICAgIHdoaWxlIChfX2Zyb250IDwg
X19zaWduX2VuZCkKICAgICAgICAqX19wKysgPSAqX19mcm9udCsrOwogICAgICBjb25zdCBjaGFy
KiBfX2dyID0gX19mbXQtPl9NX2dyb3VwaW5nLmRhdGEoKTsKICAgICAgX19mcm9udCA9IF9TX2dy
b3VwX2RpZ2l0cyhfX3AsIF9fZm10LT5fTV90aG91c2FuZHNfc2VwLCBfX2dyLAogICAgICAgIF9f
Z3IgKyBfX2ZtdC0+X01fZ3JvdXBpbmcuc2l6ZSgpLCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9N
X3Jvb20pOwogICAgICByZXR1cm4gX1NfcGFkX251bWVyaWMoX19zLCBfX2ZsYWdzLCBfX2ZpbGws
IF9faW8ud2lkdGgoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RpZ2l0cywgX19w
LCBfX2Zyb250KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg
ICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws
IGxvbmcgX192KSBjb25zdAogICAgewogICAgICB1bnNpZ25lZCBsb25nIF9fdXYgPSBfX3Y7CiAg
ICAgIGJvb2wgX19uZWcgPSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAgICAgICAgewogICAg
ICAgICAgX19uZWcgPSB0cnVlOwogICAgICAgICAgX191diA9IC1fX3V2OwogICAgICAgIH0KICAg
ICAgcmV0dXJuIF9TX2Zvcm1hdChfX3MsIF9faW8sIF9fZmlsbCwgX19uZWcsIF9fdXYpOwogICAg
fQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P
dXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNp
Z25lZCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9TX2Zvcm1hdChfX3MsIF9faW8sIF9f
ZmlsbCwgZmFsc2UsIF9fdik7IH0KIyA5NzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+CiAgICBzdGF0aWMgX091dEl0ZXIKICAgIF9TX291dHB1dF9mbG9hdChfT3V0
SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLAogICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIF9fc3B0ciwgc2l6ZV90IF9fc2xlbikKICAgIHsKCiAgICAgIHJldHVy
biBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzdGF0aWMgb3N0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+CiAgICBfU19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQ+IF9fcywgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAg
X0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3QgX19zbGVuKQogICAgewog
ICAgICBzaXplX3QgX19wYWRkaW5nID0gX19pby53aWR0aCgpID4gc3RyZWFtc2l6ZShfX3NsZW4p
ID8KICAgICAgICAgICAgICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDogMDsKICAg
ICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25z
dCYgX19jdCA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBpb3NfYmFz
ZTo6Zm10ZmxhZ3MgX19hZGpmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3Rm
aWVsZDsKICAgICAgY29uc3QgY2hhciogY29uc3QgX19lcHRyID0gX19zcHRyICsgX19zbGVuOwoK
ICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jhc2U6OmludGVybmFsKQogICAgICAgewoKICAg
ICAgICAgaWYgKF9fc3B0ciA8IF9fZXB0ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0ciA9
PSAnLScpKQogICAgICAgICAgIHsKICAgICAgICAgICAgIF9fcyA9IF9fY3Qud2lkZW4oKl9fc3B0
cik7CiAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICsrX19zcHRyOwogICAgICAgICAg
IH0KICAgICAgICAgX19zID0gX1NfZmlsbChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAg
ICAgX19wYWRkaW5nID0gMDsKICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGpmaWVsZCAhPSBp
b3NfYmFzZTo6bGVmdCkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfU19maWxsKF9fcywgX19m
aWxsLCBfX3BhZGRpbmcpOwogICAgICAgICAgX19wYWRkaW5nID0gMDsKICAgICAgICB9CgogICAg
ICBjaGFyIF9fZGVjaW1hbF9wb2ludCA9ICoobG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50KTsK
ICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRfY2FjaGU8
X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBmb3IgKDsgX19zcHRyICE9IF9fZXB0cjsgKytf
X3MsICsrX19zcHRyKQogICAgICAgewoKICAgICAgICAgaWYgKCpfX3NwdHIgPT0gX19kZWNpbWFs
X3BvaW50KQogICAgICAgICAgIF9fcyA9IF9fZm10LT5fTV9kZWNpbWFsX3BvaW50OwoKICAgICAg
ICAgZWxzZQogICAgICAgICAgIF9fcyA9IF9fY3Qud2lkZW4oKl9fc3B0cik7CiAgICAgICB9Cgog
ICAgICBpZiAoX19wYWRkaW5nKQogICAgICAgIF9TX2ZpbGwoX19zLCBfX2ZpbGwsIF9fcGFkZGlu
Zyk7CiAgICAgIF9faW8ud2lkdGgoMCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIGJvb2wK
ICBfU19idWlsZF9mbG9hdF9mb3JtYXQoaW9zX2Jhc2UmIF9faW8sIGNoYXIqIF9fZnB0ciwgY2hh
ciBfX21vZGlmaWVyLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25z
dAogICAgewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0
czxkb3VibGU+OjpkaWdpdHMxMCArIDM7CiAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5w
cmVjaXNpb24oKTsKCiAgICAgIGlmIChfX3ByZWMgPiBfX21heF9wcmVjKQogICAgICAgIF9fcHJl
YyA9IF9fbWF4X3ByZWM7CgogICAgICBjaGFyIF9fc2J1ZltfX21heF9wcmVjKjJdOwogICAgICBz
aXplX3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZdOwogICAgICBpZiAoX1NfYnVpbGRf
ZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgMCwgX19wcmVjKSkKICAgICAgICBfX3NsZW4gPSBz
cHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3ByZWMsIF9fdik7CiAgICAgIGVsc2UKICAgICAgICBf
X3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOwoKICAgICAgcmV0dXJuIF9TX291
dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19zYnVmLCBfX3NsZW4pOwogICAgfQoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy
CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJs
ZSBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19tYXhfcHJlYyA9IG51
bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1zaXpl
IF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhfcHJl
YykKICAgICAgICBfX3ByZWMgPSBfX21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19tYXhf
cHJlYyoyXTsKICAgICAgc2l6ZV90IF9fc2xlbjsKCiAgICAgIGNoYXIgX19mYnVmWzE2XTsKCiAg
ICAgIGlmICggX1NfYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBfX3ByZWMp
KQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192KTsK
ICAgICAgZWxzZQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7
CgogICAgICByZXR1cm4gX1Nfb3V0cHV0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBfX3NidWYs
IF9fc2xlbik7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAg
ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAog
ICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFn
cygpOwogICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9z
X2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6
OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQg
JiBfX2ZtdG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAg
ICB0cnkgewogICAgICAgIF9PdXRJdGVyIF9fczIgPSBfU19mb3JtYXQoX19zLCBfX2lvLCBfX2Zp
bGwsIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICBfX2lvLmZsYWdzKF9fZm10KTsKICAg
ICAgICByZXR1cm4gX19zMjsKICAgICAgfQogICAgICBjYXRjaCAoLi4uKSB7CiAgICAgICAgX19p
by5mbGFncyhfX2ZtdCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50PgogICAgc3RydWN0IF9X
ZWVrZGF5bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVjdCBfV2Vl
a2RheW5hbWVzPGNoYXIsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IF9T
X25hbWVzWzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3QgY2hh
ciogY29uc3QKICAgIF9XZWVrZGF5bmFtZXM8Y2hhciwgX0R1bW15Pjo6X1NfbmFtZXNbMTRdID0K
ICAgIHsKICAgICAgIlN1biIsICJTdW5kYXkiLAogICAgICAiTW9uIiwgIk1vbmRheSIsICJUdWUi
LCAiVHVlc2RheSIsICJXZWQiLCAiV2VkbmVzZGF5IiwKICAgICAgIlRodSIsICJUaHVyc2RheSIs
ICJGcmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSIKICAgIH07CiMgMTE0MSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfRHVtbXkgPSBpbnQ+CiAgICBzdHJ1Y3QgX01vbnRo
bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVjdCBfTW9udGhuYW1l
czxjaGFyLF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IF9TX25hbWVzWzI0
XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3QgY2hhciogY29uc3QK
ICAgIF9Nb250aG5hbWVzPGNoYXIsX0R1bW15Pjo6X1NfbmFtZXNbMjRdID0KICAgIHsKICAgICAg
IkphbiIsICJKYW51YXJ5IiwgIkZlYiIsICJGZWJydWFyeSIsICJNYXIiLCAiTWFyY2giLAogICAg
ICAiQXByIiwgIkFwcmlsIiwgIk1heSIsICJNYXkiLCAiSnVuIiwgIkp1bmUiLAogICAgICAiSnVs
IiwgIkp1bHkiLCAiQXVnIiwgIkF1Z3VzdCIsICJTZXAiLCAiU2VwdGVtYmVyIiwKICAgICAgIk9j
dCIsICJPY3RvYmVyIiwgIk5vdiIsICJOb3ZlbWJlciIsICJEZWMiLCAiRGVjZW1iZXIiCiAgICB9
OwojIDExNzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRj
YyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J
bkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3dlZWtkYXko
aXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLAogICAgICAgICAgICAgICAgICAgaW9zX2Jh
c2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgIHsK
ICAgICAgaWYgKCFfTV9kYXluYW1lcykKICAgICAgICB7CiAgICAgICAgICBfTV9kYXluYW1lcyA9
IG5ldyBiYXNpY19zdHJpbmc8X0NoYXJUPlsxNF07CiAgICAgICAgICBmb3IgKGludCBfX2kgPSAw
OyBfX2kgPCAxNDsgKytfX2kpCiAgICAgICAgICAgIF9NX2RheW5hbWVzW19faV0gPSBfV2Vla2Rh
eW5hbWVzPF9DaGFyVD46Ol9TX25hbWVzW19faV07CiAgICAgICAgfQogICAgICBib29sIF9fYXRf
ZW9mID0gZmFsc2U7CiAgICAgIGludCBfX3JlbWFpbiA9IDA7CiAgICAgIGludCBfX21hdGNoZXNb
MTRdOwogICAgICBpdGVyX3R5cGUgX19vdXQgPSBfX21hdGNoX3BhcmFsbGVsKF9fcywgX19lbmQs
IDE0LCBfTV9kYXluYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX21hdGNoZXMsIF9fcmVtYWluLCBfX2F0X2VvZik7CiAgICAgIF9fZXJyID0gaW9zX2Jhc2U6
Omlvc3RhdGUoMCk7CiAgICAgIGlmIChfX2F0X2VvZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7CiAg
ICAgIGlmIChfX3JlbWFpbiA9PSAxIHx8CiAgICAgICAgICBfX3JlbWFpbiA9PSAyICYmIChfX21h
dGNoZXNbMF0+PjEpID09IChfX21hdGNoZXNbMV0+PjEpKQogICAgICAgIF9fdC0+dG1fd2RheSA9
IChfX21hdGNoZXNbMF0+PjEpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gX19pby5mYWls
Yml0OwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l
bmQsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01fbW9udGhuYW1lcykK
ICAgICAgICB7CiAgICAgICAgICBfTV9tb250aG5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hh
clQ+WzI0XTsKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDI0OyArK19faSkKICAg
ICAgICAgICAgX01fbW9udGhuYW1lc1tfX2ldID0gX01vbnRobmFtZXM8X0NoYXJUPjo6X1NfbmFt
ZXNbX19pXTsKICAgICAgICB9CiAgICAgIGJvb2wgX19hdF9lb2YgPSBmYWxzZTsKICAgICAgaW50
IF9fcmVtYWluID0gMDsKICAgICAgaW50IF9fbWF0Y2hlc1syNF07CiAgICAgIGl0ZXJfdHlwZSBf
X291dCA9IF9fbWF0Y2hfcGFyYWxsZWwoIF9fcywgX19lbmQsIDI0LCBfTV9tb250aG5hbWVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXMsIF9fcmVt
YWluLCBfX2F0X2VvZik7CiAgICAgIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoMCk7CiAgICAg
IGlmIChfX2F0X2VvZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7CiAgICAgIGlmIChfX3JlbWFpbiA9
PSAxIHx8CiAgICAgICAgICBfX3JlbWFpbiA9PSAyICYmIChfX21hdGNoZXNbMF0+PjEpID09IChf
X21hdGNoZXNbMV0+PjEpKQogICAgICAgIF9fdC0+dG1fbW9uID0gKF9fbWF0Y2hlc1swXT4+MSk7
CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7CiAgICAgIHJldHVybiBf
X291dDsKICAgIH0KfQojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xv
Y2FsZS5oIiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3Ry
ZWFtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1wYy1saW51eC1nbnUv
Mi45Ny9pbmNsdWRlL2JpdHMvYysrdGhyZWFkcy5oIiAxIDMgNAojIDQyICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFz
aWNfZmlsZWJ1ZiA6IHB1YmxpYyBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5
cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBl
Ojpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6
b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90
eXBlLCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19m
aWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBl
ZGVmIF9fYmFzaWNfZmlsZTxjaGFyX3R5cGU+IF9fZmlsZV90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIHRyYWl0c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKICAgICAgdHlwZWRl
ZiBjb2RlY3Z0PGNoYXJfdHlwZSwgY2hhciwgX19zdGF0ZV90eXBlPiBfX2NvZGVjdnRfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7
CgogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CgogICAgcHJpdmF0ZToKCgogICAgICBfX2Zp
bGVfdHlwZSogX01fZmlsZTsKCgogICAgICBfX3N0YXRlX3R5cGUgX01fc3RhdGVfY3VyOwogICAg
ICBfX3N0YXRlX3R5cGUgX01fc3RhdGVfYmVnOwoKCiAgICAgIGNvbnN0IF9fY29kZWN2dF90eXBl
KiBfTV9mY3Z0OwoKCiAgICAgIF9fY19sb2NrIF9NX2xvY2s7CgoKICAgICAgYm9vbCBfTV9sYXN0
X292ZXJmbG93ZWQ7CgogICAgcHVibGljOgoKICAgICAgYmFzaWNfZmlsZWJ1ZigpOwoKCiAgICAg
IGJhc2ljX2ZpbGVidWYoaW50IF9fZmQsIGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9w
ZW5tb2RlIF9fbW9kZSk7CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19maWxlYnVmKCkKICAg
ICAgewogICAgICAgIHRoaXMtPmNsb3NlKCk7CiAgICAgICAgX01fZmN2dCA9IF9fbnVsbDsKICAg
ICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGJvb2wKICAg
ICAgaXNfb3Blbih2b2lkKSBjb25zdCB7IHJldHVybiBfTV9maWxlID8gX01fZmlsZS0+aXNfb3Bl
bigpIDogZmFsc2U7IH0KCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICBvcGVuKGNvbnN0IGNo
YXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSk7CgogICAgICBfX2ZpbGVidWZfdHlw
ZSoKICAgICAgY2xvc2Uodm9pZCk7CgogICAgcHJvdGVjdGVkOgoKICAgICAgdm9pZAogICAgICBf
TV9hbGxvY2F0ZV9idWZmZXJzKCk7CgoKICAgICAgdm9pZAogICAgICBfTV9maWxlYnVmX2luaXQo
KTsKCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKHZvaWQpOwoKCgoK
CiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KHZvaWQpOwoKICAgICAgdmly
dHVhbCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9m
KCkpOwojIDE0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFtLmgi
IDMKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSBf
VHJhaXRzOjplb2YoKSk7CiMgMTUwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2ZzdHJlYW0uaCIgMwogICAgICBpbnRfdHlwZQogICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coaW50
X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkpOwoKICAgICAgdmlydHVhbCBfX3N0cmVhbWJ1Zl90
eXBlKgogICAgICBzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7
CiAgICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19zID09IDAgJiYgX19uID09IDApCiAg
ICAgICAgICB7CiAgICAgICAgICAgIF9NX2J1Zl9zaXplID0gMDsKICAgICAgICAgICAgX01fYnVm
X3NpemVfb3B0ID0gMDsKICAgICAgICAgIH0KICAgICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBm
YWxzZTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQoKICAgICAgdmlydHVhbCBwb3NfdHlw
ZQogICAgICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwg
aW9zX2Jhc2U6Om91dCk7CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3MocG9z
X3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlv
c19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3lu
Yyh2b2lkKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9N
X291dF9iZWcgPCBfTV9vdXRfZW5kOwogICAgICAgIGlmIChfX3Rlc3RwdXQpCiAgICAgICAgICB7
CgoKICAgICAgICAgICAgX01fZmlsZS0+c3luYygpOwoKCgoKCiAgICAgICAgICAgIHN0cmVhbW9m
ZiBfX2N1ciA9IF9NX2ZpbGUtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1cik7CiAgICAgICAgICAg
IG9mZl90eXBlIF9fb2ZmID0gX01fb3V0X2N1ciAtIF9NX291dF9iZWc7CiAgICAgICAgICAgIF9N
X3JlYWxseV9vdmVyZmxvdygpOwogICAgICAgICAgICBfTV9maWxlLT5zZWVrcG9zKF9fY3VyICsg
X19vZmYpOwogICAgICAgICAgfQogICAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwog
ICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUo
Y29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNn
ZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgewogICAgICAgIHN0cmVh
bXNpemUgX19yZXQgPSAwOwoKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsK
ICAgICAgICAgICAgd2hpbGUgKF9fcmV0IDwgX19uICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkK
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqX19zID0gKl9NX2luX2N1cjsKICAgICAg
ICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAg
ICsrX01faW5fY3VyOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgX01fcGJhY2tfZGVzdHJv
eSgpOwogICAgICAgICAgfQogICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgIF9fcmV0
ICs9IF9fc3RyZWFtYnVmX3R5cGU6OnhzZ2V0bihfX3MsIF9fbiAtIF9fcmV0KTsKICAgICAgICBy
ZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c3B1
dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7CiAgICAgICAg
X01fcGJhY2tfZGVzdHJveSgpOwogICAgICAgIHJldHVybiBfX3N0cmVhbWJ1Zl90eXBlOjp4c3B1
dG4oX19zLCBfX24pOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX291dHB1dF91bnNoaWZ0
KCk7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19m
aWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pc3RyZWFtX3R5cGU7
CgoKICAgICAgYmFzaWNfaWZzdHJlYW0oKQogICAgICA6IF9faXN0cmVhbV90eXBlKG5ldyBfX2Zp
bGVidWZfdHlwZSgpKQogICAgICB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lmc3Ry
ZWFtKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl
OjppbikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShuZXcgX19maWxlYnVmX3R5cGUoKSkKICAgICAg
eyB0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsgfQoKICAgICAgfmJhc2ljX2lmc3RyZWFtKCkKICAg
ICAgewogICAgICAgIGRlbGV0ZSBfTV9zdHJlYW1idWY7CiAgICAgICAgX01fc3RyZWFtYnVmID0g
X19udWxsOwogICAgICB9CgoKICAgICAgX19maWxlYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29u
c3QKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X19maWxlYnVmX3R5cGUqPihfTV9zdHJlYW1i
dWYpOyB9CgogICAgICBib29sCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gcmRidWYoKS0+
aXNfb3BlbigpOyB9CgogICAgICB2b2lkCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3Nf
YmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQogICAgICB7CiAgICAgICAgaWYg
KHJkYnVmKCktPm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pID09IF9fbnVsbCkKICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQoKICAgICAg
dm9pZAogICAgICBjbG9zZSh2b2lkKQogICAgICB7CiAgICAgICAgaWYgKCFyZGJ1ZigpLT5jbG9z
ZSgpKQogICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9
CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtIDogcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULF9U
cmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
dHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRy
YWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVi
dWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX29zdHJlYW1fdHlwZTsKCgog
ICAgICBiYXNpY19vZnN0cmVhbSgpCiAgICAgIDogX19vc3RyZWFtX3R5cGUobmV3IF9fZmlsZWJ1
Zl90eXBlKCkpCiAgICAgIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb2ZzdHJlYW0o
Y29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUg
X19tb2RlID0gaW9zX2Jhc2U6Om91dHxpb3NfYmFzZTo6dHJ1bmMpCiAgICAgIDogX19vc3RyZWFt
X3R5cGUobmV3IF9fZmlsZWJ1Zl90eXBlKCkpCiAgICAgIHsgdGhpcy0+b3BlbihfX3MsIF9fbW9k
ZSk7IH0KCiAgICAgIH5iYXNpY19vZnN0cmVhbSgpCiAgICAgIHsKICAgICAgICBkZWxldGUgX01f
c3RyZWFtYnVmOwogICAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fbnVsbDsKICAgICAgfQoKCiAgICAg
IF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1Zih2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxfX2ZpbGVidWZfdHlwZSo+KF9NX3N0cmVhbWJ1Zik7IH0KCiAgICAgIGJvb2wK
ICAgICAgaXNfb3Blbih2b2lkKSB7IHJldHVybiByZGJ1ZigpLT5pc19vcGVuKCk7IH0KCiAgICAg
IHZvaWQKICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAgaW9zX2Jhc2U6Om9w
ZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXQgfCBpb3NfYmFzZTo6dHJ1bmMpCiAgICAgIHsK
ICAgICAgICBpZiAoIXJkYnVmKCktPm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6b3V0KSkK
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQoKICAg
ICAgdm9pZAogICAgICBjbG9zZSh2b2lkKQogICAgICB7CiAgICAgICAgaWYgKCFyZGJ1ZigpLT5j
bG9zZSgpKQogICAgICAgICAgc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CiAg
ICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGNsYXNzIGJhc2ljX2ZzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaW9zdHJlYW08X0NoYXJULCBfVHJh
aXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
dHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRy
YWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp
dHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVm
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVm
IGJhc2ljX2lvc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faW9zdHJlYW1fdHlwZTsK
CgogICAgICBiYXNpY19mc3RyZWFtKCkKICAgICAgOiBfX2lvc3RyZWFtX3R5cGUobmV3IF9fZmls
ZWJ1Zl90eXBlKCkpCiAgICAgIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfZnN0cmVh
bShjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl
IF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19pb3N0cmVh
bV90eXBlKG5ldyBfX2ZpbGVidWZfdHlwZSgpKQogICAgICB7IHRoaXMtPm9wZW4oX19zLCBfX21v
ZGUpOyB9CgogICAgICB+YmFzaWNfZnN0cmVhbSgpCiAgICAgIHsKICAgICAgICBkZWxldGUgX01f
c3RyZWFtYnVmOwogICAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fbnVsbDsKICAgICAgfQoKCiAgICAg
IF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1Zih2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxfX2ZpbGVidWZfdHlwZSo+KF9NX3N0cmVhbWJ1Zik7IH0KCiAgICAgIGJvb2wK
ICAgICAgaXNfb3Blbih2b2lkKSB7IHJldHVybiByZGJ1ZigpLT5pc19vcGVuKCk7IH0KCiAgICAg
IHZvaWQKICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAgaW9zX2Jhc2U6Om9w
ZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsKICAg
ICAgICBpZiAoIXJkYnVmKCktPm9wZW4oX19zLCBfX21vZGUpKQogICAgICAgICAgc2V0c3RhdGUg
KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBjbG9zZSh2b2lk
KQogICAgICB7CiAgICAgICAgaWYgKCFyZGJ1ZigpLT5jbG9zZSgpKQogICAgICAgICAgc2V0c3Rh
dGUgKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKCn0KIyAzICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2ZzdHJlYW0iIDIgMwojIDYgInZlY3Rvcl90ZXN0LmNjIiAyCgpjbGFz
cyBteV90IHsKcHVibGljOgogICAgbXlfdCgpIHt9Owpwcml2YXRlOgogICAgc3RkOjp2ZWN0b3I8
aW50PiB2Owp9OwoKaW50IG1haW4oKSB7fQo=


More information about the Gcc-prs mailing list