Files
rose-ash/shared/static/wasm/sx_browser.bc.js
giles 4db1f85fe8
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 44s
Fix dict equality: structural eq for plain dicts, Integer/Number in equal?
Two related kernel bugs were causing the HS conformance test
"arrays containing objects work" to fail with the misleading message
"Expected ({:a 1} {:b 2}) but got ({:a 1} {:b 2})".

1. sx_primitives.ml safe_eq: Dict/Dict only returned true for DOM-wrapped
   dicts (those carrying __host_handle); all other dict pairs returned
   false unconditionally. Plain dict literals can never have been =
   to each other. Add the structural-equality fallback: when neither
   side has a host handle, compare lengths and walk keys.

2. sx_browser.ml deep_equal (the kernel binding for equal?): had a
   Number/Number branch but no Integer/Integer or cross-Integer/Number
   branches, so since the numeric tower change Integer 1 vs Integer 1
   was falling through to the catch-all and returning false. Mirror the
   cases from run_tests.ml deep_equal which already had them.

Verified via direct kernel probe:
  (= {:a 1} {:a 1})                        => true   (was false)
  (= {:a 1 :b 2} {:b 2 :a 1})              => true   (was false)
  (equal? 1 1)                             => true   (was false)
  (equal? {:a 1} {:a 1})                   => true   (was false)
  (equal? (list {:a 1}) (list {:a 1}))     => true   (was false)

HS suite arrayLiteral: 7/8 → 8/8.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 21:20:43 +00:00

69342 lines
5.4 MiB

// Generated by js_of_ocaml
//# buildInfo:effects=disabled, kind=unknown, use-js-string=true, version=6.3.2
//# 7 ".sx_browser.eobjs/jsoo/sx_browser.bc.runtime.js"
(function
(Object){
typeof globalThis !== "object"
&&
(this
? get()
: (Object.defineProperty
(Object.prototype, "_T_", {configurable: true, get: get}),
_T_));
function get(){
var global = this || self;
global.globalThis = global;
delete Object.prototype._T_;
}
}
(Object));
(function(globalThis){
"use strict";
function caml_string_of_jsbytes(x){return x;}
class JsStringReader{
constructor(s, i){this.s = s; this.i = i;}
read8u(){return this.s.charCodeAt(this.i++);}
read8s(){return this.s.charCodeAt(this.i++) << 24 >> 24;}
read16u(){
var s = this.s, i = this.i;
this.i = i + 2;
return s.charCodeAt(i) << 8 | s.charCodeAt(i + 1);
}
read16s(){
var s = this.s, i = this.i;
this.i = i + 2;
return s.charCodeAt(i) << 24 >> 16 | s.charCodeAt(i + 1);
}
read32u(){
var s = this.s, i = this.i;
this.i = i + 4;
return (s.charCodeAt(i) << 24 | s.charCodeAt(i + 1) << 16
| s.charCodeAt(i + 2) << 8
| s.charCodeAt(i + 3))
>>> 0;
}
read32s(){
var s = this.s, i = this.i;
this.i = i + 4;
return s.charCodeAt(i) << 24 | s.charCodeAt(i + 1) << 16
| s.charCodeAt(i + 2) << 8
| s.charCodeAt(i + 3);
}
readstr(len){
var i = this.i;
this.i = i + len;
return caml_string_of_jsbytes(this.s.slice(i, i + len));
}
readuint8array(len){
var b = new Uint8Array(len), s = this.s, i = this.i;
for(var j = 0; j < len; j++) b[j] = s.charCodeAt(i + j);
this.i = i + len;
return b;
}
}
var jsoo_text_decoder = new TextDecoder();
function caml_convert_bytes_to_array(s){
var a = new Uint8Array(s.l), b = s.c, l = b.length, i = 0;
for(; i < l; i++) a[i] = b.charCodeAt(i);
for(l = s.l; i < l; i++) a[i] = 0;
s.c = a;
s.t = 4;
return a;
}
function caml_uint8_array_of_bytes(s){
if(s.t !== 4) caml_convert_bytes_to_array(s);
return s.c;
}
function caml_str_repeat(n, s){return s.repeat(n);}
function caml_sub_uint8_array_to_jsbytes(a, i, len){
var f = String.fromCharCode;
if(i === 0 && len <= 4096 && len === a.length) return f.apply(null, a);
var s = "";
for(; 0 < len; i += 1024, len -= 1024)
s += f.apply(null, a.subarray(i, i + Math.min(len, 1024)));
return s;
}
function caml_convert_string_to_bytes(s){
if(s.t === 2)
s.c += caml_str_repeat(s.l - s.c.length, "\0");
else
s.c = caml_sub_uint8_array_to_jsbytes(s.c, 0, s.c.length);
s.t = 0;
}
function jsoo_is_ascii(s){
if(s.length < 24){
for(var i = 0; i < s.length; i++) if(s.charCodeAt(i) > 127) return false;
return true;
}
else
return ! /[^\x00-\x7f]/.test(s);
}
class MlBytes{
constructor(tag, contents, length){
this.t = tag;
this.c = contents;
this.l = length;
}
toString(){
switch(this.t){
case 9:
case 8:
return this.c;
case 4:
case 2:
caml_convert_string_to_bytes(this);
case 0:
if(jsoo_is_ascii(this.c)) this.t = 9; else this.t = 8; return this.c;
}
}
toUtf16(){
if(this.t === 9) return this.c;
var a = caml_uint8_array_of_bytes(this);
return jsoo_text_decoder.decode(a);
}
slice(){
var content = this.t === 4 ? this.c.slice() : this.c;
return new MlBytes(this.t, content, this.l);
}
}
function MlChanid(id){this.id = id;}
var jsoo_static_env = {};
function jsoo_sys_getenv(n){
if(jsoo_static_env[n]) return jsoo_static_env[n];
var process = globalThis.process;
if(process && process.env && process.env[n] !== undefined)
return process.env[n];
if(globalThis.jsoo_env && typeof globalThis.jsoo_env[n] === "string")
return globalThis.jsoo_env[n];
}
var caml_record_backtrace_env_flag = 0;
(function(){
var r = jsoo_sys_getenv("OCAMLRUNPARAM");
if(r !== undefined){
var l = r.split(",");
for(var i = 0; i < l.length; i++)
if(l[i] === "b"){
caml_record_backtrace_env_flag = 1;
break;
}
else if(l[i].startsWith("b="))
caml_record_backtrace_env_flag = + l[i].slice(2);
else
continue;
}
}
());
var
caml_record_backtrace_runtime_flag = caml_record_backtrace_env_flag,
caml_global_data = [0];
function caml_exn_with_js_backtrace(exn, force){
if(! exn.js_error || force || exn[0] === 248)
exn.js_error = new globalThis.Error("Js exception containing backtrace");
return exn;
}
function caml_maybe_attach_backtrace(exn, force){
return caml_record_backtrace_env_flag
&& caml_record_backtrace_runtime_flag
? caml_exn_with_js_backtrace(exn, force)
: exn;
}
function caml_raise_with_arg(tag, arg){
throw caml_maybe_attach_backtrace([0, tag, arg]);
}
var jsoo_text_encoder = new TextEncoder();
function caml_subarray_to_jsbytes(a, i, len){
var f = String.fromCharCode;
if(i === 0 && len <= 4096 && len === a.length) return f.apply(null, a);
var s = "";
for(; 0 < len; i += 1024, len -= 1024)
s += f.apply(null, a.slice(i, i + Math.min(len, 1024)));
return s;
}
function caml_string_of_array(a){
return caml_string_of_jsbytes(caml_subarray_to_jsbytes(a, 0, a.length));
}
function caml_string_of_jsstring(s){
if(jsoo_is_ascii(s)) return caml_string_of_jsbytes(s);
var a = jsoo_text_encoder.encode(s);
return caml_string_of_array(a);
}
function caml_raise_sys_error(msg){
caml_raise_with_arg
(caml_global_data.Sys_error, caml_string_of_jsstring(msg));
}
function caml_raise_with_args(tag, args){
throw caml_maybe_attach_backtrace([0, tag].concat(args));
}
var
unix_error =
["E2BIG",
"EACCES",
"EAGAIN",
"EBADF",
"EBUSY",
"ECHILD",
"EDEADLK",
"EDOM",
"EEXIST",
"EFAULT",
"EFBIG",
"EINTR",
"EINVAL",
"EIO",
"EISDIR",
"EMFILE",
"EMLINK",
"ENAMETOOLONG",
"ENFILE",
"ENODEV",
"ENOENT",
"ENOEXEC",
"ENOLCK",
"ENOMEM",
"ENOSPC",
"ENOSYS",
"ENOTDIR",
"ENOTEMPTY",
"ENOTTY",
"ENXIO",
"EPERM",
"EPIPE",
"ERANGE",
"EROFS",
"ESPIPE",
"ESRCH",
"EXDEV",
"EWOULDBLOCK",
"EINPROGRESS",
"EALREADY",
"ENOTSOCK",
"EDESTADDRREQ",
"EMSGSIZE",
"EPROTOTYPE",
"ENOPROTOOPT",
"EPROTONOSUPPORT",
"ESOCKTNOSUPPORT",
"EOPNOTSUPP",
"EPFNOSUPPORT",
"EAFNOSUPPORT",
"EADDRINUSE",
"EADDRNOTAVAIL",
"ENETDOWN",
"ENETUNREACH",
"ENETRESET",
"ECONNABORTED",
"ECONNRESET",
"ENOBUFS",
"EISCONN",
"ENOTCONN",
"ESHUTDOWN",
"ETOOMANYREFS",
"ETIMEDOUT",
"ECONNREFUSED",
"EHOSTDOWN",
"EHOSTUNREACH",
"ELOOP",
"EOVERFLOW"];
function make_unix_err_args(code, syscall, path, errno){
var variant = unix_error.indexOf(code);
if(variant < 0){if(errno == null) errno = - 9999; variant = [0, - errno];}
var
args =
[variant,
caml_string_of_jsstring(syscall || ""),
caml_string_of_jsstring(path || "")];
return args;
}
var caml_named_values = {};
function caml_named_value(nm){return caml_named_values[nm];}
function caml_raise_system_error(raise_unix, code, cmd, msg, path){
var unix_error = caml_named_value("Unix.Unix_error");
if(raise_unix && unix_error)
caml_raise_with_args(unix_error, make_unix_err_args(code, cmd, path));
else{
var msg = code + ": " + msg + ", " + cmd;
if(path !== undefined) msg += " '" + path + "'";
caml_raise_sys_error(msg);
}
}
function caml_is_ml_bytes(s){return s instanceof MlBytes;}
function caml_is_ml_string(s){
return typeof s === "string" && ! /[^\x00-\xff]/.test(s);
}
function caml_bytes_of_array(a){
if(! (a instanceof Uint8Array)) a = new Uint8Array(a);
return new MlBytes(4, a, a.length);
}
function caml_bytes_of_jsbytes(s){return new MlBytes(0, s, s.length);}
function caml_jsbytes_of_string(x){return x;}
function caml_bytes_of_string(s){
return caml_bytes_of_jsbytes(caml_jsbytes_of_string(s));
}
function caml_raise_no_such_file(name, raise_unix){
caml_raise_system_error
(raise_unix, "ENOENT", "no such file or directory", name);
}
function caml_bytes_of_uint8_array(a){return new MlBytes(4, a, a.length);}
function caml_raise_with_string(tag, msg){
caml_raise_with_arg(tag, caml_string_of_jsbytes(msg));
}
function caml_invalid_argument(msg){
caml_raise_with_string(caml_global_data.Invalid_argument, msg);
}
function caml_create_bytes(len){
if(len < 0) caml_invalid_argument("Bytes.create");
return new MlBytes(len ? 2 : 9, "", len);
}
function caml_ml_bytes_length(s){return s.l;}
function caml_blit_bytes(s1, i1, s2, i2, len){
if(len === 0) return 0;
if(i2 === 0 && (len >= s2.l || s2.t === 2 && len >= s2.c.length)){
s2.c =
s1.t === 4
? caml_sub_uint8_array_to_jsbytes(s1.c, i1, len)
: i1 === 0 && s1.c.length === len ? s1.c : s1.c.slice(i1, i1 + len);
s2.t = s2.c.length === s2.l ? 0 : 2;
}
else if(s2.t === 2 && i2 === s2.c.length){
s2.c +=
s1.t === 4
? caml_sub_uint8_array_to_jsbytes(s1.c, i1, len)
: i1 === 0 && s1.c.length === len ? s1.c : s1.c.slice(i1, i1 + len);
s2.t = s2.c.length === s2.l ? 0 : 2;
}
else{
if(s2.t !== 4) caml_convert_bytes_to_array(s2);
var c1 = s1.c, c2 = s2.c;
if(s1.t === 4)
if(i2 <= i1)
for(var i = 0; i < len; i++) c2[i2 + i] = c1[i1 + i];
else
for(var i = len - 1; i >= 0; i--) c2[i2 + i] = c1[i1 + i];
else{
var l = Math.min(len, c1.length - i1);
for(var i = 0; i < l; i++) c2[i2 + i] = c1.charCodeAt(i1 + i);
for(; i < len; i++) c2[i2 + i] = 0;
}
}
return 0;
}
function MlFile(){}
class MlFakeFile extends MlFile {
constructor(content){super(); this.data = content;}
truncate(len){
var old = this.data, old_len = caml_ml_bytes_length(old);
this.data = caml_create_bytes(len | 0);
caml_blit_bytes(old, 0, this.data, 0, Math.min(len, old_len));
}
length(){return caml_ml_bytes_length(this.data);}
write(offset, buf, pos, len){
var clen = this.length();
if(offset + len >= clen){
var new_str = caml_create_bytes(offset + len), old_data = this.data;
this.data = new_str;
caml_blit_bytes(old_data, 0, this.data, 0, clen);
}
caml_blit_bytes
(caml_bytes_of_uint8_array(buf), pos, this.data, offset, len);
return len;
}
read(offset, buf, pos, len){
var clen = this.length();
if(offset + len >= clen) len = clen - offset;
if(len > 0){
var data = caml_create_bytes(len | 0);
caml_blit_bytes(this.data, offset, data, 0, len);
buf.set(caml_uint8_array_of_bytes(data), pos);
return len;
}
return 0;
}
}
class MlFakeFd{
constructor(name, file, flags){
this.file = file;
this.name = name;
this.flags = flags;
this.offset = 0;
this.seeked = false;
}
err_closed(cmd, raise_unix){
caml_raise_system_error(raise_unix, "EBADF", cmd, "bad file descriptor");
}
length(){
if(this.file) return this.file.length();
this.err_closed("length");
}
truncate(len, raise_unix){
if(this.file){
if(! (this.flags.wronly || this.flags.rdwr))
caml_raise_system_error
(raise_unix, "EINVAL", "truncate", "invalid argument");
return this.file.truncate(len);
}
this.err_closed("truncate", raise_unix);
}
write(buf, pos, len, raise_unix){
if(this.file && (this.flags.wronly || this.flags.rdwr)){
var offset = this.offset;
len = this.file.write(offset, buf, pos, len);
this.offset += len;
return len;
}
this.err_closed("write", raise_unix);
}
read(buf, pos, len, raise_unix){
if(this.file && ! this.flags.wronly){
var offset = this.offset;
len = this.file.read(offset, buf, pos, len);
this.offset += len;
return len;
}
this.err_closed("read", raise_unix);
}
seek(offset, whence, raise_unix){
switch(whence){
case 0: break;
case 1:
offset += this.offset; break;
case 2:
offset += this.length(); break;
}
if(offset < 0)
caml_raise_system_error
(raise_unix, "EINVAL", "lseek", "invalid argument");
this.offset = offset;
this.seeked = true;
return offset;
}
pos(){return this.offset;}
close(){if(! this.file) this.err_closed("close"); this.file = undefined;}
check_stream_semantics(cmd){
if(! this.file) return this.err_closed(cmd, 1);
}
}
class MlFakeDevice{
constructor(root, f){
this.content = {};
this.root = root;
this.lookupFun = f;
}
nm(name){return this.root + name;}
create_dir_if_needed(name){
var comp = name.split("/"), res = "";
for(var i = 0; i < comp.length - 1; i++){
res += comp[i] + "/";
if(this.content[res]) continue;
this.content[res] = Symbol("directory");
}
}
slash(name){return /\/$/.test(name) ? name : name + "/";}
lookup(name){
if(! this.content[name] && this.lookupFun){
var
res =
this.lookupFun
(caml_string_of_jsstring(this.root), caml_string_of_jsstring(name));
if(res !== 0){
this.create_dir_if_needed(name);
this.content[name] = new MlFakeFile(caml_bytes_of_string(res[1]));
}
}
}
exists(name, do_not_lookup){
if(name === "") return 1;
var name_slash = this.slash(name);
if(this.content[name_slash]) return 1;
if(! do_not_lookup) this.lookup(name);
return this.content[name] ? 1 : 0;
}
isFile(name){return this.exists(name) && ! this.is_dir(name) ? 1 : 0;}
rename_dir(oldname, newname){
if(this.exists(newname)){
if(! this.is_dir(newname))
caml_raise_sys_error
(this.nm(newname) + " : file already exists and is not a directory");
if(this.readdir(newname).length > 0)
caml_raise_sys_error(this.nm(newname) + " : directory not empty");
}
var old_slash = this.slash(oldname), new_slash = this.slash(newname);
this.create_dir_if_needed(new_slash);
for(const f of this.readdir(oldname))
this.rename(old_slash + f, new_slash + f);
delete this.content[old_slash];
}
rename(oldname, newname){
if(! this.exists(oldname))
caml_raise_sys_error(this.nm(oldname) + " : no such file or directory");
if(this.is_dir(oldname))
this.rename_dir(oldname, newname);
else{
if(this.exists(newname) && this.is_dir(newname))
caml_raise_sys_error
(this.nm(newname) + " : file already exists and is a directory");
this.content[newname] = this.content[oldname];
delete this.content[oldname];
}
}
mkdir(name, _mode, raise_unix){
if(this.exists(name))
caml_raise_system_error
(raise_unix, "EEXIST", "mkdir", "file already exists", this.nm(name));
var parent = /^(.*)\/[^/]+/.exec(name);
parent = parent?.[1] || "";
if(! this.exists(parent))
caml_raise_system_error
(raise_unix,
"ENOENT",
"mkdir",
"no such file or directory",
this.nm(name));
if(! this.is_dir(parent))
caml_raise_system_error
(raise_unix, "ENOTDIR", "mkdir", "not a directory", this.nm(name));
this.create_dir_if_needed(this.slash(name));
}
rmdir(name, raise_unix){
var name_slash = name === "" ? "" : this.slash(name);
if(! this.exists(name))
caml_raise_system_error
(raise_unix,
"ENOENT",
"rmdir",
"no such file or directory",
this.nm(name));
if(! this.is_dir(name))
caml_raise_system_error
(raise_unix, "ENOTDIR", "rmdir", "not a directory", this.nm(name));
for(var n in this.content)
if(n.startsWith(name_slash) && n !== name_slash)
caml_raise_system_error
(raise_unix,
"ENOTEMPTY",
"rmdir",
"directory not empty",
this.nm(name));
delete this.content[name_slash];
}
readdir(name){
var name_slash = name === "" ? "" : this.slash(name);
if(! this.exists(name))
caml_raise_sys_error(name + ": No such file or directory");
if(! this.is_dir(name))
caml_raise_sys_error(name + ": Not a directory");
var seen = {}, a = [];
for(var n in this.content)
if(n.startsWith(name_slash) && n !== name_slash){
var last = n.indexOf("/", name_slash.length);
if(last < 0) last = undefined;
var m = n.slice(name_slash.length, last);
if(m && ! seen[m]){seen[m] = true; a.push(m);}
}
return a;
}
opendir(name, raise_unix){
var a = this.readdir(name), c = false, i = 0;
return {readSync:
function(){
if(c)
caml_raise_system_error
(raise_unix, "EBADF", "readdir", "bad file descriptor");
if(i === a.length) return null;
var entry = a[i];
i++;
return {name: entry};
},
closeSync:
function(){
if(c)
caml_raise_system_error
(raise_unix, "EBADF", "readdir", "bad file descriptor");
c = true;
a = [];
}};
}
is_dir(name){
if(name === "") return true;
var name_slash = this.slash(name);
return this.content[name_slash] ? 1 : 0;
}
unlink(name, raise_unix){
if(! this.exists(name, true))
caml_raise_system_error
(raise_unix, "ENOENT", "unlink", "no such file or directory", name);
delete this.content[name];
return 0;
}
access(name, _flags, raise_unix){
this.lookup(name);
if(this.content[name]){
if(this.is_dir(name))
caml_raise_system_error
(raise_unix,
"EACCESS",
"access",
"permission denied,",
this.nm(name));
}
else
caml_raise_no_such_file(this.nm(name), raise_unix);
return 0;
}
open(name, f, _perms, raise_unix){
var file;
this.lookup(name);
if(this.content[name]){
if(this.is_dir(name))
caml_raise_system_error
(raise_unix,
"EISDIR",
"open",
"illegal operation on a directory",
this.nm(name));
if(f.create && f.excl)
caml_raise_system_error
(raise_unix, "EEXIST", "open", "file already exists", this.nm(name));
file = this.content[name];
if(f.truncate) file.truncate(0);
}
else if(f.create){
this.create_dir_if_needed(name);
this.content[name] = new MlFakeFile(caml_create_bytes(0));
file = this.content[name];
}
else
caml_raise_no_such_file(this.nm(name), raise_unix);
return new MlFakeFd(this.nm(name), file, f);
}
truncate(name, len, raise_unix){
var file;
this.lookup(name);
if(this.content[name]){
if(this.is_dir(name))
caml_raise_system_error
(raise_unix,
"EISDIR",
"open",
"illegal operation on a directory",
this.nm(name));
file = this.content[name];
file.truncate(len);
}
else
caml_raise_no_such_file(this.nm(name), raise_unix);
}
register(name, content){
var file;
if(this.content[name])
caml_raise_sys_error(this.nm(name) + " : file already exists");
if(caml_is_ml_bytes(content)) file = new MlFakeFile(content);
if(caml_is_ml_string(content))
file = new MlFakeFile(caml_bytes_of_string(content));
else if(Array.isArray(content))
file = new MlFakeFile(caml_bytes_of_array(content));
else if(typeof content === "string")
file = new MlFakeFile(caml_bytes_of_jsbytes(content));
else if(content.toString){
var
bytes =
caml_bytes_of_string(caml_string_of_jsstring(content.toString()));
file = new MlFakeFile(bytes);
}
if(file){
this.create_dir_if_needed(name);
this.content[name] = file;
}
else
caml_raise_sys_error
(this.nm(name) + " : registering file with invalid content type");
}
}
class MlFakeFd_out extends MlFakeFile {
constructor(fd, flags){
super(caml_create_bytes(0));
this.log = function(_s){return 0;};
if(fd === 1 && typeof console.log === "function")
this.log = console.log;
else if(fd === 2 && typeof console.error === "function")
this.log = console.error;
else if(typeof console.log === "function") this.log = console.log;
this.flags = flags;
}
length(){return 0;}
truncate(_len, raise_unix){
caml_raise_system_error
(raise_unix, "EINVAL", "ftruncate", "invalid argument");
}
write(buf, pos, len, raise_unix){
var written = len;
if(this.log){
if
(len > 0 && pos >= 0 && pos + len <= buf.length
&& buf[pos + len - 1] === 10)
len--;
var src = caml_create_bytes(len);
caml_blit_bytes(caml_bytes_of_uint8_array(buf), pos, src, 0, len);
this.log(src.toUtf16());
return written;
}
caml_raise_system_error
(raise_unix, "EBADF", "write", "bad file descriptor");
}
read(_buf, _pos, _len, raise_unix){
caml_raise_system_error
(raise_unix, "EBADF", "read", "bad file descriptor");
}
seek(_len, _whence, raise_unix){
caml_raise_system_error(raise_unix, "ESPIPE", "lseek", "illegal seek");
}
pos(){return - 1;}
close(){this.log = undefined;}
check_stream_semantics(_cmd){}
}
var caml_int64_offset = Math.pow(2, - 24);
function caml_raise_constant(tag){throw tag;}
function caml_raise_zero_divide(){
caml_raise_constant(caml_global_data.Division_by_zero);
}
class MlInt64{
constructor(lo, mi, hi){
this.lo = lo & 0xffffff;
this.mi = mi & 0xffffff;
this.hi = hi & 0xffff;
this.caml_custom = "_j";
}
static UNSIGNED_MAX = new MlInt64(0xffffff, 0xffffff, 0xffff);
static SIGNED_MAX = new MlInt64(0xffffff, 0xffffff, 0x7fff);
static SIGNED_MIN = new MlInt64(0x000000, 0x000000, 0x8000);
slice(){return new MlInt64(this.lo, this.mi, this.hi);}
ucompare(x){
if(this.hi > x.hi) return 1;
if(this.hi < x.hi) return - 1;
if(this.mi > x.mi) return 1;
if(this.mi < x.mi) return - 1;
if(this.lo > x.lo) return 1;
if(this.lo < x.lo) return - 1;
return 0;
}
compare(x){
var hi = this.hi << 16, xhi = x.hi << 16;
if(hi > xhi) return 1;
if(hi < xhi) return - 1;
if(this.mi > x.mi) return 1;
if(this.mi < x.mi) return - 1;
if(this.lo > x.lo) return 1;
if(this.lo < x.lo) return - 1;
return 0;
}
neg(){
var
lo = - this.lo,
mi = - this.mi + (lo >> 24),
hi = - this.hi + (mi >> 24);
return new MlInt64(lo, mi, hi);
}
add(x){
var
lo = this.lo + x.lo,
mi = this.mi + x.mi + (lo >> 24),
hi = this.hi + x.hi + (mi >> 24);
return new MlInt64(lo, mi, hi);
}
sub(x){
var
lo = this.lo - x.lo,
mi = this.mi - x.mi + (lo >> 24),
hi = this.hi - x.hi + (mi >> 24);
return new MlInt64(lo, mi, hi);
}
mul(x){
var
lo = this.lo * x.lo,
mi = (lo * caml_int64_offset | 0) + this.mi * x.lo + this.lo * x.mi,
hi =
(mi * caml_int64_offset | 0) + this.hi * x.lo + this.mi * x.mi
+ this.lo * x.hi;
return new MlInt64(lo, mi, hi);
}
isZero(){return (this.lo | this.mi | this.hi) === 0;}
isNeg(){return this.hi << 16 < 0;}
and(x){
return new MlInt64(this.lo & x.lo, this.mi & x.mi, this.hi & x.hi);
}
or(x){
return new MlInt64(this.lo | x.lo, this.mi | x.mi, this.hi | x.hi);
}
xor(x){
return new MlInt64(this.lo ^ x.lo, this.mi ^ x.mi, this.hi ^ x.hi);
}
shift_left(s){
s = s & 63;
if(s === 0) return this;
if(s < 24)
return new
MlInt64
(this.lo << s,
this.mi << s | this.lo >> 24 - s,
this.hi << s | this.mi >> 24 - s);
if(s < 48)
return new
MlInt64
(0, this.lo << s - 24, this.mi << s - 24 | this.lo >> 48 - s);
return new MlInt64(0, 0, this.lo << s - 48);
}
shift_right_unsigned(s){
s = s & 63;
if(s === 0) return this;
if(s < 24)
return new
MlInt64
(this.lo >> s | this.mi << 24 - s,
this.mi >> s | this.hi << 24 - s,
this.hi >> s);
if(s < 48)
return new
MlInt64
(this.mi >> s - 24 | this.hi << 48 - s, this.hi >> s - 24, 0);
return new MlInt64(this.hi >> s - 48, 0, 0);
}
shift_right(s){
s = s & 63;
if(s === 0) return this;
var h = this.hi << 16 >> 16;
if(s < 24)
return new
MlInt64
(this.lo >> s | this.mi << 24 - s,
this.mi >> s | h << 24 - s,
this.hi << 16 >> s >>> 16);
var sign = this.hi << 16 >> 31;
if(s < 48)
return new
MlInt64
(this.mi >> s - 24 | this.hi << 48 - s,
this.hi << 16 >> s - 24 >> 16,
sign & 0xffff);
return new MlInt64(this.hi << 16 >> s - 32, sign, sign);
}
lsl1(){
this.hi = this.hi << 1 | this.mi >> 23;
this.mi = (this.mi << 1 | this.lo >> 23) & 0xffffff;
this.lo = this.lo << 1 & 0xffffff;
}
lsr1(){
this.lo = (this.lo >>> 1 | this.mi << 23) & 0xffffff;
this.mi = (this.mi >>> 1 | this.hi << 23) & 0xffffff;
this.hi = this.hi >>> 1;
}
udivmod(x){
var
offset = 0,
modulus = this.slice(),
divisor = x.slice(),
quotient = new MlInt64(0, 0, 0);
while(modulus.ucompare(divisor) > 0){offset++; divisor.lsl1();}
while(offset >= 0){
offset--;
quotient.lsl1();
if(modulus.ucompare(divisor) >= 0){
quotient.lo++;
modulus = modulus.sub(divisor);
}
divisor.lsr1();
}
return {quotient: quotient, modulus: modulus};
}
div(y){
var x = this;
if(y.isZero()) caml_raise_zero_divide();
var sign = x.hi ^ y.hi;
if(x.hi & 0x8000) x = x.neg();
if(y.hi & 0x8000) y = y.neg();
var q = x.udivmod(y).quotient;
if(sign & 0x8000) q = q.neg();
return q;
}
mod(y){
var x = this;
if(y.isZero()) caml_raise_zero_divide();
var sign = x.hi;
if(x.hi & 0x8000) x = x.neg();
if(y.hi & 0x8000) y = y.neg();
var r = x.udivmod(y).modulus;
if(sign & 0x8000) r = r.neg();
return r;
}
toInt(){return this.lo | this.mi << 24;}
toFloat(){
return (this.hi << 16) * Math.pow(2, 32) + this.mi * Math.pow(2, 24)
+ this.lo;
}
toArray(){
return [this.hi >> 8,
this.hi & 0xff,
this.mi >> 16,
this.mi >> 8 & 0xff,
this.mi & 0xff,
this.lo >> 16,
this.lo >> 8 & 0xff,
this.lo & 0xff];
}
lo32(){return this.lo | (this.mi & 0xff) << 24;}
hi32(){return this.mi >>> 8 & 0xffff | this.hi << 16;}
}
class MlMutex{constructor(){this.locked = false;}}
class MlNat{
constructor(x){
this.data = new Int32Array(x);
this.length = this.data.length + 2;
this.caml_custom = "_nat";
}
}
var
jsoo_is_win32 =
globalThis.Deno?.build?.os === "windows"
|| globalThis.process?.platform === "win32";
function caml_raise_nodejs_error(err, raise_unix, cmd){
var unix_error = caml_named_value("Unix.Unix_error");
if(raise_unix && unix_error){
var
args =
make_unix_err_args(err.code, cmd || err.syscall, err.path, err.errno);
caml_raise_with_args(unix_error, args);
}
else
caml_raise_sys_error(err.toString());
}
function caml_int64_of_float(x){
if(x < 0) x = Math.ceil(x);
return new
MlInt64
(x & 0xffffff,
Math.floor(x * caml_int64_offset) & 0xffffff,
Math.floor(x * caml_int64_offset * caml_int64_offset) & 0xffff);
}
function ocaml_stats_from_node_stats(js_stats, large){
var file_kind;
if(js_stats.isFile())
file_kind = 0;
else if(js_stats.isDirectory())
file_kind = 1;
else if(js_stats.isCharacterDevice())
file_kind = 2;
else if(js_stats.isBlockDevice())
file_kind = 3;
else if(js_stats.isSymbolicLink())
file_kind = 4;
else if(js_stats.isFIFO())
file_kind = 5;
else if(js_stats.isSocket()) file_kind = 6;
return [0,
js_stats.dev,
js_stats.ino | 0,
file_kind,
js_stats.mode,
js_stats.nlink,
js_stats.uid,
js_stats.gid,
js_stats.rdev,
large ? caml_int64_of_float(js_stats.size) : js_stats.size | 0,
js_stats.atimeMs / 1000,
js_stats.mtimeMs / 1000,
js_stats.ctimeMs / 1000];
}
function caml_ml_string_length(s){return s.length;}
function caml_string_unsafe_get(s, i){return s.charCodeAt(i);}
function caml_uint8_array_of_string(s){
var l = caml_ml_string_length(s), a = new Uint8Array(l), i = 0;
for(; i < l; i++) a[i] = caml_string_unsafe_get(s, i);
return a;
}
function caml_bytes_bound_error(){
caml_invalid_argument("index out of bounds");
}
function caml_bytes_unsafe_set(s, i, c){
c &= 0xff;
if(s.t !== 4){
if(i === s.c.length){
s.c += String.fromCharCode(c);
if(i + 1 === s.l) s.t = 0;
return 0;
}
caml_convert_bytes_to_array(s);
}
s.c[i] = c;
return 0;
}
function caml_bytes_set(s, i, c){
if(i >>> 0 >= s.l) caml_bytes_bound_error();
return caml_bytes_unsafe_set(s, i, c);
}
class MlNodeFd extends MlFile {
constructor(fd, flags){
super();
this.fs = require("node:fs");
this.fd = fd;
this.flags = flags;
try{
var stats = this.fs.fstatSync(fd);
flags.noSeek =
stats.isCharacterDevice() || stats.isFIFO() || stats.isSocket();
this.offset = this.flags.append ? stats.size : 0;
}
catch(err){flags.noSeek = true; this.offset = 0;}
this.seeked = false;
}
truncate(len, raise_unix){
try{
this.fs.ftruncateSync(this.fd, len | 0);
if(this.offset > len) this.offset = len;
}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
isatty(){
var tty = require("node:tty");
return tty.isatty(this.fd) ? 1 : 0;
}
length(){
try{return this.fs.fstatSync(this.fd).size;}
catch(err){caml_raise_sys_error(err.toString());}
}
write(buf, buf_offset, len, raise_unix){
try{
if(this.flags.noSeek || ! this.seeked)
var written = this.fs.writeSync(this.fd, buf, buf_offset, len);
else
var
written =
this.fs.writeSync(this.fd, buf, buf_offset, len, this.offset);
this.offset += written;
}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
return written;
}
read(a, buf_offset, len, raise_unix){
try{
if(this.flags.noSeek || ! this.seeked)
var read = this.fs.readSync(this.fd, a, buf_offset, len);
else
var read = this.fs.readSync(this.fd, a, buf_offset, len, this.offset);
this.offset += read;
return read;
}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
seek(offset, whence, raise_unix){
if(this.flags.noSeek)
caml_raise_system_error(raise_unix, "ESPIPE", "lseek", "illegal seek");
switch(whence){
case 0: break;
case 1:
offset += this.offset; break;
case 2:
offset += this.length(); break;
}
if(offset < 0)
caml_raise_system_error
(raise_unix, "EINVAL", "lseek", "invalid argument");
this.offset = offset;
this.seeked = true;
return this.offset;
}
pos(){return this.offset;}
stat(large){
try{
var js_stats = this.fs.fstatSync(this.fd);
return ocaml_stats_from_node_stats(js_stats, large);
}
catch(err){caml_raise_nodejs_error(err, 1);}
}
chmod(perms){
try{this.fs.fchmodSync(this.fd, perms); return 0;}
catch(err){caml_raise_nodejs_error(err, 1);}
}
sync(){
try{this.fs.fsyncSync(this.fd); return 0;}
catch(err){caml_raise_nodejs_error(err, 1);}
}
close(raise_unix){
try{this.fs.closeSync(this.fd); return 0;}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
check_stream_semantics(cmd){
try{var js_stats = this.fs.fstatSync(this.fd);}
catch(err){caml_raise_nodejs_error(err, 1, cmd);}
if
(!
(js_stats.isFile() || js_stats.isCharacterDevice()
|| js_stats.isFIFO()
|| js_stats.isSocket()))
caml_raise_system_error(1, "EINVAL", cmd, "invalid argument");
}
}
class MlNodeDevice{
constructor(root){this.fs = require("node:fs"); this.root = root;}
nm(name){return this.root + name;}
exists(name){
try{return this.fs.existsSync(this.nm(name)) ? 1 : 0;}
catch(err){return 0;}
}
isFile(name){
try{return this.fs.statSync(this.nm(name)).isFile() ? 1 : 0;}
catch(err){caml_raise_sys_error(err.toString());}
}
mkdir(name, mode, raise_unix){
try{this.fs.mkdirSync(this.nm(name), {mode: mode}); return 0;}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
rmdir(name, raise_unix){
try{this.fs.rmdirSync(this.nm(name)); return 0;}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
readdir(name, raise_unix){
try{return this.fs.readdirSync(this.nm(name));}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
is_dir(name){
try{return this.fs.statSync(this.nm(name)).isDirectory() ? 1 : 0;}
catch(err){caml_raise_sys_error(err.toString());}
}
unlink(name, raise_unix){
try{this.fs.unlinkSync(this.nm(name)); return 0;}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
utimes(name, atime, mtime, raise_unix){
try{
if(atime === 0 && mtime === 0){
atime = new Date().getTime() / 1000;
mtime = atime;
}
this.fs.utimesSync(this.nm(name), atime, mtime);
return 0;
}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
truncate(name, len, raise_unix){
try{this.fs.truncateSync(this.nm(name), len | 0); return 0;}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
access(name, f, raise_unix){
var consts = this.fs.constants, res = 0;
for(var key in f)
switch(key){
case "r":
res |= consts.R_OK; break;
case "w":
res |= consts.W_OK; break;
case "x":
res |= jsoo_is_win32 ? consts.R_OK : consts.X_OK; break;
case "f":
res |= consts.F_OK; break;
}
try{this.fs.accessSync(this.nm(name), res); return 0;}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
open(name, f, perms, raise_unix){
var consts = this.fs.constants, res = 0;
for(var key in f)
switch(key){
case "rdonly":
res |= consts.O_RDONLY; break;
case "wronly":
res |= consts.O_WRONLY; break;
case "rdwr":
res |= consts.O_RDWR; break;
case "append":
res |= consts.O_APPEND; break;
case "create":
res |= consts.O_CREAT; break;
case "truncate":
res |= consts.O_TRUNC; break;
case "excl":
res |= consts.O_EXCL; break;
case "binary":
res |= consts.O_BINARY; break;
case "text":
res |= consts.O_TEXT; break;
case "nonblock":
res |= consts.O_NONBLOCK; break;
case "noctty":
res |= consts.O_NOCTTY; break;
case "dsync":
res |= consts.O_DSYNC; break;
case "sync":
res |= consts.O_SYNC; break;
}
try{
var fd = this.fs.openSync(this.nm(name), res, perms);
return new MlNodeFd(fd, f);
}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
slash(name){return /\/$/.test(name) ? name : name + "/";}
rename(o, n, raise_unix){
if(jsoo_is_win32)
try{
var
target = this.nm(n),
source = this.nm(o),
target_stats,
source_stats;
if
((target_stats = this.fs.statSync(target, {throwIfNoEntry: false}))
&&
(source_stats = this.fs.statSync(source, {throwIfNoEntry: false}))
&& source_stats.isDirectory())
if(target_stats.isDirectory()){
if(! this.slash(target).startsWith(this.slash(source)))
try{this.fs.rmdirSync(target);}catch{}
}
else{
var
err =
new
Error
(`ENOTDIR: not a directory, rename '${source}' -> '${target}'`);
throw Object.assign
(err,
{errno: - 20,
code: "ENOTDIR",
syscall: "rename",
path: target});
}
this.fs.renameSync(this.nm(o), this.nm(n));
}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
else
try{this.fs.renameSync(this.nm(o), this.nm(n));}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
stat(name, large, raise_unix){
try{
var js_stats = this.fs.statSync(this.nm(name));
return ocaml_stats_from_node_stats(js_stats, large);
}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
lstat(name, large, raise_unix){
try{
var js_stats = this.fs.lstatSync(this.nm(name));
return ocaml_stats_from_node_stats(js_stats, large);
}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
chmod(name, perms, raise_unix){
try{this.fs.chmodSync(this.nm(name), perms); return 0;}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
link(target, path, raise_unix){
try{this.fs.linkSync(this.nm(target), this.nm(path)); return 0;}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
symlink(to_dir, target, path, raise_unix){
try{
this.fs.symlinkSync
(target,
this.nm(path),
to_dir === 0 ? null : to_dir[1] ? "dir" : "file");
return 0;
}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
readlink(name, raise_unix){
try{
var link = this.fs.readlinkSync(this.nm(name), "utf8");
return caml_string_of_jsstring(link);
}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
opendir(name, raise_unix){
try{return this.fs.opendirSync(this.nm(name));}
catch(err){caml_raise_nodejs_error(err, raise_unix);}
}
}
class MlObjectTable{
constructor(){this.objs = []; this.lookup = new globalThis.Map();}
store(v){this.lookup.set(v, this.objs.length); this.objs.push(v);}
recall(v){
var i = this.lookup.get(v);
return i === undefined ? undefined : this.objs.length - i;
}
}
var
caml_packFloat16 =
function(){
const INVERSE_OF_EPSILON = 1 / Number.EPSILON;
function roundTiesToEven(num){
return num + INVERSE_OF_EPSILON - INVERSE_OF_EPSILON;
}
const
FLOAT16_MIN_VALUE = 6.103515625e-5,
FLOAT16_MAX_VALUE = 65504,
FLOAT16_EPSILON = 0.0009765625,
FLOAT16_EPSILON_MULTIPLIED_BY_FLOAT16_MIN_VALUE = FLOAT16_EPSILON * FLOAT16_MIN_VALUE,
FLOAT16_EPSILON_DEVIDED_BY_EPSILON =
FLOAT16_EPSILON * INVERSE_OF_EPSILON;
function roundToFloat16(num){
const number = + num;
if(! Number.isFinite(number) || number === 0) return number;
const sign = number > 0 ? 1 : - 1, absolute = Math.abs(number);
if(absolute < FLOAT16_MIN_VALUE)
return sign
*
roundTiesToEven
(absolute / FLOAT16_EPSILON_MULTIPLIED_BY_FLOAT16_MIN_VALUE)
* FLOAT16_EPSILON_MULTIPLIED_BY_FLOAT16_MIN_VALUE;
const
temp = (1 + FLOAT16_EPSILON_DEVIDED_BY_EPSILON) * absolute,
result = temp - (temp - absolute);
if(result > FLOAT16_MAX_VALUE || Number.isNaN(result))
return sign * Number.POSITIVE_INFINITY;
return sign * result;
}
const
baseTable = new Uint16Array(512),
shiftTable = new Uint8Array(512);
for(let i = 0; i < 256; ++i){
const e = i - 127;
if(e < - 24){
baseTable[i] = 0x0000;
baseTable[i | 0x100] = 0x8000;
shiftTable[i] = 24;
shiftTable[i | 0x100] = 24;
}
else if(e < - 14){
baseTable[i] = 0x0400 >> - e - 14;
baseTable[i | 0x100] = 0x0400 >> - e - 14 | 0x8000;
shiftTable[i] = - e - 1;
shiftTable[i | 0x100] = - e - 1;
}
else if(e <= 15){
baseTable[i] = e + 15 << 10;
baseTable[i | 0x100] = e + 15 << 10 | 0x8000;
shiftTable[i] = 13;
shiftTable[i | 0x100] = 13;
}
else if(e < 128){
baseTable[i] = 0x7c00;
baseTable[i | 0x100] = 0xfc00;
shiftTable[i] = 24;
shiftTable[i | 0x100] = 24;
}
else{
baseTable[i] = 0x7c00;
baseTable[i | 0x100] = 0xfc00;
shiftTable[i] = 13;
shiftTable[i | 0x100] = 13;
}
}
const
buffer = new ArrayBuffer(4),
floatView = new Float32Array(buffer),
uint32View = new Uint32Array(buffer);
return function(num){
floatView[0] = roundToFloat16(num);
const f = uint32View[0], e = f >> 23 & 0x1ff;
return baseTable[e] + ((f & 0x007fffff) >> shiftTable[e]);};
}
(),
caml_unpackFloat16 =
function(){
var
pow = Math.pow,
EXP_MASK16 = 31,
SIGNIFICAND_MASK16 = 1023,
MIN_SUBNORMAL16 = pow(2, - 24),
SIGNIFICAND_DENOM16 = 0.0009765625;
return function(bytes){
var
sign = bytes >>> 15,
exponent = bytes >>> 10 & EXP_MASK16,
significand = bytes & SIGNIFICAND_MASK16;
if(exponent === EXP_MASK16)
return significand === 0
? sign
=== 0
? Number.POSITIVE_INFINITY
: Number.NEGATIVE_INFINITY
: Number.NaN;
if(exponent === 0)
return significand
* (sign === 0 ? MIN_SUBNORMAL16 : - MIN_SUBNORMAL16);
var
r =
pow(2, exponent - 15)
*
(sign === 0
? 1 + significand * SIGNIFICAND_DENOM16
: - 1 - significand * SIGNIFICAND_DENOM16);
return r;};
}
();
function caml_int64_create_lo_hi(lo, hi){
return new
MlInt64
(lo & 0xffffff,
lo >>> 24 & 0xff | (hi & 0xffff) << 8,
hi >>> 16 & 0xffff);
}
function caml_int64_hi32(v){return v.hi32();}
function caml_int64_lo32(v){return v.lo32();}
function caml_array_bound_error(){
caml_invalid_argument("index out of bounds");
}
var caml_ba_custom_name = "_bigarr02";
class Ml_Bigarray{
constructor(kind, layout, dims, buffer){
this.kind = kind;
this.layout = layout;
this.dims = dims;
this.data = buffer;
this.caml_custom = caml_ba_custom_name;
}
offset(arg){
var ofs = 0;
if(typeof arg === "number") arg = [arg];
if(! Array.isArray(arg))
caml_invalid_argument("bigarray.js: invalid offset");
if(this.dims.length !== arg.length)
caml_invalid_argument("Bigarray.get/set: bad number of dimensions");
if(this.layout === 0)
for(var i = 0; i < this.dims.length; i++){
if(arg[i] < 0 || arg[i] >= this.dims[i]) caml_array_bound_error();
ofs = ofs * this.dims[i] + arg[i];
}
else
for(var i = this.dims.length - 1; i >= 0; i--){
if(arg[i] < 1 || arg[i] > this.dims[i]) caml_array_bound_error();
ofs = ofs * this.dims[i] + (arg[i] - 1);
}
return ofs;
}
get(ofs){
switch(this.kind){
case 7:
var l = this.data[ofs * 2 + 0], h = this.data[ofs * 2 + 1];
return caml_int64_create_lo_hi(l, h);
case 10:
case 11:
var r = this.data[ofs * 2 + 0], i = this.data[ofs * 2 + 1];
return [254, r, i];
case 13:
return caml_unpackFloat16(this.data[ofs]);
default: return this.data[ofs];
}
}
set(ofs, v){
switch(this.kind){
case 7:
this.data[ofs * 2 + 0] = caml_int64_lo32(v);
this.data[ofs * 2 + 1] = caml_int64_hi32(v);
break;
case 10:
case 11:
this.data[ofs * 2 + 0] = v[1]; this.data[ofs * 2 + 1] = v[2]; break;
case 13:
this.data[ofs] = caml_packFloat16(v); break;
default: this.data[ofs] = v; break;
}
return 0;
}
fill(v){
switch(this.kind){
case 7:
var a = caml_int64_lo32(v), b = caml_int64_hi32(v);
if(a === b)
this.data.fill(a);
else
for(var i = 0; i < this.data.length; i++)
this.data[i] = i % 2 === 0 ? a : b;
break;
case 10:
case 11:
var im = v[1], re = v[2];
if(im === re)
this.data.fill(im);
else
for(var i = 0; i < this.data.length; i++)
this.data[i] = i % 2 === 0 ? im : re;
break;
case 13:
this.data.fill(caml_packFloat16(v)); break;
default: this.data.fill(v); break;
}
}
compare(b, total){
if(this.layout !== b.layout || this.kind !== b.kind){
var k1 = this.kind | this.layout << 8, k2 = b.kind | b.layout << 8;
return k2 - k1;
}
if(this.dims.length !== b.dims.length)
return b.dims.length - this.dims.length;
for(var i = 0; i < this.dims.length; i++)
if(this.dims[i] !== b.dims[i])
return this.dims[i] < b.dims[i] ? - 1 : 1;
switch(this.kind){
case 0:
case 1:
case 10:
case 11:
var x, y;
for(var i = 0; i < this.data.length; i++){
x = this.data[i];
y = b.data[i];
if(x < y) return - 1;
if(x > y) return 1;
if(x !== y){
if(! total) return Number.NaN;
if(! Number.isNaN(x)) return 1;
if(! Number.isNaN(y)) return - 1;
}
}
break;
case 7:
for(var i = 0; i < this.data.length; i += 2){
if(this.data[i + 1] < b.data[i + 1]) return - 1;
if(this.data[i + 1] > b.data[i + 1]) return 1;
if(this.data[i] >>> 0 < b.data[i] >>> 0) return - 1;
if(this.data[i] >>> 0 > b.data[i] >>> 0) return 1;
}
break;
case 13:
for(var i = 0; i < this.data.length; i++){
var
aa = caml_unpackFloat16(this.data[i]),
bb = caml_unpackFloat16(b.data[i]);
if(aa < bb) return - 1;
if(aa > bb) return 1;
}
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 8:
case 9:
case 12:
for(var i = 0; i < this.data.length; i++){
if(this.data[i] < b.data[i]) return - 1;
if(this.data[i] > b.data[i]) return 1;
}
break;
}
return 0;
}
}
class Ml_Bigarray_c_1_1 extends Ml_Bigarray {
offset(arg){
if(typeof arg !== "number")
if(Array.isArray(arg) && arg.length === 1)
arg = arg[0];
else
caml_invalid_argument("Ml_Bigarray_c_1_1.offset");
if(arg < 0 || arg >= this.dims[0]) caml_array_bound_error();
return arg;
}
get(ofs){return this.data[ofs];}
set(ofs, v){this.data[ofs] = v; return 0;}
fill(v){this.data.fill(v); return 0;}
}
function caml_string_of_uint8_array(a){
return caml_sub_uint8_array_to_jsbytes(a, 0, a.length);
}
class UInt8ArrayReader{
constructor(s, i){this.s = s; this.i = i;}
read8u(){return this.s[this.i++];}
read8s(){return this.s[this.i++] << 24 >> 24;}
read16u(){
var s = this.s, i = this.i;
this.i = i + 2;
return s[i] << 8 | s[i + 1];
}
read16s(){
var s = this.s, i = this.i;
this.i = i + 2;
return s[i] << 24 >> 16 | s[i + 1];
}
read32u(){
var s = this.s, i = this.i;
this.i = i + 4;
return (s[i] << 24 | s[i + 1] << 16 | s[i + 2] << 8 | s[i + 3]) >>> 0;
}
read32s(){
var s = this.s, i = this.i;
this.i = i + 4;
return s[i] << 24 | s[i + 1] << 16 | s[i + 2] << 8 | s[i + 3];
}
readstr(len){
var i = this.i;
this.i = i + len;
return caml_string_of_uint8_array(this.s.subarray(i, i + len));
}
readuint8array(len){
var i = this.i;
this.i = i + len;
return this.s.subarray(i, i + len);
}
}
function incr_nat(nat, ofs, len, carry_in){
var carry = carry_in;
for(var i = 0; i < len; i++){
var x = (nat.data[ofs + i] >>> 0) + carry;
nat.data[ofs + i] = x | 0;
if(x === x >>> 0){carry = 0; break;} else carry = 1;
}
return carry;
}
function add_nat(nat1, ofs1, len1, nat2, ofs2, len2, carry_in){
var carry = carry_in;
for(var i = 0; i < len2; i++){
var
x = (nat1.data[ofs1 + i] >>> 0) + (nat2.data[ofs2 + i] >>> 0) + carry;
nat1.data[ofs1 + i] = x;
if(x === x >>> 0) carry = 0; else carry = 1;
}
return incr_nat(nat1, ofs1 + len2, len1 - len2, carry);
}
function caml_ba_get_size(dims){
var n_dims = dims.length, size = 1;
for(var i = 0; i < n_dims; i++){
if(dims[i] < 0)
caml_invalid_argument("Bigarray.create: negative dimension");
size = size * dims[i];
}
return size;
}
function caml_ba_get_size_per_element(kind){
switch(kind){case 7:case 10:case 11: return 2;default: return 1;
}
}
function caml_ba_create_unsafe(kind, layout, dims, data){
var size_per_element = caml_ba_get_size_per_element(kind);
if(caml_ba_get_size(dims) * size_per_element !== data.length)
caml_invalid_argument("length doesn't match dims");
if
(layout === 0 && dims.length === 1 && size_per_element === 1
&& kind !== 13)
return new Ml_Bigarray_c_1_1(kind, layout, dims, data);
return new Ml_Bigarray(kind, layout, dims, data);
}
function bigstring_of_array_buffer(ab){
var ta = new Uint8Array(ab);
return caml_ba_create_unsafe(12, 0, [ta.length], ta);
}
function bigstring_of_typed_array(ba){
var
ta =
new
Uint8Array
(ba.buffer, ba.byteOffset, ba.length * ba.BYTES_PER_ELEMENT);
return caml_ba_create_unsafe(12, 0, [ta.length], ta);
}
function bigstring_to_array_buffer(bs){return bs.data.buffer;}
function bigstring_to_typed_array(bs){return bs.data;}
var
blake2b =
function(){
function ADD64AA(v, a, b){
const o0 = v[a] + v[b];
let o1 = v[a + 1] + v[b + 1];
if(o0 >= 0x100000000) o1++;
v[a] = o0;
v[a + 1] = o1;
}
function ADD64AC(v, a, b0, b1){
let o0 = v[a] + b0;
if(b0 < 0) o0 += 0x100000000;
let o1 = v[a + 1] + b1;
if(o0 >= 0x100000000) o1++;
v[a] = o0;
v[a + 1] = o1;
}
function B2B_GET32(arr, i){
return arr[i] ^ arr[i + 1] << 8 ^ arr[i + 2] << 16 ^ arr[i + 3] << 24;
}
function B2B_G(a, b, c, d, ix, iy){
const x0 = m[ix], x1 = m[ix + 1], y0 = m[iy], y1 = m[iy + 1];
ADD64AA(v, a, b);
ADD64AC(v, a, x0, x1);
let xor0 = v[d] ^ v[a], xor1 = v[d + 1] ^ v[a + 1];
v[d] = xor1;
v[d + 1] = xor0;
ADD64AA(v, c, d);
xor0 = v[b] ^ v[c];
xor1 = v[b + 1] ^ v[c + 1];
v[b] = xor0 >>> 24 ^ xor1 << 8;
v[b + 1] = xor1 >>> 24 ^ xor0 << 8;
ADD64AA(v, a, b);
ADD64AC(v, a, y0, y1);
xor0 = v[d] ^ v[a];
xor1 = v[d + 1] ^ v[a + 1];
v[d] = xor0 >>> 16 ^ xor1 << 16;
v[d + 1] = xor1 >>> 16 ^ xor0 << 16;
ADD64AA(v, c, d);
xor0 = v[b] ^ v[c];
xor1 = v[b + 1] ^ v[c + 1];
v[b] = xor1 >>> 31 ^ xor0 << 1;
v[b + 1] = xor0 >>> 31 ^ xor1 << 1;
}
const
BLAKE2B_IV32 =
new
Uint32Array
([0xf3bcc908,
0x6a09e667,
0x84caa73b,
0xbb67ae85,
0xfe94f82b,
0x3c6ef372,
0x5f1d36f1,
0xa54ff53a,
0xade682d1,
0x510e527f,
0x2b3e6c1f,
0x9b05688c,
0xfb41bd6b,
0x1f83d9ab,
0x137e2179,
0x5be0cd19]),
SIGMA8 =
[0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
14,
10,
4,
8,
9,
15,
13,
6,
1,
12,
0,
2,
11,
7,
5,
3,
11,
8,
12,
0,
5,
2,
15,
13,
10,
14,
3,
6,
7,
1,
9,
4,
7,
9,
3,
1,
13,
12,
11,
14,
2,
6,
5,
10,
4,
0,
15,
8,
9,
0,
5,
7,
2,
4,
10,
15,
14,
1,
11,
12,
6,
8,
3,
13,
2,
12,
6,
10,
0,
11,
8,
3,
4,
13,
7,
5,
15,
14,
1,
9,
12,
5,
1,
15,
14,
13,
4,
10,
0,
7,
6,
3,
9,
2,
8,
11,
13,
11,
7,
14,
12,
1,
3,
9,
5,
0,
15,
4,
8,
6,
2,
10,
6,
15,
14,
9,
11,
3,
0,
8,
12,
2,
13,
7,
1,
4,
10,
5,
10,
2,
8,
4,
7,
6,
1,
5,
15,
11,
9,
14,
3,
12,
13,
0,
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
14,
10,
4,
8,
9,
15,
13,
6,
1,
12,
0,
2,
11,
7,
5,
3],
SIGMA82 = new Uint8Array(SIGMA8.map(function(x){return x * 2;})),
v = new Uint32Array(32),
m = new Uint32Array(32);
function blake2bCompress(ctx, last){
let i = 0;
for(i = 0; i < 16; i++){
v[i] = ctx.h[i];
v[i + 16] = BLAKE2B_IV32[i];
}
v[24] = v[24] ^ ctx.t;
v[25] = v[25] ^ ctx.t / 0x100000000;
if(last){v[28] = ~ v[28]; v[29] = ~ v[29];}
for(i = 0; i < 32; i++) m[i] = B2B_GET32(ctx.b, 4 * i);
for(i = 0; i < 12; i++){
B2B_G(0, 8, 16, 24, SIGMA82[i * 16 + 0], SIGMA82[i * 16 + 1]);
B2B_G(2, 10, 18, 26, SIGMA82[i * 16 + 2], SIGMA82[i * 16 + 3]);
B2B_G(4, 12, 20, 28, SIGMA82[i * 16 + 4], SIGMA82[i * 16 + 5]);
B2B_G(6, 14, 22, 30, SIGMA82[i * 16 + 6], SIGMA82[i * 16 + 7]);
B2B_G(0, 10, 20, 30, SIGMA82[i * 16 + 8], SIGMA82[i * 16 + 9]);
B2B_G(2, 12, 22, 24, SIGMA82[i * 16 + 10], SIGMA82[i * 16 + 11]);
B2B_G(4, 14, 16, 26, SIGMA82[i * 16 + 12], SIGMA82[i * 16 + 13]);
B2B_G(6, 8, 18, 28, SIGMA82[i * 16 + 14], SIGMA82[i * 16 + 15]);
}
for(i = 0; i < 16; i++) ctx.h[i] = ctx.h[i] ^ v[i] ^ v[i + 16];
}
const
parameterBlock =
new
Uint8Array
([0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0]);
function blake2bInit(outlen, key){
if(outlen === 0 || outlen > 64)
throw new Error("Illegal output length, expected 0 < length <= 64");
if(key.length > 64)
throw new
Error
("Illegal key, expected Uint8Array with 0 < length <= 64");
const
ctx =
{b: new Uint8Array(128),
h: new Uint32Array(16),
t: 0,
c: 0,
outlen: outlen};
parameterBlock.fill(0);
parameterBlock[0] = outlen;
parameterBlock[1] = key.length;
parameterBlock[2] = 1;
parameterBlock[3] = 1;
for(let i = 0; i < 16; i++)
ctx.h[i] = BLAKE2B_IV32[i] ^ B2B_GET32(parameterBlock, i * 4);
if(key.length > 0){blake2bUpdate(ctx, key); ctx.c = 128;}
return ctx;
}
function blake2bUpdate(ctx, input){
for(let i = 0; i < input.length; i++){
if(ctx.c === 128){
ctx.t += ctx.c;
blake2bCompress(ctx, false);
ctx.c = 0;
}
ctx.b[ctx.c++] = input[i];
}
}
function blake2bFinal(ctx){
ctx.t += ctx.c;
while(ctx.c < 128) ctx.b[ctx.c++] = 0;
blake2bCompress(ctx, true);
const out = new Uint8Array(ctx.outlen);
for(let i = 0; i < ctx.outlen; i++)
out[i] = ctx.h[i >> 2] >> 8 * (i & 3);
return out;
}
return {Init: blake2bInit, Update: blake2bUpdate, Final: blake2bFinal};
}
();
function blit_nat(nat1, ofs1, nat2, ofs2, len){
for(var i = 0; i < len; i++) nat1.data[ofs1 + i] = nat2.data[ofs2 + i];
return 0;
}
var
caml_MD5Transform =
function(){
function add(x, y){return x + y | 0;}
function xx(q, a, b, x, s, t){
a = add(add(a, q), add(x, t));
return add(a << s | a >>> 32 - s, b);
}
function ff(a, b, c, d, x, s, t){
return xx(b & c | ~ b & d, a, b, x, s, t);
}
function gg(a, b, c, d, x, s, t){
return xx(b & d | c & ~ d, a, b, x, s, t);
}
function hh(a, b, c, d, x, s, t){return xx(b ^ c ^ d, a, b, x, s, t);}
function ii(a, b, c, d, x, s, t){
return xx(c ^ (b | ~ d), a, b, x, s, t);
}
return function(w, buffer){
var a = w[0], b = w[1], c = w[2], d = w[3];
a = ff(a, b, c, d, buffer[0], 7, 0xd76aa478);
d = ff(d, a, b, c, buffer[1], 12, 0xe8c7b756);
c = ff(c, d, a, b, buffer[2], 17, 0x242070db);
b = ff(b, c, d, a, buffer[3], 22, 0xc1bdceee);
a = ff(a, b, c, d, buffer[4], 7, 0xf57c0faf);
d = ff(d, a, b, c, buffer[5], 12, 0x4787c62a);
c = ff(c, d, a, b, buffer[6], 17, 0xa8304613);
b = ff(b, c, d, a, buffer[7], 22, 0xfd469501);
a = ff(a, b, c, d, buffer[8], 7, 0x698098d8);
d = ff(d, a, b, c, buffer[9], 12, 0x8b44f7af);
c = ff(c, d, a, b, buffer[10], 17, 0xffff5bb1);
b = ff(b, c, d, a, buffer[11], 22, 0x895cd7be);
a = ff(a, b, c, d, buffer[12], 7, 0x6b901122);
d = ff(d, a, b, c, buffer[13], 12, 0xfd987193);
c = ff(c, d, a, b, buffer[14], 17, 0xa679438e);
b = ff(b, c, d, a, buffer[15], 22, 0x49b40821);
a = gg(a, b, c, d, buffer[1], 5, 0xf61e2562);
d = gg(d, a, b, c, buffer[6], 9, 0xc040b340);
c = gg(c, d, a, b, buffer[11], 14, 0x265e5a51);
b = gg(b, c, d, a, buffer[0], 20, 0xe9b6c7aa);
a = gg(a, b, c, d, buffer[5], 5, 0xd62f105d);
d = gg(d, a, b, c, buffer[10], 9, 0x02441453);
c = gg(c, d, a, b, buffer[15], 14, 0xd8a1e681);
b = gg(b, c, d, a, buffer[4], 20, 0xe7d3fbc8);
a = gg(a, b, c, d, buffer[9], 5, 0x21e1cde6);
d = gg(d, a, b, c, buffer[14], 9, 0xc33707d6);
c = gg(c, d, a, b, buffer[3], 14, 0xf4d50d87);
b = gg(b, c, d, a, buffer[8], 20, 0x455a14ed);
a = gg(a, b, c, d, buffer[13], 5, 0xa9e3e905);
d = gg(d, a, b, c, buffer[2], 9, 0xfcefa3f8);
c = gg(c, d, a, b, buffer[7], 14, 0x676f02d9);
b = gg(b, c, d, a, buffer[12], 20, 0x8d2a4c8a);
a = hh(a, b, c, d, buffer[5], 4, 0xfffa3942);
d = hh(d, a, b, c, buffer[8], 11, 0x8771f681);
c = hh(c, d, a, b, buffer[11], 16, 0x6d9d6122);
b = hh(b, c, d, a, buffer[14], 23, 0xfde5380c);
a = hh(a, b, c, d, buffer[1], 4, 0xa4beea44);
d = hh(d, a, b, c, buffer[4], 11, 0x4bdecfa9);
c = hh(c, d, a, b, buffer[7], 16, 0xf6bb4b60);
b = hh(b, c, d, a, buffer[10], 23, 0xbebfbc70);
a = hh(a, b, c, d, buffer[13], 4, 0x289b7ec6);
d = hh(d, a, b, c, buffer[0], 11, 0xeaa127fa);
c = hh(c, d, a, b, buffer[3], 16, 0xd4ef3085);
b = hh(b, c, d, a, buffer[6], 23, 0x04881d05);
a = hh(a, b, c, d, buffer[9], 4, 0xd9d4d039);
d = hh(d, a, b, c, buffer[12], 11, 0xe6db99e5);
c = hh(c, d, a, b, buffer[15], 16, 0x1fa27cf8);
b = hh(b, c, d, a, buffer[2], 23, 0xc4ac5665);
a = ii(a, b, c, d, buffer[0], 6, 0xf4292244);
d = ii(d, a, b, c, buffer[7], 10, 0x432aff97);
c = ii(c, d, a, b, buffer[14], 15, 0xab9423a7);
b = ii(b, c, d, a, buffer[5], 21, 0xfc93a039);
a = ii(a, b, c, d, buffer[12], 6, 0x655b59c3);
d = ii(d, a, b, c, buffer[3], 10, 0x8f0ccc92);
c = ii(c, d, a, b, buffer[10], 15, 0xffeff47d);
b = ii(b, c, d, a, buffer[1], 21, 0x85845dd1);
a = ii(a, b, c, d, buffer[8], 6, 0x6fa87e4f);
d = ii(d, a, b, c, buffer[15], 10, 0xfe2ce6e0);
c = ii(c, d, a, b, buffer[6], 15, 0xa3014314);
b = ii(b, c, d, a, buffer[13], 21, 0x4e0811a1);
a = ii(a, b, c, d, buffer[4], 6, 0xf7537e82);
d = ii(d, a, b, c, buffer[11], 10, 0xbd3af235);
c = ii(c, d, a, b, buffer[2], 15, 0x2ad7d2bb);
b = ii(b, c, d, a, buffer[9], 21, 0xeb86d391);
w[0] = add(a, w[0]);
w[1] = add(b, w[1]);
w[2] = add(c, w[2]);
w[3] = add(d, w[3]);};
}
();
function caml_MD5Final(ctx){
var in_buf = ctx.len & 0x3f;
ctx.b8[in_buf] = 0x80;
in_buf++;
if(in_buf > 56){
for(var j = in_buf; j < 64; j++) ctx.b8[j] = 0;
caml_MD5Transform(ctx.w, ctx.b32);
for(var j = 0; j < 56; j++) ctx.b8[j] = 0;
}
else
for(var j = in_buf; j < 56; j++) ctx.b8[j] = 0;
ctx.b32[14] = ctx.len << 3;
ctx.b32[15] = ctx.len >> 29 & 0x1fffffff;
caml_MD5Transform(ctx.w, ctx.b32);
var t = new Uint8Array(16);
for(var i = 0; i < 4; i++)
for(var j = 0; j < 4; j++) t[i * 4 + j] = ctx.w[i] >> 8 * j & 0xff;
return t;
}
function caml_MD5Init(){
var
buffer = new ArrayBuffer(64),
b32 = new Uint32Array(buffer),
b8 = new Uint8Array(buffer);
return {len: 0,
w:
new Uint32Array([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]),
b32: b32,
b8: b8};
}
function caml_MD5Update(ctx, input, input_len){
var in_buf = ctx.len & 0x3f, input_pos = 0;
ctx.len += input_len;
if(in_buf){
var missing = 64 - in_buf;
if(input_len < missing){
ctx.b8.set(input.subarray(0, input_len), in_buf);
return;
}
ctx.b8.set(input.subarray(0, missing), in_buf);
caml_MD5Transform(ctx.w, ctx.b32);
input_len -= missing;
input_pos += missing;
}
while(input_len >= 64){
ctx.b8.set(input.subarray(input_pos, input_pos + 64), 0);
caml_MD5Transform(ctx.w, ctx.b32);
input_len -= 64;
input_pos += 64;
}
if(input_len)
ctx.b8.set(input.subarray(input_pos, input_pos + input_len), 0);
}
function caml_acosh_float(x){return Math.acosh(x);}
function caml_call_gen(f, args){
var
n = f.l >= 0 ? f.l : f.l = f.length,
argsLen = args.length,
d = n - argsLen;
if(d === 0)
return f(...args);
else if(d < 0){
var g = f(...args.slice(0, n));
if(typeof g !== "function") return g;
return caml_call_gen(g, args.slice(n));
}
else{
switch(d){
case 1:
{
var
g =
function(x){
var nargs = new Array(argsLen + 1);
for(var i = 0; i < argsLen; i++) nargs[i] = args[i];
nargs[argsLen] = x;
return f(...nargs);
};
break;
}
case 2:
{
var
g =
function(x, y){
var nargs = new Array(argsLen + 2);
for(var i = 0; i < argsLen; i++) nargs[i] = args[i];
nargs[argsLen] = x;
nargs[argsLen + 1] = y;
return f(...nargs);
};
break;
}
default:
var
g =
function(...extra_args){
if(extra_args.length === 0) extra_args = [undefined];
return caml_call_gen(f, args.concat(extra_args));
};
}
g.l = d;
return g;
}
}
function caml_alloc_dummy_infix(){
return function f(x){return caml_call_gen(f.fun, [x]);};
}
function caml_alloc_stack(_hv, _hx, _hf){return 0;}
var
caml_argv =
function(){
var process = globalThis.process, main = "a.out", args = [];
if(process?.argv?.length > 1){
var argv = process.argv;
main = argv[1];
args = argv.slice(2);
}
var p = caml_string_of_jsstring(main), args2 = [0, p];
for(var i = 0; i < args.length; i++)
args2.push(caml_string_of_jsstring(args[i]));
return args2;
}
();
function caml_array_append(a1, a2){
var l1 = a1.length, l2 = a2.length, l = l1 + l2 - 1, a = new Array(l);
a[0] = 0;
var i = 1, j = 1;
for(; i < l1; i++) a[i] = a1[i];
for(; i < l; i++, j++) a[i] = a2[j];
return a;
}
function caml_array_blit(a1, i1, a2, i2, len){
if(i2 <= i1)
for(var j = 1; j <= len; j++) a2[i2 + j] = a1[i1 + j];
else
for(var j = len; j >= 1; j--) a2[i2 + j] = a1[i1 + j];
return 0;
}
function caml_array_concat(l){
var a = [0];
while(l !== 0){
var b = l[1];
for(var i = 1; i < b.length; i++) a.push(b[i]);
l = l[2];
}
return a;
}
function caml_array_fill(array, ofs, len, v){
for(var i = 0; i < len; i++) array[ofs + i + 1] = v;
return 0;
}
function caml_array_get(array, index){
if(index < 0 || index >= array.length - 1) caml_array_bound_error();
return array[index + 1];
}
function caml_array_make(len, init){
if(len >>> 0 >= (0x7fffffff / 4 | 0)) caml_array_bound_error();
var len = len + 1 | 0, b = new Array(len);
b[0] = 0;
for(var i = 1; i < len; i++) b[i] = init;
return b;
}
function caml_array_of_bytes(x){return caml_uint8_array_of_bytes(x);}
function caml_array_of_string(x){return caml_uint8_array_of_string(x);}
function caml_array_set(array, index, newval){
if(index < 0 || index >= array.length - 1) caml_array_bound_error();
array[index + 1] = newval;
return 0;
}
function caml_array_sub(a, i, len){
var a2 = new Array(len + 1);
a2[0] = 0;
for(var i2 = 1, i1 = i + 1; i2 <= len; i2++, i1++) a2[i2] = a[i1];
return a2;
}
function caml_asinh_float(x){return Math.asinh(x);}
function caml_atanh_float(x){return Math.atanh(x);}
function caml_atomic_cas(ref, o, n){
if(ref[1] === o){ref[1] = n; return 1;}
return 0;
}
function caml_atomic_exchange(ref, v){
var r = ref[1];
ref[1] = v;
return r;
}
function caml_atomic_fetch_add(ref, i){
var old = ref[1];
ref[1] += i;
return old;
}
function caml_atomic_load(ref){return ref[1];}
function caml_atomic_make_contended(a){return [0, a];}
function caml_ba_blit(src, dst){
if(dst.dims.length !== src.dims.length)
caml_invalid_argument("Bigarray.blit: dimension mismatch");
for(var i = 0; i < dst.dims.length; i++)
if(dst.dims[i] !== src.dims[i])
caml_invalid_argument("Bigarray.blit: dimension mismatch");
dst.data.set(src.data);
return 0;
}
function caml_ba_change_layout(ba, layout){
if(ba.layout === layout) return ba;
var new_dims = [];
for(var i = 0; i < ba.dims.length; i++)
new_dims[i] = ba.dims[ba.dims.length - i - 1];
return caml_ba_create_unsafe(ba.kind, layout, new_dims, ba.data);
}
function caml_ba_compare(a, b, total){return a.compare(b, total);}
function caml_ba_create_buffer(kind, size){
var view;
switch(kind){
case 0:
view = Float32Array; break;
case 1:
view = Float64Array; break;
case 2:
view = Int8Array; break;
case 3:
view = Uint8Array; break;
case 4:
view = Int16Array; break;
case 5:
view = Uint16Array; break;
case 6:
view = Int32Array; break;
case 7:
view = Int32Array; break;
case 8:
view = Int32Array; break;
case 9:
view = Int32Array; break;
case 10:
view = Float32Array; break;
case 11:
view = Float64Array; break;
case 12:
view = Uint8Array; break;
case 13:
view = Uint16Array; break;
}
if(! view) caml_invalid_argument("Bigarray.create: unsupported kind");
var data = new view(size * caml_ba_get_size_per_element(kind));
return data;
}
function caml_js_from_array(a){return a.slice(1);}
function caml_ba_create(kind, layout, dims_ml){
var
dims = caml_js_from_array(dims_ml),
data = caml_ba_create_buffer(kind, caml_ba_get_size(dims));
return caml_ba_create_unsafe(kind, layout, dims, data);
}
function caml_ba_create_from(data1, data2, _jstyp, kind, layout, dims){
if(data2 || caml_ba_get_size_per_element(kind) === 2)
caml_invalid_argument
("caml_ba_create_from: use return caml_ba_create_unsafe");
return caml_ba_create_unsafe(kind, layout, dims, data1);
}
var jsoo_dataview = new DataView(new ArrayBuffer(8));
function caml_int32_float_of_bits(x){
jsoo_dataview.setUint32(0, x, true);
return jsoo_dataview.getFloat32(0, true);
}
function caml_int64_of_bytes(a){
return new
MlInt64
(a[7] << 0 | a[6] << 8 | a[5] << 16,
a[4] << 0 | a[3] << 8 | a[2] << 16,
a[1] << 0 | a[0] << 8);
}
function caml_int64_float_of_bits(x){
var lo = x.lo, mi = x.mi, hi = x.hi;
if((hi & 0x7ff8) === 0x7ff0 && (mi | lo | hi & 0xf) !== 0) hi |= 8;
jsoo_dataview.setUint32(0, lo | mi << 24, true);
jsoo_dataview.setUint32(4, mi >>> 8 | hi << 16, true);
return jsoo_dataview.getFloat64(0, true);
}
function caml_failwith(msg){
if(! caml_global_data.Failure)
caml_global_data.Failure = [248, caml_string_of_jsbytes("Failure"), - 3];
caml_raise_with_string(caml_global_data.Failure, msg);
}
function caml_ba_deserialize(reader, sz, name){
var num_dims = reader.read32s();
if(num_dims < 0 || num_dims > 16)
caml_failwith("input_value: wrong number of bigarray dimensions");
var
tag = reader.read32s(),
kind = tag & 0xff,
layout = tag >> 8 & 1,
dims = [];
if(name === "_bigarr02")
for(var i = 0; i < num_dims; i++){
var size_dim = reader.read16u();
if(size_dim === 0xffff){
var size_dim_hi = reader.read32u(), size_dim_lo = reader.read32u();
if(size_dim_hi !== 0)
caml_failwith("input_value: bigarray dimension overflow in 32bit");
size_dim = size_dim_lo;
}
dims.push(size_dim);
}
else
for(var i = 0; i < num_dims; i++) dims.push(reader.read32u());
var
size = caml_ba_get_size(dims),
data = caml_ba_create_buffer(kind, size),
ba = caml_ba_create_unsafe(kind, layout, dims, data);
switch(kind){
case 2:
for(var i = 0; i < size; i++) data[i] = reader.read8s(); break;
case 3:
case 12:
for(var i = 0; i < size; i++) data[i] = reader.read8u(); break;
case 4:
for(var i = 0; i < size; i++) data[i] = reader.read16s(); break;
case 5:
for(var i = 0; i < size; i++) data[i] = reader.read16u(); break;
case 6:
for(var i = 0; i < size; i++) data[i] = reader.read32s(); break;
case 8:
case 9:
var sixty = reader.read8u();
if(sixty)
caml_failwith
("input_value: cannot read bigarray with 64-bit OCaml ints");
for(var i = 0; i < size; i++) data[i] = reader.read32s();
break;
case 7:
var t = new Array(8);
for(var i = 0; i < size; i++){
for(var j = 0; j < 8; j++) t[j] = reader.read8u();
var int64 = caml_int64_of_bytes(t);
ba.set(i, int64);
}
break;
case 1:
var t = new Array(8);
for(var i = 0; i < size; i++){
for(var j = 0; j < 8; j++) t[j] = reader.read8u();
var f = caml_int64_float_of_bits(caml_int64_of_bytes(t));
ba.set(i, f);
}
break;
case 13:
for(var i = 0; i < size; i++) data[i] = reader.read16u(); break;
case 0:
for(var i = 0; i < size; i++){
var f = caml_int32_float_of_bits(reader.read32s());
ba.set(i, f);
}
break;
case 10:
for(var i = 0; i < size; i++){
var
re = caml_int32_float_of_bits(reader.read32s()),
im = caml_int32_float_of_bits(reader.read32s());
ba.set(i, [254, re, im]);
}
break;
case 11:
var t = new Array(8);
for(var i = 0; i < size; i++){
for(var j = 0; j < 8; j++) t[j] = reader.read8u();
var re = caml_int64_float_of_bits(caml_int64_of_bytes(t));
for(var j = 0; j < 8; j++) t[j] = reader.read8u();
var im = caml_int64_float_of_bits(caml_int64_of_bytes(t));
ba.set(i, [254, re, im]);
}
break;
}
sz[0] = (4 + num_dims) * 4;
return caml_ba_create_unsafe(kind, layout, dims, data);
}
function caml_ba_dim(ba, i){
if(i < 0 || i >= ba.dims.length) caml_invalid_argument("Bigarray.dim");
return ba.dims[i];
}
function caml_ba_dim_1(ba){return caml_ba_dim(ba, 0);}
function caml_ba_dim_2(ba){return caml_ba_dim(ba, 1);}
function caml_ba_dim_3(ba){return caml_ba_dim(ba, 2);}
function caml_ba_fill(ba, v){ba.fill(v); return 0;}
function caml_ba_kind_of_typed_array(ta){
var kind;
if(ta instanceof Float32Array)
kind = 0;
else if(ta instanceof Float64Array)
kind = 1;
else if(ta instanceof Int8Array)
kind = 2;
else if(ta instanceof Uint8Array)
kind = 3;
else if(ta instanceof Uint8ClampedArray)
kind = 3;
else if(ta instanceof Int16Array)
kind = 4;
else if(ta instanceof Uint16Array)
kind = 5;
else if(ta instanceof Int32Array)
kind = 6;
else if(ta instanceof Uint32Array)
kind = 6;
else
caml_invalid_argument("caml_ba_kind_of_typed_array: unsupported kind");
return kind;
}
function caml_ba_from_typed_array(ta){
var
kind = caml_ba_kind_of_typed_array(ta),
ta =
ta instanceof Uint32Array
? new Int32Array(ta.buffer, ta.byteOffset, ta.length)
: ta;
return caml_ba_create_unsafe(kind, 0, [ta.length], ta);
}
function caml_ba_get_1(ba, i0){return ba.get(ba.offset(i0));}
function caml_ba_get_2(ba, i0, i1){return ba.get(ba.offset([i0, i1]));}
function caml_ba_get_3(ba, i0, i1, i2){
return ba.get(ba.offset([i0, i1, i2]));
}
function caml_ba_get_generic(ba, i){
var ofs = ba.offset(caml_js_from_array(i));
return ba.get(ofs);
}
function caml_mul(a, b){return Math.imul(a, b);}
function caml_hash_mix_int(h, d){
d = caml_mul(d, 0xcc9e2d51 | 0);
d = d << 15 | d >>> 32 - 15;
d = caml_mul(d, 0x1b873593);
h ^= d;
h = h << 13 | h >>> 32 - 13;
return (h + (h << 2) | 0) + (0xe6546b64 | 0) | 0;
}
function caml_hash_mix_float16(hash, d){
if((d & 0x7c00) === 0x7c00 && (d & 0x03ff) !== 0)
d = 0x7c01;
else if(d === 0x8000) d = 0;
return caml_hash_mix_int(hash, d);
}
function caml_int32_bits_of_float(x){
jsoo_dataview.setFloat32(0, x, true);
return jsoo_dataview.getUint32(0, true) | 0;
}
function caml_hash_mix_float32(hash, v){
var i = caml_int32_bits_of_float(v);
if((i & 0x7f800000) === 0x7f800000 && (i & 0x7fffff) !== 0)
i = 0x7f800001;
else if(i === (0x80000000 | 0)) i = 0;
hash = caml_hash_mix_int(hash, i);
return hash;
}
function caml_int64_create_lo_mi_hi(lo, mi, hi){return new MlInt64(lo, mi, hi);
}
function caml_int64_bits_of_float(x){
jsoo_dataview.setFloat64(0, x, true);
var
lo32 = jsoo_dataview.getUint32(0, true),
hi32 = jsoo_dataview.getUint32(4, true),
lo = lo32 & 0xffffff,
mi = lo32 >>> 24 | hi32 << 8 & 0xffffff,
hi = hi32 >>> 16 & 0xffff;
if((hi & 0x7ff8) === 0x7ff0 && (mi | lo | hi & 0xf) !== 0) hi |= 8;
return caml_int64_create_lo_mi_hi(lo, mi, hi);
}
function caml_hash_mix_float(hash, v0){
var
i64 = caml_int64_bits_of_float(v0),
l = caml_int64_lo32(i64),
h = caml_int64_hi32(i64);
if((h & 0x7ff00000) === 0x7ff00000 && (l | h & 0xfffff) !== 0){h = 0x7ff00000; l = 0x00000001;}
else if(h === (0x80000000 | 0) && l === 0) h = 0;
hash = caml_hash_mix_int(hash, l);
hash = caml_hash_mix_int(hash, h);
return hash;
}
function caml_ba_hash(ba){
var num_elts = caml_ba_get_size(ba.dims), h = 0;
switch(ba.kind){
case 2:
case 3:
case 12:
if(num_elts > 256) num_elts = 256;
var w = 0, i = 0;
for(i = 0; i + 4 <= num_elts; i += 4){
w =
ba.data[i + 0] & 0xff | (ba.data[i + 1] & 0xff) << 8
| (ba.data[i + 2] & 0xff) << 16
| ba.data[i + 3] << 24;
h = caml_hash_mix_int(h, w);
}
w = 0;
switch(num_elts & 3){
case 3:
w = ba.data[i + 2] << 16;
case 2:
w |= ba.data[i + 1] << 8;
case 1:
w |= ba.data[i + 0]; h = caml_hash_mix_int(h, w);
}
break;
case 4:
case 5:
if(num_elts > 128) num_elts = 128;
var w = 0, i = 0;
for(i = 0; i + 2 <= num_elts; i += 2){
w = ba.data[i + 0] & 0xffff | ba.data[i + 1] << 16;
h = caml_hash_mix_int(h, w);
}
if((num_elts & 1) !== 0) h = caml_hash_mix_int(h, ba.data[i]);
break;
case 6:
if(num_elts > 64) num_elts = 64;
for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]);
break;
case 8:
case 9:
if(num_elts > 64) num_elts = 64;
for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]);
break;
case 7:
if(num_elts > 32) num_elts = 32;
num_elts *= 2;
for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]);
break;
case 10:
num_elts *= 2;
case 0:
if(num_elts > 64) num_elts = 64;
for(var i = 0; i < num_elts; i++)
h = caml_hash_mix_float32(h, ba.data[i]);
break;
case 11:
num_elts *= 2;
case 1:
if(num_elts > 32) num_elts = 32;
for(var i = 0; i < num_elts; i++)
h = caml_hash_mix_float(h, ba.data[i]);
break;
case 13:
if(num_elts > 128) num_elts = 128;
for(var i = 0; i < num_elts; i++)
h = caml_hash_mix_float16(h, ba.data[i]);
break;
}
return h;
}
function caml_ba_init(){return 0;}
function caml_ba_kind(ba){return ba.kind;}
function caml_ba_layout(ba){return ba.layout;}
function caml_ba_map_file(_vfd, _kind, _layout, _shared, _dims, _pos){caml_failwith("caml_ba_map_file not implemented");
}
function caml_ba_map_file_bytecode(argv, _argn){
return caml_ba_map_file
(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
}
function caml_ba_num_dims(ba){return ba.dims.length;}
function caml_ba_reshape(ba, vind){
vind = caml_js_from_array(vind);
var new_dim = [], num_dims = vind.length;
if(num_dims < 0 || num_dims > 16)
caml_invalid_argument("Bigarray.reshape: bad number of dimensions");
var num_elts = 1;
for(var i = 0; i < num_dims; i++){
new_dim[i] = vind[i];
if(new_dim[i] < 0)
caml_invalid_argument("Bigarray.reshape: negative dimension");
num_elts = num_elts * new_dim[i];
}
var size = caml_ba_get_size(ba.dims);
if(num_elts !== size)
caml_invalid_argument("Bigarray.reshape: size mismatch");
return caml_ba_create_unsafe(ba.kind, ba.layout, new_dim, ba.data);
}
function caml_int64_to_bytes(x){return x.toArray();}
function caml_ba_serialize(writer, ba, sz){
writer.write(32, ba.dims.length);
writer.write(32, ba.kind | ba.layout << 8);
if(ba.caml_custom === "_bigarr02")
for(var i = 0; i < ba.dims.length; i++)
if(ba.dims[i] < 0xffff)
writer.write(16, ba.dims[i]);
else{
writer.write(16, 0xffff);
writer.write(32, 0);
writer.write(32, ba.dims[i]);
}
else
for(var i = 0; i < ba.dims.length; i++) writer.write(32, ba.dims[i]);
switch(ba.kind){
case 2:
case 3:
case 12:
for(var i = 0; i < ba.data.length; i++) writer.write(8, ba.data[i]);
break;
case 4:
case 5:
for(var i = 0; i < ba.data.length; i++) writer.write(16, ba.data[i]);
break;
case 6:
for(var i = 0; i < ba.data.length; i++) writer.write(32, ba.data[i]);
break;
case 8:
case 9:
writer.write(8, 0);
for(var i = 0; i < ba.data.length; i++) writer.write(32, ba.data[i]);
break;
case 7:
for(var i = 0; i < ba.data.length / 2; i++){
var b = caml_int64_to_bytes(ba.get(i));
for(var j = 0; j < 8; j++) writer.write(8, b[j]);
}
break;
case 1:
for(var i = 0; i < ba.data.length; i++){
var b = caml_int64_to_bytes(caml_int64_bits_of_float(ba.get(i)));
for(var j = 0; j < 8; j++) writer.write(8, b[j]);
}
break;
case 13:
for(var i = 0; i < ba.data.length; i++) writer.write(16, ba.data[i]);
break;
case 0:
for(var i = 0; i < ba.data.length; i++){
var b = caml_int32_bits_of_float(ba.get(i));
writer.write(32, b);
}
break;
case 10:
for(var i = 0; i < ba.data.length / 2; i++){
var j = ba.get(i);
writer.write(32, caml_int32_bits_of_float(j[1]));
writer.write(32, caml_int32_bits_of_float(j[2]));
}
break;
case 11:
for(var i = 0; i < ba.data.length / 2; i++){
var
complex = ba.get(i),
b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[1]));
for(var j = 0; j < 8; j++) writer.write(8, b[j]);
var b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[2]));
for(var j = 0; j < 8; j++) writer.write(8, b[j]);
}
break;
}
sz[0] = (4 + ba.dims.length) * 4;
sz[1] = (4 + ba.dims.length) * 8;
}
function caml_ba_set_1(ba, i0, v){ba.set(ba.offset(i0), v); return 0;}
function caml_ba_set_2(ba, i0, i1, v){
ba.set(ba.offset([i0, i1]), v);
return 0;
}
function caml_ba_set_3(ba, i0, i1, i2, v){
ba.set(ba.offset([i0, i1, i2]), v);
return 0;
}
function caml_ba_set_generic(ba, i, v){
ba.set(ba.offset(caml_js_from_array(i)), v);
return 0;
}
function caml_ba_slice(ba, vind){
vind = caml_js_from_array(vind);
var num_inds = vind.length, index = [], sub_dims = [], ofs;
if(num_inds > ba.dims.length)
caml_invalid_argument("Bigarray.slice: too many indices");
if(ba.layout === 0){
for(var i = 0; i < num_inds; i++) index[i] = vind[i];
for(; i < ba.dims.length; i++) index[i] = 0;
sub_dims = ba.dims.slice(num_inds);
}
else{
for(var i = 0; i < num_inds; i++)
index[ba.dims.length - num_inds + i] = vind[i];
for(var i = 0; i < ba.dims.length - num_inds; i++) index[i] = 1;
sub_dims = ba.dims.slice(0, ba.dims.length - num_inds);
}
ofs = ba.offset(index);
var
size = caml_ba_get_size(sub_dims),
size_per_element = caml_ba_get_size_per_element(ba.kind),
new_data =
ba.data.subarray
(ofs * size_per_element, (ofs + size) * size_per_element);
return caml_ba_create_unsafe(ba.kind, ba.layout, sub_dims, new_data);
}
function caml_ba_sub(ba, ofs, len){
var changed_dim, mul = 1;
if(ba.layout === 0){
for(var i = 1; i < ba.dims.length; i++) mul = mul * ba.dims[i];
changed_dim = 0;
}
else{
for(var i = 0; i < ba.dims.length - 1; i++) mul = mul * ba.dims[i];
changed_dim = ba.dims.length - 1;
ofs = ofs - 1;
}
if(ofs < 0 || len < 0 || ofs + len > ba.dims[changed_dim])
caml_invalid_argument("Bigarray.sub: bad sub-array");
var new_dims = [];
for(var i = 0; i < ba.dims.length; i++) new_dims[i] = ba.dims[i];
new_dims[changed_dim] = len;
mul *= caml_ba_get_size_per_element(ba.kind);
var new_data = ba.data.subarray(ofs * mul, (ofs + len) * mul);
return caml_ba_create_unsafe(ba.kind, ba.layout, new_dims, new_data);
}
function caml_ba_to_typed_array(ba){return ba.data;}
function caml_ba_uint8_get16(ba, i0){
var ofs = ba.offset(i0);
if(ofs + 1 >= ba.data.length) caml_array_bound_error();
var b1 = ba.get(ofs), b2 = ba.get(ofs + 1);
return b1 | b2 << 8;
}
function caml_ba_uint8_get32(ba, i0){
var ofs = ba.offset(i0);
if(ofs + 3 >= ba.data.length) caml_array_bound_error();
var
b1 = ba.get(ofs + 0),
b2 = ba.get(ofs + 1),
b3 = ba.get(ofs + 2),
b4 = ba.get(ofs + 3);
return b1 << 0 | b2 << 8 | b3 << 16 | b4 << 24;
}
function caml_ba_uint8_get64(ba, i0){
var ofs = ba.offset(i0);
if(ofs + 7 >= ba.data.length) caml_array_bound_error();
var
b1 = ba.get(ofs + 0),
b2 = ba.get(ofs + 1),
b3 = ba.get(ofs + 2),
b4 = ba.get(ofs + 3),
b5 = ba.get(ofs + 4),
b6 = ba.get(ofs + 5),
b7 = ba.get(ofs + 6),
b8 = ba.get(ofs + 7);
return caml_int64_of_bytes([b8, b7, b6, b5, b4, b3, b2, b1]);
}
function caml_ba_uint8_set16(ba, i0, v){
var ofs = ba.offset(i0);
if(ofs + 1 >= ba.data.length) caml_array_bound_error();
ba.set(ofs + 0, v & 0xff);
ba.set(ofs + 1, v >>> 8 & 0xff);
return 0;
}
function caml_ba_uint8_set32(ba, i0, v){
var ofs = ba.offset(i0);
if(ofs + 3 >= ba.data.length) caml_array_bound_error();
ba.set(ofs + 0, v & 0xff);
ba.set(ofs + 1, v >>> 8 & 0xff);
ba.set(ofs + 2, v >>> 16 & 0xff);
ba.set(ofs + 3, v >>> 24 & 0xff);
return 0;
}
function caml_ba_uint8_set64(ba, i0, v){
var ofs = ba.offset(i0);
if(ofs + 7 >= ba.data.length) caml_array_bound_error();
var v = caml_int64_to_bytes(v);
for(var i = 0; i < 8; i++) ba.set(ofs + i, v[7 - i]);
return 0;
}
function caml_backtrace_status(_unit){
return caml_record_backtrace_runtime_flag ? 1 : 0;
}
function caml_bigstring_blit_ba_to_ba(ba1, pos1, ba2, pos2, len){
if(12 !== ba1.kind)
caml_invalid_argument("caml_bigstring_blit_ba_to_ba: kind mismatch");
if(12 !== ba2.kind)
caml_invalid_argument("caml_bigstring_blit_ba_to_ba: kind mismatch");
if(len === 0) return 0;
var ofs1 = ba1.offset(pos1), ofs2 = ba2.offset(pos2);
if(ofs1 + len > ba1.data.length) caml_array_bound_error();
if(ofs2 + len > ba2.data.length) caml_array_bound_error();
var slice = ba1.data.subarray(ofs1, ofs1 + len);
ba2.data.set(slice, pos2);
return 0;
}
function caml_bigstring_blit_ba_to_bytes(ba1, pos1, bytes2, pos2, len){
if(12 !== ba1.kind)
caml_invalid_argument("caml_bigstring_blit_string_to_ba: kind mismatch");
if(len === 0) return 0;
var ofs1 = ba1.offset(pos1);
if(ofs1 + len > ba1.data.length) caml_array_bound_error();
if(pos2 + len > caml_ml_bytes_length(bytes2)) caml_array_bound_error();
var slice = ba1.data.subarray(ofs1, ofs1 + len);
caml_blit_bytes(caml_bytes_of_uint8_array(slice), 0, bytes2, pos2, len);
return 0;
}
function caml_bigstring_blit_bytes_to_ba(str1, pos1, ba2, pos2, len){
if(12 !== ba2.kind)
caml_invalid_argument("caml_bigstring_blit_string_to_ba: kind mismatch");
if(len === 0) return 0;
var ofs2 = ba2.offset(pos2);
if(pos1 + len > caml_ml_bytes_length(str1)) caml_array_bound_error();
if(ofs2 + len > ba2.data.length) caml_array_bound_error();
var slice = caml_uint8_array_of_bytes(str1).subarray(pos1, pos1 + len);
ba2.data.set(slice, ofs2);
return 0;
}
function caml_bigstring_blit_string_to_ba(str1, pos1, ba2, pos2, len){
if(12 !== ba2.kind)
caml_invalid_argument("caml_bigstring_blit_string_to_ba: kind mismatch");
if(len === 0) return 0;
var ofs2 = ba2.offset(pos2);
if(pos1 + len > caml_ml_string_length(str1)) caml_array_bound_error();
if(ofs2 + len > ba2.data.length) caml_array_bound_error();
var slice = caml_uint8_array_of_string(str1).subarray(pos1, pos1 + len);
ba2.data.set(slice, ofs2);
return 0;
}
function caml_bigstring_memcmp(s1, pos1, s2, pos2, len){
for(var i = 0; i < len; i++){
var a = caml_ba_get_1(s1, pos1 + i), b = caml_ba_get_1(s2, pos2 + i);
if(a < b) return - 1;
if(a > b) return 1;
}
return 0;
}
function caml_blake2_create(hashlen, key){
key = caml_uint8_array_of_string(key);
if(key.length > 64) key.subarray(0, 64);
return blake2b.Init(hashlen, key);
}
function caml_blake2_final(ctx, _hashlen){
var r = blake2b.Final(ctx);
return caml_string_of_uint8_array(r);
}
function caml_blake2_update(ctx, buf, ofs, len){
var input = caml_uint8_array_of_string(buf);
input = input.subarray(ofs, ofs + len);
blake2b.Update(ctx, input);
return 0;
}
function caml_blake2_string(hashlen, key, buf, ofs, len){
var ctx = caml_blake2_create(hashlen, key);
caml_blake2_update(ctx, buf, ofs, len);
return caml_blake2_final(ctx, hashlen);
}
function caml_blit_string(a, b, c, d, e){
caml_blit_bytes(caml_bytes_of_string(a), b, c, d, e);
return 0;
}
function caml_bswap16(x){return (x & 0x00ff) << 8 | (x & 0xff00) >> 8;}
var jsoo_text_decoder_buff = new ArrayBuffer(1024);
function caml_jsstring_of_string(s){
if(jsoo_is_ascii(s)) return s;
var
a =
s.length <= jsoo_text_decoder_buff.length
? new Uint8Array(jsoo_text_decoder_buff, 0, s.length)
: new Uint8Array(s.length);
for(var i = 0; i < s.length; i++) a[i] = s.charCodeAt(i);
return jsoo_text_decoder.decode(a);
}
function caml_build_symbols(symb){
var r = {}, max = - 1;
if(symb)
for(var i = 1; i < symb.length; i++){
var idx = symb[i][2];
max = Math.max(max, idx);
r[caml_jsstring_of_string(symb[i][1])] = idx;
}
r.next_idx = max + 1;
return r;
}
function caml_bytes_compare(s1, s2){
s1.t & 6 && caml_convert_string_to_bytes(s1);
s2.t & 6 && caml_convert_string_to_bytes(s2);
return s1.c < s2.c ? - 1 : s1.c > s2.c ? 1 : 0;
}
function caml_bytes_equal(s1, s2){
if(s1 === s2) return 1;
s1.t & 6 && caml_convert_string_to_bytes(s1);
s2.t & 6 && caml_convert_string_to_bytes(s2);
return s1.c === s2.c ? 1 : 0;
}
function caml_bytes_unsafe_get(s, i){
switch(s.t & 6){
case 0:
return s.c.charCodeAt(i);
case 2:
if(i >= s.c.length) return 0; return s.c.charCodeAt(i);
case 4:
return s.c[i];
}
}
function caml_bytes_get(s, i){
if(i >>> 0 >= s.l) caml_bytes_bound_error();
return caml_bytes_unsafe_get(s, i);
}
function caml_bytes_get16(s, i){
if(i >>> 0 >= s.l - 1) caml_bytes_bound_error();
var
b1 = caml_bytes_unsafe_get(s, i),
b2 = caml_bytes_unsafe_get(s, i + 1);
return b2 << 8 | b1;
}
function caml_bytes_get32(s, i){
if(i >>> 0 >= s.l - 3) caml_bytes_bound_error();
var
b1 = caml_bytes_unsafe_get(s, i),
b2 = caml_bytes_unsafe_get(s, i + 1),
b3 = caml_bytes_unsafe_get(s, i + 2),
b4 = caml_bytes_unsafe_get(s, i + 3);
return b4 << 24 | b3 << 16 | b2 << 8 | b1;
}
function caml_bytes_get64(s, i){
if(i >>> 0 >= s.l - 7) caml_bytes_bound_error();
var a = new Array(8);
for(var j = 0; j < 8; j++) a[7 - j] = caml_bytes_unsafe_get(s, i + j);
return caml_int64_of_bytes(a);
}
function caml_bytes_lessequal(s1, s2){
s1.t & 6 && caml_convert_string_to_bytes(s1);
s2.t & 6 && caml_convert_string_to_bytes(s2);
return s1.c <= s2.c ? 1 : 0;
}
function caml_bytes_greaterequal(s1, s2){return caml_bytes_lessequal(s2, s1);
}
function caml_bytes_lessthan(s1, s2){
s1.t & 6 && caml_convert_string_to_bytes(s1);
s2.t & 6 && caml_convert_string_to_bytes(s2);
return s1.c < s2.c ? 1 : 0;
}
function caml_bytes_greaterthan(s1, s2){return caml_bytes_lessthan(s2, s1);
}
function caml_bytes_notequal(s1, s2){return 1 - caml_bytes_equal(s1, s2);}
function caml_bytes_of_utf16_jsstring(s){
if(jsoo_is_ascii(s))
return new MlBytes(9, s, s.length);
else{
var a = jsoo_text_encoder.encode(s);
return new MlBytes(4, a, a.length);
}
}
function caml_bytes_set16(s, i, i16){
if(i >>> 0 >= s.l - 1) caml_bytes_bound_error();
var b2 = 0xff & i16 >> 8, b1 = 0xff & i16;
caml_bytes_unsafe_set(s, i + 0, b1);
caml_bytes_unsafe_set(s, i + 1, b2);
return 0;
}
function caml_bytes_set32(s, i, i32){
if(i >>> 0 >= s.l - 3) caml_bytes_bound_error();
var
b4 = 0xff & i32 >> 24,
b3 = 0xff & i32 >> 16,
b2 = 0xff & i32 >> 8,
b1 = 0xff & i32;
caml_bytes_unsafe_set(s, i + 0, b1);
caml_bytes_unsafe_set(s, i + 1, b2);
caml_bytes_unsafe_set(s, i + 2, b3);
caml_bytes_unsafe_set(s, i + 3, b4);
return 0;
}
function caml_bytes_set64(s, i, i64){
if(i >>> 0 >= s.l - 7) caml_bytes_bound_error();
var a = caml_int64_to_bytes(i64);
for(var j = 0; j < 8; j++) caml_bytes_unsafe_set(s, i + 7 - j, a[j]);
return 0;
}
var caml_callback = caml_call_gen;
function caml_cbrt_float(x){return Math.cbrt(x);}
class caml_ml_channels_state{
constructor(){
this.map = new globalThis.WeakMap();
this.opened = new globalThis.Set();
}
close(chanid){this.opened.delete(chanid);}
get(chanid){return this.map.get(chanid);}
set(chanid, val){
if(val.opened) this.opened.add(chanid);
return this.map.set(chanid, val);
}
all(){return this.opened.values();}
}
var caml_ml_channels = new caml_ml_channels_state();
function caml_ml_channel_get(id){return caml_ml_channels.get(id);}
function caml_channel_descriptor(chanid){
var chan = caml_ml_channel_get(chanid);
return chan.fd;
}
function caml_check_bound(array, index){
if(index >>> 0 >= array.length - 1) caml_array_bound_error();
return array;
}
function caml_classify_float(x){
if(Number.isFinite(x)){
if(Math.abs(x) >= 2.2250738585072014e-308) return 0;
if(x !== 0) return 1;
return 2;
}
return Number.isNaN(x) ? 4 : 3;
}
function caml_is_continuation_tag(t){return t === 245 ? 1 : 0;}
function caml_int32_unmarshal(reader, size){size[0] = 4; return reader.read32s();
}
function caml_nativeint_unmarshal(reader, size){
switch(reader.read8u()){
case 1:
size[0] = 4; return reader.read32s();
case 2:
caml_failwith("input_value: native integer value too large"); break;
default: caml_failwith("input_value: ill-formed native integer");
}
}
function caml_int64_unmarshal(reader, size){
var t = new Array(8);
for(var j = 0; j < 8; j++) t[j] = reader.read8u();
size[0] = 8;
return caml_int64_of_bytes(t);
}
function caml_int64_marshal(writer, v, sizes){
var b = caml_int64_to_bytes(v);
for(var i = 0; i < 8; i++) writer.write(8, b[i]);
sizes[0] = 8;
sizes[1] = 8;
}
function caml_int64_compare(x, y, _total){return x.compare(y);}
function caml_int64_hash(v){return v.lo32() ^ v.hi32();}
var
caml_custom_ops =
{_j:
{deserialize: caml_int64_unmarshal,
serialize: caml_int64_marshal,
fixed_length: 8,
compare: caml_int64_compare,
hash: caml_int64_hash},
_i: {deserialize: caml_int32_unmarshal, fixed_length: 4},
_n: {deserialize: caml_nativeint_unmarshal, fixed_length: 4},
_bigarray:
{deserialize:
function(reader, sz){
return caml_ba_deserialize(reader, sz, "_bigarray");
},
serialize: caml_ba_serialize,
compare: caml_ba_compare,
hash: caml_ba_hash},
_bigarr02:
{deserialize:
function(reader, sz){
return caml_ba_deserialize(reader, sz, "_bigarr02");
},
serialize: caml_ba_serialize,
compare: caml_ba_compare,
hash: caml_ba_hash}};
function caml_compare_val_get_custom(a){
return caml_custom_ops[a.caml_custom]
&& caml_custom_ops[a.caml_custom].compare;
}
function caml_compare_val_number_custom(num, custom, swap, total){
var comp = caml_compare_val_get_custom(custom);
if(comp){
var x = swap > 0 ? comp(custom, num, total) : comp(num, custom, total);
if(total && Number.isNaN(x)) return swap;
if(Number.isNaN(+ x)) return + x;
if((x | 0) !== 0) return x | 0;
}
return swap;
}
function caml_compare_val_tag(a){
if(typeof a === "number")
return 1000;
else if(caml_is_ml_bytes(a))
return 252;
else if(caml_is_ml_string(a))
return 1252;
else if(Array.isArray(a) && a[0] === a[0] >>> 0 && a[0] <= 255){var tag = a[0] | 0; return tag === 254 ? 0 : tag;}
else if(a instanceof String)
return 12520;
else if(typeof a === "string")
return 12520;
else if(a instanceof Number)
return 1000;
else if(a?.caml_custom)
return 1255;
else if(a?.compare)
return 1256;
else if(typeof a === "function")
return 1247;
else if(typeof a === "symbol") return 1251;
return 1001;
}
function caml_int_compare(a, b){
if(a < b) return - 1;
if(a === b) return 0;
return 1;
}
function caml_string_compare(s1, s2){
return s1 < s2 ? - 1 : s1 > s2 ? 1 : 0;
}
function caml_compare_val(a, b, total){
var stack = [];
for(;;){
if(! (total && a === b)){
var tag_a = caml_compare_val_tag(a);
if(tag_a === 250){a = a[1]; continue;}
var tag_b = caml_compare_val_tag(b);
if(tag_b === 250){b = b[1]; continue;}
if(tag_a !== tag_b){
if(tag_a === 1000){
if(tag_b === 1255)
return caml_compare_val_number_custom(a, b, - 1, total);
return - 1;
}
if(tag_b === 1000){
if(tag_a === 1255)
return caml_compare_val_number_custom(b, a, 1, total);
return 1;
}
return tag_a < tag_b ? - 1 : 1;
}
switch(tag_a){
case 247:
caml_invalid_argument("compare: functional value"); break;
case 248:
var x = caml_int_compare(a[2], b[2]) | 0;
if(x !== 0) return x;
break;
case 249:
caml_invalid_argument("compare: functional value"); break;
case 250:
caml_invalid_argument("equal: got Forward_tag, should not happen");
break;
case 251:
caml_invalid_argument("equal: abstract value"); break;
case 252:
if(a !== b){
var x = caml_bytes_compare(a, b) | 0;
if(x !== 0) return x;
}
break;
case 253:
caml_invalid_argument("equal: got Double_tag, should not happen");
break;
case 254:
caml_invalid_argument
("equal: got Double_array_tag, should not happen");
break;
case 255:
caml_invalid_argument("equal: got Custom_tag, should not happen");
break;
case 1247:
caml_invalid_argument("compare: functional value"); break;
case 1255:
var comp = caml_compare_val_get_custom(a);
if(comp !== caml_compare_val_get_custom(b))
return a.caml_custom < b.caml_custom ? - 1 : 1;
if(! comp) caml_invalid_argument("compare: abstract value");
var x = comp(a, b, total);
if(Number.isNaN(x)) return total ? - 1 : x;
if(x !== (x | 0)) return - 1;
if(x !== 0) return x | 0;
break;
case 1256:
var x = a.compare(b, total);
if(Number.isNaN(x)) return total ? - 1 : x;
if(x !== (x | 0)) return - 1;
if(x !== 0) return x | 0;
break;
case 1000:
a = + a;
b = + b;
if(a < b) return - 1;
if(a > b) return 1;
if(a !== b){
if(! total) return Number.NaN;
if(! Number.isNaN(a)) return 1;
if(! Number.isNaN(b)) return - 1;
}
break;
case 1001:
if(a < b) return - 1;
if(a > b) return 1;
if(a !== b) return total ? 1 : Number.NaN;
break;
case 1251:
if(a !== b) return total ? 1 : Number.NaN; break;
case 1252:
var a = caml_jsbytes_of_string(a), b = caml_jsbytes_of_string(b);
if(a !== b){if(a < b) return - 1; if(a > b) return 1;}
break;
case 12520:
var a = a.toString(), b = b.toString();
if(a !== b){if(a < b) return - 1; if(a > b) return 1;}
break;
default:
if(caml_is_continuation_tag(tag_a)){
caml_invalid_argument("compare: continuation value");
break;
}
if(a.length !== b.length) return a.length < b.length ? - 1 : 1;
if(a.length > 1) stack.push(a, b, 1);
break;
}
}
if(stack.length === 0) return 0;
var i = stack.pop();
b = stack.pop();
a = stack.pop();
if(i + 1 < a.length) stack.push(a, b, i + 1);
a = a[i];
b = b[i];
}
}
function caml_compare(a, b){return caml_compare_val(a, b, true);}
function caml_continuation_use_noexc(cont){
var stack = cont[1];
cont[1] = 0;
return stack;
}
function caml_continuation_use_and_update_handler_noexc
(cont, hval, hexn, heff){
var stack = caml_continuation_use_noexc(cont);
if(stack === 0) return stack;
var last = cont[2];
last.h[1] = hval;
last.h[2] = hexn;
last.h[3] = heff;
return stack;
}
function caml_convert_raw_backtrace(){return [0];}
function caml_convert_raw_backtrace_slot(_rbt){
caml_failwith("caml_convert_raw_backtrace_slot");
}
function caml_copysign_float(x, y){
if(y === 0) y = 1 / y;
x = Math.abs(x);
return y < 0 ? - x : x;
}
function caml_cosh_float(x){return Math.cosh(x);}
function fs_node_supported(){
return globalThis.process?.versions?.node !== undefined;
}
function make_path_is_absolute(){
function posix(path){
if(path.charAt(0) === "/") return ["", path.slice(1)];
return;
}
function win32(path){
var
splitDeviceRe =
/^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/,
result = splitDeviceRe.exec(path),
device = result[1] || "",
isUnc = device.length > 0 && device.charAt(1) !== ":";
if(result[2] || isUnc){
var root = result[1] || "", sep = result[2] || "";
return [root, path.slice(root.length + sep.length)];
}
return;
}
return jsoo_is_win32 ? win32 : posix;
}
var path_is_absolute = make_path_is_absolute();
function caml_trailing_slash(name){
return name.slice(- 1) !== "/" ? name + "/" : name;
}
if(fs_node_supported() && globalThis.process && globalThis.process.cwd)
var caml_current_dir = globalThis.process.cwd().replace(/\\/g, "/");
else
var caml_current_dir = "/static";
caml_current_dir = caml_trailing_slash(caml_current_dir);
function caml_make_path(name){
name = caml_jsstring_of_string(name);
if(! path_is_absolute(name)) name = caml_current_dir + name;
var
comp0 = path_is_absolute(name),
comp = comp0[1].split(/[/\\]/),
ncomp = [];
for(var i = 0; i < comp.length; i++)
switch(comp[i]){
case "..":
ncomp.pop(); break;
case ".": break;
case "": break;
default: ncomp.push(comp[i]); break;
}
ncomp.unshift(comp0[0]);
ncomp.orig = name;
return ncomp;
}
function caml_get_root(path){
var x = path_is_absolute(path);
if(! x) return;
return x[0] + "/";
}
var
caml_root =
caml_get_root(caml_current_dir)
|| caml_failwith("unable to compute caml_root"),
jsoo_mount_point = [];
if(fs_node_supported())
jsoo_mount_point.push
({path: caml_root, device: new MlNodeDevice(caml_root)});
else
jsoo_mount_point.push
({path: caml_root, device: new MlFakeDevice(caml_root)});
jsoo_mount_point.push
({path: "/static/", device: new MlFakeDevice("/static/")});
function resolve_fs_device(name){
var
path = caml_make_path(name),
name = path.join("/"),
name_slash = caml_trailing_slash(name),
res;
for(var i = 0; i < jsoo_mount_point.length; i++){
var m = jsoo_mount_point[i];
if
(name_slash.search(m.path) === 0
&& (! res || res.path.length < m.path.length))
res =
{path: m.path,
device: m.device,
rest: name.slice(m.path.length, name.length)};
}
if(! res && fs_node_supported()){
var root = caml_get_root(name);
if(root?.match(/^[a-zA-Z]:\/$/)){
var m = {path: root, device: new MlNodeDevice(root)};
jsoo_mount_point.push(m);
res =
{path: m.path,
device: m.device,
rest: name.slice(m.path.length, name.length)};
}
}
if(res) return res;
caml_raise_sys_error("no device found for " + name_slash);
}
function caml_create_file(name, content){
var root = resolve_fs_device(name);
if(! root.device.register) caml_failwith("cannot register file");
root.device.register(root.rest, content);
return 0;
}
function caml_create_string(_len){caml_invalid_argument("String.create");}
var caml_custom_event_index = 0;
function caml_custom_identifier(o){
return caml_string_of_jsstring(o.caml_custom || "");
}
var
zstd_decompress =
function(){
var
ab = ArrayBuffer,
u8 = Uint8Array,
u16 = Uint16Array,
i16 = Int16Array,
i32 = Int32Array;
function slc(v, s, e){
if(u8.prototype.slice) return u8.prototype.slice.call(v, s, e);
if(s == null || s < 0) s = 0;
if(e == null || e > v.length) e = v.length;
var n = new u8(e - s);
n.set(v.subarray(s, e));
return n;
}
function fill(v, n, s, e){
if(u8.prototype.fill) return u8.prototype.fill.call(v, n, s, e);
if(s == null || s < 0) s = 0;
if(e == null || e > v.length) e = v.length;
for(; s < e; ++s) v[s] = n;
return v;
}
function cpw(v, t, s, e){
if(u8.prototype.copyWithin)
return u8.prototype.copyWithin.call(v, t, s, e);
if(s == null || s < 0) s = 0;
if(e == null || e > v.length) e = v.length;
while(s < e) v[t++] = v[s++];
}
var
ec =
["invalid zstd data",
"window size too large (>2046MB)",
"invalid block type",
"FSE accuracy too high",
"match distance too far back",
"unexpected EOF"];
function err(ind, msg, nt){
var e = new Error(msg || ec[ind]);
e.code = ind;
if(! nt) throw e;
return e;
}
function rb(d, b, n){
var i = 0, o = 0;
for(; i < n; ++i) o |= d[b++] << (i << 3);
return o;
}
function b4(d, b){
return (d[b] | d[b + 1] << 8 | d[b + 2] << 16 | d[b + 3] << 24) >>> 0;
}
function rzfh(dat, w){
var n3 = dat[0] | dat[1] << 8 | dat[2] << 16;
if(n3 === 0x2fb528 && dat[3] === 253){
var
flg = dat[4],
ss = flg >> 5 & 1,
cc = flg >> 2 & 1,
df = flg & 3,
fcf = flg >> 6;
if(flg & 8) err(0);
var bt = 6 - ss, db = df === 3 ? 4 : df, di = rb(dat, bt, db);
bt += db;
var
fsb = fcf ? 1 << fcf : ss,
fss = rb(dat, bt, fsb) + (fcf === 1 && 256),
ws = fss;
if(! ss){
var wb = 1 << 10 + (dat[5] >> 3);
ws = wb + (wb >> 3) * (dat[5] & 7);
}
if(ws > 2145386496) err(1);
var buf = new u8((w === 1 ? fss || ws : w ? 0 : ws) + 12);
buf[0] = 1, buf[4] = 4, buf[8] = 8;
return {b: bt + fsb,
y: 0,
l: 0,
d: di,
w: w && w !== 1 ? w : buf.subarray(12),
e: ws,
o: new i32(buf.buffer, 0, 3),
u: fss,
c: cc,
m: Math.min(131072, ws)};
}
else if((n3 >> 4 | dat[3] << 20) === 0x184d2a5)
return b4(dat, 4) + 8;
err(0);
}
function msb(val){
var bits = 0;
for(; 1 << bits <= val; ++bits) ;
return bits - 1;
}
function rfse(dat, bt, mal){
var tpos = (bt << 3) + 4, al = (dat[bt] & 15) + 5;
if(al > mal) err(3);
var
sz = 1 << al,
probs = sz,
sym = - 1,
re = - 1,
i = - 1,
ht = sz,
buf = new ab(512 + (sz << 2)),
freq = new i16(buf, 0, 256),
dstate = new u16(buf, 0, 256),
nstate = new u16(buf, 512, sz),
bb1 = 512 + (sz << 1),
syms = new u8(buf, bb1, sz),
nbits = new u8(buf, bb1 + sz);
while(sym < 255 && probs > 0){
var
bits = msb(probs + 1),
cbt = tpos >> 3,
msk = (1 << bits + 1) - 1,
val =
(dat[cbt] | dat[cbt + 1] << 8 | dat[cbt + 2] << 16) >> (tpos & 7)
& msk,
msk1fb = (1 << bits) - 1,
msv = msk - probs - 1,
sval = val & msk1fb;
if(sval < msv)
tpos += bits, val = sval;
else{tpos += bits + 1; if(val > msk1fb) val -= msv;}
freq[++sym] = --val;
if(val === - 1){probs += val; syms[--ht] = sym;} else probs -= val;
if(! val)
do{
var rbt = tpos >> 3;
re = (dat[rbt] | dat[rbt + 1] << 8) >> (tpos & 7) & 3;
tpos += 2;
sym += re;
}
while
(re === 3);
}
if(sym > 255 || probs) err(0);
var sympos = 0, sstep = (sz >> 1) + (sz >> 3) + 3, smask = sz - 1;
for(var s = 0; s <= sym; ++s){
var sf = freq[s];
if(sf < 1){dstate[s] = - sf; continue;}
for(i = 0; i < sf; ++i){
syms[sympos] = s;
do sympos = sympos + sstep & smask;while(sympos >= ht);
}
}
if(sympos) err(0);
for(i = 0; i < sz; ++i){
var ns = dstate[syms[i]]++, nb = nbits[i] = al - msb(ns);
nstate[i] = (ns << nb) - sz;
}
return [tpos + 7 >> 3, {b: al, s: syms, n: nbits, t: nstate}];
}
function rhu(dat, bt){
var
i = 0,
wc = - 1,
buf = new u8(292),
hb = dat[bt],
hw = buf.subarray(0, 256),
rc = buf.subarray(256, 268),
ri = new u16(buf.buffer, 268);
if(hb < 128){
var _a = rfse(dat, bt + 1, 6), ebt = _a[0], fdt = _a[1];
bt += hb;
var epos = ebt << 3, lb = dat[bt];
if(! lb) err(0);
var
st1 = 0,
st2 = 0,
btr1 = fdt.b,
btr2 = btr1,
fpos = (++bt << 3) - 8 + msb(lb);
for(;;){
fpos -= btr1;
if(fpos < epos) break;
var cbt = fpos >> 3;
st1 +=
(dat[cbt] | dat[cbt + 1] << 8) >> (fpos & 7) & (1 << btr1) - 1;
hw[++wc] = fdt.s[st1];
fpos -= btr2;
if(fpos < epos) break;
cbt = fpos >> 3;
st2 +=
(dat[cbt] | dat[cbt + 1] << 8) >> (fpos & 7) & (1 << btr2) - 1;
hw[++wc] = fdt.s[st2];
btr1 = fdt.n[st1];
st1 = fdt.t[st1];
btr2 = fdt.n[st2];
st2 = fdt.t[st2];
}
if(++wc > 255) err(0);
}
else{
wc = hb - 127;
for(; i < wc; i += 2){
var byte = dat[++bt];
hw[i] = byte >> 4;
hw[i + 1] = byte & 15;
}
++bt;
}
var wes = 0;
for(i = 0; i < wc; ++i){
var wt = hw[i];
if(wt > 11) err(0);
wes += wt && 1 << wt - 1;
}
var mb = msb(wes) + 1, ts = 1 << mb, rem = ts - wes;
if(rem & rem - 1) err(0);
hw[wc++] = msb(rem) + 1;
for(i = 0; i < wc; ++i){
var wt = hw[i];
++rc[hw[i] = wt && mb + 1 - wt];
}
var
hbuf = new u8(ts << 1),
syms = hbuf.subarray(0, ts),
nb = hbuf.subarray(ts);
ri[mb] = 0;
for(i = mb; i > 0; --i){
var pv = ri[i];
fill(nb, i, pv, ri[i - 1] = pv + rc[i] * (1 << mb - i));
}
if(ri[0] !== ts) err(0);
for(i = 0; i < wc; ++i){
var bits = hw[i];
if(bits){
var code = ri[bits];
fill(syms, i, code, ri[bits] = code + (1 << mb - bits));
}
}
return [bt, {n: nb, b: mb, s: syms}];
}
var
dllt =
rfse
(new
u8
([81,
16,
99,
140,
49,
198,
24,
99,
12,
33,
196,
24,
99,
102,
102,
134,
70,
146,
4]),
0,
6)
[1],
dmlt =
rfse
(new
u8
([33,
20,
196,
24,
99,
140,
33,
132,
16,
66,
8,
33,
132,
16,
66,
8,
33,
68,
68,
68,
68,
68,
68,
68,
68,
36,
9]),
0,
6)
[1],
doct =
rfse
(new u8([32, 132, 16, 66, 102, 70, 68, 68, 68, 68, 36, 73, 2]),
0,
5)
[1];
function b2bl(b, s){
var len = b.length, bl = new i32(len);
for(var i = 0; i < len; ++i){bl[i] = s; s += 1 << b[i];}
return bl;
}
var
llb =
new
u8
(new
i32
([0,
0,
0,
0,
16843009,
50528770,
134678020,
202050057,
269422093]).buffer,
0,
36),
llbl = b2bl(llb, 0),
mlb =
new
u8
(new
i32
([0,
0,
0,
0,
0,
0,
0,
0,
16843009,
50528770,
117769220,
185207048,
252579084,
16]).buffer,
0,
53),
mlbl = b2bl(mlb, 3);
function dhu(dat, out, hu){
var
len = dat.length,
ss = out.length,
lb = dat[len - 1],
msk = (1 << hu.b) - 1,
eb = - hu.b;
if(! lb) err(0);
var
st = 0,
btr = hu.b,
pos = (len << 3) - 8 + msb(lb) - btr,
i = - 1;
while(pos > eb && i < ss){
var
cbt = pos >> 3,
val =
(dat[cbt] | dat[cbt + 1] << 8 | dat[cbt + 2] << 16) >> (pos & 7);
st = (st << btr | val) & msk;
out[++i] = hu.s[st];
pos -= btr = hu.n[st];
}
if(pos !== eb || i + 1 !== ss) err(0);
}
function dhu4(dat, out, hu){
var
bt = 6,
ss = out.length,
sz1 = ss + 3 >> 2,
sz2 = sz1 << 1,
sz3 = sz1 + sz2;
dhu
(dat.subarray(bt, bt += dat[0] | dat[1] << 8),
out.subarray(0, sz1),
hu);
dhu
(dat.subarray(bt, bt += dat[2] | dat[3] << 8),
out.subarray(sz1, sz2),
hu);
dhu
(dat.subarray(bt, bt += dat[4] | dat[5] << 8),
out.subarray(sz2, sz3),
hu);
dhu(dat.subarray(bt), out.subarray(sz3), hu);
}
function rzb(dat, st, out){
var _a, bt = st.b, b0 = dat[bt], btype = b0 >> 1 & 3;
st.l = b0 & 1;
var
sz = b0 >> 3 | dat[bt + 1] << 5 | dat[bt + 2] << 13,
ebt = (bt += 3) + sz;
if(btype === 1){
if(bt >= dat.length) return;
st.b = bt + 1;
if(out){fill(out, dat[bt], st.y, st.y += sz); return out;}
return fill(new u8(sz), dat[bt]);
}
if(ebt > dat.length) return;
if(btype === 0){
st.b = ebt;
if(out){
out.set(dat.subarray(bt, ebt), st.y);
st.y += sz;
return out;
}
return slc(dat, bt, ebt);
}
if(btype === 2){
var
b3 = dat[bt],
lbt = b3 & 3,
sf = b3 >> 2 & 3,
lss = b3 >> 4,
lcs = 0,
s4 = 0;
if(lbt < 2)
if(sf & 1)
lss |= dat[++bt] << 4 | (sf & 2 && dat[++bt] << 12);
else
lss = b3 >> 3;
else{
s4 = sf;
if(sf < 2)
lss |= (dat[++bt] & 63) << 4, lcs = dat[bt] >> 6 | dat[++bt] << 2;
else if(sf === 2)
lss |= dat[++bt] << 4 | (dat[++bt] & 3) << 12,
lcs = dat[bt] >> 2 | dat[++bt] << 6;
else
lss |= dat[++bt] << 4 | (dat[++bt] & 63) << 12,
lcs = dat[bt] >> 6 | dat[++bt] << 2 | dat[++bt] << 10;
}
++bt;
var
buf = out ? out.subarray(st.y, st.y + st.m) : new u8(st.m),
spl = buf.length - lss;
if(lbt === 0)
buf.set(dat.subarray(bt, bt += lss), spl);
else if(lbt === 1)
fill(buf, dat[bt++], spl);
else{
var hu = st.h;
if(lbt === 2){
var hud = rhu(dat, bt);
lcs += bt - (bt = hud[0]);
st.h = hu = hud[1];
}
else if(! hu) err(0);
(s4 ? dhu4 : dhu)
(dat.subarray(bt, bt += lcs), buf.subarray(spl), hu);
}
var ns = dat[bt++];
if(ns){
if(ns === 255)
ns = (dat[bt++] | dat[bt++] << 8) + 0x7f00;
else if(ns > 127) ns = ns - 128 << 8 | dat[bt++];
var scm = dat[bt++];
if(scm & 3) err(0);
var dts = [dmlt, doct, dllt];
for(var i = 2; i > - 1; --i){
var md = scm >> (i << 1) + 2 & 3;
if(md === 1){
var rbuf = new u8([0, 0, dat[bt++]]);
dts[i] =
{s: rbuf.subarray(2, 3),
n: rbuf.subarray(0, 1),
t: new u16(rbuf.buffer, 0, 1),
b: 0};
}
else if(md === 2)
_a = rfse(dat, bt, 9 - (i & 1)), bt = _a[0], dts[i] = _a[1];
else if(md === 3){if(! st.t) err(0); dts[i] = st.t[i];}
}
var
_b = st.t = dts,
mlt = _b[0],
oct = _b[1],
llt = _b[2],
lb = dat[ebt - 1];
if(! lb) err(0);
var
spos = (ebt << 3) - 8 + msb(lb) - llt.b,
cbt = spos >> 3,
oubt = 0,
lst =
(dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << llt.b) - 1;
cbt = (spos -= oct.b) >> 3;
var
ost =
(dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << oct.b) - 1;
cbt = (spos -= mlt.b) >> 3;
var
mst =
(dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << mlt.b) - 1;
for(++ns; --ns;){
var
llc = llt.s[lst],
lbtr = llt.n[lst],
mlc = mlt.s[mst],
mbtr = mlt.n[mst],
ofc = oct.s[ost],
obtr = oct.n[ost];
cbt = (spos -= ofc) >> 3;
var
ofp = 1 << ofc,
off =
ofp
+
((dat[cbt] | dat[cbt + 1] << 8 | dat[cbt + 2] << 16
| dat[cbt + 3] << 24)
>>> (spos & 7)
& ofp - 1);
cbt = (spos -= mlb[mlc]) >> 3;
var
ml =
mlbl[mlc]
+
((dat[cbt] | dat[cbt + 1] << 8 | dat[cbt + 2] << 16)
>> (spos & 7)
& (1 << mlb[mlc]) - 1);
cbt = (spos -= llb[llc]) >> 3;
var
ll =
llbl[llc]
+
((dat[cbt] | dat[cbt + 1] << 8 | dat[cbt + 2] << 16)
>> (spos & 7)
& (1 << llb[llc]) - 1);
cbt = (spos -= lbtr) >> 3;
lst =
llt.t[lst]
+
((dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << lbtr) - 1);
cbt = (spos -= mbtr) >> 3;
mst =
mlt.t[mst]
+
((dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << mbtr) - 1);
cbt = (spos -= obtr) >> 3;
ost =
oct.t[ost]
+
((dat[cbt] | dat[cbt + 1] << 8) >> (spos & 7) & (1 << obtr) - 1);
if(off > 3){
st.o[2] = st.o[1];
st.o[1] = st.o[0];
st.o[0] = off -= 3;
}
else{
var idx = off - (ll !== 0);
if(idx){
off = idx === 3 ? st.o[0] - 1 : st.o[idx];
if(idx > 1) st.o[2] = st.o[1];
st.o[1] = st.o[0];
st.o[0] = off;
}
else
off = st.o[0];
}
for(var i = 0; i < ll; ++i) buf[oubt + i] = buf[spl + i];
oubt += ll, spl += ll;
var stin = oubt - off;
if(stin < 0){
var len = - stin, bs = st.e + stin;
if(len > ml) len = ml;
for(var i = 0; i < len; ++i) buf[oubt + i] = st.w[bs + i];
oubt += len, ml -= len, stin = 0;
}
for(var i = 0; i < ml; ++i) buf[oubt + i] = buf[stin + i];
oubt += ml;
}
if(oubt !== spl)
while(spl < buf.length) buf[oubt++] = buf[spl++];
else
oubt = buf.length;
if(out) st.y += oubt; else buf = slc(buf, 0, oubt);
}
else if(out){
st.y += lss;
if(spl) for(var i = 0; i < lss; ++i) buf[i] = buf[spl + i];
}
else if(spl) buf = slc(buf, spl);
st.b = ebt;
return buf;
}
err(2);
}
function cct(bufs, ol){
if(bufs.length === 1) return bufs[0];
var buf = new u8(ol);
for(var i = 0, b = 0; i < bufs.length; ++i){
var chk = bufs[i];
buf.set(chk, b);
b += chk.length;
}
return buf;
}
return function(dat, buf){
var bt = 0, bufs = [], nb = + ! buf, ol = 0;
while(dat.length){
var st = rzfh(dat, nb || buf);
if(typeof st === "object"){
if(nb){
buf = null;
if(st.w.length === st.u){bufs.push(buf = st.w); ol += st.u;}
}
else{bufs.push(buf); st.e = 0;}
while(! st.l){
var blk = rzb(dat, st, buf);
if(! blk) err(5);
if(buf)
st.e = st.y;
else{
bufs.push(blk);
ol += blk.length;
cpw(st.w, 0, blk.length);
st.w.set(blk, st.w.length - blk.length);
}
}
bt = st.b + st.c * 4;
}
else
bt = st;
dat = dat.subarray(bt);
}
return cct(bufs, ol);};
}
(),
caml_decompress_input = zstd_decompress;
function caml_div(x, y){
if(y === 0) caml_raise_zero_divide();
return x / y | 0;
}
var caml_domain_dls = [0];
function caml_domain_dls_compare_and_set(old, n){
if(caml_domain_dls !== old) return 0;
caml_domain_dls = n;
return 1;
}
function caml_domain_dls_get(_unit){return caml_domain_dls;}
function caml_domain_dls_set(a){caml_domain_dls = a;}
var caml_domain_id = 0;
function caml_ml_mutex_unlock(t){t.locked = false; return 0;}
var caml_domain_latest_idx = 1;
function caml_domain_spawn(f, term_sync){
var id = caml_domain_latest_idx++, old = caml_domain_id;
caml_domain_id = id;
var res = caml_callback(f, [0]);
caml_domain_id = old;
caml_ml_mutex_unlock(term_sync[2]);
term_sync[1] = [0, [0, res]];
return id;
}
var
caml_ephe_none = {caml_ephe_none: 0},
caml_ephe_data_offset = 2,
caml_ephe_key_offset = 3;
function caml_ephe_get_data(x){
var data = x[caml_ephe_data_offset];
if(data === caml_ephe_none) return 0;
for(var i = caml_ephe_key_offset; i < x.length; i++){
var k = x[i];
if(globalThis.WeakRef && k instanceof globalThis.WeakRef){
var d = k.deref();
if(d === undefined){
x[i] = caml_ephe_none;
x[caml_ephe_data_offset] = caml_ephe_none;
return 0;
}
if(globalThis.WeakMap){
data = data.get(k);
if(data === undefined){
x[caml_ephe_data_offset] = caml_ephe_none;
return 0;
}
}
}
}
return [0, data];
}
function caml_ephe_unset_data(x){
x[caml_ephe_data_offset] = caml_ephe_none;
return 0;
}
function caml_ephe_set_data(x, data){
for(var i = x.length - 1; i >= caml_ephe_key_offset; i--){
var k = x[i];
if(globalThis.WeakRef && k instanceof globalThis.WeakRef){
var d = k.deref();
if(d === undefined){x[i] = caml_ephe_none; continue;}
if(globalThis.WeakMap) data = new globalThis.WeakMap().set(k, data);
}
}
x[caml_ephe_data_offset] = data;
return 0;
}
function caml_ephe_set_data_opt(x, data_opt){
if(data_opt === 0)
caml_ephe_unset_data(x);
else
caml_ephe_set_data(x, data_opt[1]);
return 0;
}
function caml_ephe_blit_data(src, dst){
var old = caml_ephe_get_data(src);
caml_ephe_set_data_opt(dst, old);
return 0;
}
function caml_ephe_blit_key(a1, i1, a2, i2, len){
var old = caml_ephe_get_data(a1);
caml_array_blit
(a1,
caml_ephe_key_offset + i1 - 1,
a2,
caml_ephe_key_offset + i2 - 1,
len);
caml_ephe_set_data_opt(a2, old);
return 0;
}
function caml_ephe_check_data(x){
var data = caml_ephe_get_data(x);
return data === 0 ? 0 : 1;
}
function caml_ephe_check_key(x, i){
var weak = x[caml_ephe_key_offset + i];
if(weak === caml_ephe_none) return 0;
if(globalThis.WeakRef && weak instanceof globalThis.WeakRef){
weak = weak.deref();
if(weak === undefined){
x[caml_ephe_key_offset + i] = caml_ephe_none;
x[caml_ephe_data_offset] = caml_ephe_none;
return 0;
}
}
return 1;
}
function caml_weak_create(n){
var alen = caml_ephe_key_offset + n, x = new Array(alen);
x[0] = 251;
x[1] = "caml_ephe_list_head";
for(var i = 2; i < alen; i++) x[i] = caml_ephe_none;
return x;
}
function caml_ephe_create(n){return caml_weak_create(n);}
function caml_obj_dup(x){return typeof x === "number" ? x : x.slice();}
function caml_ephe_get_data_copy(x){
var r = caml_ephe_get_data(x);
if(r === 0) return 0;
var z = r[1];
if(Array.isArray(z)) return [0, caml_obj_dup(z)];
return r;
}
function caml_ephe_get_key(x, i){
var weak = x[caml_ephe_key_offset + i];
if(weak === caml_ephe_none) return 0;
if(globalThis.WeakRef && weak instanceof globalThis.WeakRef){
weak = weak.deref();
if(weak === undefined){
x[caml_ephe_key_offset + i] = caml_ephe_none;
x[caml_ephe_data_offset] = caml_ephe_none;
return 0;
}
}
return [0, weak];
}
function caml_ephe_get_key_copy(x, i){
var y = caml_ephe_get_key(x, i);
if(y === 0) return y;
var z = y[1];
if(Array.isArray(z)) return [0, caml_obj_dup(z)];
return y;
}
function caml_ephe_set_key(x, i, v){
var old = caml_ephe_get_data(x);
if(globalThis.WeakRef && v instanceof Object)
v = new globalThis.WeakRef(v);
x[caml_ephe_key_offset + i] = v;
caml_ephe_set_data_opt(x, old);
return 0;
}
function caml_ephe_unset_key(x, i){
var old = caml_ephe_get_data(x);
x[caml_ephe_key_offset + i] = caml_ephe_none;
caml_ephe_set_data_opt(x, old);
return 0;
}
function caml_equal(x, y){return + (caml_compare_val(x, y, false) === 0);}
function caml_erf_float(x){
var
a1 = 0.254829592,
a2 = - 0.284496736,
a3 = 1.421413741,
a4 = - 1.453152027,
a5 = 1.061405429,
p = 0.3275911,
sign = 1;
if(x < 0) sign = - 1;
x = Math.abs(x);
var
t = 1.0 / (1.0 + p * x),
y =
1.0
-
((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(- x * x);
return sign * y;
}
function caml_erfc_float(x){return 1 - caml_erf_float(x);}
var caml_executable_name = caml_argv[1];
function caml_exp2_float(x){return Math.pow(2, x);}
function caml_expm1_float(x){return Math.expm1(x);}
function caml_is_special_exception(exn){
switch(exn[2]){case - 8:case - 11:case - 12: return 1;default: return 0;
}
}
function caml_format_exception(exn){
var r = "";
if(exn[0] === 0){
r += exn[1][1];
if
(exn.length === 3 && exn[2][0] === 0
&& caml_is_special_exception(exn[1]))
var bucket = exn[2], start = 1;
else
var start = 2, bucket = exn;
r += "(";
for(var i = start; i < bucket.length; i++){
if(i > start) r += ", ";
var v = bucket[i];
if(typeof v === "number")
r += v.toString();
else if(v instanceof MlBytes)
r += '"' + v.toString() + '"';
else if(typeof v === "string")
r += '"' + v.toString() + '"';
else
r += "_";
}
r += ")";
}
else if(exn[0] === 248) r += exn[1];
return r;
}
function caml_fatal_uncaught_exception(err){
if(Array.isArray(err) && (err[0] === 0 || err[0] === 248)){
var handler = caml_named_value("Printexc.handle_uncaught_exception");
if(handler)
caml_callback(handler, [err, false]);
else{
var
msg = caml_format_exception(err),
at_exit = caml_named_value("Pervasives.do_at_exit");
if(at_exit) caml_callback(at_exit, [0]);
console.error("Fatal error: exception " + msg);
if(err.js_error) throw err.js_error;
}
}
else
throw err;
}
function caml_fill_bytes(s, i, l, c){
if(l > 0)
if(i === 0 && (l >= s.l || s.t === 2 && l >= s.c.length))
if(c === 0){
s.c = "";
s.t = 2;
}
else{
s.c = caml_str_repeat(l, String.fromCharCode(c));
s.t = l === s.l ? 0 : 2;
}
else{
if(s.t !== 4) caml_convert_bytes_to_array(s);
for(l += i; i < l; i++) s.c[i] = c;
}
return 0;
}
function caml_final_register(_f, _x){return 0;}
var all_finalizers = new globalThis.Set();
function caml_final_register_called_without_value(cb, a){
if(globalThis.FinalizationRegistry && a instanceof Object){
var
x =
new
globalThis.FinalizationRegistry
(function(x){all_finalizers.delete(x); cb(0); return;});
x.register(a, x);
all_finalizers.add(x);
}
return 0;
}
function caml_final_release(_unit){return 0;}
function caml_finish_formatting(f, rawbuffer){
if(f.uppercase) rawbuffer = rawbuffer.toUpperCase();
var len = rawbuffer.length;
if(f.signedconv && (f.sign < 0 || f.signstyle !== "-")) len++;
if(f.alternate){if(f.base === 8) len += 1; if(f.base === 16) len += 2;}
var buffer = "";
if(f.justify === "+" && f.filler === " ")
for(var i = len; i < f.width; i++) buffer += " ";
if(f.signedconv)
if(f.sign < 0)
buffer += "-";
else if(f.signstyle !== "-") buffer += f.signstyle;
if(f.alternate && f.base === 8) buffer += "0";
if(f.alternate && f.base === 16) buffer += f.uppercase ? "0X" : "0x";
if(f.justify === "+" && f.filler === "0")
for(var i = len; i < f.width; i++) buffer += "0";
buffer += rawbuffer;
if(f.justify === "-") for(var i = len; i < f.width; i++) buffer += " ";
return caml_string_of_jsbytes(buffer);
}
function caml_float_compare(x, y){
if(x === y) return 0;
if(x < y) return - 1;
if(x > y) return 1;
if(! Number.isNaN(x)) return 1;
if(! Number.isNaN(y)) return - 1;
return 0;
}
function caml_float_of_bytes(a){
return caml_int64_float_of_bits(caml_int64_of_bytes(a));
}
function caml_float_of_string(s){
var res, r_float = /^ *[-+]?(?:\d*\.?\d+|\d+\.?\d*)(?:[eE][-+]?\d+)?$/;
s = caml_jsbytes_of_string(s);
res = + s;
if(! Number.isNaN(res) && r_float.test(s)) return res;
s = s.replace(/_/g, "");
res = + s;
if(! Number.isNaN(res) && r_float.test(s) || /^[+-]?nan$/i.test(s))
return res;
var
m = /^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?$/i.exec(s);
if(m){
var
m3 = m[3].replace(/0+$/, ""),
mantissa = Number.parseInt(m[1] + m[2] + m3, 16),
exponent = (+ m[5] || 0) - 4 * m3.length;
res = mantissa * Math.pow(2, exponent);
return res;
}
if(/^\+?inf(inity)?$/i.test(s)) return Number.POSITIVE_INFINITY;
if(/^-inf(inity)?$/i.test(s)) return Number.NEGATIVE_INFINITY;
caml_failwith("float_of_string");
}
function caml_floatarray_blit(a1, i1, a2, i2, len){return caml_array_blit(a1, i1, a2, i2, len);
}
function caml_floatarray_create(len){
if(len >>> 0 >= (0x7fffffff / 8 | 0)) caml_array_bound_error();
var len = len + 1 | 0, b = new Array(len);
b[0] = 254;
for(var i = 1; i < len; i++) b[i] = 0;
return b;
}
function caml_fma_float(x, y, z){
var
SPLIT = Math.pow(2, 27) + 1,
MIN_VALUE = Math.pow(2, - 1022),
EPSILON = Math.pow(2, - 52),
C = 416,
A = Math.pow(2, + C),
B = Math.pow(2, - C);
function multiply(a, b){
var
at = SPLIT * a,
ahi = at - (at - a),
alo = a - ahi,
bt = SPLIT * b,
bhi = bt - (bt - b),
blo = b - bhi,
p = a * b,
e = ahi * bhi - p + ahi * blo + alo * bhi + alo * blo;
return {p: p, e: e};
}
function add(a, b){
var s = a + b, v = s - a, e = a - (s - v) + (b - v);
return {s: s, e: e};
}
function adjust(x, y){
return x !== 0 && y !== 0 && SPLIT * x - (SPLIT * x - x) === x
? x * (1 + (x < 0 ? - 1 : + 1) * (y < 0 ? - 1 : + 1) * EPSILON)
: x;
}
if(x === 0 || y === 0 || ! Number.isFinite(x) || ! Number.isFinite(y))
return x * y + z;
if(z === 0) return x * y;
if(! Number.isFinite(z)) return z;
var scale = 1;
while(Math.abs(x) > A){scale *= A; x *= B;}
while(Math.abs(y) > A){scale *= A; y *= B;}
if(scale === 1 / 0) return x * y * scale;
while(Math.abs(x) < B){scale *= B; x *= A;}
while(Math.abs(y) < B){scale *= B; y *= A;}
if(scale === 0) return z;
var xs = x, ys = y, zs = z / scale;
if(Math.abs(zs) > Math.abs(xs * ys) * 4 / EPSILON) return z;
if(Math.abs(zs) < Math.abs(xs * ys) * EPSILON / 4 * EPSILON / 4)
zs = (z < 0 ? - 1 : + 1) * MIN_VALUE;
var
xy = multiply(xs, ys),
s = add(xy.p, zs),
u = add(xy.e, s.e),
i = add(s.s, u.s),
f = i.s + adjust(i.e, u.e);
if(f === 0) return f;
var fs = f * scale;
if(Math.abs(fs) > MIN_VALUE) return fs;
return fs + adjust(f - fs / scale, i.e) * scale;
}
function caml_parse_format(fmt){
fmt = caml_jsbytes_of_string(fmt);
var len = fmt.length;
if(len > 31) caml_invalid_argument("format_int: format too long");
var
f =
{justify: "+",
signstyle: "-",
filler: " ",
alternate: false,
base: 0,
signedconv: false,
width: 0,
uppercase: false,
sign: 1,
prec: - 1,
conv: "f"};
for(var i = 0; i < len; i++){
var c = fmt.charAt(i);
switch(c){
case "-":
f.justify = "-"; break;
case "+":
case " ":
f.signstyle = c; break;
case "0":
f.filler = "0"; break;
case "#":
f.alternate = true; break;
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
f.width = 0;
while(c = fmt.charCodeAt(i) - 48, c >= 0 && c <= 9){f.width = f.width * 10 + c; i++;}
i--;
break;
case ".":
f.prec = 0;
i++;
while(c = fmt.charCodeAt(i) - 48, c >= 0 && c <= 9){f.prec = f.prec * 10 + c; i++;}
i--;
break;
case "d":
case "i":
f.signedconv = true; f.base = 10; break;
case "u":
f.base = 10; break;
case "x":
f.base = 16; break;
case "X":
f.base = 16; f.uppercase = true; break;
case "o":
f.base = 8; break;
case "e":
case "f":
case "g":
f.signedconv = true; f.conv = c; break;
case "E":
case "F":
case "G":
f.signedconv = true;
f.uppercase = true;
f.conv = c.toLowerCase();
break;
}
}
return f;
}
function caml_format_float(fmt, x){
function toFixed(x, dp){
if(Math.abs(x) < 1.0)
return x.toFixed(dp);
else{
var e = Number.parseInt(x.toString().split("+")[1]);
if(e > 20){
e -= 20;
x /= Math.pow(10, e);
x += caml_str_repeat(e, "0");
if(dp > 0) x = x + "." + caml_str_repeat(dp, "0");
return x;
}
else
return x.toFixed(dp);
}
}
var s, f = caml_parse_format(fmt), prec = f.prec < 0 ? 6 : f.prec;
if(x < 0 || x === 0 && 1 / x === Number.NEGATIVE_INFINITY){f.sign = - 1; x = - x;}
if(Number.isNaN(x)){
s = "nan";
f.filler = " ";
}
else if(! Number.isFinite(x)){s = "inf"; f.filler = " ";}
else
switch(f.conv){
case "e":
var s = x.toExponential(prec), i = s.length;
if(s.charAt(i - 3) === "e")
s = s.slice(0, i - 1) + "0" + s.slice(i - 1);
break;
case "f":
s = toFixed(x, prec); break;
case "g":
prec = prec ? prec : 1;
s = x.toExponential(prec - 1);
var j = s.indexOf("e"), exp = + s.slice(j + 1);
if(exp < - 4 || x >= 1e21 || x.toFixed(0).length > prec){
var i = j - 1;
while(s.charAt(i) === "0") i--;
if(s.charAt(i) === ".") i--;
s = s.slice(0, i + 1) + s.slice(j);
i = s.length;
if(s.charAt(i - 3) === "e")
s = s.slice(0, i - 1) + "0" + s.slice(i - 1);
break;
}
else{
var p = prec;
if(exp < 0){
p -= exp + 1;
s = x.toFixed(p);
}
else
while(s = x.toFixed(p), s.length > prec + 1) p--;
if(p){
var i = s.length - 1;
while(s.charAt(i) === "0") i--;
if(s.charAt(i) === ".") i--;
s = s.slice(0, i + 1);
}
}
break;
}
return caml_finish_formatting(f, s);
}
function caml_format_int(fmt, i){
if(caml_jsbytes_of_string(fmt) === "%d")
return caml_string_of_jsbytes("" + i);
var f = caml_parse_format(fmt);
if(i < 0) if(f.signedconv){f.sign = - 1; i = - i;} else i >>>= 0;
var s = i.toString(f.base);
if(f.prec >= 0){
f.filler = " ";
var n = f.prec - s.length;
if(n > 0) s = caml_str_repeat(n, "0") + s;
}
return caml_finish_formatting(f, s);
}
var caml_oo_last_id = 0;
function caml_fresh_oo_id(){return caml_oo_last_id++;}
function caml_frexp_float(x){
if(x === 0 || ! Number.isFinite(x)) return [0, x, 0];
var neg = x < 0;
if(neg) x = - x;
var exp = Math.max(- 1023, Math.floor(Math.log2(x)) + 1);
x *= Math.pow(2, - exp);
while(x < 0.5){x *= 2; exp--;}
while(x >= 1){x *= 0.5; exp++;}
if(neg) x = - x;
return [0, x, exp];
}
function jsoo_create_file(name, content){
var
name = caml_string_of_jsstring(name),
content = caml_string_of_jsbytes(content);
return caml_create_file(name, content);
}
function caml_fs_init(){
var tmp = globalThis.jsoo_fs_tmp;
if(tmp)
for(var i = 0; i < tmp.length; i++)
jsoo_create_file(tmp[i].name, tmp[i].content);
globalThis.jsoo_create_file = jsoo_create_file;
globalThis.jsoo_fs_tmp = [];
return 0;
}
function caml_gc_compaction(_unit){return 0;}
function caml_gc_counters(_unit){return [254, 0, 0, 0];}
function caml_gc_full_major(_unit){
if(typeof globalThis.gc === "function") globalThis.gc();
return 0;
}
function caml_gc_get(_unit){return [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];}
function caml_gc_major(_unit){
if(typeof globalThis.gc === "function") globalThis.gc();
return 0;
}
function caml_gc_major_slice(_work){return 0;}
function caml_gc_minor(_unit){
if(typeof globalThis.gc === "function") globalThis.gc(true);
return 0;
}
function caml_gc_minor_words(_unit){return 0;}
function caml_gc_quick_stat(_unit){
return [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
}
function caml_gc_set(_control){return 0;}
function caml_gc_stat(unit){return caml_gc_quick_stat(unit);}
var caml_method_cache = [];
function caml_get_cached_method(obj, tag, cacheid){
var meths = obj[1], ofs = caml_method_cache[cacheid];
if(meths[ofs + 4] === tag) return meths[ofs + 3];
var li = 3, hi = meths[1] * 2 + 1, mi;
while(li < hi){
mi = li + hi >> 1 | 1;
if(tag < meths[mi + 1]) hi = mi - 2; else li = mi;
}
caml_method_cache[cacheid] = li - 3;
return meths[li];
}
function caml_get_continuation_callstack(){return [0];}
function caml_get_current_callstack(){return [0];}
function caml_get_exception_backtrace(){return 0;}
function caml_get_exception_raw_backtrace(_unit){return [0];}
function caml_get_global_data(_unit){return caml_global_data;}
function caml_get_minor_free(_unit){return 0;}
function caml_get_public_method(obj, tag){
var meths = obj[1], li = 3, hi = meths[1] * 2 + 1, mi;
while(li < hi){
mi = li + hi >> 1 | 1;
if(tag < meths[mi + 1]) hi = mi - 2; else li = mi;
}
return tag === meths[li + 1] ? meths[li] : 0;
}
function caml_gr_arc_aux(ctx, cx, cy, ry, rx, a1, a2){
while(a1 > a2) a2 += 360;
a1 /= 180;
a2 /= 180;
var
rot = 0,
xPos,
yPos,
xPos_prev,
yPos_prev,
space = 2,
num = (a2 - a1) * Math.PI * ((rx + ry) / 2) / space | 0,
delta = (a2 - a1) * Math.PI / num,
i = a1 * Math.PI;
for(var j = 0; j <= num; j++){
xPos =
cx - rx * Math.sin(i) * Math.sin(rot * Math.PI)
+ ry * Math.cos(i) * Math.cos(rot * Math.PI);
xPos = xPos.toFixed(2);
yPos =
cy + ry * Math.cos(i) * Math.sin(rot * Math.PI)
+ rx * Math.sin(i) * Math.cos(rot * Math.PI);
yPos = yPos.toFixed(2);
if(j === 0)
ctx.moveTo(xPos, yPos);
else if(xPos_prev !== xPos || yPos_prev !== yPos) ctx.lineTo(xPos, yPos);
xPos_prev = xPos;
yPos_prev = yPos;
i -= delta;
}
return 0;
}
var caml_gr_state;
function caml_gr_state_get(){
if(caml_gr_state) return caml_gr_state;
throw caml_maybe_attach_backtrace
([0,
caml_named_value("Graphics.Graphic_failure"),
caml_string_of_jsbytes("Not initialized")]);
}
function caml_gr_blit_image(im, x, y){
var
s = caml_gr_state_get(),
im2 =
s.context.getImageData
(x, s.height - im.height - y, im.width, im.height);
for(var i = 0; i < im2.data.length; i += 4){
im.data[i] = im2.data[i];
im.data[i + 1] = im2.data[i + 1];
im.data[i + 2] = im2.data[i + 2];
im.data[i + 3] = im2.data[i + 3];
}
return 0;
}
function caml_gr_clear_graph(){
var s = caml_gr_state_get();
s.context.clearRect(0, 0, s.canvas.width, s.canvas.height);
return 0;
}
function caml_gr_close_graph(){
var s = caml_gr_state_get();
s.canvas.width = 0;
s.canvas.height = 0;
return 0;
}
function caml_gr_close_subwindow(_a){
caml_failwith("caml_gr_close_subwindow not Implemented");
}
function caml_gr_create_image(x, y){
var s = caml_gr_state_get();
return s.context.createImageData(x, y);
}
function caml_gr_current_x(){var s = caml_gr_state_get(); return s.x;}
function caml_gr_current_y(){var s = caml_gr_state_get(); return s.y;}
function caml_gr_display_mode(){
caml_failwith("caml_gr_display_mode not Implemented");
}
function caml_gr_doc_of_state(state){
if(state.canvas.ownerDocument) return state.canvas.ownerDocument;
}
function caml_gr_draw_arc(x, y, rx, ry, a1, a2){
var s = caml_gr_state_get();
s.context.beginPath();
caml_gr_arc_aux(s.context, x, s.height - y, rx, ry, a1, a2);
s.context.stroke();
return 0;
}
function caml_gr_draw_str(str){
var s = caml_gr_state_get(), m = s.context.measureText(str), dx = m.width;
s.context.fillText(str, s.x, s.height - s.y);
s.x += dx | 0;
return 0;
}
function caml_gr_draw_char(c){
caml_gr_draw_str(String.fromCharCode(c));
return 0;
}
function caml_gr_draw_image(im, x, y){
var s = caml_gr_state_get();
if(! im.image){
var canvas = document.createElement("canvas");
canvas.width = s.width;
canvas.height = s.height;
canvas.getContext("2d").putImageData(im, 0, 0);
var image = new globalThis.Image();
image.onload =
function(){
s.context.drawImage(image, x, s.height - im.height - y);
im.image = image;
};
image.src = canvas.toDataURL("image/png");
}
else
s.context.drawImage(im.image, x, s.height - im.height - y);
return 0;
}
function caml_gr_draw_rect(x, y, w, h){
var s = caml_gr_state_get();
s.context.strokeRect(x, s.height - y, w, - h);
return 0;
}
function caml_gr_draw_string(str){
caml_gr_draw_str(caml_jsstring_of_string(str));
return 0;
}
function caml_gr_dump_image(im){
var data = [0];
for(var i = 0; i < im.height; i++){
data[i + 1] = [0];
for(var j = 0; j < im.width; j++){
var
o = i * (im.width * 4) + j * 4,
r = im.data[o + 0],
g = im.data[o + 1],
b = im.data[o + 2];
data[i + 1][j + 1] = (r << 16) + (g << 8) + b;
}
}
return data;
}
function caml_gr_fill_arc(x, y, rx, ry, a1, a2){
var s = caml_gr_state_get();
s.context.beginPath();
caml_gr_arc_aux(s.context, x, s.height - y, rx, ry, a1, a2);
s.context.fill();
return 0;
}
function caml_gr_fill_poly(ar){
var s = caml_gr_state_get();
s.context.beginPath();
s.context.moveTo(ar[1][1], s.height - ar[1][2]);
for(var i = 2; i < ar.length; i++)
s.context.lineTo(ar[i][1], s.height - ar[i][2]);
s.context.lineTo(ar[1][1], s.height - ar[1][2]);
s.context.fill();
return 0;
}
function caml_gr_fill_rect(x, y, w, h){
var s = caml_gr_state_get();
s.context.fillRect(x, s.height - y, w, - h);
return 0;
}
function caml_gr_lineto(x, y){
var s = caml_gr_state_get();
s.context.beginPath();
s.context.moveTo(s.x, s.height - s.y);
s.context.lineTo(x, s.height - y);
s.context.stroke();
s.x = x;
s.y = y;
return 0;
}
function caml_gr_make_image(arr){
var
s = caml_gr_state_get(),
h = arr.length - 1,
w = arr[1].length - 1,
im = s.context.createImageData(w, h);
for(var i = 0; i < h; i++)
for(var j = 0; j < w; j++){
var c = arr[i + 1][j + 1], o = i * (w * 4) + j * 4;
if(c === - 1){
im.data[o + 0] = 0;
im.data[o + 1] = 0;
im.data[o + 2] = 0;
im.data[o + 3] = 0;
}
else{
im.data[o + 0] = c >> 16 & 0xff;
im.data[o + 1] = c >> 8 & 0xff;
im.data[o + 2] = c >> 0 & 0xff;
im.data[o + 3] = 0xff;
}
}
return im;
}
function caml_gr_moveto(x, y){
var s = caml_gr_state_get();
s.x = x;
s.y = y;
return 0;
}
function caml_gr_set_window_title(name){
var s = caml_gr_state_get();
s.title = name;
var jsname = caml_jsstring_of_string(name);
if(s.set_title) s.set_title(jsname);
return 0;
}
function caml_gr_set_line_width(w){
var s = caml_gr_state_get();
s.line_width = w;
s.context.lineWidth = w;
return 0;
}
function caml_gr_set_text_size(size){
var s = caml_gr_state_get();
s.text_size = size;
s.context.font = s.text_size + "px " + caml_jsstring_of_string(s.font);
return 0;
}
function caml_gr_set_font(f){
var s = caml_gr_state_get();
s.font = f;
s.context.font = s.text_size + "px " + caml_jsstring_of_string(s.font);
return 0;
}
function caml_gr_set_color(color){
var s = caml_gr_state_get();
function convert(number){
var str = "" + number.toString(16);
while(str.length < 2) str = "0" + str;
return str;
}
var r = color >> 16 & 0xff, g = color >> 8 & 0xff, b = color >> 0 & 0xff;
s.color = color;
var c_str = "#" + convert(r) + convert(g) + convert(b);
s.context.fillStyle = c_str;
s.context.strokeStyle = c_str;
return 0;
}
function caml_gr_resize_window(w, h){
var s = caml_gr_state_get();
s.width = w;
s.height = h;
if(w !== s.canvas.width) s.canvas.width = w;
if(h !== s.canvas.height) s.canvas.height = h;
return 0;
}
function caml_gr_state_init(){
caml_gr_moveto(caml_gr_state.x, caml_gr_state.y);
caml_gr_resize_window(caml_gr_state.width, caml_gr_state.height);
caml_gr_set_line_width(caml_gr_state.line_width);
caml_gr_set_text_size(caml_gr_state.text_size);
caml_gr_set_font(caml_gr_state.font);
caml_gr_set_color(caml_gr_state.color);
caml_gr_set_window_title(caml_gr_state.title);
caml_gr_state.context.textBaseline = "bottom";
}
function caml_gr_state_set(ctx){
caml_gr_state = ctx;
caml_gr_state_init();
return 0;
}
function caml_gr_state_create(canvas, w, h){
var context = canvas.getContext("2d");
return {context: context,
canvas: canvas,
x: 0,
y: 0,
width: w,
height: h,
line_width: 1,
font: caml_string_of_jsbytes("fixed"),
text_size: 26,
color: 0x000000,
title: caml_string_of_jsbytes("")};
}
function caml_gr_open_graph(info){
var info = caml_jsstring_of_string(info);
function get(name){
var res = info.match("(^|,) *" + name + " *= *([a-zA-Z0-9_]+) *(,|$)");
if(res) return res[2];
}
var specs = [];
if(! (info === "")) specs.push(info);
var target = get("target");
if(! target) target = "";
var status = get("status");
if(! status) specs.push("status=1");
var w = get("width");
w = w ? Number.parseInt(w) : 200;
specs.push("width=" + w);
var h = get("height");
h = h ? Number.parseInt(h) : 200;
specs.push("height=" + h);
var win = globalThis.open("about:blank", target, specs.join(","));
if(! win) caml_failwith("Graphics.open_graph: cannot open the window");
var doc = win.document, canvas = doc.createElement("canvas");
canvas.width = w;
canvas.height = h;
var ctx = caml_gr_state_create(canvas, w, h);
ctx.set_title = function(title){doc.title = title;};
caml_gr_state_set(ctx);
var body = doc.body;
body.style.margin = "0px";
body.appendChild(canvas);
return 0;
}
function caml_gr_open_subwindow(_a, _b, _c, _d){
caml_failwith("caml_gr_open_subwindow not Implemented");
}
function caml_gr_plot(x, y){
var
s = caml_gr_state_get(),
im = s.context.createImageData(1, 1),
d = im.data,
color = s.color;
d[0] = color >> 16 & 0xff;
d[1] = color >> 8 & 0xff, d[2] = color >> 0 & 0xff;
d[3] = 0xff;
s.x = x;
s.y = y;
s.context.putImageData(im, x, s.height - y);
return 0;
}
function caml_gr_point_color(x, y){
var
s = caml_gr_state_get(),
im = s.context.getImageData(x, s.height - y, 1, 1),
d = im.data;
return (d[0] << 16) + (d[1] << 8) + d[2];
}
function caml_gr_remember_mode(){
caml_failwith("caml_gr_remember_mode not Implemented");
}
function caml_gr_sigio_handler(){return 0;}
function caml_gr_sigio_signal(){return 0;}
function caml_gr_size_x(){var s = caml_gr_state_get(); return s.width;}
function caml_gr_size_y(){var s = caml_gr_state_get(); return s.height;}
function caml_gr_synchronize(){
caml_failwith("caml_gr_synchronize not Implemented");
}
function caml_gr_text_size(txt){
var
s = caml_gr_state_get(),
w = s.context.measureText(caml_jsstring_of_string(txt)).width;
return [0, w, s.text_size];
}
function caml_gr_wait_event(_evl){
caml_failwith
("caml_gr_wait_event not Implemented: use Graphics_js instead");
}
function caml_gr_window_id(_a){
caml_failwith("caml_gr_window_id not Implemented");
}
function caml_greaterequal(x, y){
return + (caml_compare_val(x, y, false) >= 0);
}
function caml_greaterthan(x, y){
return + (caml_compare_val(x, y, false) > 0);
}
function caml_hash_mix_jsbytes(h, s){
var len = s.length, i, w;
for(i = 0; i + 4 <= len; i += 4){
w =
s.charCodeAt(i) | s.charCodeAt(i + 1) << 8 | s.charCodeAt(i + 2) << 16
| s.charCodeAt(i + 3) << 24;
h = caml_hash_mix_int(h, w);
}
w = 0;
switch(len & 3){
case 3:
w = s.charCodeAt(i + 2) << 16;
case 2:
w |= s.charCodeAt(i + 1) << 8;
case 1:
w |= s.charCodeAt(i); h = caml_hash_mix_int(h, w);
}
h ^= len;
return h;
}
function caml_hash_mix_string(h, v){
return caml_hash_mix_jsbytes(h, caml_jsbytes_of_string(v));
}
function caml_hash_mix_bytes_arr(h, s){
var len = s.length, i, w;
for(i = 0; i + 4 <= len; i += 4){
w = s[i] | s[i + 1] << 8 | s[i + 2] << 16 | s[i + 3] << 24;
h = caml_hash_mix_int(h, w);
}
w = 0;
switch(len & 3){
case 3:
w = s[i + 2] << 16;
case 2:
w |= s[i + 1] << 8;
case 1:
w |= s[i]; h = caml_hash_mix_int(h, w);
}
h ^= len;
return h;
}
function caml_ml_bytes_content(s){
switch(s.t & 6){
case 2:
caml_convert_string_to_bytes(s); return s.c;
default: return s.c;
}
}
function caml_hash_mix_bytes(h, v){
var content = caml_ml_bytes_content(v);
return typeof content === "string"
? caml_hash_mix_jsbytes(h, content)
: caml_hash_mix_bytes_arr(h, content);
}
function caml_hash_mix_final(h){
h ^= h >>> 16;
h = caml_mul(h, 0x85ebca6b | 0);
h ^= h >>> 13;
h = caml_mul(h, 0xc2b2ae35 | 0);
h ^= h >>> 16;
return h;
}
function caml_hash(count, limit, seed, obj){
var queue, rd, wr, sz, num, h, v, i, len;
sz = limit;
if(sz < 0 || sz > 256) sz = 256;
num = count;
h = seed;
queue = [obj];
rd = 0;
wr = 1;
while(rd < wr && num > 0){
v = queue[rd++];
if(v?.caml_custom){
if
(caml_custom_ops[v.caml_custom] && caml_custom_ops[v.caml_custom].hash){
var hh = caml_custom_ops[v.caml_custom].hash(v);
h = caml_hash_mix_int(h, hh);
num--;
}
}
else if(Array.isArray(v) && v[0] === (v[0] | 0))
switch(v[0]){
case 248:
h = caml_hash_mix_int(h, v[2]); num--; break;
case 250:
queue[--rd] = v[1]; break;
default:
if(caml_is_continuation_tag(v[0])) break;
var tag = v.length - 1 << 10 | v[0];
h = caml_hash_mix_int(h, tag);
for(i = 1, len = v.length; i < len; i++){if(wr >= sz) break; queue[wr++] = v[i];
}
break;
}
else if(caml_is_ml_bytes(v)){
h = caml_hash_mix_bytes(h, v);
num--;
}
else if(caml_is_ml_string(v)){
h = caml_hash_mix_string(h, v);
num--;
}
else if(typeof v === "string"){
h = caml_hash_mix_jsbytes(h, v);
num--;
}
else if(v === (v | 0)){
h = caml_hash_mix_int(h, v + v + 1);
num--;
}
else if(typeof v === "number"){h = caml_hash_mix_float(h, v); num--;}
}
h = caml_hash_mix_final(h);
return h & 0x3fffffff;
}
function caml_hash_mix_bigstring(h, bs){
return caml_hash_mix_bytes_arr(h, bs.data);
}
function caml_hash_mix_int64(h, v){
h = caml_hash_mix_int(h, caml_int64_lo32(v));
h = caml_hash_mix_int(h, caml_int64_hi32(v));
return h;
}
function num_digits_nat(nat, ofs, len){
for(var i = len - 1; i >= 0; i--)
if(nat.data[ofs + i] !== 0) return i + 1;
return 1;
}
function caml_hash_nat(x){
var len = num_digits_nat(x, 0, x.data.length), h = 0;
for(var i = 0; i < len; i++) h = caml_hash_mix_int(h, x.data[i]);
return h;
}
function caml_hexstring_of_float(x, prec, style){
if(! Number.isFinite(x)){
if(Number.isNaN(x)) return caml_string_of_jsstring("nan");
return caml_string_of_jsstring(x > 0 ? "infinity" : "-infinity");
}
var
sign = x === 0 && 1 / x === Number.NEGATIVE_INFINITY ? 1 : x >= 0 ? 0 : 1;
if(sign) x = - x;
var exp = 0;
if(x === 0)
;
else if(x < 1)
while(x < 1 && exp > - 1022){x *= 2; exp--;}
else
while(x >= 2){x /= 2; exp++;}
var exp_sign = exp < 0 ? "" : "+", sign_str = "";
if(sign)
sign_str = "-";
else
switch(style){
case 43:
sign_str = "+"; break;
case 32:
sign_str = " "; break;
default: break;
}
if(prec >= 0 && prec < 13){
var cst = Math.pow(2, prec * 4);
x = Math.round(x * cst) / cst;
}
var x_str = x.toString(16);
if(prec >= 0){
var idx = x_str.indexOf(".");
if(idx < 0)
x_str += "." + caml_str_repeat(prec, "0");
else{
var size = idx + 1 + prec;
if(x_str.length < size)
x_str += caml_str_repeat(size - x_str.length, "0");
else
x_str = x_str.slice(0, size);
}
}
return caml_string_of_jsstring
(sign_str + "0x" + x_str + "p" + exp_sign + exp.toString(10));
}
function caml_hypot_float(x, y){return Math.hypot(x, y);}
var caml_marshal_header_size = 16;
function caml_refill(chan){
if(chan.refill != null){
var str = chan.refill(), str_a = caml_uint8_array_of_string(str);
if(str_a.length === 0)
chan.refill = null;
else{
if(chan.buffer.length < chan.buffer_max + str_a.length){
var b = new Uint8Array(chan.buffer_max + str_a.length);
b.set(chan.buffer);
chan.buffer = b;
}
chan.buffer.set(str_a, chan.buffer_max);
chan.offset += str_a.length;
chan.buffer_max += str_a.length;
}
}
else{
if(chan.fd === - 1) caml_raise_sys_error("Bad file descriptor");
var
nread =
chan.file.read
(chan.buffer,
chan.buffer_max,
chan.buffer.length - chan.buffer_max,
false);
chan.offset += nread;
chan.buffer_max += nread;
}
}
function caml_raise_end_of_file(){
caml_raise_constant(caml_global_data.End_of_file);
}
function caml_marshal_data_size(s, ofs){
var r = new UInt8ArrayReader(caml_uint8_array_of_bytes(s), ofs);
function readvlq(overflow){
var c = r.read8u(), n = c & 0x7f;
while((c & 0x80) !== 0){
c = r.read8u();
var n7 = n << 7;
if(n !== n7 >> 7) overflow[0] = true;
n = n7 | c & 0x7f;
}
return n;
}
switch(r.read32u()){
case 0x8495a6be:
var header_len = 20, data_len = r.read32u(); break;
case 0x8495a6bd:
var
header_len = r.read8u() & 0x3f,
overflow = [false],
data_len = readvlq(overflow);
if(overflow[0])
caml_failwith
("Marshal.data_size: object too large to be read back on this platform");
break;
case 0x8495a6bf:
caml_failwith
("Marshal.data_size: object too large to be read back on a 32-bit platform");
break;
default: caml_failwith("Marshal.data_size: bad object"); break;
}
return header_len - caml_marshal_header_size + data_len;
}
function caml_set_oo_id(b){b[2] = caml_oo_last_id++; return b;}
function caml_input_value_from_reader(reader){
function readvlq(overflow){
var c = reader.read8u(), n = c & 0x7f;
while((c & 0x80) !== 0){
c = reader.read8u();
var n7 = n << 7;
if(n !== n7 >> 7) overflow[0] = true;
n = n7 | c & 0x7f;
}
return n;
}
var old_pos = reader.i, magic = reader.read32u();
switch(magic){
case 0x8495a6be:
var
header_len = 20,
compressed = 0,
data_len = reader.read32u(),
uncompressed_data_len = data_len,
num_objects = reader.read32u(),
_size_32 = reader.read32u(),
_size_64 = reader.read32u();
break;
case 0x8495a6bd:
var
header_len = reader.read8u() & 0x3f,
compressed = 1,
overflow = [false],
data_len = readvlq(overflow),
uncompressed_data_len = readvlq(overflow),
num_objects = readvlq(overflow),
_size_32 = readvlq(overflow),
_size_64 = readvlq(overflow);
if(overflow[0])
caml_failwith
("caml_input_value_from_reader: object too large to be read back on this platform");
break;
case 0x8495a6bf:
caml_failwith
("caml_input_value_from_reader: object too large to be read back on a 32-bit platform");
break;
default:
caml_failwith("caml_input_value_from_reader: bad object"); break;
}
if(header_len !== reader.i - old_pos)
caml_failwith("caml_input_value_from_reader: invalid header");
var
stack = [],
objects = [],
intern_obj_table = num_objects > 0 ? [] : null,
obj_counter = 0;
function intern_rec(reader){
var code = reader.read8u();
if(code >= 0x40)
if(code >= 0x80){
var tag = code & 0xf, size = code >> 4 & 0x7, v = [tag];
if(size === 0) return v;
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
if(tag === 248) objects.push(v);
stack.push(v, size);
return v;
}
else
return code & 0x3f;
else if(code >= 0x20){
var len = code & 0x1f, v = reader.readstr(len);
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
return v;
}
else
switch(code){
case 0x00:
return reader.read8s();
case 0x01:
return reader.read16s();
case 0x02:
return reader.read32s();
case 0x03:
caml_failwith("input_value: integer too large"); break;
case 0x04:
var offset = reader.read8u();
if(compressed === 0) offset = obj_counter - offset;
return intern_obj_table[offset];
case 0x05:
var offset = reader.read16u();
if(compressed === 0) offset = obj_counter - offset;
return intern_obj_table[offset];
case 0x06:
var offset = reader.read32u();
if(compressed === 0) offset = obj_counter - offset;
return intern_obj_table[offset];
case 0x08:
var
header = reader.read32u(),
tag = header & 0xff,
size = header >> 10,
v = [tag];
if(size === 0) return v;
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
if(tag === 248) objects.push(v);
stack.push(v, size);
return v;
case 0x13:
caml_failwith("input_value: data block too large"); break;
case 0x09:
var len = reader.read8u(), v = reader.readstr(len);
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
return v;
case 0x0a:
var len = reader.read32u(), v = reader.readstr(len);
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
return v;
case 0x0c:
var t = new Array(8);
for(var i = 0; i < 8; i++) t[7 - i] = reader.read8u();
var v = caml_float_of_bytes(t);
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
return v;
case 0x0b:
var t = new Array(8);
for(var i = 0; i < 8; i++) t[i] = reader.read8u();
var v = caml_float_of_bytes(t);
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
return v;
case 0x0e:
var len = reader.read8u(), v = new Array(len + 1);
v[0] = 254;
var t = new Array(8);
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
for(var i = 1; i <= len; i++){
for(var j = 0; j < 8; j++) t[7 - j] = reader.read8u();
v[i] = caml_float_of_bytes(t);
}
return v;
case 0x0d:
var len = reader.read8u(), v = new Array(len + 1);
v[0] = 254;
var t = new Array(8);
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
for(var i = 1; i <= len; i++){
for(var j = 0; j < 8; j++) t[j] = reader.read8u();
v[i] = caml_float_of_bytes(t);
}
return v;
case 0x07:
var len = reader.read32u(), v = new Array(len + 1);
v[0] = 254;
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
var t = new Array(8);
for(var i = 1; i <= len; i++){
for(var j = 0; j < 8; j++) t[7 - j] = reader.read8u();
v[i] = caml_float_of_bytes(t);
}
return v;
case 0x0f:
var len = reader.read32u(), v = new Array(len + 1);
v[0] = 254;
var t = new Array(8);
for(var i = 1; i <= len; i++){
for(var j = 0; j < 8; j++) t[j] = reader.read8u();
v[i] = caml_float_of_bytes(t);
}
return v;
case 0x10:
case 0x11:
caml_failwith("input_value: code pointer"); break;
case 0x12:
case 0x18:
case 0x19:
var c, s = "";
while((c = reader.read8u()) !== 0) s += String.fromCharCode(c);
var ops = caml_custom_ops[s], expected_size;
if(! ops)
caml_failwith("input_value: unknown custom block identifier");
switch(code){
case 0x12: break;
case 0x19:
if(! ops.fixed_length)
caml_failwith("input_value: expected a fixed-size custom block");
expected_size = ops.fixed_length;
break;
case 0x18:
expected_size = reader.read32u();
reader.read32s();
reader.read32s();
break;
}
var size = [0], v = ops.deserialize(reader, size);
if(expected_size !== undefined)
if(expected_size !== size[0])
caml_failwith
("input_value: incorrect length of serialized custom block");
if(intern_obj_table) intern_obj_table[obj_counter++] = v;
return v;
default: caml_failwith("input_value: ill-formed message");
}
}
if(compressed)
if(caml_decompress_input)
var
data = reader.readuint8array(data_len),
res = new Uint8Array(uncompressed_data_len),
res = caml_decompress_input(data, res),
reader = new UInt8ArrayReader(res, 0);
else
caml_failwith("input_value: compressed object, cannot decompress");
var res = intern_rec(reader);
while(stack.length > 0){
var size = stack.pop(), v = stack.pop(), d = v.length;
if(d < size) stack.push(v, size);
v[d] = intern_rec(reader);
}
while(objects.length > 0){
var x = objects.pop();
if(x[2] >= 0) caml_set_oo_id(x);
}
return res;
}
function caml_input_value_from_bytes(s, ofs){
var
c = caml_ml_bytes_content(s),
ofs = typeof ofs === "number" ? ofs : ofs[0],
reader =
c instanceof Uint8Array
? new UInt8ArrayReader(c, ofs)
: new JsStringReader(c, ofs);
return caml_input_value_from_reader(reader);
}
function caml_input_value(chanid){
var
chan = caml_ml_channel_get(chanid),
header = new Uint8Array(caml_marshal_header_size);
function block(buffer, offset, n){
var r = 0;
while(r < n){
if(chan.buffer_curr >= chan.buffer_max){
chan.buffer_curr = 0;
chan.buffer_max = 0;
caml_refill(chan);
}
if(chan.buffer_curr >= chan.buffer_max) break;
buffer[offset + r] = chan.buffer[chan.buffer_curr];
chan.buffer_curr++;
r++;
}
return r;
}
var r = block(header, 0, caml_marshal_header_size);
if(r === 0)
caml_raise_end_of_file();
else if(r < caml_marshal_header_size)
caml_failwith("input_value: truncated object");
var
len = caml_marshal_data_size(caml_bytes_of_uint8_array(header), 0),
buf = new Uint8Array(len + caml_marshal_header_size);
buf.set(header, 0);
var r = block(buf, caml_marshal_header_size, len);
if(r < len)
caml_failwith("input_value: truncated object " + r + " " + len);
var res = caml_input_value_from_bytes(caml_bytes_of_uint8_array(buf), 0);
return res;
}
function caml_input_value_to_outside_heap(c){return caml_input_value(c);}
function caml_install_signal_handler(){return 0;}
function caml_int32_bswap(x){
return (x & 0x000000ff) << 24 | (x & 0x0000ff00) << 8
| (x & 0x00ff0000) >>> 8
| (x & 0xff000000) >>> 24;
}
function caml_int64_add(x, y){return x.add(y);}
function caml_int64_and(x, y){return x.and(y);}
function caml_int64_bswap(x){
var y = caml_int64_to_bytes(x);
return caml_int64_of_bytes
([y[7], y[6], y[5], y[4], y[3], y[2], y[1], y[0]]);
}
function caml_int64_div(x, y){return x.div(y);}
function caml_int64_is_zero(x){return + x.isZero();}
function caml_int64_of_int32(x){
return new MlInt64(x & 0xffffff, x >> 24 & 0xffffff, x >> 31 & 0xffff);
}
function caml_int64_to_int32(x){return x.toInt();}
function caml_int64_is_negative(x){return + x.isNeg();}
function caml_int64_neg(x){return x.neg();}
function caml_int64_format(fmt, x){
var f = caml_parse_format(fmt);
if(f.signedconv && caml_int64_is_negative(x)){f.sign = - 1; x = caml_int64_neg(x);}
var
buffer = "",
wbase = caml_int64_of_int32(f.base),
cvtbl = "0123456789abcdef";
do{
var p = x.udivmod(wbase);
x = p.quotient;
buffer = cvtbl.charAt(caml_int64_to_int32(p.modulus)) + buffer;
}
while
(! caml_int64_is_zero(x));
if(f.prec >= 0){
f.filler = " ";
var n = f.prec - buffer.length;
if(n > 0) buffer = caml_str_repeat(n, "0") + buffer;
}
return caml_finish_formatting(f, buffer);
}
function caml_int64_mod(x, y){return x.mod(y);}
function caml_int64_mul(x, y){return x.mul(y);}
function caml_int64_ult(x, y){return x.ucompare(y) < 0;}
function caml_parse_sign_and_base(s){
var
i = 0,
len = caml_ml_string_length(s),
base = 10,
sign = 1,
signedness = 1;
if(len > 0)
switch(caml_string_unsafe_get(s, i)){
case 45:
i++; sign = - 1; break;
case 43:
i++; sign = 1; break;
}
if(i + 1 < len && caml_string_unsafe_get(s, i) === 48)
switch(caml_string_unsafe_get(s, i + 1)){
case 120:
case 88:
signedness = 0; base = 16; i += 2; break;
case 111:
case 79:
signedness = 0; base = 8; i += 2; break;
case 98:
case 66:
signedness = 0; base = 2; i += 2; break;
case 117:
case 85:
signedness = 0; i += 2; break;
}
return [i, sign, base, signedness];
}
function caml_parse_digit(c){
if(c >= 48 && c <= 57) return c - 48;
if(c >= 65 && c <= 90) return c - 55;
if(c >= 97 && c <= 122) return c - 87;
return - 1;
}
function caml_int64_of_string(s){
var
r = caml_parse_sign_and_base(s),
i = r[0],
sign = r[1],
base = r[2],
signedness = r[3],
base64 = caml_int64_of_int32(base),
threshold = MlInt64.UNSIGNED_MAX.udivmod(base64).quotient,
c = caml_string_unsafe_get(s, i),
d = caml_parse_digit(c);
if(d < 0 || d >= base) caml_failwith("Int64.of_string");
var res = caml_int64_of_int32(d);
for(;;){
i++;
c = caml_string_unsafe_get(s, i);
if(c === 95) continue;
d = caml_parse_digit(c);
if(d < 0 || d >= base) break;
if(caml_int64_ult(threshold, res)) caml_failwith("Int64.of_string");
d = caml_int64_of_int32(d);
res = caml_int64_add(caml_int64_mul(base64, res), d);
if(caml_int64_ult(res, d)) caml_failwith("Int64.of_string");
}
if(i !== caml_ml_string_length(s)) caml_failwith("Int64.of_string");
if
(signedness
&&
caml_int64_ult(sign < 0 ? MlInt64.SIGNED_MIN : MlInt64.SIGNED_MAX, res))
caml_failwith("Int64.of_string");
if(sign < 0) res = caml_int64_neg(res);
return res;
}
function caml_int64_or(x, y){return x.or(y);}
function caml_int64_shift_left(x, s){return x.shift_left(s);}
function caml_int64_shift_right(x, s){return x.shift_right(s);}
function caml_int64_shift_right_unsigned(x, s){return x.shift_right_unsigned(s);
}
function caml_int64_sub(x, y){return x.sub(y);}
function caml_int64_to_float(x){return x.toFloat();}
function caml_int64_xor(x, y){return x.xor(y);}
function caml_int_of_string(s){
var
r = caml_parse_sign_and_base(s),
i = r[0],
sign = r[1],
base = r[2],
signedness = r[3],
len = caml_ml_string_length(s),
threshold = - 1 >>> 0,
c = i < len ? caml_string_unsafe_get(s, i) : 0,
d = caml_parse_digit(c);
if(d < 0 || d >= base) caml_failwith("int_of_string");
var res = d;
for(i++; i < len; i++){
c = caml_string_unsafe_get(s, i);
if(c === 95) continue;
d = caml_parse_digit(c);
if(d < 0 || d >= base) break;
res = base * res + d;
if(res > threshold) caml_failwith("int_of_string");
}
if(i !== len) caml_failwith("int_of_string");
res = sign * res;
if(signedness && (res | 0) !== res) caml_failwith("int_of_string");
return res | 0;
}
var caml_io_buffer_size = 65536;
function caml_is_js(){return 1;}
function caml_is_printable(c){return + (c > 31 && c < 127);}
function caml_js_call(f, o, args){
return f.apply(o, caml_js_from_array(args));
}
function caml_js_delete(o, f){delete o[f]; return 0;}
function caml_js_equals(x, y){return + (x == y);}
function caml_js_error_of_exception(exn){
if(exn.js_error) return exn.js_error;
return null;
}
function caml_js_error_option_of_exception(exn){
if(exn.js_error) return [0, exn.js_error];
return 0;
}
function caml_js_eval_string(s){
return eval?.('"use strict";' + caml_jsstring_of_string(s));
}
function caml_js_expr(s){
console.error("caml_js_expr: fallback to runtime evaluation\n");
return eval?.('"use strict";(' + caml_jsstring_of_string(s) + ")");
}
function caml_js_from_bool(x){return ! ! x;}
function caml_js_from_float(x){return x;}
function caml_js_from_string(s){return caml_jsstring_of_string(s);}
function caml_js_fun_call(f, a){
switch(a.length){
case 1:
return f();
case 2:
return f(a[1]);
case 3:
return f(a[1], a[2]);
case 4:
return f(a[1], a[2], a[3]);
case 5:
return f(a[1], a[2], a[3], a[4]);
case 6:
return f(a[1], a[2], a[3], a[4], a[5]);
case 7:
return f(a[1], a[2], a[3], a[4], a[5], a[6]);
case 8:
return f(a[1], a[2], a[3], a[4], a[5], a[6], a[7]);
}
return f.apply(null, caml_js_from_array(a));
}
function caml_js_function_arity(f){return f.l >= 0 ? f.l : f.l = f.length;}
function caml_js_get(o, f){return o[f];}
function caml_js_get_console(){
var
c = console,
m =
["log",
"debug",
"info",
"warn",
"error",
"assert",
"dir",
"dirxml",
"trace",
"group",
"groupCollapsed",
"groupEnd",
"time",
"timeEnd"];
function f(){}
for(var i = 0; i < m.length; i++) if(! c[m[i]]) c[m[i]] = f;
return c;
}
function caml_js_html_entities(s){
var entity = /^&#?[0-9a-zA-Z]+;$/;
if(s.match(entity)){
var str, temp = document.createElement("p");
temp.innerHTML = s;
str = temp.textContent || temp.innerText;
temp = null;
return str;
}
else
return null;
}
var caml_js_regexps = {amp: /&/g, lt: /</g, quot: /"/g, all: /[&<"]/};
function caml_js_html_escape(s){
if(! caml_js_regexps.all.test(s)) return s;
return s.replace(caml_js_regexps.amp, "&amp;").replace
(caml_js_regexps.lt, "&lt;").replace
(caml_js_regexps.quot, "&quot;");
}
function caml_js_instanceof(o, c){return o instanceof c ? 1 : 0;}
function caml_js_meth_call(o, f, args){
return o[caml_jsstring_of_string(f)].apply(o, caml_js_from_array(args));
}
function caml_js_new(c, a){
switch(a.length){
case 1:
return new c();
case 2:
return new c(a[1]);
case 3:
return new c(a[1], a[2]);
case 4:
return new c(a[1], a[2], a[3]);
case 5:
return new c(a[1], a[2], a[3], a[4]);
case 6:
return new c(a[1], a[2], a[3], a[4], a[5]);
case 7:
return new c(a[1], a[2], a[3], a[4], a[5], a[6]);
case 8:
return new c(a[1], a[2], a[3], a[4], a[5], a[6], a[7]);
}
function F(){return c.apply(this, caml_js_from_array(a));}
F.prototype = c.prototype;
return new F();
}
function caml_js_object(a){
var o = {};
for(var i = 1; i < a.length; i++){
var p = a[i];
o[caml_jsstring_of_string(p[1])] = p[2];
}
return o;
}
function caml_js_pure_expr(f){return caml_callback(f, [0]);}
function caml_js_set(o, f, v){o[f] = v; return 0;}
function caml_js_strict_equals(x, y){return + (x === y);}
function caml_js_to_array(a){
var len = a.length, b = new Array(len + 1);
b[0] = 0;
for(var i = 0; i < len; i++) b[i + 1] = a[i];
return b;
}
function caml_js_to_bool(x){return + x;}
function caml_js_to_byte_string(s){return caml_string_of_jsbytes(s);}
function caml_js_to_float(x){return x;}
function caml_js_to_int32(x){return x | 0;}
function caml_js_to_string(s){return caml_string_of_jsstring(s);}
function caml_js_typeof(o){return typeof o;}
function caml_js_var(x){
var x = caml_jsstring_of_string(x);
if(! x.match(/^[a-zA-Z_$][a-zA-Z_$0-9]*(\.[a-zA-Z_$][a-zA-Z_$0-9]*)*$/))
console.error
('caml_js_var: "' + x
+ '" is not a valid JavaScript variable. continuing ..');
return eval?.(x);
}
function caml_js_wrap_callback(f){
return function(...args){
if(args.length === 0) args = [undefined];
var res = caml_callback(f, args);
return res instanceof Function ? caml_js_wrap_callback(res) : res;};
}
function caml_js_wrap_callback_arguments(f){
return function(...args){return caml_callback(f, [args]);};
}
function caml_js_wrap_callback_strict(arity, f){
return function(...args){
args.length = arity;
return caml_callback(f, args);};
}
function caml_js_wrap_callback_unsafe(f){
return function(...args){
var len = caml_js_function_arity(f);
args.length = len;
return caml_callback(f, args);};
}
function caml_js_wrap_meth_callback(f){
return function(...args){
args.unshift(this);
var res = caml_callback(f, args);
return res instanceof Function ? caml_js_wrap_callback(res) : res;};
}
function caml_js_wrap_meth_callback_arguments(f){
return function(...args){return caml_callback(f, [this, args]);};
}
function caml_js_wrap_meth_callback_strict(arity, f){
return function(...args){
args.length = arity;
args.unshift(this);
return caml_callback(f, args);};
}
function caml_js_wrap_meth_callback_unsafe(f){
return function(...args){
var len = caml_js_function_arity(f);
args.unshift(this);
args.length = len;
return caml_callback(f, args);};
}
function caml_jsoo_flags_effects(_unit){
return caml_string_of_jsstring("disabled");
}
function caml_jsoo_flags_use_js_string(_unit){return 1;}
function caml_lazy_make_forward(v){return [250, v];}
function caml_obj_tag(x){
if(Array.isArray(x) && x[0] === x[0] >>> 0)
return x[0];
else if(caml_is_ml_bytes(x))
return 252;
else if(caml_is_ml_string(x))
return 252;
else if(x instanceof Function || typeof x === "function")
return 247;
else if(x?.caml_custom) return 255; else return 1000;
}
function caml_lazy_read_result(o){
return caml_obj_tag(o) === 250 ? o[1] : o;
}
function caml_obj_update_tag(b, o, n){
if(b[0] === o){b[0] = n; return 1;}
return 0;
}
function caml_lazy_reset_to_lazy(o){
caml_obj_update_tag(o, 244, 246);
return 0;
}
function caml_lazy_update_to_forcing(o){
return Array.isArray(o) && o[0] === o[0] >>> 0
&& caml_obj_update_tag(o, 246, 244)
? 0
: 1;
}
function caml_lazy_update_to_forward(o){
caml_obj_update_tag(o, 244, 250);
return 0;
}
function caml_ldexp_float(x, exp){
exp |= 0;
if(exp > 1023){
exp -= 1023;
x *= Math.pow(2, 1023);
if(exp > 1023){exp -= 1023; x *= Math.pow(2, 1023);}
}
if(exp < - 1023){exp += 1023; x *= Math.pow(2, - 1023);}
x *= Math.pow(2, exp);
return x;
}
function caml_lessequal(x, y){
return + (caml_compare_val(x, y, false) <= 0);
}
function caml_lessthan(x, y){return + (caml_compare_val(x, y, false) < 0);}
function caml_lex_array(s){
s = caml_jsbytes_of_string(s);
var l = s.length / 2, a = new Array(l);
for(var i = 0; i < l; i++)
a[i] = (s.charCodeAt(2 * i) | s.charCodeAt(2 * i + 1) << 8) << 16 >> 16;
return a;
}
function caml_lex_engine(tbl, start_state, lexbuf){
var
lex_buffer = 2,
lex_buffer_len = 3,
lex_start_pos = 5,
lex_curr_pos = 6,
lex_last_pos = 7,
lex_last_action = 8,
lex_eof_reached = 9,
lex_base = 1,
lex_backtrk = 2,
lex_default = 3,
lex_trans = 4,
lex_check = 5;
if(! tbl.lex_default){
tbl.lex_base = caml_lex_array(tbl[lex_base]);
tbl.lex_backtrk = caml_lex_array(tbl[lex_backtrk]);
tbl.lex_check = caml_lex_array(tbl[lex_check]);
tbl.lex_trans = caml_lex_array(tbl[lex_trans]);
tbl.lex_default = caml_lex_array(tbl[lex_default]);
}
var c, state = start_state, buffer = lexbuf[lex_buffer];
if(state >= 0){
lexbuf[lex_last_pos] = lexbuf[lex_start_pos] = lexbuf[lex_curr_pos];
lexbuf[lex_last_action] = - 1;
}
else
state = - state - 1;
for(;;){
var base = tbl.lex_base[state];
if(base < 0) return - base - 1;
var backtrk = tbl.lex_backtrk[state];
if(backtrk >= 0){
lexbuf[lex_last_pos] = lexbuf[lex_curr_pos];
lexbuf[lex_last_action] = backtrk;
}
if(lexbuf[lex_curr_pos] >= lexbuf[lex_buffer_len])
if(lexbuf[lex_eof_reached] === 0) return - state - 1; else c = 256;
else{
c = caml_bytes_unsafe_get(buffer, lexbuf[lex_curr_pos]);
lexbuf[lex_curr_pos]++;
}
if(tbl.lex_check[base + c] === state)
state = tbl.lex_trans[base + c];
else
state = tbl.lex_default[state];
if(state < 0){
lexbuf[lex_curr_pos] = lexbuf[lex_last_pos];
if(lexbuf[lex_last_action] === - 1)
caml_failwith("lexing: empty token");
else
return lexbuf[lex_last_action];
}
else if(c === 256) lexbuf[lex_eof_reached] = 0;
}
}
function caml_list_mount_point(){
var prev = 0;
for(var i = 0; i < jsoo_mount_point.length; i++){
var old = prev;
prev = [0, caml_string_of_jsstring(jsoo_mount_point[i].path), old];
}
return prev;
}
function caml_list_of_js_array(a){
var l = 0;
for(var i = a.length - 1; i >= 0; i--){var e = a[i]; l = [0, e, l];}
return l;
}
function caml_list_to_js_array(l){
var a = [];
for(; l !== 0; l = l[2]) a.push(l[1]);
return a;
}
function caml_log10_float(x){return Math.log10(x);}
function caml_log1p_float(x){return Math.log1p(x);}
function caml_log2_float(x){return Math.log2(x);}
var
caml_lxm_M =
caml_int64_of_string(caml_string_of_jsstring("0xd1342543de82ef95")),
caml_lxm_daba =
caml_int64_of_string(caml_string_of_jsstring("0xdaba0b6eb09322e3"));
function caml_lxm_next(v){
function shift_l(x, k){return caml_int64_shift_left(x, k);}
function shift_r(x, k){return caml_int64_shift_right_unsigned(x, k);}
function or(a, b){return caml_int64_or(a, b);}
function xor(a, b){return caml_int64_xor(a, b);}
function add(a, b){return caml_int64_add(a, b);}
function mul(a, b){return caml_int64_mul(a, b);}
function rotl(x, k){return or(shift_l(x, k), shift_r(x, 64 - k));}
function get(a, i){return caml_ba_get_1(a, i);}
function set(a, i, x){return caml_ba_set_1(a, i, x);}
var
M = caml_lxm_M,
daba = caml_lxm_daba,
z,
q0,
q1,
st = v,
a = get(st, 0),
s = get(st, 1),
x0 = get(st, 2),
x1 = get(st, 3);
z = add(s, x0);
z = mul(xor(z, shift_r(z, 32)), daba);
z = mul(xor(z, shift_r(z, 32)), daba);
z = xor(z, shift_r(z, 32));
set(st, 1, add(mul(s, M), a));
var q0 = x0, q1 = x1;
q1 = xor(q1, q0);
q0 = rotl(q0, 24);
q0 = xor(xor(q0, q1), shift_l(q1, 16));
q1 = rotl(q1, 37);
set(st, 2, q0);
set(st, 3, q1);
return z;
}
function caml_make_float_vect(len){
if(len >>> 0 >= (0x7fffffff / 8 | 0)) caml_array_bound_error();
var len = len + 1 | 0, b = new Array(len);
b[0] = 254;
for(var i = 1; i < len; i++) b[i] = 0;
return b;
}
function caml_make_vect(len, init){return caml_array_make(len, init);}
var
caml_marshal_constants =
{PREFIX_SMALL_BLOCK: 0x80,
PREFIX_SMALL_INT: 0x40,
PREFIX_SMALL_STRING: 0x20,
CODE_INT8: 0x00,
CODE_INT16: 0x01,
CODE_INT32: 0x02,
CODE_INT64: 0x03,
CODE_SHARED8: 0x04,
CODE_SHARED16: 0x05,
CODE_SHARED32: 0x06,
CODE_BLOCK32: 0x08,
CODE_BLOCK64: 0x13,
CODE_STRING8: 0x09,
CODE_STRING32: 0x0a,
CODE_DOUBLE_BIG: 0x0b,
CODE_DOUBLE_LITTLE: 0x0c,
CODE_DOUBLE_ARRAY8_BIG: 0x0d,
CODE_DOUBLE_ARRAY8_LITTLE: 0x0e,
CODE_DOUBLE_ARRAY32_BIG: 0x0f,
CODE_DOUBLE_ARRAY32_LITTLE: 0x07,
CODE_CODEPOINTER: 0x10,
CODE_INFIXPOINTER: 0x11,
CODE_CUSTOM: 0x12,
CODE_CUSTOM_LEN: 0x18,
CODE_CUSTOM_FIXED: 0x19};
function caml_maybe_print_stats(_unit){return 0;}
function caml_md5_bytes(s, ofs, len){
var ctx = caml_MD5Init(), a = caml_uint8_array_of_bytes(s);
caml_MD5Update(ctx, a.subarray(ofs, ofs + len), len);
return caml_string_of_uint8_array(caml_MD5Final(ctx));
}
function caml_ml_input_block(chanid, ba, i, l){
var
chan = caml_ml_channel_get(chanid),
n = l,
avail = chan.buffer_max - chan.buffer_curr;
if(l <= avail){
ba.set(chan.buffer.subarray(chan.buffer_curr, chan.buffer_curr + l), i);
chan.buffer_curr += l;
}
else if(avail > 0){
ba.set
(chan.buffer.subarray(chan.buffer_curr, chan.buffer_curr + avail), i);
chan.buffer_curr += avail;
n = avail;
}
else{
chan.buffer_curr = 0;
chan.buffer_max = 0;
caml_refill(chan);
var avail = chan.buffer_max - chan.buffer_curr;
if(n > avail) n = avail;
ba.set(chan.buffer.subarray(chan.buffer_curr, chan.buffer_curr + n), i);
chan.buffer_curr += n;
}
return n | 0;
}
function caml_md5_chan(chanid, toread){
var ctx = caml_MD5Init(), buffer = new Uint8Array(4096);
if(toread < 0)
while(true){
var read = caml_ml_input_block(chanid, buffer, 0, buffer.length);
if(read === 0) break;
caml_MD5Update(ctx, buffer.subarray(0, read), read);
}
else
while(toread > 0){
var
read =
caml_ml_input_block
(chanid, buffer, 0, toread > buffer.length ? buffer.length : toread);
if(read === 0) caml_raise_end_of_file();
caml_MD5Update(ctx, buffer.subarray(0, read), read);
toread -= read;
}
return caml_string_of_uint8_array(caml_MD5Final(ctx));
}
function caml_md5_string(s, ofs, len){
return caml_md5_bytes(caml_bytes_of_string(s), ofs, len);
}
function caml_memprof_discard(_t){return 0;}
function caml_memprof_start(_rate, _stack_size, _tracker){return 0;}
function caml_memprof_stop(_unit){return 0;}
function caml_ml_channel_redirect(captured, into){
var
to_restore = caml_ml_channel_get(captured),
new_ = caml_ml_channel_get(into);
caml_ml_channels.set(captured, new_);
return to_restore;
}
function caml_ml_channel_restore(captured, to_restore){caml_ml_channels.set(captured, to_restore); return 0;
}
function caml_ml_channel_size(chanid){
var chan = caml_ml_channel_get(chanid);
return chan.file.length() | 0;
}
function caml_ml_channel_size_64(chanid){
var chan = caml_ml_channel_get(chanid);
return caml_int64_of_float(chan.file.length());
}
var caml_sys_fds = new Array(3);
function caml_sys_close(fd){
var x = caml_sys_fds[fd];
if(x){x.file.close(false); delete caml_sys_fds[fd];}
return 0;
}
function caml_ml_flush(chanid){
var chan = caml_ml_channel_get(chanid);
if(! chan.opened) caml_raise_sys_error("Cannot flush a closed channel");
if(! chan.buffer || chan.buffer_curr === 0) return 0;
if(chan.output)
chan.output
(caml_sub_uint8_array_to_jsbytes(chan.buffer, 0, chan.buffer_curr));
else
for(var pos = 0; pos < chan.buffer_curr;)
pos += chan.file.write(chan.buffer, pos, chan.buffer_curr - pos, false);
chan.offset += chan.buffer_curr;
chan.buffer_curr = 0;
return 0;
}
function caml_ml_close_channel(chanid){
var chan = caml_ml_channel_get(chanid);
if(chan.opened){
chan.opened = false;
caml_ml_channels.close(chanid);
caml_sys_close(chan.fd);
chan.fd = - 1;
chan.buffer = new Uint8Array(0);
chan.buffer_curr = 0;
chan.buffer_max = 0;
}
return 0;
}
function caml_ml_condition_broadcast(_t){return 0;}
function caml_ml_condition_new(_unit){return {condition: 1};}
function caml_ml_condition_signal(_t){return 0;}
function caml_ml_condition_wait(_t, _mutext){return 0;}
function caml_ml_debug_info_status(){return 0;}
function caml_ml_domain_cpu_relax(_unit){return 0;}
function caml_ml_domain_id(_unit){return caml_domain_id;}
var caml_runtime_warnings = 0;
function caml_ml_enable_runtime_warnings(bool){caml_runtime_warnings = bool; return 0;
}
function caml_ml_input(chanid, b, i, l){
var ba = caml_uint8_array_of_bytes(b);
return caml_ml_input_block(chanid, ba, i, l);
}
function caml_ml_input_bigarray(chanid, b, i, l){
var ba = caml_ba_to_typed_array(b);
return caml_ml_input_block(chanid, ba, i, l);
}
function caml_ml_input_char(chanid){
var chan = caml_ml_channel_get(chanid);
if(chan.buffer_curr >= chan.buffer_max){
chan.buffer_curr = 0;
chan.buffer_max = 0;
caml_refill(chan);
}
if(chan.buffer_curr >= chan.buffer_max) caml_raise_end_of_file();
var res = chan.buffer[chan.buffer_curr];
chan.buffer_curr++;
return res;
}
function caml_ml_input_int(chanid){
var res = 0;
for(var i = 0; i < 4; i++)
res = (res << 8) + caml_ml_input_char(chanid) | 0;
return res | 0;
}
function caml_ml_input_scan_line(chanid){
var chan = caml_ml_channel_get(chanid), p = chan.buffer_curr;
do
if(p >= chan.buffer_max){
if(chan.buffer_curr > 0){
chan.buffer.set(chan.buffer.subarray(chan.buffer_curr), 0);
p -= chan.buffer_curr;
chan.buffer_max -= chan.buffer_curr;
chan.buffer_curr = 0;
}
if(chan.buffer_max >= chan.buffer.length) return - chan.buffer_max | 0;
var prev_max = chan.buffer_max;
caml_refill(chan);
if(prev_max === chan.buffer_max) return - chan.buffer_max | 0;
}
while
(chan.buffer[p++] !== 10);
return p - chan.buffer_curr | 0;
}
function caml_ml_is_binary_mode(chanid){
var chan = caml_ml_channel_get(chanid);
return chan.file.flags.binary;
}
function caml_ml_is_buffered(chanid){
return caml_ml_channel_get(chanid).buffered ? 1 : 0;
}
function caml_ml_mutex_lock(t){
if(t.locked)
caml_failwith("Mutex.lock: mutex already locked. Cannot wait.");
else
t.locked = true;
return 0;
}
function caml_ml_mutex_new(_unit){return new MlMutex();}
function caml_ml_mutex_try_lock(t){
if(! t.locked){t.locked = true; return 1;}
return 0;
}
function caml_sys_open_for_node(fd, flags){
if(flags.altname)
try{
var fs = require("node:fs"), fd2 = fs.openSync(flags.altname, "rs");
return new MlNodeFd(fd2, flags);
}
catch(e){}
return new MlNodeFd(fd, flags);
}
function caml_sys_open_internal(file, idx){
var chanid;
if(idx === undefined){
idx = caml_sys_fds.length;
chanid = new MlChanid(idx);
}
else if(caml_sys_fds[idx])
chanid = caml_sys_fds[idx].chanid;
else
chanid = new MlChanid(idx);
caml_sys_fds[idx] = {file: file, chanid: chanid};
return idx | 0;
}
function caml_sys_open(name, flags, perms){
var f = {};
while(flags){
switch(flags[1]){
case 0:
f.rdonly = 1; break;
case 1:
f.wronly = 1; break;
case 2:
f.append = 1; f.writeonly = 1; break;
case 3:
f.create = 1; break;
case 4:
f.truncate = 1; break;
case 5:
f.excl = 1; break;
case 6:
f.binary = 1; break;
case 7:
f.text = 1; break;
case 8:
f.nonblock = 1; break;
}
flags = flags[2];
}
var
root = resolve_fs_device(name),
file = root.device.open(root.rest, f, perms);
return caml_sys_open_internal(file, undefined);
}
(function(){
var is_node = fs_node_supported();
function file(fd, flags){
return is_node
? caml_sys_open_for_node(fd, flags)
: new MlFakeFd_out(fd, flags);
}
caml_sys_open_internal
(file(0, {rdonly: 1, altname: "/dev/stdin", isCharacterDevice: true}),
0);
caml_sys_open_internal
(file
(1, {buffered: is_node ? 1 : 2, wronly: 1, isCharacterDevice: true}),
1);
caml_sys_open_internal
(file
(2, {buffered: is_node ? 1 : 2, wronly: 1, isCharacterDevice: true}),
2);
}
());
function caml_ml_open_descriptor_in(fd){
var fd_desc = caml_sys_fds[fd];
if(fd_desc === undefined)
caml_raise_sys_error("fd " + fd + " doesn't exist");
var
file = fd_desc.file,
chanid = fd_desc.chanid,
refill = null,
channel =
{file: file,
offset: file.pos(),
fd: fd,
opened: true,
out: false,
buffer_curr: 0,
buffer_max: 0,
buffer: new Uint8Array(caml_io_buffer_size),
refill: refill};
caml_ml_channels.set(chanid, channel);
return chanid;
}
function caml_ml_open_descriptor_in_with_flags(fd, _flags){return caml_ml_open_descriptor_in(fd);
}
function caml_ml_open_descriptor_out(fd){
var fd_desc = caml_sys_fds[fd];
if(fd_desc === undefined)
caml_raise_sys_error("fd " + fd + " doesn't exist");
var
file = fd_desc.file,
chanid = fd_desc.chanid,
buffered = file.flags.buffered !== undefined ? file.flags.buffered : 1,
channel =
{file: file,
offset: file.pos(),
fd: fd,
opened: true,
out: true,
buffer_curr: 0,
buffer: new Uint8Array(caml_io_buffer_size),
buffered: buffered};
caml_ml_channels.set(chanid, channel);
return chanid;
}
function caml_ml_open_descriptor_out_with_flags(fd, _flags){return caml_ml_open_descriptor_out(fd);
}
function caml_ml_out_channels_list(){
var l = 0, keys = caml_ml_channels.all();
for(var k of keys){
var chan = caml_ml_channel_get(k);
if(chan.opened && chan.out) l = [0, k, l];
}
return l;
}
function caml_ml_output_ta(chanid, buffer, offset, len){
var chan = caml_ml_channel_get(chanid);
if(! chan.opened)
caml_raise_sys_error("Cannot output to a closed channel");
buffer = buffer.subarray(offset, offset + len);
if(chan.buffer_curr + buffer.length > chan.buffer.length){
var b = new Uint8Array(chan.buffer_curr + buffer.length);
b.set(chan.buffer);
chan.buffer = b;
}
switch(chan.buffered){
case 0:
chan.buffer.set(buffer, chan.buffer_curr);
chan.buffer_curr += buffer.length;
caml_ml_flush(chanid);
break;
case 1:
chan.buffer.set(buffer, chan.buffer_curr);
chan.buffer_curr += buffer.length;
if(chan.buffer_curr >= chan.buffer.length) caml_ml_flush(chanid);
break;
case 2:
var id = buffer.lastIndexOf(10);
if(id < 0){
chan.buffer.set(buffer, chan.buffer_curr);
chan.buffer_curr += buffer.length;
if(chan.buffer_curr >= chan.buffer.length) caml_ml_flush(chanid);
}
else{
chan.buffer.set(buffer.subarray(0, id + 1), chan.buffer_curr);
chan.buffer_curr += id + 1;
caml_ml_flush(chanid);
chan.buffer.set(buffer.subarray(id + 1), chan.buffer_curr);
chan.buffer_curr += buffer.length - id - 1;
}
break;
}
return 0;
}
function caml_ml_output_bytes(chanid, buffer, offset, len){
var buffer = caml_uint8_array_of_bytes(buffer);
return caml_ml_output_ta(chanid, buffer, offset, len);
}
function caml_ml_output(chanid, buffer, offset, len){
return caml_ml_output_bytes
(chanid, caml_bytes_of_string(buffer), offset, len);
}
function caml_ml_output_bigarray(chanid, buffer, offset, len){
var buffer = caml_ba_to_typed_array(buffer);
return caml_ml_output_ta(chanid, buffer, offset, len);
}
function caml_ml_output_char(chanid, c){
var s = caml_string_of_jsbytes(String.fromCharCode(c));
caml_ml_output(chanid, s, 0, 1);
return 0;
}
function caml_ml_output_int(chanid, i){
var arr = [i >> 24 & 0xff, i >> 16 & 0xff, i >> 8 & 0xff, i & 0xff];
caml_ml_output_ta(chanid, new Uint8Array(arr), 0, 4);
return 0;
}
function caml_pos_in(chanid){
var chan = caml_ml_channel_get(chanid);
return chan.offset - (chan.buffer_max - chan.buffer_curr);
}
function caml_ml_pos_in(chanid){return caml_pos_in(chanid) | 0;}
function caml_ml_pos_in_64(chanid){
return caml_int64_of_float(caml_pos_in(chanid));
}
function caml_pos_out(chanid){
var chan = caml_ml_channel_get(chanid);
return chan.offset + chan.buffer_curr;
}
function caml_ml_pos_out(chanid){return caml_pos_out(chanid) | 0;}
function caml_ml_pos_out_64(chanid){
return caml_int64_of_float(caml_pos_out(chanid));
}
function caml_ml_runtime_events_are_active(){return 0;}
function caml_ml_runtime_events_pause(){return 0;}
function caml_ml_runtime_events_resume(){return 0;}
function caml_ml_runtime_events_start(){return 0;}
function caml_ml_runtime_warnings_enabled(_unit){return caml_runtime_warnings;
}
function caml_seek_in(chanid, pos){
var chan = caml_ml_channel_get(chanid);
if(chan.refill != null) caml_raise_sys_error("Illegal seek");
if
(pos >= chan.offset - chan.buffer_max && pos <= chan.offset
&& chan.file.flags.binary)
chan.buffer_curr = chan.buffer_max - (chan.offset - pos);
else{
chan.file.seek(pos, 0);
chan.offset = pos;
chan.buffer_curr = 0;
chan.buffer_max = 0;
}
return 0;
}
function caml_ml_seek_in(chanid, pos){return caml_seek_in(chanid, pos);}
function caml_ml_seek_in_64(chanid, pos){
var pos = caml_int64_to_float(pos);
return caml_seek_in(chanid, pos);
}
function caml_seek_out(chanid, pos){
caml_ml_flush(chanid);
var chan = caml_ml_channel_get(chanid);
chan.file.seek(pos, 0);
chan.offset = pos;
return 0;
}
function caml_ml_seek_out(chanid, pos){return caml_seek_out(chanid, pos);}
function caml_ml_seek_out_64(chanid, pos){
var pos = caml_int64_to_float(pos);
return caml_seek_out(chanid, pos);
}
function caml_ml_set_binary_mode(chanid, mode){
var chan = caml_ml_channel_get(chanid);
chan.file.flags.text = ! mode;
chan.file.flags.binary = mode;
return 0;
}
function caml_ml_set_buffered(chanid, v){
caml_ml_channel_get(chanid).buffered = v;
if(! v) caml_ml_flush(chanid);
return 0;
}
function caml_ml_set_channel_name(chanid, name){
var chan = caml_ml_channel_get(chanid);
chan.name = name;
return 0;
}
function caml_ml_set_channel_output(chanid, f){
var chan = caml_ml_channel_get(chanid);
chan.output = function(s){f(s);};
return 0;
}
function caml_ml_set_channel_refill(chanid, f){
caml_ml_channel_get(chanid).refill = f;
return 0;
}
function caml_mod(x, y){
if(y === 0) caml_raise_zero_divide();
return x % y;
}
function caml_modf_float(x){
if(Number.isFinite(x)){
var neg = 1 / x < 0;
x = Math.abs(x);
var i = Math.floor(x), f = x - i;
if(neg){i = - i; f = - f;}
return [0, f, i];
}
if(Number.isNaN(x)) return [0, Number.NaN, Number.NaN];
return [0, 1 / x, x];
}
function caml_mount_autoload(name, f){
var
path = caml_make_path(name),
name = caml_trailing_slash(path.join("/"));
jsoo_mount_point.push({path: name, device: new MlFakeDevice(name, f)});
return 0;
}
function caml_lex_run_mem(s, i, mem, curr_pos){
for(;;){
var dst = s.charCodeAt(i);
i++;
if(dst === 0xff) return;
var src = s.charCodeAt(i);
i++;
if(src === 0xff)
mem[dst + 1] = curr_pos;
else
mem[dst + 1] = mem[src + 1];
}
}
function caml_lex_run_tag(s, i, mem){
for(;;){
var dst = s.charCodeAt(i);
i++;
if(dst === 0xff) return;
var src = s.charCodeAt(i);
i++;
if(src === 0xff) mem[dst + 1] = - 1; else mem[dst + 1] = mem[src + 1];
}
}
function caml_new_lex_engine(tbl, start_state, lexbuf){
var
lex_buffer = 2,
lex_buffer_len = 3,
lex_start_pos = 5,
lex_curr_pos = 6,
lex_last_pos = 7,
lex_last_action = 8,
lex_eof_reached = 9,
lex_mem = 10,
lex_base = 1,
lex_backtrk = 2,
lex_default = 3,
lex_trans = 4,
lex_check = 5,
lex_base_code = 6,
lex_backtrk_code = 7,
lex_default_code = 8,
lex_trans_code = 9,
lex_check_code = 10,
lex_code = 11;
if(! tbl.lex_default){
tbl.lex_base = caml_lex_array(tbl[lex_base]);
tbl.lex_backtrk = caml_lex_array(tbl[lex_backtrk]);
tbl.lex_check = caml_lex_array(tbl[lex_check]);
tbl.lex_trans = caml_lex_array(tbl[lex_trans]);
tbl.lex_default = caml_lex_array(tbl[lex_default]);
}
if(! tbl.lex_default_code){
tbl.lex_base_code = caml_lex_array(tbl[lex_base_code]);
tbl.lex_backtrk_code = caml_lex_array(tbl[lex_backtrk_code]);
tbl.lex_check_code = caml_lex_array(tbl[lex_check_code]);
tbl.lex_trans_code = caml_lex_array(tbl[lex_trans_code]);
tbl.lex_default_code = caml_lex_array(tbl[lex_default_code]);
}
if(tbl.lex_code == null)
tbl.lex_code = caml_jsbytes_of_string(tbl[lex_code]);
var c, state = start_state, buffer = lexbuf[lex_buffer];
if(state >= 0){
lexbuf[lex_last_pos] = lexbuf[lex_start_pos] = lexbuf[lex_curr_pos];
lexbuf[lex_last_action] = - 1;
}
else
state = - state - 1;
for(;;){
var base = tbl.lex_base[state];
if(base < 0){
var pc_off = tbl.lex_base_code[state];
caml_lex_run_tag(tbl.lex_code, pc_off, lexbuf[lex_mem]);
return - base - 1;
}
var backtrk = tbl.lex_backtrk[state];
if(backtrk >= 0){
var pc_off = tbl.lex_backtrk_code[state];
caml_lex_run_tag(tbl.lex_code, pc_off, lexbuf[lex_mem]);
lexbuf[lex_last_pos] = lexbuf[lex_curr_pos];
lexbuf[lex_last_action] = backtrk;
}
if(lexbuf[lex_curr_pos] >= lexbuf[lex_buffer_len])
if(lexbuf[lex_eof_reached] === 0) return - state - 1; else c = 256;
else{
c = caml_bytes_unsafe_get(buffer, lexbuf[lex_curr_pos]);
lexbuf[lex_curr_pos]++;
}
var pstate = state;
if(tbl.lex_check[base + c] === state)
state = tbl.lex_trans[base + c];
else
state = tbl.lex_default[state];
if(state < 0){
lexbuf[lex_curr_pos] = lexbuf[lex_last_pos];
if(lexbuf[lex_last_action] === - 1)
caml_failwith("lexing: empty token");
else
return lexbuf[lex_last_action];
}
else{
var base_code = tbl.lex_base_code[pstate], pc_off;
if(tbl.lex_check_code[base_code + c] === pstate)
pc_off = tbl.lex_trans_code[base_code + c];
else
pc_off = tbl.lex_default_code[pstate];
if(pc_off > 0)
caml_lex_run_mem
(tbl.lex_code, pc_off, lexbuf[lex_mem], lexbuf[lex_curr_pos]);
if(c === 256) lexbuf[lex_eof_reached] = 0;
}
}
}
function caml_new_string(s){return caml_string_of_jsbytes(s);}
function caml_nextafter_float(x, y){
if(Number.isNaN(x) || Number.isNaN(y)) return Number.NaN;
if(x === y) return y;
if(x === 0) return y < 0 ? - Math.pow(2, - 1074) : Math.pow(2, - 1074);
var bits = caml_int64_bits_of_float(x), one = caml_int64_of_int32(1);
if(x < y === x > 0)
bits = caml_int64_add(bits, one);
else
bits = caml_int64_sub(bits, one);
return caml_int64_float_of_bits(bits);
}
function caml_notequal(x, y){
return + (caml_compare_val(x, y, false) !== 0);
}
function caml_obj_add_offset(_v, _offset){
caml_failwith("Obj.add_offset is not supported");
}
function caml_obj_block(tag, size){
var o = new Array(size + 1);
o[0] = tag;
for(var i = 1; i <= size; i++) o[i] = 0;
return o;
}
function caml_obj_compare_and_swap(x, i, old, n){
if(x[i + 1] === old){x[i + 1] = n; return 1;}
return 0;
}
function caml_obj_is_shared(_x){return 1;}
function caml_obj_raw_field(o, i){return o[i + 1];}
function caml_obj_reachable_words(_o){return 0;}
function caml_obj_set_raw_field(o, i, v){return o[i + 1] = v;}
function caml_obj_with_tag(tag, x){
var l = x.length, a = new Array(l);
a[0] = tag;
for(var i = 1; i < l; i++) a[i] = x[i];
return a;
}
function caml_ojs_new_arr(c, a){
switch(a.length){
case 0:
return new c();
case 1:
return new c(a[0]);
case 2:
return new c(a[0], a[1]);
case 3:
return new c(a[0], a[1], a[2]);
case 4:
return new c(a[0], a[1], a[2], a[3]);
case 5:
return new c(a[0], a[1], a[2], a[3], a[4]);
case 6:
return new c(a[0], a[1], a[2], a[3], a[4], a[5]);
case 7:
return new c(a[0], a[1], a[2], a[3], a[4], a[5], a[6]);
}
function F(){return c.apply(this, a);}
F.prototype = c.prototype;
return new F();
}
function caml_oo_cache_id(){
var cacheid = caml_method_cache.length;
caml_method_cache[cacheid] = 0;
}
var
caml_output_val =
function(){
class Writer{
constructor(){
this.chunk = [];
this.chunk_idx = 20;
this.block_len = 0;
this.obj_counter = 0;
this.size_32 = 0;
this.size_64 = 0;
}
write(size, value){
for(var i = size - 8; i >= 0; i -= 8)
this.chunk[this.chunk_idx++] = value >> i & 0xff;
}
write_at(pos, size, value){
var pos = pos;
for(var i = size - 8; i >= 0; i -= 8)
this.chunk[pos++] = value >> i & 0xff;
}
write_code(size, code, value){
this.chunk[this.chunk_idx++] = code;
for(var i = size - 8; i >= 0; i -= 8)
this.chunk[this.chunk_idx++] = value >> i & 0xff;
}
write_shared(offset){
if(offset < 1 << 8)
this.write_code(8, 0x04, offset);
else if(offset < 1 << 16)
this.write_code(16, 0x05, offset);
else
this.write_code(32, 0x06, offset);
}
pos(){return this.chunk_idx;}
finalize(){
this.block_len = this.chunk_idx - 20;
this.chunk_idx = 0;
this.write(32, 0x8495a6be);
this.write(32, this.block_len);
this.write(32, this.obj_counter);
this.write(32, this.size_32);
this.write(32, this.size_64);
return this.chunk;
}
}
return function(v, flags){
flags = caml_list_to_js_array(flags);
var
no_sharing = flags.indexOf(0) !== - 1,
closures = flags.indexOf(1) !== - 1;
if(closures)
console.warn
("in caml_output_val: flag Marshal.Closures is not supported.");
var
writer = new Writer(),
stack = [],
intern_obj_table = no_sharing ? null : new MlObjectTable();
function memo(v){
if(no_sharing) return false;
var existing_offset = intern_obj_table.recall(v);
if(existing_offset){
writer.write_shared(existing_offset);
return true;
}
else{intern_obj_table.store(v); return false;}
}
function extern_rec(v){
if(v.caml_custom){
if(memo(v)) return;
var
name = v.caml_custom,
ops = caml_custom_ops[name],
sz_32_64 = [0, 0];
if(! ops.serialize)
caml_invalid_argument("output_value: abstract value (Custom)");
if(ops.fixed_length === undefined){
writer.write(8, 0x18);
for(var i = 0; i < name.length; i++)
writer.write(8, name.charCodeAt(i));
writer.write(8, 0);
var header_pos = writer.pos();
for(var i = 0; i < 12; i++) writer.write(8, 0);
ops.serialize(writer, v, sz_32_64);
writer.write_at(header_pos, 32, sz_32_64[0]);
writer.write_at(header_pos + 4, 32, 0);
writer.write_at(header_pos + 8, 32, sz_32_64[1]);
}
else{
writer.write(8, 0x19);
for(var i = 0; i < name.length; i++)
writer.write(8, name.charCodeAt(i));
writer.write(8, 0);
ops.serialize(writer, v, sz_32_64);
if(ops.fixed_length !== sz_32_64[0])
caml_failwith
("output_value: incorrect fixed sizes specified by " + name);
}
writer.size_32 += 2 + (sz_32_64[0] + 3 >> 2);
writer.size_64 += 2 + (sz_32_64[1] + 7 >> 3);
}
else if(Array.isArray(v) && v[0] === (v[0] | 0)){
if(v[0] === 251)
caml_failwith("output_value: abstract value (Abstract)");
if(caml_is_continuation_tag(v[0]))
caml_invalid_argument("output_value: continuation value");
if(v.length > 1 && memo(v)) return;
if(v[0] < 16 && v.length - 1 < 8)
writer.write(8, 0x80 + v[0] + (v.length - 1 << 4));
else
writer.write_code(32, 0x08, v.length - 1 << 10 | v[0]);
writer.size_32 += v.length;
writer.size_64 += v.length;
if(v.length > 1) stack.push(v, 1);
}
else if(caml_is_ml_bytes(v)){
if(! caml_is_ml_bytes(caml_string_of_jsbytes("")))
caml_failwith
("output_value: [Bytes.t] cannot safely be marshaled with [--enable use-js-string]");
if(memo(v)) return;
var len = caml_ml_bytes_length(v);
if(len < 0x20)
writer.write(8, 0x20 + len);
else if(len < 0x100)
writer.write_code(8, 0x09, len);
else
writer.write_code(32, 0x0a, len);
for(var i = 0; i < len; i++)
writer.write(8, caml_bytes_unsafe_get(v, i));
writer.size_32 += 1 + ((len + 4) / 4 | 0);
writer.size_64 += 1 + ((len + 8) / 8 | 0);
}
else if(caml_is_ml_string(v)){
if(memo(v)) return;
var len = caml_ml_string_length(v);
if(len < 0x20)
writer.write(8, 0x20 + len);
else if(len < 0x100)
writer.write_code(8, 0x09, len);
else
writer.write_code(32, 0x0a, len);
for(var i = 0; i < len; i++)
writer.write(8, caml_string_unsafe_get(v, i));
writer.size_32 += 1 + ((len + 4) / 4 | 0);
writer.size_64 += 1 + ((len + 8) / 8 | 0);
}
else if(v !== (v | 0)){
var type_of_v = typeof v;
if(type_of_v !== "number")
caml_failwith("output_value: abstract value (" + type_of_v + ")");
if(memo(v)) return;
var t = caml_int64_to_bytes(caml_int64_bits_of_float(v));
writer.write(8, 0x0c);
for(var i = 0; i < 8; i++) writer.write(8, t[7 - i]);
writer.size_32 += 3;
writer.size_64 += 2;
}
else if(v >= 0 && v < 0x40)
writer.write(8, 0x40 + v);
else if(v >= - (1 << 7) && v < 1 << 7)
writer.write_code(8, 0x00, v);
else if(v >= - (1 << 15) && v < 1 << 15)
writer.write_code(16, 0x01, v);
else
writer.write_code(32, 0x02, v);
}
extern_rec(v);
while(stack.length > 0){
var i = stack.pop(), v = stack.pop();
if(i + 1 < v.length) stack.push(v, i + 1);
extern_rec(v[i]);
}
if(intern_obj_table)
writer.obj_counter = intern_obj_table.objs.length;
writer.finalize();
return new Uint8Array(writer.chunk);};
}
();
function caml_output_value_to_string(v, flags){
return caml_string_of_uint8_array(caml_output_val(v, flags));
}
function caml_output_value(chanid, v, flags){
var s = caml_output_value_to_string(v, flags);
caml_ml_output(chanid, s, 0, caml_ml_string_length(s));
return 0;
}
function caml_output_value_to_buffer(s, ofs, len, v, flags){
var t = caml_output_val(v, flags);
if(t.length > len) caml_failwith("Marshal.to_buffer: buffer overflow");
caml_blit_bytes(caml_bytes_of_uint8_array(t), 0, s, ofs, t.length);
return 0;
}
function caml_output_value_to_bytes(v, flags){
return caml_bytes_of_uint8_array(caml_output_val(v, flags));
}
var caml_parser_trace = 0;
function caml_parse_engine(tables, env, cmd, arg){
var
ERRCODE = 256,
loop = 6,
testshift = 7,
shift = 8,
shift_recover = 9,
reduce = 10,
READ_TOKEN = 0,
RAISE_PARSE_ERROR = 1,
GROW_STACKS_1 = 2,
GROW_STACKS_2 = 3,
COMPUTE_SEMANTIC_ACTION = 4,
CALL_ERROR_FUNCTION = 5,
env_s_stack = 1,
env_v_stack = 2,
env_symb_start_stack = 3,
env_symb_end_stack = 4,
env_stacksize = 5,
env_stackbase = 6,
env_curr_char = 7,
env_lval = 8,
env_symb_start = 9,
env_symb_end = 10,
env_asp = 11,
env_rule_len = 12,
env_rule_number = 13,
env_sp = 14,
env_state = 15,
env_errflag = 16,
tbl_transl_const = 2,
tbl_transl_block = 3,
tbl_lhs = 4,
tbl_len = 5,
tbl_defred = 6,
tbl_dgoto = 7,
tbl_sindex = 8,
tbl_rindex = 9,
tbl_gindex = 10,
tbl_tablesize = 11,
tbl_table = 12,
tbl_check = 13,
tbl_names_const = 15,
tbl_names_block = 16;
function log(x){
var s = caml_string_of_jsbytes(x + "\n");
caml_ml_output(caml_sys_fds[2].chanid, s, 0, caml_ml_string_length(s));
}
function token_name(names, number){
var str = caml_jsstring_of_string(names);
if(str[0] === "\x00") return "<unknown token>";
return str.split("\x00")[number];
}
function print_token(state, tok){
var token, kind;
if(Array.isArray(tok)){
token = token_name(tables[tbl_names_block], tok[0]);
if(typeof tok[1] === "number")
kind = "" + tok[1];
else if(typeof tok[1] === "string")
kind = tok[1];
else if(tok[1] instanceof MlBytes)
kind = caml_jsbytes_of_string(tok[1]);
else
kind = "_";
log("State " + state + ": read token " + token + "(" + kind + ")");
}
else{
token = token_name(tables[tbl_names_const], tok);
log("State " + state + ": read token " + token);
}
}
if(! tables.dgoto){
tables.defred = caml_lex_array(tables[tbl_defred]);
tables.sindex = caml_lex_array(tables[tbl_sindex]);
tables.check = caml_lex_array(tables[tbl_check]);
tables.rindex = caml_lex_array(tables[tbl_rindex]);
tables.table = caml_lex_array(tables[tbl_table]);
tables.len = caml_lex_array(tables[tbl_len]);
tables.lhs = caml_lex_array(tables[tbl_lhs]);
tables.gindex = caml_lex_array(tables[tbl_gindex]);
tables.dgoto = caml_lex_array(tables[tbl_dgoto]);
}
var
res = 0,
n,
n1,
n2,
state1,
sp = env[env_sp],
state = env[env_state],
errflag = env[env_errflag];
the_loop:
for(;;)
switch(cmd){
case 0:
state = 0; errflag = 0;
case 6:
n = tables.defred[state];
if(n !== 0){cmd = reduce; continue the_loop;}
if(env[env_curr_char] >= 0){cmd = testshift; continue the_loop;}
res = READ_TOKEN;
break the_loop;
case 1:
if(Array.isArray(arg)){
env[env_curr_char] = tables[tbl_transl_block][arg[0] + 1];
env[env_lval] = arg[1];
}
else{
env[env_curr_char] = tables[tbl_transl_const][arg + 1];
env[env_lval] = 0;
}
if(caml_parser_trace) print_token(state, arg);
case 7:
n1 = tables.sindex[state];
n2 = n1 + env[env_curr_char];
if
(n1 !== 0 && n2 >= 0 && n2 <= tables[tbl_tablesize]
&& tables.check[n2] === env[env_curr_char]){cmd = shift; continue the_loop;}
n1 = tables.rindex[state];
n2 = n1 + env[env_curr_char];
if
(n1 !== 0 && n2 >= 0 && n2 <= tables[tbl_tablesize]
&& tables.check[n2] === env[env_curr_char]){
n = tables.table[n2];
cmd = reduce;
continue the_loop;
}
if(errflag <= 0){res = CALL_ERROR_FUNCTION; break the_loop;}
case 5:
if(errflag < 3){
errflag = 3;
for(;;){
state1 = env[env_s_stack][sp + 1];
n1 = tables.sindex[state1];
n2 = n1 + ERRCODE;
if
(n1 !== 0 && n2 >= 0 && n2 <= tables[tbl_tablesize]
&& tables.check[n2] === ERRCODE){
if(caml_parser_trace) log("Recovering in state " + state1);
cmd = shift_recover;
continue the_loop;
}
else{
if(caml_parser_trace) log("Discarding state " + state1);
if(sp <= env[env_stackbase]){
if(caml_parser_trace) log("No more states to discard");
return RAISE_PARSE_ERROR;
}
sp--;
}
}
}
else{
if(env[env_curr_char] === 0) return RAISE_PARSE_ERROR;
if(caml_parser_trace) log("Discarding last token read");
env[env_curr_char] = - 1;
cmd = loop;
continue the_loop;
}
case 8:
env[env_curr_char] = - 1; if(errflag > 0) errflag--;
case 9:
if(caml_parser_trace)
log("State " + state + ": shift to state " + tables.table[n2]);
state = tables.table[n2];
sp++;
if(sp >= env[env_stacksize]){res = GROW_STACKS_1; break the_loop;}
case 2:
env[env_s_stack][sp + 1] = state;
env[env_v_stack][sp + 1] = env[env_lval];
env[env_symb_start_stack][sp + 1] = env[env_symb_start];
env[env_symb_end_stack][sp + 1] = env[env_symb_end];
cmd = loop;
continue the_loop;
case 10:
if(caml_parser_trace) log("State " + state + ": reduce by rule " + n);
var m = tables.len[n];
env[env_asp] = sp;
env[env_rule_number] = n;
env[env_rule_len] = m;
sp = sp - m + 1;
m = tables.lhs[n];
state1 = env[env_s_stack][sp];
n1 = tables.gindex[m];
n2 = n1 + state1;
if
(n1 !== 0 && n2 >= 0 && n2 <= tables[tbl_tablesize]
&& tables.check[n2] === state1)
state = tables.table[n2];
else
state = tables.dgoto[m];
if(sp >= env[env_stacksize]){res = GROW_STACKS_2; break the_loop;}
case 3:
res = COMPUTE_SEMANTIC_ACTION; break the_loop;
case 4:
env[env_s_stack][sp + 1] = state;
env[env_v_stack][sp + 1] = arg;
var asp = env[env_asp];
env[env_symb_end_stack][sp + 1] = env[env_symb_end_stack][asp + 1];
if(sp > asp)
env[env_symb_start_stack][sp + 1] = env[env_symb_end_stack][asp + 1];
cmd = loop;
continue the_loop;
default: return RAISE_PARSE_ERROR;
}
env[env_sp] = sp;
env[env_state] = state;
env[env_errflag] = errflag;
return res;
}
function caml_pure_js_expr(s){
console.error("caml_pure_js_expr: fallback to runtime evaluation\n");
return eval?.('"use strict";(' + caml_jsstring_of_string(s) + ")");
}
function caml_raise_not_found(){
caml_raise_constant(caml_global_data.Not_found);
}
function caml_raw_backtrace_length(){return 0;}
function caml_raw_backtrace_next_slot(_slot){return 0;}
function caml_raw_backtrace_slot(_bt, _idx){
caml_invalid_argument
("Printexc.get_raw_backtrace_slot: index out of bounds");
}
function caml_read_file_content(name){
var
name = typeof name === "string" ? caml_string_of_jsstring(name) : name,
root = resolve_fs_device(name);
if(root.device.exists(root.rest)){
var
file = root.device.open(root.rest, {rdonly: 1}),
len = file.length(),
buf = new Uint8Array(len);
file.read(buf, 0, len, false);
return caml_string_of_uint8_array(buf);
}
caml_raise_no_such_file(caml_jsstring_of_string(name));
}
function caml_recommended_domain_count(_unit){return 1;}
function caml_record_backtrace(b){
caml_record_backtrace_runtime_flag = b;
return 0;
}
var jsoo_toplevel_reloc = undefined;
function caml_register_global(n, v, name_opt){
if(name_opt){
var name = name_opt;
if(jsoo_toplevel_reloc)
n = caml_callback(jsoo_toplevel_reloc, [name]);
else if(caml_global_data.symbols){
if(! caml_global_data.symidx)
caml_global_data.symidx = caml_build_symbols(caml_global_data.symbols);
var nid = caml_global_data.symidx[name];
if(nid >= 0)
n = nid;
else{
var n = caml_global_data.symidx.next_idx++;
caml_global_data.symidx[name] = n;
}
}
}
caml_global_data[n + 1] = v;
if(name_opt) caml_global_data[name_opt] = v;
}
function caml_register_named_value(nm, v){
caml_named_values[caml_jsbytes_of_string(nm)] = v;
return 0;
}
function caml_restore_raw_backtrace(_exn, _bt){return 0;}
function caml_round_float(x){
if(x >= 0){
var y = Math.floor(x);
return x - y >= 0.5 ? y + 1 : y;
}
else{var y = Math.ceil(x); return y - x >= 0.5 ? y - 1 : y;}
}
function caml_runtime_events_create_cursor(_target){return {};}
function caml_runtime_events_free_cursor(_cursor){return 0;}
function caml_runtime_events_read_poll(_cursor, _callbacks, _num){return 0;
}
function caml_runtime_events_user_register
(event_name, event_tag, event_type){
caml_custom_event_index += 1;
return [0, caml_custom_event_index, event_name, event_type, event_tag];
}
function caml_runtime_events_user_resolve(){return 0;}
function caml_runtime_events_user_write(_event, _event_content){return 0;}
function caml_runtime_parameters(_unit){return caml_string_of_jsbytes("");}
function caml_runtime_variant(_unit){return caml_string_of_jsbytes("");}
function caml_set_parser_trace(bool){
var oldflag = caml_parser_trace;
caml_parser_trace = bool;
return oldflag;
}
function caml_set_static_env(k, v){jsoo_static_env[k] = v; return 0;}
function caml_signbit_float(x){
if(x === 0) x = 1 / x;
return x < 0 ? 1 : 0;
}
function caml_sinh_float(x){return Math.sinh(x);}
function caml_strerror(errno){
const util = require("node:util");
if(errno >= 0){
const code = unix_error[errno];
return util.getSystemErrorMap().entries().find(x=>x[1][0] === code)[1][1];
}
else
return util.getSystemErrorMessage(errno);
}
function caml_string_bound_error(){
caml_invalid_argument("index out of bounds");
}
function caml_string_concat(a, b){return a + b;}
function caml_string_equal(s1, s2){if(s1 === s2) return 1; return 0;}
function caml_string_get(s, i){
if(i >>> 0 >= caml_ml_string_length(s)) caml_string_bound_error();
return caml_string_unsafe_get(s, i);
}
function caml_string_get16(s, i){
if(i >>> 0 >= caml_ml_string_length(s) - 1) caml_string_bound_error();
var
b1 = caml_string_unsafe_get(s, i),
b2 = caml_string_unsafe_get(s, i + 1);
return b2 << 8 | b1;
}
function caml_string_get32(s, i){
if(i >>> 0 >= caml_ml_string_length(s) - 3) caml_string_bound_error();
var
b1 = caml_string_unsafe_get(s, i),
b2 = caml_string_unsafe_get(s, i + 1),
b3 = caml_string_unsafe_get(s, i + 2),
b4 = caml_string_unsafe_get(s, i + 3);
return b4 << 24 | b3 << 16 | b2 << 8 | b1;
}
function caml_string_get64(s, i){
if(i >>> 0 >= caml_ml_string_length(s) - 7) caml_string_bound_error();
var a = new Array(8);
for(var j = 0; j < 8; j++) a[7 - j] = caml_string_unsafe_get(s, i + j);
return caml_int64_of_bytes(a);
}
function caml_string_lessequal(s1, s2){return s1 <= s2 ? 1 : 0;}
function caml_string_greaterequal(s1, s2){return caml_string_lessequal(s2, s1);
}
function caml_string_lessthan(s1, s2){return s1 < s2 ? 1 : 0;}
function caml_string_greaterthan(s1, s2){return caml_string_lessthan(s2, s1);
}
function caml_string_hash(h, v){
var h = caml_hash_mix_string(h, v), h = caml_hash_mix_final(h);
return h & 0x3fffffff;
}
function caml_string_notequal(s1, s2){
return 1 - caml_string_equal(s1, s2);
}
function caml_string_of_bytes(s){
s.t & 6 && caml_convert_string_to_bytes(s);
return caml_string_of_jsbytes(s.c);
}
function caml_string_set(_s, _i, _c){caml_failwith("caml_string_set");}
function caml_sys_argv(_unit){return caml_argv;}
function caml_sys_chdir(dir, raise_unix){
var root = resolve_fs_device(dir);
if(root.device.is_dir(root.rest)){
if(root.rest)
caml_current_dir = caml_trailing_slash(root.path + root.rest);
else
caml_current_dir = root.path;
return 0;
}
else if(root.device.exists(root.rest))
caml_raise_system_error
(raise_unix,
"ENOTDIR",
"chdir",
"not a directory",
caml_jsstring_of_string(dir));
else
caml_raise_no_such_file(caml_jsstring_of_string(dir), raise_unix);
}
function caml_sys_const_backend_type(){
return [0, caml_string_of_jsbytes("js_of_ocaml")];
}
function caml_sys_const_big_endian(){return 0;}
function caml_sys_const_int_size(){return 32;}
function caml_sys_const_max_wosize(){return 0x7fffffff / 4 | 0;}
function caml_sys_const_naked_pointers_checked(_unit){return 0;}
var os_type = jsoo_is_win32 ? "Win32" : "Unix";
function caml_sys_const_ostype_cygwin(){return os_type === "Cygwin" ? 1 : 0;
}
function caml_sys_const_ostype_unix(){return os_type === "Unix" ? 1 : 0;}
function caml_sys_const_ostype_win32(){return os_type === "Win32" ? 1 : 0;}
function caml_sys_const_word_size(){return 32;}
function caml_sys_executable_name(_unit){return caml_executable_name;}
function caml_sys_exit(code){
if(globalThis.quit) globalThis.quit(code);
if(globalThis.process?.exit) globalThis.process.exit(code);
caml_invalid_argument("Function 'exit' not implemented");
}
function caml_sys_file_exists(name){
var root = resolve_fs_device(name);
return root.device.exists(root.rest);
}
function caml_sys_get_argv(_unit){return [0, caml_argv[1], caml_argv];}
function caml_sys_get_config(){
return [0, caml_string_of_jsbytes(os_type), 32, 0];
}
function caml_sys_getcwd(){
return caml_string_of_jsstring(caml_current_dir);
}
function caml_sys_getenv(name){
var r = jsoo_sys_getenv(caml_jsstring_of_string(name));
if(r === undefined) caml_raise_not_found();
return caml_string_of_jsstring(r);
}
function caml_sys_is_directory(name){
var root = resolve_fs_device(name), a = root.device.is_dir(root.rest);
return a ? 1 : 0;
}
function caml_sys_is_regular_file(name){
var root = resolve_fs_device(name);
return root.device.isFile(root.rest);
}
function caml_sys_isatty(_chan){return 0;}
function caml_sys_mkdir(name, perm){
var root = resolve_fs_device(name);
root.device.mkdir(root.rest, perm);
return 0;
}
function caml_sys_modify_argv(arg){caml_argv = arg; return 0;}
function caml_sys_random_seed(){
if(globalThis.crypto)
if(globalThis.crypto.getRandomValues){
var a = globalThis.crypto.getRandomValues(new Int32Array(4));
return [0, a[0], a[1], a[2], a[3]];
}
else if(globalThis.crypto.randomBytes){
var a = new Int32Array(globalThis.crypto.randomBytes(16).buffer);
return [0, a[0], a[1], a[2], a[3]];
}
var now = new Date().getTime(), x = now ^ 0xffffffff * Math.random();
return [0, x];
}
function caml_sys_read_directory(name){
var
root = resolve_fs_device(name),
a = root.device.readdir(root.rest),
l = new Array(a.length + 1);
l[0] = 0;
for(var i = 0; i < a.length; i++)
l[i + 1] = caml_string_of_jsstring(a[i]);
return l;
}
function caml_sys_remove(name){
var root = resolve_fs_device(name);
return root.device.unlink(root.rest);
}
function caml_sys_rename(o, n){
var o_root = resolve_fs_device(o), n_root = resolve_fs_device(n);
if(o_root.device !== n_root.device)
caml_failwith("caml_sys_rename: cannot move file between two filesystem");
if(! o_root.device.rename)
caml_failwith("caml_sys_rename: not implemented");
o_root.device.rename(o_root.rest, n_root.rest);
}
function caml_sys_rmdir(name){
var root = resolve_fs_device(name);
root.device.rmdir(root.rest);
return 0;
}
function caml_sys_system_command(cmd){
var cmd = caml_jsstring_of_string(cmd);
if(typeof require !== "undefined"){
var child_process = require("node:child_process");
if(child_process?.execSync)
try{child_process.execSync(cmd, {stdio: "inherit"}); return 0;}
catch(e){return 1;}
}
else
return 127;
}
var caml_initial_time = new Date().getTime() * 0.001;
function caml_sys_time(){
var now = new Date().getTime();
return now * 0.001 - caml_initial_time;
}
function caml_sys_time_include_children(_b){return caml_sys_time();}
function caml_sys_unsafe_getenv(name){return caml_sys_getenv(name);}
function caml_tanh_float(x){return Math.tanh(x);}
function caml_throw_js_exception(exn){throw exn;}
function caml_to_js_string(s){return caml_jsstring_of_string(s);}
function caml_trampoline(res){
var c = 1;
while(res?.joo_tramp){res = res.joo_tramp.apply(null, res.joo_args); c++;}
return res;
}
function caml_trampoline_return(f, args, direct){
return {joo_tramp: f, joo_args: args, joo_direct: direct};
}
function caml_trunc_float(x){return Math.trunc(x);}
function caml_unix_access(name, flags){
var f = {};
while(flags){
switch(flags[1]){
case 0:
f.r = 1; break;
case 1:
f.w = 1; break;
case 2:
f.x = 1; break;
case 3:
f.f = 1; break;
}
flags = flags[2];
}
var root = resolve_fs_device(name);
if(! root.device.access)
caml_failwith("caml_unix_access: not implemented");
root.device.access(root.rest, f, true);
return 0;
}
function caml_unix_chdir(dir){return caml_sys_chdir(dir, true);}
function caml_unix_chmod(name, perms){
var root = resolve_fs_device(name);
if(! root.device.chmod) caml_failwith("caml_unix_chmod: not implemented");
return root.device.chmod(root.rest, perms);
}
function caml_unix_cleanup(){}
function caml_unix_lookup_file(fd, cmd){
var fd_desc = caml_sys_fds[fd];
if(fd_desc === undefined) caml_raise_system_error(1, "EBADF", cmd);
return fd_desc.file;
}
function caml_unix_close(fd){
var file = caml_unix_lookup_file(fd, "close");
file.close(1);
return 0;
}
function caml_unix_closedir(dir_handle){
try{dir_handle.pointer.closeSync();}
catch(e){caml_raise_system_error(1, "EBADF", "closedir");}
}
function caml_unix_fchmod(fd, perms){
var file = caml_unix_lookup_file(fd, "fchmod");
if(! file.chmod) caml_failwith("caml_unix_fchmod: not implemented");
return file.chmod(perms);
}
function caml_unix_filedescr_of_fd(x){return x;}
function caml_unix_findclose(dir_handle){return caml_unix_closedir(dir_handle);
}
function caml_unix_opendir(path){
var root = resolve_fs_device(path);
if(! root.device.opendir)
caml_failwith("caml_unix_opendir: not implemented");
var dir_handle = root.device.opendir(root.rest, true);
return {pointer: dir_handle, path: path};
}
function caml_unix_readdir(dir_handle){
var entry;
try{entry = dir_handle.pointer.readSync();}
catch(e){caml_raise_system_error(1, "EBADF", "readdir");}
if(entry === null)
caml_raise_end_of_file();
else
return caml_string_of_jsstring(entry.name);
}
function caml_unix_findfirst(path){
var path_js = caml_jsstring_of_string(path);
path_js = path_js.replace(/(^|[\\/])\*\.\*$/, "");
path = caml_string_of_jsstring(path_js);
var
dir_handle = caml_unix_opendir(path),
first_entry = caml_unix_readdir(dir_handle);
return [0, first_entry, dir_handle];
}
function caml_unix_findnext(dir_handle){return caml_unix_readdir(dir_handle);
}
function caml_unix_fstat(fd){
var file = caml_unix_lookup_file(fd, "fstat");
if(! file.stat) caml_failwith("caml_unix_fstat: not implemented");
return file.stat(false);
}
function caml_unix_fstat_64(fd){
var file = caml_unix_lookup_file(fd, "fstat");
if(! file.stat) caml_failwith("caml_unix_fstat64: not implemented");
return file.stat(true);
}
function caml_unix_fsync(fd){
var file = caml_unix_lookup_file(fd, "fsync");
if(! file.sync) caml_failwith("caml_unix_fsync: not implemented");
return file.sync();
}
function caml_unix_ftruncate(fd, len){
var file = caml_unix_lookup_file(fd, "ftruncate");
if(! file.truncate) caml_failwith("caml_unix_ftruncate: not implemented");
file.truncate(len, 1);
return 0;
}
function caml_unix_ftruncate_64(fd, len){
var file = caml_unix_lookup_file(fd, "ftruncate");
if(! file.truncate)
caml_failwith("caml_unix_ftruncate_64: not implemented");
file.truncate(caml_int64_to_float(len), 1);
return 0;
}
function caml_unix_getegid(_unit){
if(globalThis.process?.getegid) return globalThis.process.getegid();
return 1;
}
function caml_unix_geteuid(_unit){
if(globalThis.process?.geteuid) return globalThis.process.geteuid();
return 1;
}
function caml_unix_getgid(_unit){
if(globalThis.process?.getgid) return globalThis.process.getgid();
return 1;
}
function caml_unix_getpwnam(_unit){caml_raise_not_found();}
function caml_unix_gettimeofday(){return new Date().getTime() / 1000;}
function caml_unix_getuid(_unit){
if(globalThis.process?.getuid) return globalThis.process.getuid();
return 1;
}
function caml_unix_gmtime(t){
var
d = new Date(t * 1000),
d_num = d.getTime(),
januaryfirst = new Date(Date.UTC(d.getUTCFullYear(), 0, 1)).getTime(),
doy = Math.floor((d_num - januaryfirst) / 86400000);
return [0,
d.getUTCSeconds(),
d.getUTCMinutes(),
d.getUTCHours(),
d.getUTCDate(),
d.getUTCMonth(),
d.getUTCFullYear() - 1900,
d.getUTCDay(),
doy,
false | 0];
}
function caml_unix_has_symlink(_unit){return fs_node_supported() ? 1 : 0;}
function caml_unix_inchannel_of_filedescr(fd){
var file = caml_unix_lookup_file(fd, "in_channel_of_descr");
file.check_stream_semantics("in_channel_of_descr");
return caml_ml_open_descriptor_in(fd);
}
function caml_unix_inet_addr_of_string(){return 0;}
function caml_unix_isatty(fd){
var file = caml_unix_lookup_file(fd);
if(! file.isatty) return 0;
return file.isatty();
}
function caml_unix_link(follow, src, dst){
var src_root = resolve_fs_device(src), dst_root = resolve_fs_device(dst);
if(! src_root.device.link)
caml_failwith("caml_unix_link: not implemented");
if(typeof follow !== "number")
caml_raise_system_error(1, "ENOSYS", "link");
if(src_root.device !== dst_root.device)
caml_raise_system_error(1, "EXDEV", "link");
return src_root.device.link(src_root.rest, dst_root.rest, true);
}
function caml_unix_localtime(t){
var
d = new Date(t * 1000),
d_num = d.getTime(),
januaryfirst = new Date(d.getFullYear(), 0, 1).getTime(),
doy = Math.floor((d_num - januaryfirst) / 86400000),
jan = new Date(d.getFullYear(), 0, 1),
jul = new Date(d.getFullYear(), 6, 1),
stdTimezoneOffset =
Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
return [0,
d.getSeconds(),
d.getMinutes(),
d.getHours(),
d.getDate(),
d.getMonth(),
d.getFullYear() - 1900,
d.getDay(),
doy,
d.getTimezoneOffset() < stdTimezoneOffset | 0];
}
function caml_unix_lseek(fd, len, whence){
var file = caml_unix_lookup_file(fd, "lseek");
return file.seek(len, whence, 1);
}
function caml_unix_lseek_64(fd, len, whence){
var file = caml_unix_lookup_file(fd, "lseek");
return file.seek(caml_int64_to_float(len), whence, 1);
}
function caml_unix_lstat(name){
var root = resolve_fs_device(name);
if(! root.device.lstat) caml_failwith("caml_unix_lstat: not implemented");
return root.device.lstat(root.rest, false, true);
}
function caml_unix_lstat_64(name){
var root = resolve_fs_device(name);
if(! root.device.lstat)
caml_failwith("caml_unix_lstat_64: not implemented");
return root.device.lstat(root.rest, true, true);
}
function caml_unix_mkdir(name, perm){
var root = resolve_fs_device(name);
if(! root.device.mkdir) caml_failwith("caml_unix_mkdir: not implemented");
return root.device.mkdir(root.rest, perm, true);
}
function caml_unix_mktime(tm){
var
d = new Date(tm[6] + 1900, tm[5], tm[4], tm[3], tm[2], tm[1]).getTime(),
t = Math.floor(d / 1000),
tm2 = caml_unix_localtime(t);
return [0, t, tm2];
}
function caml_unix_open(name, flags, perms){
var f = {};
while(flags){
switch(flags[1]){
case 0:
f.rdonly = 1; break;
case 1:
f.wronly = 1; break;
case 2:
f.rdwr = 1; break;
case 3:
f.nonblock = 1; break;
case 4:
f.append = 1; break;
case 5:
f.create = 1; break;
case 6:
f.truncate = 1; break;
case 7:
f.excl = 1; break;
case 8:
f.noctty = 1; break;
case 9:
f.dsync = 1; break;
case 10:
f.sync = 1; break;
}
flags = flags[2];
}
var
root = resolve_fs_device(name),
file = root.device.open(root.rest, f, perms, true),
idx = caml_sys_fds.length,
chanid = new MlChanid(idx);
caml_sys_fds[idx] = {file: file, chanid: chanid};
return idx | 0;
}
function caml_unix_outchannel_of_filedescr(fd){
var file = caml_unix_lookup_file(fd, "out_channel_of_descr");
file.check_stream_semantics("out_channel_of_descr");
return caml_ml_open_descriptor_out(fd);
}
function caml_unix_read(fd, buf, pos, len){
var file = caml_unix_lookup_file(fd, "read");
return file.read(caml_uint8_array_of_bytes(buf), pos, len, 1);
}
function caml_unix_read_bigarray(fd, buf, pos, len){
var
a = caml_ba_to_typed_array(buf),
file = caml_unix_lookup_file(fd, "read");
return file.read(a, pos, len, 1);
}
function caml_unix_readlink(name){
var root = resolve_fs_device(name);
if(! root.device.readlink)
caml_failwith("caml_unix_readlink: not implemented");
return root.device.readlink(root.rest, true);
}
function caml_unix_rename(o, n){
var o_root = resolve_fs_device(o), n_root = resolve_fs_device(n);
if(o_root.device !== n_root.device)
caml_raise_system_error(1, "EXDEV", "rename");
if(! o_root.device.rename)
caml_failwith("caml_sys_rename: not implemented");
o_root.device.rename(o_root.rest, n_root.rest, true);
}
function caml_unix_rewinddir(dir_handle){
caml_unix_closedir(dir_handle);
var new_dir_handle = caml_unix_opendir(dir_handle.path);
dir_handle.pointer = new_dir_handle.pointer;
return 0;
}
function caml_unix_rmdir(name){
var root = resolve_fs_device(name);
if(! root.device.rmdir) caml_failwith("caml_unix_rmdir: not implemented");
return root.device.rmdir(root.rest, true);
}
function caml_unix_single_write(fd, buf, pos, len){
var file = caml_unix_lookup_file(fd, "write");
if(len === 0) return 0;
return file.write(caml_uint8_array_of_bytes(buf), pos, len, 1);
}
function caml_unix_startup(){}
function caml_unix_stat(name){
var root = resolve_fs_device(name);
if(! root.device.stat) caml_failwith("caml_unix_stat: not implemented");
return root.device.stat(root.rest, false, true);
}
function caml_unix_stat_64(name){
var root = resolve_fs_device(name);
if(! root.device.stat)
caml_failwith("caml_unix_stat_64: not implemented");
return root.device.stat(root.rest, true, true);
}
function caml_unix_symlink(to_dir, src, dst){
var dst_root = resolve_fs_device(dst);
if(! dst_root.device.symlink)
caml_failwith("caml_unix_symlink: not implemented");
return dst_root.device.symlink
(to_dir, caml_jsstring_of_string(src), dst_root.rest, true);
}
function caml_unix_time(){return Math.floor(caml_unix_gettimeofday());}
function caml_unix_times(){
if(globalThis.process?.cpuUsage){
var t = globalThis.process.cpuUsage();
return [0, t.user / 1e6, t.system / 1e6, 0, 0];
}
else if(globalThis.performance?.now)
return [0, globalThis.performance.now() / 1000, 0, 0, 0];
else
caml_failwith("caml_unix_times: not implemented");
}
function caml_unix_truncate(name, len){
var root = resolve_fs_device(name);
if(! root.device.truncate)
caml_failwith("caml_unix_truncate: not implemented");
root.device.truncate(root.rest, len, true);
return 0;
}
function caml_unix_truncate_64(name, len){
var root = resolve_fs_device(name);
if(! root.device.truncate)
caml_failwith("caml_unix_truncate_64: not implemented");
root.device.truncate(root.rest, caml_int64_to_float(len), true);
return 0;
}
function caml_unix_unlink(name){
var root = resolve_fs_device(name);
if(! root.device.unlink)
caml_failwith("caml_unix_unlink: not implemented");
root.device.unlink(root.rest, true);
return 0;
}
function caml_unix_utimes(name, atime, mtime){
var root = resolve_fs_device(name);
if(! root.device.utimes)
caml_failwith("caml_unix_utimes: not implemented");
root.device.utimes(root.rest, atime, mtime, true);
return 0;
}
function caml_unix_write(fd, buf, pos, len){
var
file = caml_unix_lookup_file(fd, "write"),
a = caml_uint8_array_of_bytes(buf),
written = 0;
while(len > 0){
var n = file.write(a, pos, len, 1);
written += n;
pos += n;
len -= n;
}
return written;
}
function caml_unix_write_bigarray(fd, buf, pos, len){
var
a = caml_ba_to_typed_array(buf),
file = caml_unix_lookup_file(fd, "write"),
written = 0;
while(len > 0){
var n = file.write(a, pos, len, 1);
written += n;
pos += n;
len -= n;
}
return written;
}
function caml_unmount(name){
var
path = caml_make_path(name),
name = caml_trailing_slash(path.join("/")),
idx = - 1;
for(var i = 0; i < jsoo_mount_point.length; i++)
if(jsoo_mount_point[i].path === name) idx = i;
if(idx > - 1) jsoo_mount_point.splice(idx, 1);
return 0;
}
function caml_update_dummy(x, y){
if(y.fun){x.fun = y.fun; return 0;}
if(typeof y === "function"){x.fun = y; return 0;}
var i = y.length;
while(i--) x[i] = y[i];
return 0;
}
function caml_weak_set(x, i, v){
if(v === 0) caml_ephe_unset_key(x, i); else caml_ephe_set_key(x, i, v[1]);
return 0;
}
function caml_wrap_exception(e){
{
if(Array.isArray(e)) return e;
var exn;
if
(globalThis.RangeError && e instanceof globalThis.RangeError
&& e.message
&& e.message.match(/maximum call stack/i))
exn = caml_global_data.Stack_overflow;
else if
(globalThis.InternalError && e instanceof globalThis.InternalError
&& e.message
&& e.message.match(/too much recursion/i))
exn = caml_global_data.Stack_overflow;
else if(e instanceof globalThis.Error && caml_named_value("jsError"))
exn = [0, caml_named_value("jsError"), e];
else
exn = [0, caml_global_data.Failure, caml_string_of_jsstring(String(e))];
if(e instanceof globalThis.Error) exn.js_error = e;
return exn;
}
}
function caml_xdg_defaults(_unit){return 0;}
function caml_xmlhttprequest_create(_unit){
if(typeof XMLHttpRequest === "undefined")
caml_failwith("XMLHttpRequest is not available");
try{return new XMLHttpRequest();}
catch{caml_failwith("Failed to create XMLHttpRequest");}
}
function caml_zstd_initialize(_unit){
caml_decompress_input = zstd_decompress;
return 1;
}
function compare_digits_nat(nat1, ofs1, nat2, ofs2){
if(nat1.data[ofs1] > nat2.data[ofs2]) return 1;
if(nat1.data[ofs1] < nat2.data[ofs2]) return - 1;
return 0;
}
function compare_nat(nat1, ofs1, len1, nat2, ofs2, len2){
var
a = num_digits_nat(nat1, ofs1, len1),
b = num_digits_nat(nat2, ofs2, len2);
if(a > b) return 1;
if(a < b) return - 1;
for(var i = len1 - 1; i >= 0; i--){
if(nat1.data[ofs1 + i] >>> 0 > nat2.data[ofs2 + i] >>> 0) return 1;
if(nat1.data[ofs1 + i] >>> 0 < nat2.data[ofs2 + i] >>> 0) return - 1;
}
return 0;
}
function complement_nat(nat, ofs, len){
for(var i = 0; i < len; i++)
nat.data[ofs + i] = (- 1 >>> 0) - (nat.data[ofs + i] >>> 0);
}
function create_nat(size){
var arr = new MlNat(size);
for(var i = 0; i < size; i++) arr.data[i] = - 1;
return arr;
}
function decr_nat(nat, ofs, len, carry_in){
var borrow = carry_in === 1 ? 0 : 1;
for(var i = 0; i < len; i++){
var x = (nat.data[ofs + i] >>> 0) - borrow;
nat.data[ofs + i] = x;
if(x >= 0){borrow = 0; break;} else borrow = 1;
}
return borrow === 1 ? 0 : 1;
}
function deserialize_nat(reader, sz){
var len = reader.read32s(), nat = new MlNat(len);
for(var i = 0; i < len; i++) nat.data[i] = reader.read32s();
sz[0] = len * 4;
return nat;
}
function div_helper(a, b, c){
var
x = a * 65536 + (b >>> 16),
y = Math.floor(x / c) * 65536,
z = x % c * 65536,
w = z + (b & 0x0000ffff);
return [y + Math.floor(w / c), w % c];
}
function div_digit_nat(natq, ofsq, natr, ofsr, nat1, ofs1, len, nat2, ofs2){
var rem = nat1.data[ofs1 + len - 1] >>> 0;
for(var i = len - 2; i >= 0; i--){
var
x = div_helper(rem, nat1.data[ofs1 + i] >>> 0, nat2.data[ofs2] >>> 0);
natq.data[ofsq + i] = x[0];
rem = x[1];
}
natr.data[ofsr] = rem;
return 0;
}
function num_leading_zero_bits_in_digit(nat, ofs){
var a = nat.data[ofs], b = 0;
if(a & 0xffff0000){b += 16; a >>>= 16;}
if(a & 0xff00){b += 8; a >>>= 8;}
if(a & 0xf0){b += 4; a >>>= 4;}
if(a & 12){b += 2; a >>>= 2;}
if(a & 2){b += 1; a >>>= 1;}
if(a & 1) b += 1;
return 32 - b;
}
function shift_left_nat(nat1, ofs1, len1, nat2, ofs2, nbits){
if(nbits === 0){nat2.data[ofs2] = 0; return 0;}
var wrap = 0;
for(var i = 0; i < len1; i++){
var a = nat1.data[ofs1 + i] >>> 0;
nat1.data[ofs1 + i] = a << nbits | wrap;
wrap = a >>> 32 - nbits;
}
nat2.data[ofs2] = wrap;
return 0;
}
function shift_right_nat(nat1, ofs1, len1, nat2, ofs2, nbits){
if(nbits === 0){nat2.data[ofs2] = 0; return 0;}
var wrap = 0;
for(var i = len1 - 1; i >= 0; i--){
var a = nat1.data[ofs1 + i] >>> 0;
nat1.data[ofs1 + i] = a >>> nbits | wrap;
wrap = a << 32 - nbits;
}
nat2.data[ofs2] = wrap;
return 0;
}
function set_to_zero_nat(nat, ofs, len){
for(var i = 0; i < len; i++) nat.data[ofs + i] = 0;
return 0;
}
function nat_of_array(l){return new MlNat(l);}
function mult_digit_nat(nat1, ofs1, len1, nat2, ofs2, len2, nat3, ofs3){
var carry = 0, a = nat3.data[ofs3] >>> 0;
for(var i = 0; i < len2; i++){
var
x1 =
(nat1.data[ofs1 + i] >>> 0)
+ (nat2.data[ofs2 + i] >>> 0) * (a & 0x0000ffff)
+ carry,
x2 = (nat2.data[ofs2 + i] >>> 0) * (a >>> 16);
carry = Math.floor(x2 / 65536);
var x3 = x1 + x2 % 65536 * 65536;
nat1.data[ofs1 + i] = x3;
carry += Math.floor(x3 / 4294967296);
}
return len2 < len1 && carry
? add_nat
(nat1, ofs1 + len2, len1 - len2, nat_of_array([carry]), 0, 1, 0)
: carry;
}
function sub_nat(nat1, ofs1, len1, nat2, ofs2, len2, carry_in){
var borrow = carry_in === 1 ? 0 : 1;
for(var i = 0; i < len2; i++){
var
x = (nat1.data[ofs1 + i] >>> 0) - (nat2.data[ofs2 + i] >>> 0) - borrow;
nat1.data[ofs1 + i] = x;
if(x >= 0) borrow = 0; else borrow = 1;
}
return decr_nat(nat1, ofs1 + len2, len1 - len2, borrow === 1 ? 0 : 1);
}
function div_nat(nat1, ofs1, len1, nat2, ofs2, len2){
if(len2 === 1){
div_digit_nat(nat1, ofs1 + 1, nat1, ofs1, nat1, ofs1, len1, nat2, ofs2);
return 0;
}
var s = num_leading_zero_bits_in_digit(nat2, ofs2 + len2 - 1);
shift_left_nat(nat2, ofs2, len2, nat_of_array([0]), 0, s);
shift_left_nat(nat1, ofs1, len1, nat_of_array([0]), 0, s);
var d = (nat2.data[ofs2 + len2 - 1] >>> 0) + 1, a = create_nat(len2 + 1);
for(var i = len1 - 1; i >= len2; i--){
var
quo =
d === 4294967296
? nat1.data[ofs1 + i] >>> 0
: div_helper
(nat1.data[ofs1 + i] >>> 0, nat1.data[ofs1 + i - 1] >>> 0, d)
[0];
set_to_zero_nat(a, 0, len2 + 1);
mult_digit_nat(a, 0, len2 + 1, nat2, ofs2, len2, nat_of_array([quo]), 0);
sub_nat(nat1, ofs1 + i - len2, len2 + 1, a, 0, len2 + 1, 1);
while
(nat1.data[ofs1 + i] !== 0
|| compare_nat(nat1, ofs1 + i - len2, len2, nat2, ofs2, len2) >= 0){
quo = quo + 1;
sub_nat(nat1, ofs1 + i - len2, len2 + 1, nat2, ofs2, len2, 1);
}
nat1.data[ofs1 + i] = quo;
}
shift_right_nat(nat1, ofs1, len2, nat_of_array([0]), 0, s);
shift_right_nat(nat2, ofs2, len2, nat_of_array([0]), 0, s);
return 0;
}
function serialize_nat(writer, nat, sz){
var len = nat.data.length;
writer.write(32, len);
for(var i = 0; i < len; i++) writer.write(32, nat.data[i]);
sz[0] = len * 4;
sz[1] = len * 8;
}
function initialize_nat(){
caml_custom_ops._nat =
{deserialize: deserialize_nat,
serialize: serialize_nat,
hash: caml_hash_nat};
}
function is_digit_int(nat, ofs){if(nat.data[ofs] >= 0) return 1; return 0;}
function is_digit_normalized(_nat, _ofs){return 1;}
function is_digit_odd(nat, ofs){if(nat.data[ofs] & 1) return 1; return 0;}
function is_digit_zero(nat, ofs){
if(nat.data[ofs] === 0) return 1;
return 0;
}
function jsoo_create_file_extern(name, content){
if(globalThis.jsoo_create_file)
globalThis.jsoo_create_file(name, content);
else{
if(! globalThis.jsoo_fs_tmp) globalThis.jsoo_fs_tmp = [];
globalThis.jsoo_fs_tmp.push({name: name, content: content});
}
return 0;
}
function jsoo_effect_not_supported(){
caml_failwith("Effect handlers are not supported");
}
function land_digit_nat(nat1, ofs1, nat2, ofs2){nat1.data[ofs1] &= nat2.data[ofs2]; return 0;
}
function length_nat(x){return x.data.length;}
function lor_digit_nat(nat1, ofs1, nat2, ofs2){nat1.data[ofs1] |= nat2.data[ofs2]; return 0;
}
function lxor_digit_nat(nat1, ofs1, nat2, ofs2){nat1.data[ofs1] ^= nat2.data[ofs2]; return 0;
}
function mult_nat(nat1, ofs1, len1, nat2, ofs2, len2, nat3, ofs3, len3){
var carry = 0;
for(var i = 0; i < len3; i++)
carry +=
mult_digit_nat
(nat1, ofs1 + i, len1 - i, nat2, ofs2, len2, nat3, ofs3 + i);
return carry;
}
function nth_digit_nat(nat, ofs){return nat.data[ofs];}
function nth_digit_nat_native(nat, ofs){return nat.data[ofs];}
var
re_match =
function(){
var
re_word_letters =
[0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xff,
0x03,
0xfe,
0xff,
0xff,
0x87,
0xfe,
0xff,
0xff,
0x07,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xff,
0xff,
0x7f,
0xff,
0xff,
0xff,
0x7f,
0xff],
opcodes =
{CHAR: 0,
CHARNORM: 1,
STRING: 2,
STRINGNORM: 3,
CHARCLASS: 4,
BOL: 5,
EOL: 6,
WORDBOUNDARY: 7,
BEGGROUP: 8,
ENDGROUP: 9,
REFGROUP: 10,
ACCEPT: 11,
SIMPLEOPT: 12,
SIMPLESTAR: 13,
SIMPLEPLUS: 14,
GOTO: 15,
PUSHBACK: 16,
SETMARK: 17,
CHECKPROGRESS: 18};
function is_word_letter(c){
return re_word_letters[c >> 3] >> (c & 7) & 1;
}
function in_bitset(s, i){
return caml_string_get(s, i >> 3) >> (i & 7) & 1;
}
function re_match_impl(re, s, pos, partial){
var
prog = caml_js_from_array(re[1]),
cpool = caml_js_from_array(re[2]),
normtable = caml_jsbytes_of_string(re[3]),
numgroups = re[4] | 0,
numregisters = re[5] | 0,
s = caml_uint8_array_of_string(s),
pc = 0,
quit = false,
stack = [],
groups = new Array(numgroups),
re_register = new Array(numregisters);
for(var i = 0; i < groups.length; i++)
groups[i] = {start: - 1, end: - 1};
groups[0].start = pos;
function backtrack(){
while(stack.length){
var item = stack.pop();
if(item.undo)
item.undo.obj[item.undo.prop] = item.undo.value;
else if(item.pos){pc = item.pos.pc; pos = item.pos.txt; return;}
}
quit = true;
}
function push(item){stack.push(item);}
function accept(){
groups[0].end = pos;
var result = new Array(1 + groups.length * 2);
result[0] = 0;
for(var i = 0; i < groups.length; i++){
var g = groups[i];
if(g.start < 0 || g.end < 0) g.start = g.end = - 1;
result[2 * i + 1] = g.start;
result[2 * i + 1 + 1] = g.end;
}
return result;
}
function prefix_match(){
if(partial) return accept(); else backtrack();
}
while(! quit){
var
op = prog[pc] & 0xff,
sarg = prog[pc] >> 8,
uarg = sarg & 0xff,
c = s[pos],
group;
pc++;
switch(op){
case opcodes.CHAR:
if(pos === s.length){prefix_match(); break;}
if(c === uarg) pos++; else backtrack();
break;
case opcodes.CHARNORM:
if(pos === s.length){prefix_match(); break;}
if(normtable.charCodeAt(c) === uarg) pos++; else backtrack();
break;
case opcodes.STRING:
for
(var arg = caml_jsbytes_of_string(cpool[uarg]), i = 0;
i < arg.length;
i++){
if(pos === s.length){prefix_match(); break;}
if(c === arg.charCodeAt(i))
c = s[++pos];
else{backtrack(); break;}
}
break;
case opcodes.STRINGNORM:
for
(var arg = caml_jsbytes_of_string(cpool[uarg]), i = 0;
i < arg.length;
i++){
if(pos === s.length){prefix_match(); break;}
if(normtable.charCodeAt(c) === arg.charCodeAt(i))
c = s[++pos];
else{backtrack(); break;}
}
break;
case opcodes.CHARCLASS:
if(pos === s.length){prefix_match(); break;}
if(in_bitset(cpool[uarg], c)) pos++; else backtrack();
break;
case opcodes.BOL:
if(pos > 0 && s[pos - 1] !== 10) backtrack(); break;
case opcodes.EOL:
if(pos < s.length && s[pos] !== 10) backtrack(); break;
case opcodes.WORDBOUNDARY:
if(pos === 0){
if(pos === s.length){prefix_match(); break;}
if(is_word_letter(s[0])) break;
backtrack();
}
else if(pos === s.length){
if(is_word_letter(s[pos - 1])) break;
backtrack();
}
else{
if(is_word_letter(s[pos - 1]) !== is_word_letter(s[pos])) break;
backtrack();
}
break;
case opcodes.BEGGROUP:
group = groups[uarg];
push({undo: {obj: group, prop: "start", value: group.start}});
group.start = pos;
break;
case opcodes.ENDGROUP:
group = groups[uarg];
push({undo: {obj: group, prop: "end", value: group.end}});
group.end = pos;
break;
case opcodes.REFGROUP:
group = groups[uarg];
if(group.start < 0 || group.end < 0){backtrack(); break;}
for(var i = group.start; i < group.end; i++){
if(pos === s.length){prefix_match(); break;}
if(s[i] !== s[pos]){backtrack(); break;}
pos++;
}
break;
case opcodes.SIMPLEOPT:
if(in_bitset(cpool[uarg], c)) pos++; break;
case opcodes.SIMPLESTAR:
while(in_bitset(cpool[uarg], c)) c = s[++pos]; break;
case opcodes.SIMPLEPLUS:
if(pos === s.length){prefix_match(); break;}
if(in_bitset(cpool[uarg], c))
do c = s[++pos];while(in_bitset(cpool[uarg], c));
else
backtrack();
break;
case opcodes.ACCEPT: return accept();
case opcodes.GOTO:
pc = pc + sarg; break;
case opcodes.PUSHBACK:
push({pos: {pc: pc + sarg, txt: pos}}); break;
case opcodes.SETMARK:
push
({undo: {obj: re_register, prop: uarg, value: re_register[uarg]}});
re_register[uarg] = pos;
break;
case opcodes.CHECKPROGRESS:
if(re_register[uarg] === pos) backtrack(); break;
default: throw new Error("Invalid bytecode");
}
}
return 0;
}
return re_match_impl;
}
();
function re_partial_match(re, s, pos){
if(pos < 0 || pos > caml_ml_string_length(s))
caml_invalid_argument("Str.partial_match");
var res = re_match(re, s, pos, 1);
return res ? res : [0];
}
function re_replacement_text(repl, groups, orig){
var
repl = caml_jsbytes_of_string(repl),
len = repl.length,
orig = caml_jsbytes_of_string(orig),
res = "",
n = 0,
cur,
start,
end,
c;
while(n < len){
cur = repl.charAt(n++);
if(cur !== "\\")
res += cur;
else{
if(n === len) caml_failwith("Str.replace: illegal backslash sequence");
cur = repl.charAt(n++);
switch(cur){
case "\\":
res += cur; break;
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
c = + cur;
if(c * 2 >= groups.length - 1)
caml_failwith("Str.replace: reference to unmatched group");
start = caml_array_get(groups, c * 2);
end = caml_array_get(groups, c * 2 + 1);
if(start === - 1)
caml_failwith("Str.replace: reference to unmatched group");
res += orig.slice(start, end);
break;
default: res += "\\" + cur;
}
}
}
return caml_string_of_jsbytes(res);
}
function re_search_backward(re, s, pos){
if(pos < 0 || pos > caml_ml_string_length(s))
caml_invalid_argument("Str.search_backward");
var startchars = re[6] | 0;
if(startchars >= 0){
startchars = re[2][startchars + 1];
var len = caml_ml_string_length(s);
do{
while
(pos > 0 && pos < len
&& caml_string_get(startchars, caml_string_get(s, pos)) === 0)
pos--;
var res = re_match(re, s, pos, 0);
if(res) return res;
pos--;
}
while
(pos >= 0);
}
else
do{var res = re_match(re, s, pos, 0); if(res) return res; pos--;}
while
(pos >= 0);
return [0];
}
function re_search_forward(re, s, pos){
if(pos < 0 || pos > caml_ml_string_length(s))
caml_invalid_argument("Str.search_forward");
var startchars = re[6] | 0, len = caml_ml_string_length(s);
if(startchars >= 0){
startchars = re[2][startchars + 1];
do{
while
(pos < len && caml_string_get(startchars, caml_string_get(s, pos)) === 0)
pos++;
var res = re_match(re, s, pos, 0);
if(res) return res;
pos++;
}
while
(pos <= len);
}
else
do{var res = re_match(re, s, pos, 0); if(res) return res; pos++;}
while
(pos <= len);
return [0];
}
function re_string_match(re, s, pos){
if(pos < 0 || pos > caml_ml_string_length(s))
caml_invalid_argument("Str.string_match");
var res = re_match(re, s, pos, 0);
return res ? res : [0];
}
function set_digit_nat(nat, ofs, digit){nat.data[ofs] = digit; return 0;}
function set_digit_nat_native(nat, ofs, digit){nat.data[ofs] = digit; return 0;
}
function square_nat(nat1, ofs1, len1, nat2, ofs2, len2){
var carry = 0;
carry += add_nat(nat1, ofs1, len1, nat1, ofs1, len1, 0);
carry += mult_nat(nat1, ofs1, len1, nat2, ofs2, len2, nat2, ofs2, len2);
return carry;
}
function unix_error_message(err){
const errno = typeof err === "number" ? err : - err[1];
return caml_string_of_jsstring(caml_strerror(errno));
}
function caml_setup_uncaught_exception_handler(){
var process = globalThis.process;
if(process?.on)
process.on
("uncaughtException",
function(err, origin){
caml_fatal_uncaught_exception(err);
process.exit(2);
});
else if(globalThis.addEventListener)
globalThis.addEventListener
("error",
function(event){
if(event.error) caml_fatal_uncaught_exception(event.error);
});
}
caml_setup_uncaught_exception_handler();
globalThis.jsoo_runtime =
{caml_blake2_string: caml_blake2_string,
caml_blake2_update: caml_blake2_update,
caml_blake2_final: caml_blake2_final,
caml_blake2_create: caml_blake2_create,
blake2b: blake2b,
caml_runtime_events_read_poll: caml_runtime_events_read_poll,
caml_runtime_events_free_cursor: caml_runtime_events_free_cursor,
caml_runtime_events_create_cursor: caml_runtime_events_create_cursor,
caml_ml_runtime_events_resume: caml_ml_runtime_events_resume,
caml_ml_runtime_events_are_active: caml_ml_runtime_events_are_active,
caml_ml_runtime_events_pause: caml_ml_runtime_events_pause,
caml_ml_runtime_events_start: caml_ml_runtime_events_start,
caml_runtime_events_user_resolve: caml_runtime_events_user_resolve,
caml_runtime_events_user_write: caml_runtime_events_user_write,
caml_runtime_events_user_register: caml_runtime_events_user_register,
caml_custom_event_index: caml_custom_event_index,
caml_zstd_initialize: caml_zstd_initialize,
caml_decompress_input: caml_decompress_input,
zstd_decompress: zstd_decompress,
jsoo_effect_not_supported: jsoo_effect_not_supported,
caml_ml_condition_signal: caml_ml_condition_signal,
caml_ml_condition_broadcast: caml_ml_condition_broadcast,
caml_ml_condition_wait: caml_ml_condition_wait,
caml_ml_condition_new: caml_ml_condition_new,
caml_get_continuation_callstack: caml_get_continuation_callstack,
caml_continuation_use_and_update_handler_noexc:
caml_continuation_use_and_update_handler_noexc,
caml_continuation_use_noexc: caml_continuation_use_noexc,
caml_alloc_stack: caml_alloc_stack,
caml_ml_mutex_unlock: caml_ml_mutex_unlock,
caml_ml_mutex_try_lock: caml_ml_mutex_try_lock,
caml_ml_mutex_lock: caml_ml_mutex_lock,
caml_ml_mutex_new: caml_ml_mutex_new,
MlMutex: MlMutex,
caml_lxm_next: caml_lxm_next,
caml_lxm_daba: caml_lxm_daba,
caml_lxm_M: caml_lxm_M,
caml_ml_domain_cpu_relax: caml_ml_domain_cpu_relax,
caml_ml_domain_id: caml_ml_domain_id,
caml_domain_spawn: caml_domain_spawn,
caml_domain_id: caml_domain_id,
caml_recommended_domain_count: caml_recommended_domain_count,
caml_atomic_make_contended: caml_atomic_make_contended,
caml_atomic_exchange: caml_atomic_exchange,
caml_atomic_fetch_add: caml_atomic_fetch_add,
caml_atomic_cas: caml_atomic_cas,
caml_atomic_load: caml_atomic_load,
caml_domain_dls_get: caml_domain_dls_get,
caml_domain_dls_compare_and_set: caml_domain_dls_compare_and_set,
caml_domain_dls_set: caml_domain_dls_set,
caml_domain_dls: caml_domain_dls,
caml_ephe_check_data: caml_ephe_check_data,
caml_ephe_unset_data: caml_ephe_unset_data,
caml_ephe_set_data_opt: caml_ephe_set_data_opt,
caml_ephe_set_data: caml_ephe_set_data,
caml_ephe_get_data_copy: caml_ephe_get_data_copy,
caml_ephe_get_data: caml_ephe_get_data,
caml_ephe_blit_data: caml_ephe_blit_data,
caml_ephe_blit_key: caml_ephe_blit_key,
caml_ephe_check_key: caml_ephe_check_key,
caml_ephe_get_key_copy: caml_ephe_get_key_copy,
caml_ephe_get_key: caml_ephe_get_key,
caml_weak_set: caml_weak_set,
caml_weak_create: caml_weak_create,
caml_ephe_create: caml_ephe_create,
caml_ephe_unset_key: caml_ephe_unset_key,
caml_ephe_set_key: caml_ephe_set_key,
caml_ephe_none: caml_ephe_none,
caml_ephe_data_offset: caml_ephe_data_offset,
caml_ephe_key_offset: caml_ephe_key_offset,
caml_raise_system_error: caml_raise_system_error,
caml_unix_inet_addr_of_string: caml_unix_inet_addr_of_string,
caml_unix_findclose: caml_unix_findclose,
caml_unix_findnext: caml_unix_findnext,
caml_unix_findfirst: caml_unix_findfirst,
caml_unix_rewinddir: caml_unix_rewinddir,
caml_unix_closedir: caml_unix_closedir,
caml_unix_readdir: caml_unix_readdir,
caml_unix_opendir: caml_unix_opendir,
caml_unix_has_symlink: caml_unix_has_symlink,
caml_unix_getpwnam: caml_unix_getpwnam,
caml_unix_getegid: caml_unix_getegid,
caml_unix_getgid: caml_unix_getgid,
caml_unix_geteuid: caml_unix_geteuid,
caml_unix_getuid: caml_unix_getuid,
caml_unix_outchannel_of_filedescr: caml_unix_outchannel_of_filedescr,
caml_unix_inchannel_of_filedescr: caml_unix_inchannel_of_filedescr,
caml_unix_close: caml_unix_close,
caml_unix_ftruncate_64: caml_unix_ftruncate_64,
caml_unix_ftruncate: caml_unix_ftruncate,
caml_unix_lseek_64: caml_unix_lseek_64,
caml_unix_lseek: caml_unix_lseek,
caml_unix_read_bigarray: caml_unix_read_bigarray,
caml_unix_read: caml_unix_read,
caml_unix_write_bigarray: caml_unix_write_bigarray,
caml_unix_single_write: caml_unix_single_write,
caml_unix_write: caml_unix_write,
caml_unix_fsync: caml_unix_fsync,
caml_unix_fchmod: caml_unix_fchmod,
caml_unix_fstat_64: caml_unix_fstat_64,
caml_unix_fstat: caml_unix_fstat,
caml_unix_lookup_file: caml_unix_lookup_file,
caml_unix_open: caml_unix_open,
caml_unix_access: caml_unix_access,
caml_unix_truncate_64: caml_unix_truncate_64,
caml_unix_truncate: caml_unix_truncate,
caml_unix_utimes: caml_unix_utimes,
caml_unix_unlink: caml_unix_unlink,
caml_unix_readlink: caml_unix_readlink,
caml_unix_symlink: caml_unix_symlink,
caml_unix_link: caml_unix_link,
caml_unix_rmdir: caml_unix_rmdir,
caml_unix_mkdir: caml_unix_mkdir,
caml_unix_rename: caml_unix_rename,
caml_unix_chmod: caml_unix_chmod,
caml_unix_lstat_64: caml_unix_lstat_64,
caml_unix_lstat: caml_unix_lstat,
caml_unix_stat_64: caml_unix_stat_64,
caml_unix_stat: caml_unix_stat,
caml_unix_chdir: caml_unix_chdir,
unix_error_message: unix_error_message,
caml_strerror: caml_strerror,
make_unix_err_args: make_unix_err_args,
unix_error: unix_error,
caml_unix_isatty: caml_unix_isatty,
caml_unix_filedescr_of_fd: caml_unix_filedescr_of_fd,
caml_unix_cleanup: caml_unix_cleanup,
caml_unix_startup: caml_unix_startup,
caml_unix_mktime: caml_unix_mktime,
caml_unix_localtime: caml_unix_localtime,
caml_unix_gmtime: caml_unix_gmtime,
caml_unix_times: caml_unix_times,
caml_unix_time: caml_unix_time,
caml_unix_gettimeofday: caml_unix_gettimeofday,
re_replacement_text: re_replacement_text,
re_partial_match: re_partial_match,
re_string_match: re_string_match,
re_search_backward: re_search_backward,
re_search_forward: re_search_forward,
re_match: re_match,
caml_io_buffer_size: caml_io_buffer_size,
caml_sys_is_regular_file: caml_sys_is_regular_file,
caml_xdg_defaults: caml_xdg_defaults,
caml_sys_const_naked_pointers_checked:
caml_sys_const_naked_pointers_checked,
caml_ml_runtime_warnings_enabled: caml_ml_runtime_warnings_enabled,
caml_ml_enable_runtime_warnings: caml_ml_enable_runtime_warnings,
caml_runtime_warnings: caml_runtime_warnings,
caml_install_signal_handler: caml_install_signal_handler,
caml_runtime_parameters: caml_runtime_parameters,
caml_runtime_variant: caml_runtime_variant,
caml_sys_isatty: caml_sys_isatty,
caml_sys_get_config: caml_sys_get_config,
os_type: os_type,
caml_sys_const_backend_type: caml_sys_const_backend_type,
caml_sys_const_ostype_cygwin: caml_sys_const_ostype_cygwin,
caml_sys_const_ostype_win32: caml_sys_const_ostype_win32,
caml_sys_const_ostype_unix: caml_sys_const_ostype_unix,
caml_sys_const_max_wosize: caml_sys_const_max_wosize,
caml_sys_const_int_size: caml_sys_const_int_size,
caml_sys_const_word_size: caml_sys_const_word_size,
caml_sys_const_big_endian: caml_sys_const_big_endian,
caml_sys_random_seed: caml_sys_random_seed,
caml_sys_time_include_children: caml_sys_time_include_children,
caml_sys_time: caml_sys_time,
caml_sys_system_command: caml_sys_system_command,
caml_sys_executable_name: caml_sys_executable_name,
caml_sys_modify_argv: caml_sys_modify_argv,
caml_sys_argv: caml_sys_argv,
caml_sys_get_argv: caml_sys_get_argv,
caml_executable_name: caml_executable_name,
caml_argv: caml_argv,
caml_sys_unsafe_getenv: caml_sys_unsafe_getenv,
caml_sys_getenv: caml_sys_getenv,
jsoo_sys_getenv: jsoo_sys_getenv,
caml_set_static_env: caml_set_static_env,
jsoo_static_env: jsoo_static_env,
caml_fatal_uncaught_exception: caml_fatal_uncaught_exception,
caml_format_exception: caml_format_exception,
caml_is_special_exception: caml_is_special_exception,
caml_sys_exit: caml_sys_exit,
caml_raise_sys_error: caml_raise_sys_error,
caml_maybe_print_stats: caml_maybe_print_stats,
caml_is_printable: caml_is_printable,
caml_get_global_data: caml_get_global_data,
caml_register_global: caml_register_global,
jsoo_toplevel_reloc: jsoo_toplevel_reloc,
caml_build_symbols: caml_build_symbols,
caml_global_data: caml_global_data,
caml_named_value: caml_named_value,
caml_register_named_value: caml_register_named_value,
caml_named_values: caml_named_values,
caml_call_gen: caml_call_gen,
caml_set_parser_trace: caml_set_parser_trace,
caml_parse_engine: caml_parse_engine,
caml_parser_trace: caml_parser_trace,
caml_custom_identifier: caml_custom_identifier,
caml_is_continuation_tag: caml_is_continuation_tag,
caml_lazy_read_result: caml_lazy_read_result,
caml_lazy_reset_to_lazy: caml_lazy_reset_to_lazy,
caml_lazy_update_to_forward: caml_lazy_update_to_forward,
caml_lazy_update_to_forcing: caml_lazy_update_to_forcing,
caml_obj_update_tag: caml_obj_update_tag,
caml_obj_add_offset: caml_obj_add_offset,
caml_obj_reachable_words: caml_obj_reachable_words,
caml_obj_set_raw_field: caml_obj_set_raw_field,
caml_obj_raw_field: caml_obj_raw_field,
caml_fresh_oo_id: caml_fresh_oo_id,
caml_set_oo_id: caml_set_oo_id,
caml_oo_last_id: caml_oo_last_id,
caml_get_public_method: caml_get_public_method,
caml_get_cached_method: caml_get_cached_method,
caml_oo_cache_id: caml_oo_cache_id,
caml_method_cache: caml_method_cache,
caml_lazy_make_forward: caml_lazy_make_forward,
caml_obj_is_shared: caml_obj_is_shared,
caml_obj_compare_and_swap: caml_obj_compare_and_swap,
caml_obj_dup: caml_obj_dup,
caml_obj_with_tag: caml_obj_with_tag,
caml_obj_block: caml_obj_block,
caml_obj_tag: caml_obj_tag,
caml_alloc_dummy_infix: caml_alloc_dummy_infix,
caml_update_dummy: caml_update_dummy,
deserialize_nat: deserialize_nat,
serialize_nat: serialize_nat,
lxor_digit_nat: lxor_digit_nat,
lor_digit_nat: lor_digit_nat,
land_digit_nat: land_digit_nat,
compare_nat: compare_nat,
compare_digits_nat: compare_digits_nat,
shift_right_nat: shift_right_nat,
div_nat: div_nat,
div_digit_nat: div_digit_nat,
div_helper: div_helper,
shift_left_nat: shift_left_nat,
square_nat: square_nat,
mult_nat: mult_nat,
mult_digit_nat: mult_digit_nat,
sub_nat: sub_nat,
decr_nat: decr_nat,
complement_nat: complement_nat,
add_nat: add_nat,
incr_nat: incr_nat,
is_digit_odd: is_digit_odd,
is_digit_normalized: is_digit_normalized,
is_digit_zero: is_digit_zero,
is_digit_int: is_digit_int,
num_leading_zero_bits_in_digit: num_leading_zero_bits_in_digit,
num_digits_nat: num_digits_nat,
nth_digit_nat_native: nth_digit_nat_native,
set_digit_nat_native: set_digit_nat_native,
nth_digit_nat: nth_digit_nat,
set_digit_nat: set_digit_nat,
blit_nat: blit_nat,
set_to_zero_nat: set_to_zero_nat,
create_nat: create_nat,
nat_of_array: nat_of_array,
length_nat: length_nat,
caml_hash_nat: caml_hash_nat,
MlNat: MlNat,
initialize_nat: initialize_nat,
caml_new_string: caml_new_string,
caml_array_of_bytes: caml_array_of_bytes,
caml_array_of_string: caml_array_of_string,
caml_js_to_string: caml_js_to_string,
caml_to_js_string: caml_to_js_string,
caml_js_from_string: caml_js_from_string,
caml_js_to_byte_string: caml_js_to_byte_string,
caml_is_ml_string: caml_is_ml_string,
caml_ml_bytes_content: caml_ml_bytes_content,
caml_is_ml_bytes: caml_is_ml_bytes,
caml_bytes_of_jsbytes: caml_bytes_of_jsbytes,
caml_string_of_jsstring: caml_string_of_jsstring,
caml_jsstring_of_string: caml_jsstring_of_string,
jsoo_text_decoder_buff: jsoo_text_decoder_buff,
caml_jsbytes_of_string: caml_jsbytes_of_string,
caml_string_of_jsbytes: caml_string_of_jsbytes,
caml_bytes_of_string: caml_bytes_of_string,
caml_string_of_bytes: caml_string_of_bytes,
caml_string_lessthan: caml_string_lessthan,
caml_string_lessequal: caml_string_lessequal,
caml_string_equal: caml_string_equal,
caml_string_compare: caml_string_compare,
caml_ml_string_length: caml_ml_string_length,
caml_string_unsafe_get: caml_string_unsafe_get,
caml_string_concat: caml_string_concat,
caml_ml_bytes_length: caml_ml_bytes_length,
caml_blit_string: caml_blit_string,
caml_blit_bytes: caml_blit_bytes,
caml_fill_bytes: caml_fill_bytes,
caml_bytes_greaterthan: caml_bytes_greaterthan,
caml_string_greaterthan: caml_string_greaterthan,
caml_bytes_greaterequal: caml_bytes_greaterequal,
caml_string_greaterequal: caml_string_greaterequal,
caml_bytes_lessthan: caml_bytes_lessthan,
caml_bytes_lessequal: caml_bytes_lessequal,
caml_bytes_notequal: caml_bytes_notequal,
caml_string_notequal: caml_string_notequal,
caml_bytes_equal: caml_bytes_equal,
caml_bytes_compare: caml_bytes_compare,
caml_bytes_of_uint8_array: caml_bytes_of_uint8_array,
caml_bytes_of_array: caml_bytes_of_array,
caml_string_of_uint8_array: caml_string_of_uint8_array,
caml_string_of_array: caml_string_of_array,
caml_create_bytes: caml_create_bytes,
caml_create_string: caml_create_string,
caml_uint8_array_of_string: caml_uint8_array_of_string,
caml_uint8_array_of_bytes: caml_uint8_array_of_bytes,
caml_convert_bytes_to_array: caml_convert_bytes_to_array,
caml_convert_string_to_bytes: caml_convert_string_to_bytes,
MlBytes: MlBytes,
caml_bytes_of_utf16_jsstring: caml_bytes_of_utf16_jsstring,
jsoo_text_decoder: jsoo_text_decoder,
jsoo_text_encoder: jsoo_text_encoder,
caml_bytes_set: caml_bytes_set,
caml_bytes_set64: caml_bytes_set64,
caml_bytes_set32: caml_bytes_set32,
caml_bytes_set16: caml_bytes_set16,
caml_string_set: caml_string_set,
caml_bytes_get: caml_bytes_get,
caml_bytes_get64: caml_bytes_get64,
caml_string_get64: caml_string_get64,
caml_bytes_get32: caml_bytes_get32,
caml_string_get32: caml_string_get32,
caml_bytes_get16: caml_bytes_get16,
caml_string_get16: caml_string_get16,
caml_string_get: caml_string_get,
caml_bytes_bound_error: caml_bytes_bound_error,
caml_string_bound_error: caml_string_bound_error,
caml_bytes_unsafe_set: caml_bytes_unsafe_set,
caml_bytes_unsafe_get: caml_bytes_unsafe_get,
jsoo_is_ascii: jsoo_is_ascii,
caml_sub_uint8_array_to_jsbytes: caml_sub_uint8_array_to_jsbytes,
caml_subarray_to_jsbytes: caml_subarray_to_jsbytes,
caml_str_repeat: caml_str_repeat,
caml_md5_bytes: caml_md5_bytes,
caml_MD5Final: caml_MD5Final,
caml_MD5Update: caml_MD5Update,
caml_MD5Init: caml_MD5Init,
caml_MD5Transform: caml_MD5Transform,
caml_md5_string: caml_md5_string,
caml_md5_chan: caml_md5_chan,
caml_output_value_to_buffer: caml_output_value_to_buffer,
caml_output_value_to_bytes: caml_output_value_to_bytes,
caml_output_value_to_string: caml_output_value_to_string,
caml_output_val: caml_output_val,
MlObjectTable: MlObjectTable,
caml_marshal_data_size: caml_marshal_data_size,
caml_marshal_header_size: caml_marshal_header_size,
caml_input_value_from_reader: caml_input_value_from_reader,
caml_custom_ops: caml_custom_ops,
caml_nativeint_unmarshal: caml_nativeint_unmarshal,
caml_int32_unmarshal: caml_int32_unmarshal,
caml_int64_marshal: caml_int64_marshal,
caml_int64_unmarshal: caml_int64_unmarshal,
caml_input_value_from_bytes: caml_input_value_from_bytes,
caml_float_of_bytes: caml_float_of_bytes,
JsStringReader: JsStringReader,
UInt8ArrayReader: UInt8ArrayReader,
caml_marshal_constants: caml_marshal_constants,
caml_new_lex_engine: caml_new_lex_engine,
caml_lex_engine: caml_lex_engine,
caml_lex_array: caml_lex_array,
caml_js_error_of_exception: caml_js_error_of_exception,
caml_xmlhttprequest_create: caml_xmlhttprequest_create,
caml_js_get_console: caml_js_get_console,
caml_js_html_entities: caml_js_html_entities,
caml_js_html_escape: caml_js_html_escape,
caml_js_object: caml_js_object,
caml_pure_js_expr: caml_pure_js_expr,
caml_js_expr: caml_js_expr,
caml_js_eval_string: caml_js_eval_string,
caml_js_strict_equals: caml_js_strict_equals,
caml_js_equals: caml_js_equals,
caml_js_function_arity: caml_js_function_arity,
caml_js_wrap_meth_callback_unsafe: caml_js_wrap_meth_callback_unsafe,
caml_js_wrap_meth_callback_strict: caml_js_wrap_meth_callback_strict,
caml_js_wrap_meth_callback_arguments:
caml_js_wrap_meth_callback_arguments,
caml_js_wrap_meth_callback: caml_js_wrap_meth_callback,
caml_js_wrap_callback_unsafe: caml_js_wrap_callback_unsafe,
caml_js_wrap_callback_strict: caml_js_wrap_callback_strict,
caml_js_wrap_callback_arguments: caml_js_wrap_callback_arguments,
caml_js_wrap_callback: caml_js_wrap_callback,
caml_ojs_new_arr: caml_ojs_new_arr,
caml_js_new: caml_js_new,
caml_js_meth_call: caml_js_meth_call,
caml_js_fun_call: caml_js_fun_call,
caml_js_call: caml_js_call,
caml_js_var: caml_js_var,
caml_list_to_js_array: caml_list_to_js_array,
caml_list_of_js_array: caml_list_of_js_array,
caml_js_to_array: caml_js_to_array,
caml_js_from_array: caml_js_from_array,
caml_js_to_int32: caml_js_to_int32,
caml_js_to_float: caml_js_to_float,
caml_js_from_float: caml_js_from_float,
caml_js_to_bool: caml_js_to_bool,
caml_js_from_bool: caml_js_from_bool,
caml_throw_js_exception: caml_throw_js_exception,
caml_js_error_option_of_exception: caml_js_error_option_of_exception,
caml_exn_with_js_backtrace: caml_exn_with_js_backtrace,
caml_maybe_attach_backtrace: caml_maybe_attach_backtrace,
caml_wrap_exception: caml_wrap_exception,
caml_jsoo_flags_effects: caml_jsoo_flags_effects,
caml_jsoo_flags_use_js_string: caml_jsoo_flags_use_js_string,
caml_is_js: caml_is_js,
caml_callback: caml_callback,
caml_trampoline_return: caml_trampoline_return,
caml_trampoline: caml_trampoline,
caml_js_typeof: caml_js_typeof,
caml_js_instanceof: caml_js_instanceof,
caml_js_delete: caml_js_delete,
caml_js_get: caml_js_get,
caml_js_set: caml_js_set,
caml_js_pure_expr: caml_js_pure_expr,
caml_ml_set_buffered: caml_ml_set_buffered,
caml_ml_is_buffered: caml_ml_is_buffered,
caml_ml_output_int: caml_ml_output_int,
caml_ml_pos_out_64: caml_ml_pos_out_64,
caml_ml_pos_out: caml_ml_pos_out,
caml_pos_out: caml_pos_out,
caml_ml_seek_out_64: caml_ml_seek_out_64,
caml_ml_seek_out: caml_ml_seek_out,
caml_seek_out: caml_seek_out,
caml_output_value: caml_output_value,
caml_ml_output_char: caml_ml_output_char,
caml_ml_output: caml_ml_output,
caml_ml_output_bigarray: caml_ml_output_bigarray,
caml_ml_output_bytes: caml_ml_output_bytes,
caml_ml_output_ta: caml_ml_output_ta,
caml_ml_flush: caml_ml_flush,
caml_ml_input_scan_line: caml_ml_input_scan_line,
caml_ml_pos_in_64: caml_ml_pos_in_64,
caml_ml_pos_in: caml_ml_pos_in,
caml_pos_in: caml_pos_in,
caml_ml_seek_in_64: caml_ml_seek_in_64,
caml_ml_seek_in: caml_ml_seek_in,
caml_seek_in: caml_seek_in,
caml_ml_input_int: caml_ml_input_int,
caml_ml_input_char: caml_ml_input_char,
caml_input_value_to_outside_heap: caml_input_value_to_outside_heap,
caml_input_value: caml_input_value,
caml_ml_input_block: caml_ml_input_block,
caml_ml_input_bigarray: caml_ml_input_bigarray,
caml_ml_input: caml_ml_input,
caml_refill: caml_refill,
caml_ml_set_channel_refill: caml_ml_set_channel_refill,
caml_ml_set_channel_output: caml_ml_set_channel_output,
caml_ml_channel_size_64: caml_ml_channel_size_64,
caml_ml_channel_size: caml_ml_channel_size,
caml_ml_close_channel: caml_ml_close_channel,
caml_ml_is_binary_mode: caml_ml_is_binary_mode,
caml_ml_set_binary_mode: caml_ml_set_binary_mode,
caml_channel_descriptor: caml_channel_descriptor,
caml_ml_open_descriptor_out_with_flags:
caml_ml_open_descriptor_out_with_flags,
caml_ml_open_descriptor_in_with_flags:
caml_ml_open_descriptor_in_with_flags,
caml_ml_open_descriptor_in: caml_ml_open_descriptor_in,
caml_ml_open_descriptor_out: caml_ml_open_descriptor_out,
caml_ml_out_channels_list: caml_ml_out_channels_list,
caml_ml_channel_restore: caml_ml_channel_restore,
caml_ml_channel_redirect: caml_ml_channel_redirect,
caml_ml_channel_get: caml_ml_channel_get,
caml_ml_channels: caml_ml_channels,
caml_ml_set_channel_name: caml_ml_set_channel_name,
caml_sys_open: caml_sys_open,
MlChanid: MlChanid,
caml_sys_close: caml_sys_close,
caml_sys_fds: caml_sys_fds,
caml_int64_bswap: caml_int64_bswap,
caml_int32_bswap: caml_int32_bswap,
caml_bswap16: caml_bswap16,
caml_mod: caml_mod,
caml_div: caml_div,
caml_mul: caml_mul,
caml_int_of_string: caml_int_of_string,
caml_parse_digit: caml_parse_digit,
caml_parse_sign_and_base: caml_parse_sign_and_base,
caml_format_int: caml_format_int,
caml_int64_hash: caml_int64_hash,
caml_int64_to_bytes: caml_int64_to_bytes,
caml_int64_of_bytes: caml_int64_of_bytes,
caml_int64_hi32: caml_int64_hi32,
caml_int64_lo32: caml_int64_lo32,
caml_int64_create_lo_hi: caml_int64_create_lo_hi,
caml_int64_create_lo_mi_hi: caml_int64_create_lo_mi_hi,
caml_int64_of_string: caml_int64_of_string,
caml_int64_format: caml_int64_format,
caml_int64_of_float: caml_int64_of_float,
caml_int64_to_float: caml_int64_to_float,
caml_int64_to_int32: caml_int64_to_int32,
caml_int64_of_int32: caml_int64_of_int32,
caml_int64_mod: caml_int64_mod,
caml_int64_div: caml_int64_div,
caml_int64_shift_right: caml_int64_shift_right,
caml_int64_shift_right_unsigned: caml_int64_shift_right_unsigned,
caml_int64_shift_left: caml_int64_shift_left,
caml_int64_xor: caml_int64_xor,
caml_int64_or: caml_int64_or,
caml_int64_and: caml_int64_and,
caml_int64_is_negative: caml_int64_is_negative,
caml_int64_is_zero: caml_int64_is_zero,
caml_int64_mul: caml_int64_mul,
caml_int64_sub: caml_int64_sub,
caml_int64_add: caml_int64_add,
caml_int64_neg: caml_int64_neg,
caml_int64_compare: caml_int64_compare,
caml_int64_ult: caml_int64_ult,
MlInt64: MlInt64,
caml_int64_offset: caml_int64_offset,
caml_float_of_string: caml_float_of_string,
caml_format_float: caml_format_float,
caml_fma_float: caml_fma_float,
caml_erfc_float: caml_erfc_float,
caml_erf_float: caml_erf_float,
caml_cbrt_float: caml_cbrt_float,
caml_round_float: caml_round_float,
caml_atanh_float: caml_atanh_float,
caml_tanh_float: caml_tanh_float,
caml_asinh_float: caml_asinh_float,
caml_sinh_float: caml_sinh_float,
caml_acosh_float: caml_acosh_float,
caml_cosh_float: caml_cosh_float,
caml_log10_float: caml_log10_float,
caml_hypot_float: caml_hypot_float,
caml_log2_float: caml_log2_float,
caml_log1p_float: caml_log1p_float,
caml_exp2_float: caml_exp2_float,
caml_expm1_float: caml_expm1_float,
caml_signbit_float: caml_signbit_float,
caml_copysign_float: caml_copysign_float,
caml_float_compare: caml_float_compare,
caml_frexp_float: caml_frexp_float,
caml_ldexp_float: caml_ldexp_float,
caml_modf_float: caml_modf_float,
caml_classify_float: caml_classify_float,
caml_int32_float_of_bits: caml_int32_float_of_bits,
caml_trunc_float: caml_trunc_float,
caml_nextafter_float: caml_nextafter_float,
caml_int64_float_of_bits: caml_int64_float_of_bits,
caml_hexstring_of_float: caml_hexstring_of_float,
caml_int32_bits_of_float: caml_int32_bits_of_float,
caml_int64_bits_of_float: caml_int64_bits_of_float,
jsoo_dataview: jsoo_dataview,
caml_string_hash: caml_string_hash,
caml_hash: caml_hash,
caml_hash_mix_string: caml_hash_mix_string,
caml_hash_mix_bytes: caml_hash_mix_bytes,
caml_hash_mix_bytes_arr: caml_hash_mix_bytes_arr,
caml_hash_mix_jsbytes: caml_hash_mix_jsbytes,
caml_hash_mix_int64: caml_hash_mix_int64,
caml_hash_mix_float: caml_hash_mix_float,
caml_hash_mix_final: caml_hash_mix_final,
caml_hash_mix_int: caml_hash_mix_int,
caml_gr_close_subwindow: caml_gr_close_subwindow,
caml_gr_open_subwindow: caml_gr_open_subwindow,
caml_gr_window_id: caml_gr_window_id,
caml_gr_display_mode: caml_gr_display_mode,
caml_gr_remember_mode: caml_gr_remember_mode,
caml_gr_synchronize: caml_gr_synchronize,
caml_gr_wait_event: caml_gr_wait_event,
caml_gr_sigio_signal: caml_gr_sigio_signal,
caml_gr_sigio_handler: caml_gr_sigio_handler,
caml_gr_blit_image: caml_gr_blit_image,
caml_gr_create_image: caml_gr_create_image,
caml_gr_draw_image: caml_gr_draw_image,
caml_gr_dump_image: caml_gr_dump_image,
caml_gr_make_image: caml_gr_make_image,
caml_gr_text_size: caml_gr_text_size,
caml_gr_set_text_size: caml_gr_set_text_size,
caml_gr_set_font: caml_gr_set_font,
caml_gr_draw_string: caml_gr_draw_string,
caml_gr_draw_char: caml_gr_draw_char,
caml_gr_draw_str: caml_gr_draw_str,
caml_gr_fill_arc: caml_gr_fill_arc,
caml_gr_fill_poly: caml_gr_fill_poly,
caml_gr_fill_rect: caml_gr_fill_rect,
caml_gr_set_line_width: caml_gr_set_line_width,
caml_gr_draw_arc: caml_gr_draw_arc,
caml_gr_arc_aux: caml_gr_arc_aux,
caml_gr_draw_rect: caml_gr_draw_rect,
caml_gr_lineto: caml_gr_lineto,
caml_gr_current_y: caml_gr_current_y,
caml_gr_current_x: caml_gr_current_x,
caml_gr_moveto: caml_gr_moveto,
caml_gr_point_color: caml_gr_point_color,
caml_gr_plot: caml_gr_plot,
caml_gr_set_color: caml_gr_set_color,
caml_gr_size_y: caml_gr_size_y,
caml_gr_size_x: caml_gr_size_x,
caml_gr_clear_graph: caml_gr_clear_graph,
caml_gr_resize_window: caml_gr_resize_window,
caml_gr_set_window_title: caml_gr_set_window_title,
caml_gr_close_graph: caml_gr_close_graph,
caml_gr_doc_of_state: caml_gr_doc_of_state,
caml_gr_state_create: caml_gr_state_create,
caml_gr_state_init: caml_gr_state_init,
caml_gr_open_graph: caml_gr_open_graph,
caml_gr_state_set: caml_gr_state_set,
caml_gr_state_get: caml_gr_state_get,
caml_gr_state: caml_gr_state,
caml_get_minor_free: caml_get_minor_free,
caml_gc_minor_words: caml_gc_minor_words,
caml_gc_major_slice: caml_gc_major_slice,
caml_memprof_discard: caml_memprof_discard,
caml_memprof_stop: caml_memprof_stop,
caml_memprof_start: caml_memprof_start,
caml_final_release: caml_final_release,
caml_final_register_called_without_value:
caml_final_register_called_without_value,
caml_final_register: caml_final_register,
caml_gc_get: caml_gc_get,
caml_gc_set: caml_gc_set,
caml_gc_stat: caml_gc_stat,
caml_gc_quick_stat: caml_gc_quick_stat,
caml_gc_counters: caml_gc_counters,
caml_gc_compaction: caml_gc_compaction,
caml_gc_full_major: caml_gc_full_major,
caml_gc_major: caml_gc_major,
caml_gc_minor: caml_gc_minor,
caml_raise_nodejs_error: caml_raise_nodejs_error,
caml_sys_open_for_node: caml_sys_open_for_node,
MlNodeFd: MlNodeFd,
ocaml_stats_from_node_stats: ocaml_stats_from_node_stats,
MlNodeDevice: MlNodeDevice,
fs_node_supported: fs_node_supported,
jsoo_is_win32: jsoo_is_win32,
MlFakeFd: MlFakeFd,
MlFakeFd_out: MlFakeFd_out,
MlFakeFile: MlFakeFile,
MlFakeDevice: MlFakeDevice,
caml_read_file_content: caml_read_file_content,
jsoo_create_file: jsoo_create_file,
caml_create_file: caml_create_file,
caml_fs_init: caml_fs_init,
jsoo_create_file_extern: jsoo_create_file_extern,
caml_ba_map_file_bytecode: caml_ba_map_file_bytecode,
caml_ba_map_file: caml_ba_map_file,
caml_sys_rmdir: caml_sys_rmdir,
caml_sys_mkdir: caml_sys_mkdir,
caml_sys_rename: caml_sys_rename,
caml_sys_is_directory: caml_sys_is_directory,
caml_sys_remove: caml_sys_remove,
caml_sys_read_directory: caml_sys_read_directory,
caml_sys_file_exists: caml_sys_file_exists,
caml_raise_no_such_file: caml_raise_no_such_file,
caml_sys_chdir: caml_sys_chdir,
caml_sys_getcwd: caml_sys_getcwd,
caml_unmount: caml_unmount,
caml_mount_autoload: caml_mount_autoload,
resolve_fs_device: resolve_fs_device,
caml_list_mount_point: caml_list_mount_point,
jsoo_mount_point: jsoo_mount_point,
caml_make_path: caml_make_path,
path_is_absolute: path_is_absolute,
MlFile: MlFile,
caml_root: caml_root,
caml_get_root: caml_get_root,
caml_current_dir: caml_current_dir,
caml_trailing_slash: caml_trailing_slash,
caml_finish_formatting: caml_finish_formatting,
caml_parse_format: caml_parse_format,
caml_array_bound_error: caml_array_bound_error,
caml_raise_not_found: caml_raise_not_found,
caml_raise_zero_divide: caml_raise_zero_divide,
caml_raise_end_of_file: caml_raise_end_of_file,
caml_invalid_argument: caml_invalid_argument,
caml_failwith: caml_failwith,
caml_raise_with_string: caml_raise_with_string,
caml_raise_with_args: caml_raise_with_args,
caml_raise_with_arg: caml_raise_with_arg,
caml_raise_constant: caml_raise_constant,
caml_lessthan: caml_lessthan,
caml_lessequal: caml_lessequal,
caml_greaterthan: caml_greaterthan,
caml_greaterequal: caml_greaterequal,
caml_notequal: caml_notequal,
caml_equal: caml_equal,
caml_int_compare: caml_int_compare,
caml_compare: caml_compare,
caml_compare_val: caml_compare_val,
caml_compare_val_number_custom: caml_compare_val_number_custom,
caml_compare_val_get_custom: caml_compare_val_get_custom,
caml_compare_val_tag: caml_compare_val_tag,
caml_bigstring_blit_ba_to_bytes: caml_bigstring_blit_ba_to_bytes,
caml_bigstring_blit_bytes_to_ba: caml_bigstring_blit_bytes_to_ba,
caml_bigstring_blit_string_to_ba: caml_bigstring_blit_string_to_ba,
caml_bigstring_blit_ba_to_ba: caml_bigstring_blit_ba_to_ba,
caml_bigstring_memcmp: caml_bigstring_memcmp,
bigstring_of_typed_array: bigstring_of_typed_array,
bigstring_of_array_buffer: bigstring_of_array_buffer,
bigstring_to_typed_array: bigstring_to_typed_array,
bigstring_to_array_buffer: bigstring_to_array_buffer,
caml_hash_mix_bigstring: caml_hash_mix_bigstring,
caml_ba_from_typed_array: caml_ba_from_typed_array,
caml_ba_kind_of_typed_array: caml_ba_kind_of_typed_array,
caml_ba_to_typed_array: caml_ba_to_typed_array,
caml_hash_mix_float32: caml_hash_mix_float32,
caml_hash_mix_float16: caml_hash_mix_float16,
caml_ba_hash: caml_ba_hash,
caml_ba_create_from: caml_ba_create_from,
caml_ba_deserialize: caml_ba_deserialize,
caml_ba_serialize: caml_ba_serialize,
caml_ba_reshape: caml_ba_reshape,
caml_ba_slice: caml_ba_slice,
caml_ba_sub: caml_ba_sub,
caml_ba_blit: caml_ba_blit,
caml_ba_fill: caml_ba_fill,
caml_ba_set_3: caml_ba_set_3,
caml_ba_set_2: caml_ba_set_2,
caml_ba_set_1: caml_ba_set_1,
caml_ba_uint8_set64: caml_ba_uint8_set64,
caml_ba_uint8_set32: caml_ba_uint8_set32,
caml_ba_uint8_set16: caml_ba_uint8_set16,
caml_ba_set_generic: caml_ba_set_generic,
caml_ba_get_3: caml_ba_get_3,
caml_ba_get_2: caml_ba_get_2,
caml_ba_get_1: caml_ba_get_1,
caml_ba_uint8_get64: caml_ba_uint8_get64,
caml_ba_uint8_get32: caml_ba_uint8_get32,
caml_ba_uint8_get16: caml_ba_uint8_get16,
caml_ba_get_generic: caml_ba_get_generic,
caml_ba_dim_3: caml_ba_dim_3,
caml_ba_dim_2: caml_ba_dim_2,
caml_ba_dim_1: caml_ba_dim_1,
caml_ba_dim: caml_ba_dim,
caml_ba_num_dims: caml_ba_num_dims,
caml_ba_layout: caml_ba_layout,
caml_ba_kind: caml_ba_kind,
caml_ba_change_layout: caml_ba_change_layout,
caml_ba_create: caml_ba_create,
caml_ba_create_unsafe: caml_ba_create_unsafe,
caml_ba_compare: caml_ba_compare,
Ml_Bigarray_c_1_1: Ml_Bigarray_c_1_1,
Ml_Bigarray: Ml_Bigarray,
caml_ba_custom_name: caml_ba_custom_name,
caml_ba_create_buffer: caml_ba_create_buffer,
caml_ba_get_size_per_element: caml_ba_get_size_per_element,
caml_packFloat16: caml_packFloat16,
caml_unpackFloat16: caml_unpackFloat16,
caml_ba_get_size: caml_ba_get_size,
caml_ba_init: caml_ba_init,
caml_convert_raw_backtrace_slot: caml_convert_raw_backtrace_slot,
caml_get_current_callstack: caml_get_current_callstack,
caml_restore_raw_backtrace: caml_restore_raw_backtrace,
caml_raw_backtrace_slot: caml_raw_backtrace_slot,
caml_raw_backtrace_next_slot: caml_raw_backtrace_next_slot,
caml_raw_backtrace_length: caml_raw_backtrace_length,
caml_convert_raw_backtrace: caml_convert_raw_backtrace,
caml_record_backtrace: caml_record_backtrace,
caml_get_exception_raw_backtrace: caml_get_exception_raw_backtrace,
caml_get_exception_backtrace: caml_get_exception_backtrace,
caml_backtrace_status: caml_backtrace_status,
caml_ml_debug_info_status: caml_ml_debug_info_status,
caml_record_backtrace_runtime_flag: caml_record_backtrace_runtime_flag,
caml_record_backtrace_env_flag: caml_record_backtrace_env_flag,
caml_floatarray_create: caml_floatarray_create,
caml_make_float_vect: caml_make_float_vect,
caml_make_vect: caml_make_vect,
caml_array_make: caml_array_make,
caml_check_bound: caml_check_bound,
caml_array_fill: caml_array_fill,
caml_array_get: caml_array_get,
caml_array_set: caml_array_set,
caml_floatarray_blit: caml_floatarray_blit,
caml_array_blit: caml_array_blit,
caml_array_concat: caml_array_concat,
caml_array_append: caml_array_append,
caml_array_sub: caml_array_sub};
caml_fs_init();
var cst_Out_of_memory = "Out_of_memory";
caml_register_global(0, [248, cst_Out_of_memory, -1], cst_Out_of_memory);
var cst_Sys_error = "Sys_error";
caml_register_global(1, [248, cst_Sys_error, -2], cst_Sys_error);
var cst_Failure = "Failure";
caml_register_global(2, [248, cst_Failure, -3], cst_Failure);
var cst_Invalid_argument = "Invalid_argument";
caml_register_global
(3, [248, cst_Invalid_argument, -4], cst_Invalid_argument);
var cst_End_of_file = "End_of_file";
caml_register_global(4, [248, cst_End_of_file, -5], cst_End_of_file);
var cst_Division_by_zero = "Division_by_zero";
caml_register_global
(5, [248, cst_Division_by_zero, -6], cst_Division_by_zero);
var cst_Not_found = "Not_found";
caml_register_global(6, [248, cst_Not_found, -7], cst_Not_found);
var cst_Match_failure = "Match_failure";
caml_register_global(7, [248, cst_Match_failure, -8], cst_Match_failure);
var cst_Stack_overflow = "Stack_overflow";
caml_register_global(8, [248, cst_Stack_overflow, -9], cst_Stack_overflow);
var cst_Sys_blocked_io = "Sys_blocked_io";
caml_register_global(9, [248, cst_Sys_blocked_io, -10], cst_Sys_blocked_io);
var cst_Assert_failure = "Assert_failure";
caml_register_global
(10, [248, cst_Assert_failure, -11], cst_Assert_failure);
var cst_Undefined_recursive_module = "Undefined_recursive_module";
caml_register_global
(11,
[248, cst_Undefined_recursive_module, -12],
cst_Undefined_recursive_module);
return;
}
(globalThis));
(function(a){"use strict";var
i=a.jsoo_runtime,c=i.caml_get_global_data(),d7="caml_unix_stat_64",d6="unix_lseek",l="caml_unix_inchannel_of_filedescr",d4="caml_unix_stat",d3="caml_unix_write_bigarray",fK="caml_nativeint_format",bh="caml_int64_of_nativeint",d2="caml_unix_closedir",bg="caml_unix_getgrnam",cB="caml_unix_truncate",cA="caml_unix_getcwd",fG="caml_unix_readlink",fH="caml_floatarray_set",be="caml_fill_bytes",bd="unix_error_message",cy="win_inchannel_of_filedescr",bc="caml_unix_time",cv="caml_unix_write",dY="unix_lstat",fC="unix_open",dW="unix_rename",fB="caml_unix_chmod",a_="unix_access",a8="caml_unix_lseek",a9="unix_fsync",dV="caml_unix_findnext",a6="caml_weak_get_copy",h="caml_array_set",dU="caml_unix_opendir",fz="caml_unix_lookup_file",a5="caml_unix_getegid",fy="caml_unix_getgid",cr="caml_js_from_nativeint",a1="caml_unix_gmtime",a2="caml_signbit_float",fw="caml_unix_close",fv="caml_js_from_int32",fu="caml_int64_to_int",cm="caml_check_bound_gen",p="caml_format_int",dO="unix_link",ci="unix_mkdir",aY="unix_rewinddir",aZ="unix_read",dK="caml_unix_unlink",aV="unix_getgid",dI="caml_unix_error_message",fq="caml_unix_findclose",aQ="caml_unix_lseek_64",fo="caml_array_get_float",cd="win_outchannel_of_filedescr",dF="caml_unix_fstat",cb="caml_unix_geteuid",dD="unix_lstat_64",aO="unix_inchannel_of_filedescr",b8="unix_getpwnam",b9="unix_geteuid",aN="caml_unix_getuid",dC="caml_unix_utimes",fi="caml_unix_getpwuid",fj="unix_getpwuid",o="caml_check_bound",fh="unix_ftruncate_64",aK="unix_isatty",b6="caml_unix_times",dA="caml_unix_exit",fg="unix_exit",aH="caml_unix_single_write",b5="caml_ephe_blit_key",dy="caml_nativeint_of_string",aG="unix_write",dw="caml_unix_ftruncate_64",dx="unix_close",fd="caml_js_to_int32",k="caml_sys_getcwd",dv="caml_unix_readdir",b2="win_findclose",aA="%int_mul",dt="caml_int32_format",e9="caml_weak_blit",dr="caml_unix_localtime",ds="unix_times",e8="caml_array_set_addr",dq="caml_unix_inet_addr_of_string",e7="unix_ftruncate",dp="caml_weak_check",e6="caml_unix_symlink",ax="unix_outchannel_of_filedescr",au="caml_unix_has_symlink",dl="unix_mktime",s="caml_int64_to_int32",bY="unix_fstat",e2="caml_unix_link",at="caml_unix_fchmod",bV="unix_symlink",as="unix_localtime",e0="unix_chdir",ar="unix_getgrgid",ap="caml_int32_compare",ao="caml_unix_mkdir",eX="win_startup",eW="caml_int32_bswap",an="caml_weak_get",eU="unix_readlink",al="caml_unix_rmdir",e="caml_array_get",ak="caml_unix_lstat_64",aj="unix_inet_addr_of_string",bO="caml_unix_gettimeofday",r="caml_unix_outchannel_of_filedescr",bL="unix_stat",df="caml_unix_chdir",ah="unix_closedir",ai="win_cleanup",bK="caml_nativeint_bswap",ae="caml_unix_mktime",af="caml_ephe_get_key",ag="%int_mod",bJ="unix_stat_64",db="unix_getegid",dc="caml_unix_access",c$="caml_unix_isatty",ad="caml_int32_mul",c_="caml_nativeint_compare",q="caml_int64_of_int32",ab="caml_unix_fsync",eP="win_findnext",Z="caml_nativeint_mul",eO="unix_single_write",Y="caml_int32_mod",n="caml_js_from_float",c6="unix_truncate_64",c5="caml_ephe_check_key",eM="unix_opendir",bI="caml_array_set_float",eK="caml_ephe_get_key_copy",U="unix_getuid",d="caml_mul",T="caml_fill_string",g="caml_div",c0="caml_int64_of_int",eH="caml_unix_read_bigarray",S="unix_getgrnam",eF="win_findfirst",eE="caml_unix_startup",bF="caml_unix_filedescr_of_fd",eD="caml_unix_ftruncate",f="caml_mod",cZ="caml_check_bound_float",bD="unix_utimes",bE="caml_unix_getgrgid",eB="caml_int64_to_nativeint",bC="unix_time",eA="unix_fstat_64",O="caml_unix_fstat_64",cW="unix_truncate",bA="unix_gmtime",bz="caml_unix_cleanup",ex="unix_getcwd",ew="unix_readdir",j="caml_sys_exit",K="caml_channel_descriptor",bv="unix_lseek_64",t="caml_int_compare",J="caml_array_get_addr",eo="unix_chmod",ep="caml_unix_lstat",en="caml_js_to_nativeint",I="caml_int32_div",cP="caml_unix_findfirst",H="caml_unix_truncate_64",G="caml_unix_rewinddir",F="unix_has_symlink",m="caml_int_of_string",ek="caml_unix_rename",bt="win_filedescr_of_channel",E="unix_gettimeofday",ej="win_handle_fd",b="caml_unix_getpwnam",cK="caml_int32_of_string",eh="caml_nativeint_mod",x="unix_rmdir",cH="caml_unix_read",cI="unix_read_bigarray",ea="caml_floatarray_get",w="unix_unlink",bn="caml_unix_open",d_="caml_signbit",v="unix_fchmod",bl="caml_nativeint_div",d9="%int_div";c.aliases=i.caml_list_of_js_array([[0,cm,o],[0,fu,s],[0,d9,g],[0,fv,n],[0,eF,cP],[0,bl,g],[0,v,at],[0,S,b],[0,ax,r],[0,c0,q],[0,cr,n],[0,d_,a2],[0,dp,c5],[0,T,be],[0,w,dK],[0,e7,eD],[0,ea,e],[0,e8,h],[0,U,aN],[0,cI,eH],[0,x,al],[0,ds,b6],[0,e9,b5],[0,dt,p],[0,fz,d3],[0,bI,h],[0,aA,d],[0,eM,dU],[0,b2,fq],[0,cK,m],[0,eh,f],[0,c6,H],[0,Y,f],[0,a6,eK],[0,Z,d],[0,eO,aH],[0,dx,fw],[0,a9,ab],[0,aG,cv],[0,dy,m],[0,a_,dc],[0,ej,bF],[0,eP,dV],[0,E,bO],[0,bt,K],[0,fg,j],[0,c_,t],[0,ad,d],[0,dA,j],[0,F,au],[0,dW,ek],[0,aK,c$],[0,fh,dw],[0,db,a5],[0,dY,ep],[0,fC,bn],[0,I,g],[0,fj,b],[0,fi,b],[0,bJ,d7],[0,en,fd],[0,ag,f],[0,bK,eW],[0,b9,cb],[0,b8,b],[0,ai,bz],[0,ah,d2],[0,cy,l],[0,eo,fB],[0,bL,d4],[0,J,e],[0,aO,l],[0,aj,dq],[0,dD,ak],[0,fH,h],[0,cA,k],[0,cd,r],[0,fo,e],[0,eU,fG],[0,an,af],[0,bg,b],[0,bv,aQ],[0,eX,eE],[0,ew,dv],[0,aV,fy],[0,dI,bd],[0,ap,t],[0,ex,k],[0,bA,a1],[0,bh,q],[0,ar,b],[0,cW,cB],[0,e0,df],[0,as,dr],[0,fK,p],[0,eA,O],[0,bV,e6],[0,bC,bc],[0,eB,s],[0,aZ,cH],[0,aY,G],[0,ci,ao],[0,bE,b],[0,dO,e2],[0,bD,dC],[0,cZ,o],[0,bY,dF],[0,d6,a8],[0,dl,ae]]);c.prim_count=952;var
d5=133,bj=102,bi="Re__Hash_set",cC="Stdlib__Type",cD=114,fJ="Stdlib__Buffer",d0="Js_of_ocaml__Dom_svg",d1="Stdlib__Out_channel",fI="Match_failure",dZ=157,bf="Stdlib__Gc",fE="Re__Compile",fF="Stdlib__Unit",cz="Re__Posix_class",fD=136,cx="Jsoo_runtime__Runtime_version",cw="Stdlib__Map",bb="Sx_vm",dX="Stdlib__Parsing",ba="Stdlib__Effect",cu=108,a$="Stdlib__String",fA="Re_pcre",a7="Stdlib__BytesLabels",dT="Stdlib__Condition",ct=148,dS="Stdlib__Filename",a4="Stdlib__In_channel",dQ="Not_found",dR="Re__Fmt",cs=154,a3="CamlinternalLazy",fx="Sx_vm_ref",cq="Division_by_zero",cp="Js_of_ocaml__Effect_js",co="Re__Glob",dP="Re__Parse_buffer",a0=117,cn=104,ft="Js_of_ocaml__",cl="Stdlib__Either",ck=109,cj="Js_of_ocaml__MutationObserver",ch="Js_of_ocaml__Json",dN="Stdlib__Callback",dM=155,aX="Stdlib__Lexing",cg="Undefined_recursive_module",dL="Stdlib__Printf",fs=111,aW="Stdlib__Bool",cf="UnixLabels",dJ="Stdlib__Int",fr=153,dH="Stdlib__MoreLabels",aS=127,aT=103,aU="Sx_render",dG="Sys_error",aR=100,ce="Js_of_ocaml__Dom_events",fp="Stdlib__Digest",dE=101,cc=151,aP="Sx_compiler",ca="Js_of_ocaml__PerformanceObserver",fn="Re__View",b$="Stdlib__Queue",fm=110,b_="Stdlib__Set",fl="Stdlib__Stack",fk="Js_of_ocaml__File",dB="Stdlib__Complex",aM="Re__Dyn",aL="Jsoo_runtime__",b7="Re__Import",dz="Jsoo_runtime",ff=130,aI="Js_of_ocaml__WebSockets",aJ="Stdlib__Nativeint",fe=128,aF=113,b4=146,fc=156,b3="Re__Dense_map",du="Sys_blocked_io",aE="Stdlib__Random",fb="Js_of_ocaml__ResizeObserver",fa="Sx_runtime",aD=135,b1=144,e$="Js_of_ocaml",aB=106,aC="Stdlib__Marshal",az="Js_of_ocaml__Console",e_=140,b0="Sx_primitives",bZ="Stdlib__Ephemeron",ay="CamlinternalMod",dn="Re__Color_map",aw="Js_of_ocaml__Js",av="Js_of_ocaml__Url",e5="Stdlib__Fun",e4="Stdlib__Char",dm=125,e3="Re__Category",bW=138,bX=116,e1=126,aq="Re__Ast",dk="Dune__exe__Sx_browser",dj=150,eZ="CamlinternalFormatBasics",di="Stdlib__Weak",bU=105,dh="Stdlib__Format",eY="Stdlib__StdLabels",dg="Stdlib__Int64",eV="Re__Search",bT="Js_of_ocaml__Dom_html",am="Stdlib__ArrayLabels",bS=129,eT="Re__Cset",bR="Stdlib__Bigarray",bP=137,bQ="Re__Core",bM=132,bN="Re__Emacs",de="Re__Automata",dd="Re__Pmark",da="Js_of_ocaml__IntersectionObserver",ac=115,c9=131,eQ=122,eR="Stdlib",eS="Stdlib__StringLabels",aa="Stdlib__Atomic",$="Sx_cst",c8="Re__",_="Stdlib__ListLabels",c7="Stdlib__Seq",eN="Js_of_ocaml__CSS",X=134,c4="Js_of_ocaml__XmlHttpRequest",eL="Re__Bit_vector",W="Stdlib__Uchar",V=152,c3="Stdlib__Arg",c2="Js_of_ocaml__Form",c1="Stdlib__Scanf",eJ=112,eI="Re__Slice",eG="Js_of_ocaml__Intl",bH=107,bG="Stdlib__Printexc",R="Js_of_ocaml__Sys_js",eC="Js_of_ocaml__Import",Q="Re",cX=147,cY="Js_of_ocaml__Geolocation",ez="Re__Perl",P="Js_of_ocaml__Worker",bB="Stdlib__Dynarray",ey="Assert_failure",N="Re__Pcre",M=141,bx=121,by=118,bw=120,cV="Stdlib__Array",L="Js_of_ocaml__EventSource",cU="Stdlib__Obj",ev="Stdlib__Hashtbl",et="Stdlib__Domain",eu="Stdlib__Option",es=124,er="Std_exit",eq=149,cT="Re__Group",cS="Sx_ref",bu=145,cQ="Invalid_argument",cR="Stack_overflow",cO="End_of_file",cN="Js_of_ocaml__WebGL",em="Sx_types",el="Failure",D="Js_of_ocaml__Jstable",ei="Stdlib__Lazy",bs="Stdlib__Semaphore",cM="Out_of_memory",C="Js_of_ocaml__Lib_version",B="Js_of_ocaml__Regexp",cL="Js_of_ocaml__Dom",A="Stdlib__Bytes",br="Stdlib__Sys",eg=143,ef="CamlinternalOO",bq="Re__Posix",cJ="Stdlib__Int32",ee="Stdlib__Oo",bp=123,y="Re__Replace",z="Unix",eb="Re__Mark_infos",ec="Stdlib__Mutex",ed=119,bo="Stdlib__List",cG=139,bm="Sx_parser",d$="Stdlib__Float",bk=142,cF="CamlinternalFormat",u="Re__Str",d8="Js_of_ocaml__Typed_array",cE="Stdlib__Result";c.symbols=[0,[0,cf,fs],[0,z,fm],[0,cg,11],[0,dG,10],[0,du,9],[0,fx,ed],[0,bb,by],[0,em,eJ],[0,fa,bX],[0,aU,bw],[0,cS,a0],[0,b0,ac],[0,bm,cD],[0,$,aF],[0,aP,bx],[0,di,62],[0,fF,31],[0,W,26],[0,cC,17],[0,br,15],[0,eS,75],[0,a$,30],[0,eY,77],[0,fl,42],[0,b_,40],[0,c7,21],[0,bs,47],[0,c1,64],[0,cE,23],[0,aE,60],[0,b$,43],[0,dL,50],[0,bG,53],[0,dX,39],[0,d1,57],[0,eu,22],[0,ee,67],[0,cU,16],[0,aJ,37],[0,ec,45],[0,dH,76],[0,aC,32],[0,cw,41],[0,_,73],[0,bo,27],[0,aX,38],[0,ei,20],[0,dg,36],[0,cJ,35],[0,dJ,28],[0,a4,56],[0,ev,61],[0,bf,55],[0,e5,54],[0,dh,63],[0,d$,34],[0,dS,70],[0,bZ,69],[0,cl,14],[0,ba,78],[0,bB,51],[0,et,48],[0,fp,58],[0,dT,46],[0,dB,71],[0,e4,25],[0,dN,65],[0,a7,74],[0,A,29],[0,fJ,44],[0,aW,24],[0,bR,59],[0,aa,18],[0,am,72],[0,cV,33],[0,c3,52],[0,eR,13],[0,er,dZ],[0,cR,8],[0,fA,ck],[0,fn,93],[0,u,dE],[0,eI,95],[0,eV,97],[0,y,bj],[0,cz,cn],[0,bq,bH],[0,dd,89],[0,ez,bU],[0,N,aB],[0,dP,99],[0,eb,88],[0,b7,85],[0,bi,87],[0,cT,94],[0,co,aT],[0,dR,80],[0,bN,aR],[0,aM,82],[0,b3,84],[0,eT,86],[0,bQ,98],[0,fE,96],[0,dn,91],[0,e3,83],[0,eL,81],[0,de,90],[0,aq,92],[0,c8,79],[0,Q,cu],[0,cM,7],[0,dQ,6],[0,fI,5],[0,cx,bp],[0,aL,eQ],[0,dz,es],[0,c4,d5],[0,P,X],[0,aI,aD],[0,cN,fD],[0,av,bW],[0,d8,bS],[0,R,e_],[0,fb,M],[0,B,bP],[0,ca,bk],[0,cj,eg],[0,C,cG],[0,D,b1],[0,ch,bu],[0,aw,aS],[0,eG,cs],[0,da,fr],[0,eC,e1],[0,cY,V],[0,c2,bM],[0,fk,ff],[0,L,cc],[0,cp,dj],[0,d0,eq],[0,bT,c9],[0,ce,ct],[0,cL,fe],[0,az,cX],[0,eN,b4],[0,ft,dm],[0,e$,dM],[0,cQ,4],[0,el,3],[0,cO,2],[0,dk,fc],[0,cq,1],[0,ef,66],[0,ay,68],[0,a3,19],[0,eZ,12],[0,cF,49],[0,ey,0]];c.sections=[0,[0,158,[0,[0,[0,[0,[0,[0,[0,0,[0,ey],0,[0,0,[0,cF],49,0,1],2],[0,eZ],12,0,3],[0,a3],19,[0,[0,[0,0,[0,ay],68,0,1],[0,ef],66,0,2],[0,cq],1,[0,[0,0,[0,dk],fc,0,1],[0,cO],2,0,2],3],4],[0,el],3,[0,[0,[0,0,[0,cQ],4,[0,0,[0,e$],dM,0,1],2],[0,ft],dm,[0,0,[0,eN],b4,[0,0,[0,az],cX,0,1],2],3],[0,cL],fe,[0,[0,[0,0,[0,ce],ct,0,1],[0,bT],c9,0,2],[0,d0],eq,[0,[0,0,[0,cp],dj,[0,0,[0,L],cc,0,1],2],[0,fk],ff,[0,0,[0,c2],bM,[0,0,[0,cY],V,0,1],2],3],4],5],6],[0,eC],e1,[0,[0,[0,[0,[0,[0,0,[0,da],fr,[0,0,[0,eG],cs,0,1],2],[0,aw],aS,[0,[0,0,[0,ch],bu,0,1],[0,D],b1,0,2],3],[0,C],cG,[0,[0,0,[0,cj],eg,0,1],[0,ca],bk,0,2],4],[0,B],bP,[0,[0,0,[0,fb],M,0,1],[0,R],e_,0,2],5],[0,d8],bS,[0,[0,[0,[0,0,[0,av],bW,0,1],[0,cN],fD,0,2],[0,aI],aD,0,3],[0,P],X,[0,0,[0,c4],d5,0,1],4],6],[0,dz],es,[0,[0,[0,0,[0,aL],eQ,[0,0,[0,cx],bp,0,1],2],[0,fI],5,[0,0,[0,dQ],6,0,1],3],[0,cM],7,[0,[0,0,[0,Q],cu,0,1],[0,c8],79,[0,[0,0,[0,aq],92,0,1],[0,de],90,0,2],3],4],7],8],[0,eL],81,[0,[0,[0,[0,[0,0,[0,e3],83,0,1],[0,dn],91,[0,0,[0,fE],96,[0,0,[0,bQ],98,0,1],2],3],[0,eT],86,[0,0,[0,b3],84,0,1],4],[0,aM],82,[0,[0,[0,0,[0,bN],aR,0,1],[0,dR],80,[0,[0,[0,0,[0,co],aT,0,1],[0,cT],94,0,2],[0,bi],87,0,3],4],[0,b7],85,[0,[0,[0,0,[0,eb],88,0,1],[0,dP],99,[0,[0,0,[0,N],aB,0,1],[0,ez],bU,0,2],3],[0,dd],89,[0,[0,[0,[0,0,[0,bq],bH,0,1],[0,cz],cn,0,2],[0,y],bj,[0,0,[0,eV],97,0,1],3],[0,eI],95,[0,[0,0,[0,u],dE,0,1],[0,fn],93,[0,[0,0,[0,fA],ck,0,1],[0,cR],8,[0,0,[0,er],dZ,0,1],2],3],4],5],6],7],[0,eR],13,[0,[0,[0,[0,0,[0,c3],52,0,1],[0,cV],33,[0,0,[0,am],72,0,1],2],[0,aa],18,[0,0,[0,bR],59,0,1],3],[0,aW],24,[0,[0,[0,0,[0,fJ],44,0,1],[0,A],29,[0,[0,0,[0,a7],74,0,1],[0,dN],65,0,2],3],[0,e4],25,[0,[0,0,[0,dB],71,0,1],[0,dT],46,[0,[0,0,[0,fp],58,0,1],[0,et],48,[0,0,[0,bB],51,[0,0,[0,ba],78,0,1],2],3],4],5],6],8],9],[0,cl],14,[0,[0,[0,[0,[0,[0,0,[0,bZ],69,[0,0,[0,dS],70,0,1],2],[0,d$],34,[0,0,[0,dh],63,0,1],3],[0,e5],54,[0,0,[0,bf],55,[0,[0,0,[0,ev],61,0,1],[0,a4],56,0,2],3],4],[0,dJ],28,[0,0,[0,cJ],35,[0,0,[0,dg],36,0,1],2],5],[0,ei],20,[0,[0,[0,0,[0,aX],38,0,1],[0,bo],27,[0,[0,0,[0,_],73,0,1],[0,cw],41,0,2],3],[0,aC],32,[0,[0,[0,0,[0,dH],76,0,1],[0,ec],45,0,2],[0,aJ],37,0,3],4],6],[0,cU],16,[0,[0,[0,[0,[0,[0,0,[0,ee],67,0,1],[0,eu],22,[0,0,[0,d1],57,0,1],2],[0,dX],39,[0,[0,0,[0,bG],53,0,1],[0,dL],50,0,2],3],[0,b$],43,[0,[0,0,[0,aE],60,0,1],[0,cE],23,[0,[0,0,[0,c1],64,0,1],[0,bs],47,0,2],3],4],[0,c7],21,[0,[0,0,[0,b_],40,[0,0,[0,fl],42,[0,0,[0,eY],77,0,1],2],3],[0,a$],30,[0,0,[0,eS],75,0,1],4],5],[0,br],15,[0,[0,[0,[0,[0,0,[0,cC],17,0,1],[0,W],26,[0,0,[0,fF],31,0,1],2],[0,di],62,[0,[0,0,[0,aP],bx,0,1],[0,$],aF,0,2],3],[0,bm],cD,[0,[0,0,[0,b0],ac,[0,0,[0,cS],a0,[0,0,[0,aU],bw,0,1],2],3],[0,fa],bX,[0,0,[0,em],eJ,[0,0,[0,bb],by,[0,0,[0,fx],ed,0,1],2],3],4],5],[0,du],9,[0,[0,0,[0,dG],10,0,1],[0,cg],11,[0,0,[0,z],fm,[0,0,[0,cf],fs,0,1],2],3],6],7],8],10]],0,i.caml_list_of_js_array(["%caml_format_int_special","%direct_int_div","%direct_int_mod","%direct_int_mul","%direct_obj_tag","%int_add","%int_and","%int_asr",d9,"%int_lsl","%int_lsr",ag,aA,"%int_neg","%int_or","%int_sub","%int_xor","JsStringReader","MlBytes","MlChanid","MlFakeDevice","MlFakeFd","MlFakeFd_out","MlFakeFile","MlFile","MlInt64","MlMutex","MlNat","MlNodeDevice","MlNodeFd","MlObjectTable","Ml_Bigarray","Ml_Bigarray_c_1_1","UInt8ArrayReader","add_nat","bigstring_of_array_buffer","bigstring_of_typed_array","bigstring_to_array_buffer","bigstring_to_typed_array","blake2b","blit_nat","caml_MD5Final","caml_MD5Init","caml_MD5Transform","caml_MD5Update","caml_abs_float","caml_acos_float","caml_acosh_float","caml_add_float","caml_alloc_dummy","caml_alloc_dummy_float","caml_alloc_dummy_infix","caml_alloc_stack","caml_argv","caml_array_append","caml_array_blit","caml_array_bound_error","caml_array_concat","caml_array_fill",e,J,fo,"caml_array_make","caml_array_of_bytes","caml_array_of_string",h,e8,bI,"caml_array_sub","caml_array_unsafe_get","caml_array_unsafe_get_float","caml_array_unsafe_set","caml_array_unsafe_set_addr","caml_array_unsafe_set_float","caml_asin_float","caml_asinh_float","caml_atan2_float","caml_atan_float","caml_atanh_float","caml_atomic_cas","caml_atomic_exchange","caml_atomic_fetch_add","caml_atomic_load","caml_atomic_make_contended","caml_ba_blit","caml_ba_change_layout","caml_ba_compare","caml_ba_create","caml_ba_create_buffer","caml_ba_create_from","caml_ba_create_unsafe","caml_ba_custom_name","caml_ba_deserialize","caml_ba_dim","caml_ba_dim_1","caml_ba_dim_2","caml_ba_dim_3","caml_ba_fill","caml_ba_from_typed_array","caml_ba_get_1","caml_ba_get_2","caml_ba_get_3","caml_ba_get_generic","caml_ba_get_size","caml_ba_get_size_per_element","caml_ba_hash","caml_ba_init","caml_ba_kind","caml_ba_kind_of_typed_array","caml_ba_layout","caml_ba_map_file","caml_ba_map_file_bytecode","caml_ba_num_dims","caml_ba_reshape","caml_ba_serialize","caml_ba_set_1","caml_ba_set_2","caml_ba_set_3","caml_ba_set_generic","caml_ba_slice","caml_ba_sub","caml_ba_to_typed_array","caml_ba_uint8_get16","caml_ba_uint8_get32","caml_ba_uint8_get64","caml_ba_uint8_set16","caml_ba_uint8_set32","caml_ba_uint8_set64","caml_backtrace_status","caml_bigstring_blit_ba_to_ba","caml_bigstring_blit_ba_to_bytes","caml_bigstring_blit_bytes_to_ba","caml_bigstring_blit_string_to_ba","caml_bigstring_memcmp","caml_blake2_create","caml_blake2_final","caml_blake2_string","caml_blake2_update","caml_blit_bytes","caml_blit_string","caml_bswap16","caml_build_symbols","caml_bytes_bound_error","caml_bytes_compare","caml_bytes_equal","caml_bytes_get","caml_bytes_get16","caml_bytes_get32","caml_bytes_get64","caml_bytes_greaterequal","caml_bytes_greaterthan","caml_bytes_lessequal","caml_bytes_lessthan","caml_bytes_notequal","caml_bytes_of_array","caml_bytes_of_jsbytes","caml_bytes_of_string","caml_bytes_of_uint8_array","caml_bytes_of_utf16_jsstring","caml_bytes_set","caml_bytes_set16","caml_bytes_set32","caml_bytes_set64","caml_bytes_unsafe_get","caml_bytes_unsafe_set","caml_call_gen","caml_callback","caml_cbrt_float","caml_ceil_float",K,o,cZ,cm,"caml_classify_float","caml_compare","caml_compare_val","caml_compare_val_get_custom","caml_compare_val_number_custom","caml_compare_val_tag","caml_continuation_use_and_update_handler_noexc","caml_continuation_use_noexc","caml_convert_bytes_to_array","caml_convert_raw_backtrace","caml_convert_raw_backtrace_slot","caml_convert_string_to_bytes","caml_copysign_float","caml_cos_float","caml_cosh_float","caml_create_bytes","caml_create_file","caml_create_string","caml_current_dir","caml_custom_event_index","caml_custom_identifier","caml_custom_ops","caml_decompress_input",g,"caml_div_float","caml_domain_dls","caml_domain_dls_compare_and_set","caml_domain_dls_get","caml_domain_dls_set","caml_domain_id","caml_domain_spawn","caml_ephe_blit_data",b5,"caml_ephe_check_data",c5,"caml_ephe_create","caml_ephe_data_offset","caml_ephe_get_data","caml_ephe_get_data_copy",af,eK,"caml_ephe_key_offset","caml_ephe_none","caml_ephe_set_data","caml_ephe_set_data_opt","caml_ephe_set_key","caml_ephe_unset_data","caml_ephe_unset_key","caml_eq_float","caml_equal","caml_erf_float","caml_erfc_float","caml_executable_name","caml_exn_with_js_backtrace","caml_exp2_float","caml_exp_float","caml_expm1_float","caml_failwith","caml_fatal_uncaught_exception",be,T,"caml_final_register","caml_final_register_called_without_value","caml_final_release","caml_finish_formatting","caml_float_compare","caml_float_of_bytes","caml_float_of_int","caml_float_of_string","caml_floatarray_blit","caml_floatarray_create",ea,fH,"caml_floatarray_unsafe_get","caml_floatarray_unsafe_set","caml_floor_float","caml_fma_float","caml_fmod_float","caml_format_exception","caml_format_float",p,"caml_fresh_oo_id","caml_frexp_float","caml_fs_init","caml_gc_compaction","caml_gc_counters","caml_gc_full_major","caml_gc_get","caml_gc_major","caml_gc_major_slice","caml_gc_minor","caml_gc_minor_words","caml_gc_quick_stat","caml_gc_set","caml_gc_stat","caml_ge_float","caml_get_cached_method","caml_get_continuation_callstack","caml_get_current_callstack","caml_get_exception_backtrace","caml_get_exception_raw_backtrace","caml_get_global_data","caml_get_minor_free","caml_get_public_method","caml_get_root","caml_global_data","caml_gr_arc_aux","caml_gr_blit_image","caml_gr_clear_graph","caml_gr_close_graph","caml_gr_close_subwindow","caml_gr_create_image","caml_gr_current_x","caml_gr_current_y","caml_gr_display_mode","caml_gr_doc_of_state","caml_gr_draw_arc","caml_gr_draw_char","caml_gr_draw_image","caml_gr_draw_rect","caml_gr_draw_str","caml_gr_draw_string","caml_gr_dump_image","caml_gr_fill_arc","caml_gr_fill_poly","caml_gr_fill_rect","caml_gr_lineto","caml_gr_make_image","caml_gr_moveto","caml_gr_open_graph","caml_gr_open_subwindow","caml_gr_plot","caml_gr_point_color","caml_gr_remember_mode","caml_gr_resize_window","caml_gr_set_color","caml_gr_set_font","caml_gr_set_line_width","caml_gr_set_text_size","caml_gr_set_window_title","caml_gr_sigio_handler","caml_gr_sigio_signal","caml_gr_size_x","caml_gr_size_y","caml_gr_state","caml_gr_state_create","caml_gr_state_get","caml_gr_state_init","caml_gr_state_set","caml_gr_synchronize","caml_gr_text_size","caml_gr_wait_event","caml_gr_window_id","caml_greaterequal","caml_greaterthan","caml_gt_float","caml_hash","caml_hash_mix_bigstring","caml_hash_mix_bytes","caml_hash_mix_bytes_arr","caml_hash_mix_final","caml_hash_mix_float","caml_hash_mix_float16","caml_hash_mix_float32","caml_hash_mix_int","caml_hash_mix_int64","caml_hash_mix_jsbytes","caml_hash_mix_string","caml_hash_nat","caml_hexstring_of_float","caml_hypot_float","caml_input_value","caml_input_value_from_bytes","caml_input_value_from_reader","caml_input_value_to_outside_heap","caml_install_signal_handler","caml_int32_add","caml_int32_and","caml_int32_bits_of_float",eW,ap,I,"caml_int32_float_of_bits",dt,Y,ad,"caml_int32_neg","caml_int32_of_float","caml_int32_of_int",cK,"caml_int32_or","caml_int32_shift_left","caml_int32_shift_right","caml_int32_shift_right_unsigned","caml_int32_sub","caml_int32_to_float","caml_int32_to_int","caml_int32_unmarshal","caml_int32_xor","caml_int64_add","caml_int64_and","caml_int64_bits_of_float","caml_int64_bswap","caml_int64_compare","caml_int64_create_lo_hi","caml_int64_create_lo_mi_hi","caml_int64_div","caml_int64_float_of_bits","caml_int64_format","caml_int64_hash","caml_int64_hi32","caml_int64_is_negative","caml_int64_is_zero","caml_int64_lo32","caml_int64_marshal","caml_int64_mod","caml_int64_mul","caml_int64_neg","caml_int64_of_bytes","caml_int64_of_float",c0,q,bh,"caml_int64_of_string","caml_int64_offset","caml_int64_or","caml_int64_shift_left","caml_int64_shift_right","caml_int64_shift_right_unsigned","caml_int64_sub","caml_int64_to_bytes","caml_int64_to_float",fu,s,eB,"caml_int64_ult","caml_int64_unmarshal","caml_int64_xor",t,"caml_int_of_float",m,"caml_invalid_argument","caml_io_buffer_size","caml_is_continuation_tag","caml_is_js","caml_is_ml_bytes","caml_is_ml_string","caml_is_printable","caml_is_special_exception","caml_js_call","caml_js_delete","caml_js_equals","caml_js_error_of_exception","caml_js_error_option_of_exception","caml_js_eval_string","caml_js_expr","caml_js_from_array","caml_js_from_bool",n,fv,cr,"caml_js_from_string","caml_js_fun_call","caml_js_function_arity","caml_js_get","caml_js_get_console","caml_js_html_entities","caml_js_html_escape","caml_js_instanceof","caml_js_meth_call","caml_js_new","caml_js_object","caml_js_pure_expr","caml_js_set","caml_js_strict_equals","caml_js_to_array","caml_js_to_bool","caml_js_to_byte_string","caml_js_to_float",fd,en,"caml_js_to_string","caml_js_typeof","caml_js_var","caml_js_wrap_callback","caml_js_wrap_callback_arguments","caml_js_wrap_callback_strict","caml_js_wrap_callback_unsafe","caml_js_wrap_meth_callback","caml_js_wrap_meth_callback_arguments","caml_js_wrap_meth_callback_strict","caml_js_wrap_meth_callback_unsafe","caml_jsbytes_of_string","caml_jsoo_flags_effects","caml_jsoo_flags_use_js_string","caml_jsstring_of_string","caml_lazy_make_forward","caml_lazy_read_result","caml_lazy_reset_to_lazy","caml_lazy_update_to_forcing","caml_lazy_update_to_forward","caml_ldexp_float","caml_le_float","caml_lessequal","caml_lessthan","caml_lex_array","caml_lex_engine","caml_list_mount_point","caml_list_of_js_array","caml_list_to_js_array","caml_log10_float","caml_log1p_float","caml_log2_float","caml_log_float","caml_lt_float","caml_lxm_M","caml_lxm_daba","caml_lxm_next","caml_make_float_vect","caml_make_path","caml_make_vect","caml_marshal_constants","caml_marshal_data_size","caml_marshal_header_size","caml_maybe_attach_backtrace","caml_maybe_print_stats","caml_md5_bytes","caml_md5_chan","caml_md5_string","caml_memprof_discard","caml_memprof_start","caml_memprof_stop","caml_method_cache","caml_ml_bytes_content","caml_ml_bytes_length","caml_ml_channel_get","caml_ml_channel_redirect","caml_ml_channel_restore","caml_ml_channel_size","caml_ml_channel_size_64","caml_ml_channels","caml_ml_close_channel","caml_ml_condition_broadcast","caml_ml_condition_new","caml_ml_condition_signal","caml_ml_condition_wait","caml_ml_debug_info_status","caml_ml_domain_cpu_relax","caml_ml_domain_id","caml_ml_enable_runtime_warnings","caml_ml_flush","caml_ml_input","caml_ml_input_bigarray","caml_ml_input_block","caml_ml_input_char","caml_ml_input_int","caml_ml_input_scan_line","caml_ml_is_binary_mode","caml_ml_is_buffered","caml_ml_mutex_lock","caml_ml_mutex_new","caml_ml_mutex_try_lock","caml_ml_mutex_unlock","caml_ml_open_descriptor_in","caml_ml_open_descriptor_in_with_flags","caml_ml_open_descriptor_out","caml_ml_open_descriptor_out_with_flags","caml_ml_out_channels_list","caml_ml_output","caml_ml_output_bigarray","caml_ml_output_bytes","caml_ml_output_char","caml_ml_output_int","caml_ml_output_ta","caml_ml_pos_in","caml_ml_pos_in_64","caml_ml_pos_out","caml_ml_pos_out_64","caml_ml_runtime_events_are_active","caml_ml_runtime_events_pause","caml_ml_runtime_events_resume","caml_ml_runtime_events_start","caml_ml_runtime_warnings_enabled","caml_ml_seek_in","caml_ml_seek_in_64","caml_ml_seek_out","caml_ml_seek_out_64","caml_ml_set_binary_mode","caml_ml_set_buffered","caml_ml_set_channel_name","caml_ml_set_channel_output","caml_ml_set_channel_refill","caml_ml_string_length",f,"caml_modf_float","caml_mount_autoload",d,"caml_mul_float","caml_named_value","caml_named_values","caml_nativeint_add","caml_nativeint_and",bK,c_,bl,fK,eh,Z,"caml_nativeint_neg","caml_nativeint_of_float","caml_nativeint_of_int","caml_nativeint_of_int32",dy,"caml_nativeint_or","caml_nativeint_shift_left","caml_nativeint_shift_right","caml_nativeint_shift_right_unsigned","caml_nativeint_sub","caml_nativeint_to_float","caml_nativeint_to_int","caml_nativeint_to_int32","caml_nativeint_unmarshal","caml_nativeint_xor","caml_neg_float","caml_neq_float","caml_new_lex_engine","caml_new_string","caml_nextafter_float","caml_notequal","caml_obj_add_offset","caml_obj_block","caml_obj_compare_and_swap","caml_obj_dup","caml_obj_is_shared","caml_obj_raw_field","caml_obj_reachable_words","caml_obj_set_raw_field","caml_obj_tag","caml_obj_update_tag","caml_obj_with_tag","caml_ojs_new_arr","caml_oo_cache_id","caml_oo_last_id","caml_output_val","caml_output_value","caml_output_value_to_buffer","caml_output_value_to_bytes","caml_output_value_to_string","caml_packFloat16","caml_parse_digit","caml_parse_engine","caml_parse_format","caml_parse_sign_and_base","caml_parser_trace","caml_pos_in","caml_pos_out","caml_power_float","caml_pure_js_expr","caml_raise_constant","caml_raise_end_of_file","caml_raise_no_such_file","caml_raise_nodejs_error","caml_raise_not_found","caml_raise_sys_error","caml_raise_system_error","caml_raise_with_arg","caml_raise_with_args","caml_raise_with_string","caml_raise_zero_divide","caml_raw_backtrace_length","caml_raw_backtrace_next_slot","caml_raw_backtrace_slot","caml_read_file_content","caml_recommended_domain_count","caml_record_backtrace","caml_record_backtrace_env_flag","caml_record_backtrace_runtime_flag","caml_refill","caml_register_global","caml_register_named_value","caml_restore_raw_backtrace","caml_root","caml_round_float","caml_runtime_events_create_cursor","caml_runtime_events_free_cursor","caml_runtime_events_read_poll","caml_runtime_events_user_register","caml_runtime_events_user_resolve","caml_runtime_events_user_write","caml_runtime_parameters","caml_runtime_variant","caml_runtime_warnings","caml_seek_in","caml_seek_out","caml_set_oo_id","caml_set_parser_trace","caml_set_static_env",d_,a2,"caml_sin_float","caml_sinh_float","caml_sqrt_float","caml_str_repeat","caml_strerror","caml_string_bound_error","caml_string_compare","caml_string_concat","caml_string_equal","caml_string_get","caml_string_get16","caml_string_get32","caml_string_get64","caml_string_greaterequal","caml_string_greaterthan","caml_string_hash","caml_string_lessequal","caml_string_lessthan","caml_string_notequal","caml_string_of_array","caml_string_of_bytes","caml_string_of_jsbytes","caml_string_of_jsstring","caml_string_of_uint8_array","caml_string_set","caml_string_unsafe_get","caml_sub_float","caml_sub_uint8_array_to_jsbytes","caml_subarray_to_jsbytes","caml_sys_argv","caml_sys_chdir","caml_sys_close","caml_sys_const_backend_type","caml_sys_const_big_endian","caml_sys_const_int_size","caml_sys_const_max_wosize","caml_sys_const_naked_pointers_checked","caml_sys_const_ostype_cygwin","caml_sys_const_ostype_unix","caml_sys_const_ostype_win32","caml_sys_const_word_size","caml_sys_executable_name",j,"caml_sys_fds","caml_sys_file_exists","caml_sys_get_argv","caml_sys_get_config",k,"caml_sys_getenv","caml_sys_is_directory","caml_sys_is_regular_file","caml_sys_isatty","caml_sys_mkdir","caml_sys_modify_argv","caml_sys_open","caml_sys_open_for_node","caml_sys_random_seed","caml_sys_read_directory","caml_sys_remove","caml_sys_rename","caml_sys_rmdir","caml_sys_system_command","caml_sys_time","caml_sys_time_include_children","caml_sys_unsafe_getenv","caml_tan_float","caml_tanh_float","caml_throw_js_exception","caml_to_js_string","caml_trailing_slash","caml_trampoline","caml_trampoline_return","caml_trunc_float","caml_uint8_array_of_bytes","caml_uint8_array_of_string",dc,df,fB,bz,fw,d2,dI,dA,at,bF,fq,cP,dV,dF,O,ab,eD,dw,cA,a5,cb,fy,bE,bg,b,fi,bO,aN,a1,au,l,dq,c$,e2,dr,fz,a8,aQ,ep,ak,ao,ae,bn,dU,r,cH,eH,dv,fG,ek,G,al,aH,eE,d4,d7,e6,bc,b6,cB,H,dK,dC,cv,d3,"caml_unmount","caml_unpackFloat16","caml_update_dummy",e9,dp,"caml_weak_create",an,a6,"caml_weak_set","caml_wrap_exception","caml_xdg_defaults","caml_xmlhttprequest_create","caml_zstd_initialize","compare_digits_nat","compare_nat","complement_nat","create_nat","decr_nat","deserialize_nat","div_digit_nat","div_helper","div_nat","fs_node_supported","incr_nat","initialize_nat","is_digit_int","is_digit_normalized","is_digit_odd","is_digit_zero","jsoo_create_file","jsoo_create_file_extern","jsoo_dataview","jsoo_effect_not_supported","jsoo_is_ascii","jsoo_is_win32","jsoo_mount_point","jsoo_static_env","jsoo_sys_getenv","jsoo_text_decoder","jsoo_text_decoder_buff","jsoo_text_encoder","jsoo_toplevel_reloc","land_digit_nat","length_nat","lor_digit_nat","lxor_digit_nat","make_unix_err_args","mult_digit_nat","mult_nat","nat_of_array","nth_digit_nat","nth_digit_nat_native","num_digits_nat","num_leading_zero_bits_in_digit","ocaml_stats_from_node_stats","os_type","path_is_absolute","re_match","re_partial_match","re_replacement_text","re_search_backward","re_search_forward","re_string_match","resolve_fs_device","serialize_nat","set_digit_nat","set_digit_nat_native","set_to_zero_nat","shift_left_nat","shift_right_nat","square_nat","sub_nat",a_,e0,eo,dx,ah,"unix_error",bd,fg,v,bY,eA,a9,e7,fh,ex,db,b9,aV,ar,S,b8,fj,E,U,bA,F,aO,aj,aK,dO,as,d6,bv,dY,dD,ci,dl,fC,eM,ax,aZ,cI,ew,eU,dW,aY,x,eO,bL,bJ,bV,bC,ds,cW,c6,w,bD,aG,ai,bt,b2,eF,eP,ej,cy,cd,eX,"zstd_decompress"]),0];return}(globalThis));
//# 4 "../.js/default/stdlib/stdlib.cma.js"
//# shape: CamlinternalFormatBasics:[F(2),F(1),F(2)]
(function
(globalThis){
"use strict";
var runtime = globalThis.jsoo_runtime;
function erase_rel(param){
if(typeof param === "number") return 0;
switch(param[0]){
case 0:
var rest = param[1]; return [0, erase_rel(rest)];
case 1:
var rest$0 = param[1]; return [1, erase_rel(rest$0)];
case 2:
var rest$1 = param[1]; return [2, erase_rel(rest$1)];
case 3:
var rest$2 = param[1]; return [3, erase_rel(rest$2)];
case 4:
var rest$3 = param[1]; return [4, erase_rel(rest$3)];
case 5:
var rest$4 = param[1]; return [5, erase_rel(rest$4)];
case 6:
var rest$5 = param[1]; return [6, erase_rel(rest$5)];
case 7:
var rest$6 = param[1]; return [7, erase_rel(rest$6)];
case 8:
var rest$7 = param[2], ty = param[1];
return [8, ty, erase_rel(rest$7)];
case 9:
var rest$8 = param[3], ty1 = param[1];
return [9, ty1, ty1, erase_rel(rest$8)];
case 10:
var rest$9 = param[1]; return [10, erase_rel(rest$9)];
case 11:
var rest$10 = param[1]; return [11, erase_rel(rest$10)];
case 12:
var rest$11 = param[1]; return [12, erase_rel(rest$11)];
case 13:
var rest$12 = param[1]; return [13, erase_rel(rest$12)];
default: var rest$13 = param[1]; return [14, erase_rel(rest$13)];
}
}
function concat_fmtty(fmtty1, fmtty2){
if(typeof fmtty1 === "number") return fmtty2;
switch(fmtty1[0]){
case 0:
var rest = fmtty1[1]; return [0, concat_fmtty(rest, fmtty2)];
case 1:
var rest$0 = fmtty1[1]; return [1, concat_fmtty(rest$0, fmtty2)];
case 2:
var rest$1 = fmtty1[1]; return [2, concat_fmtty(rest$1, fmtty2)];
case 3:
var rest$2 = fmtty1[1]; return [3, concat_fmtty(rest$2, fmtty2)];
case 4:
var rest$3 = fmtty1[1]; return [4, concat_fmtty(rest$3, fmtty2)];
case 5:
var rest$4 = fmtty1[1]; return [5, concat_fmtty(rest$4, fmtty2)];
case 6:
var rest$5 = fmtty1[1]; return [6, concat_fmtty(rest$5, fmtty2)];
case 7:
var rest$6 = fmtty1[1]; return [7, concat_fmtty(rest$6, fmtty2)];
case 8:
var rest$7 = fmtty1[2], ty = fmtty1[1];
return [8, ty, concat_fmtty(rest$7, fmtty2)];
case 9:
var rest$8 = fmtty1[3], ty2 = fmtty1[2], ty1 = fmtty1[1];
return [9, ty1, ty2, concat_fmtty(rest$8, fmtty2)];
case 10:
var rest$9 = fmtty1[1]; return [10, concat_fmtty(rest$9, fmtty2)];
case 11:
var rest$10 = fmtty1[1]; return [11, concat_fmtty(rest$10, fmtty2)];
case 12:
var rest$11 = fmtty1[1]; return [12, concat_fmtty(rest$11, fmtty2)];
case 13:
var rest$12 = fmtty1[1]; return [13, concat_fmtty(rest$12, fmtty2)];
default:
var rest$13 = fmtty1[1]; return [14, concat_fmtty(rest$13, fmtty2)];
}
}
function concat_fmt(fmt1, fmt2){
if(typeof fmt1 === "number") return fmt2;
switch(fmt1[0]){
case 0:
var rest = fmt1[1]; return [0, concat_fmt(rest, fmt2)];
case 1:
var rest$0 = fmt1[1]; return [1, concat_fmt(rest$0, fmt2)];
case 2:
var rest$1 = fmt1[2], pad = fmt1[1];
return [2, pad, concat_fmt(rest$1, fmt2)];
case 3:
var rest$2 = fmt1[2], pad$0 = fmt1[1];
return [3, pad$0, concat_fmt(rest$2, fmt2)];
case 4:
var rest$3 = fmt1[4], prec = fmt1[3], pad$1 = fmt1[2], iconv = fmt1[1];
return [4, iconv, pad$1, prec, concat_fmt(rest$3, fmt2)];
case 5:
var
rest$4 = fmt1[4],
prec$0 = fmt1[3],
pad$2 = fmt1[2],
iconv$0 = fmt1[1];
return [5, iconv$0, pad$2, prec$0, concat_fmt(rest$4, fmt2)];
case 6:
var
rest$5 = fmt1[4],
prec$1 = fmt1[3],
pad$3 = fmt1[2],
iconv$1 = fmt1[1];
return [6, iconv$1, pad$3, prec$1, concat_fmt(rest$5, fmt2)];
case 7:
var
rest$6 = fmt1[4],
prec$2 = fmt1[3],
pad$4 = fmt1[2],
iconv$2 = fmt1[1];
return [7, iconv$2, pad$4, prec$2, concat_fmt(rest$6, fmt2)];
case 8:
var
rest$7 = fmt1[4],
prec$3 = fmt1[3],
pad$5 = fmt1[2],
fconv = fmt1[1];
return [8, fconv, pad$5, prec$3, concat_fmt(rest$7, fmt2)];
case 9:
var rest$8 = fmt1[2], pad$6 = fmt1[1];
return [9, pad$6, concat_fmt(rest$8, fmt2)];
case 10:
var rest$9 = fmt1[1]; return [10, concat_fmt(rest$9, fmt2)];
case 11:
var rest$10 = fmt1[2], str = fmt1[1];
return [11, str, concat_fmt(rest$10, fmt2)];
case 12:
var rest$11 = fmt1[2], chr = fmt1[1];
return [12, chr, concat_fmt(rest$11, fmt2)];
case 13:
var rest$12 = fmt1[3], fmtty = fmt1[2], pad$7 = fmt1[1];
return [13, pad$7, fmtty, concat_fmt(rest$12, fmt2)];
case 14:
var rest$13 = fmt1[3], fmtty$0 = fmt1[2], pad$8 = fmt1[1];
return [14, pad$8, fmtty$0, concat_fmt(rest$13, fmt2)];
case 15:
var rest$14 = fmt1[1]; return [15, concat_fmt(rest$14, fmt2)];
case 16:
var rest$15 = fmt1[1]; return [16, concat_fmt(rest$15, fmt2)];
case 17:
var rest$16 = fmt1[2], fmting_lit = fmt1[1];
return [17, fmting_lit, concat_fmt(rest$16, fmt2)];
case 18:
var rest$17 = fmt1[2], fmting_gen = fmt1[1];
return [18, fmting_gen, concat_fmt(rest$17, fmt2)];
case 19:
var rest$18 = fmt1[1]; return [19, concat_fmt(rest$18, fmt2)];
case 20:
var rest$19 = fmt1[3], char_set = fmt1[2], width_opt = fmt1[1];
return [20, width_opt, char_set, concat_fmt(rest$19, fmt2)];
case 21:
var rest$20 = fmt1[2], counter = fmt1[1];
return [21, counter, concat_fmt(rest$20, fmt2)];
case 22:
var rest$21 = fmt1[1]; return [22, concat_fmt(rest$21, fmt2)];
case 23:
var rest$22 = fmt1[2], ign = fmt1[1];
return [23, ign, concat_fmt(rest$22, fmt2)];
default:
var rest$23 = fmt1[3], f = fmt1[2], arity = fmt1[1];
return [24, arity, f, concat_fmt(rest$23, fmt2)];
}
}
runtime.caml_register_global
(0, [0, concat_fmtty, erase_rel, concat_fmt], "CamlinternalFormatBasics");
return;
}
(globalThis));
//# 179 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib:[F(1),F(1),N,N,N,N,N,N,N,N,N,N,N,N,N,F(2),F(2),F(1)*,N,N,F(1)*,N,N,N,N,N,N,F(2)*,F(1),F(1)*,F(1)*,F(1),F(1)*,F(1),F(1),F(1),F(2),N,N,N,F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3),F(1),F(1),F(2),F(2),F(2),F(4),F(4),F(2),F(2),F(2),F(2),F(1),F(1),F(1),F(1),F(2),F(1),F(1),F(3),F(1),F(1),F(4),F(4),F(2),F(1),F(1),F(1),F(2),F(1),F(1),F(1),F(1),F(2),N,F(1)*,F(2),F(1),F(1),F(1),F(4),F(1),N]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_atomic_cas = runtime.caml_atomic_cas,
caml_atomic_load = runtime.caml_atomic_load,
caml_create_bytes = runtime.caml_create_bytes,
caml_float_of_string = runtime.caml_float_of_string,
caml_int_of_string = runtime.caml_int_of_string,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_bytes_length = runtime.caml_ml_bytes_length,
caml_ml_channel_size = runtime.caml_ml_channel_size,
caml_ml_channel_size_64 = runtime.caml_ml_channel_size_64,
caml_ml_close_channel = runtime.caml_ml_close_channel,
caml_ml_flush = runtime.caml_ml_flush,
caml_ml_input = runtime.caml_ml_input,
caml_ml_input_char = runtime.caml_ml_input_char,
caml_ml_open_descriptor_in = runtime.caml_ml_open_descriptor_in,
caml_ml_open_descriptor_out = runtime.caml_ml_open_descriptor_out,
caml_ml_output = runtime.caml_ml_output,
caml_ml_output_bytes = runtime.caml_ml_output_bytes,
caml_ml_output_char = runtime.caml_ml_output_char,
caml_ml_set_binary_mode = runtime.caml_ml_set_binary_mode,
caml_ml_set_channel_name = runtime.caml_ml_set_channel_name,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_string_concat = runtime.caml_string_concat,
caml_string_of_bytes = runtime.caml_string_of_bytes,
caml_sys_open = runtime.caml_sys_open,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
var
global_data = runtime.caml_get_global_data(),
CamlinternalFormatBasics = global_data.CamlinternalFormatBasics,
Invalid_argument = global_data.Invalid_argument,
Failure = global_data.Failure,
Match_failure = global_data.Match_failure,
Assert_failure = global_data.Assert_failure,
Not_found = global_data.Not_found,
Out_of_memory = global_data.Out_of_memory,
Stack_overflow = global_data.Stack_overflow,
Sys_error = global_data.Sys_error,
End_of_file = global_data.End_of_file,
Division_by_zero = global_data.Division_by_zero,
Sys_blocked_io = global_data.Sys_blocked_io,
Undefined_recursive_module = global_data.Undefined_recursive_module;
function failwith(s){
throw caml_maybe_attach_backtrace([0, Failure, s], 1);
}
function invalid_arg(s){
throw caml_maybe_attach_backtrace([0, Invalid_argument, s], 1);
}
var Exit = [248, "Stdlib.Exit", runtime.caml_fresh_oo_id(0)];
function min(x, y){return runtime.caml_lessequal(x, y) ? x : y;}
function max(x, y){return runtime.caml_greaterequal(x, y) ? x : y;}
function abs(x){return 0 <= x ? x : - x | 0;}
function lnot(x){return x ^ -1;}
function char_of_int(n){
if(0 <= n && 255 >= n) return n;
return invalid_arg("char_of_int");
}
var cst_false = "false", cst_true = "true";
function string_of_bool(b){return b ? cst_true : cst_false;}
function bool_of_string(param){
return param !== cst_false
? param !== cst_true ? invalid_arg("bool_of_string") : 1
: 0;
}
var a = [0, 1], b = [0, 0];
function bool_of_string_opt(param){
return param !== cst_false ? param !== cst_true ? 0 : a : b;
}
function string_of_int(n){return "" + n;}
function int_of_string_opt(s){
try{var a = [0, caml_int_of_string(s)]; return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Failure) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function valid_float_lexem(s1){
var l = caml_ml_string_length(s1), i = 0;
for(;;){
if(l <= i) return s1 + ".";
var match = runtime.caml_string_get(s1, i);
a:
{
if(48 <= match){if(58 <= match) break a;} else if(45 !== match) break a;
var i$0 = i + 1 | 0;
i = i$0;
continue;
}
return s1;
}
}
function string_of_float(f){
return valid_float_lexem(runtime.caml_format_float("%.12g", f));
}
function float_of_string_opt(s){
try{var a = [0, caml_float_of_string(s)]; return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Failure) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function symbol(l1, l2){
if(! l1) return l2;
var match = l1[2], h1 = l1[1];
if(! match) return [0, h1, l2];
var match$0 = match[2], h2 = match[1];
if(! match$0) return [0, h1, [0, h2, l2]];
var
tl = match$0[2],
h3 = match$0[1],
block = [0, h3, 24029],
dst = block,
offset = 1,
l1$0 = tl;
for(;;){
if(l1$0){
var match$1 = l1$0[2], h1$0 = l1$0[1];
if(match$1){
var match$2 = match$1[2], h2$0 = match$1[1];
if(match$2){
var tl$0 = match$2[2], h3$0 = match$2[1], dst$0 = [0, h3$0, 24029];
dst[offset + 1] = [0, h1$0, [0, h2$0, dst$0]];
dst = dst$0;
offset = 1;
l1$0 = tl$0;
continue;
}
dst[offset + 1] = [0, h1$0, [0, h2$0, l2]];
}
else
dst[offset + 1] = [0, h1$0, l2];
}
else
dst[offset + 1] = l2;
return [0, h1, [0, h2, block]];
}
}
var
stdin = caml_ml_open_descriptor_in(0),
stdout = caml_ml_open_descriptor_out(1),
stderr = caml_ml_open_descriptor_out(2);
function open_out_gen(mode, perm, name){
var c = caml_ml_open_descriptor_out(caml_sys_open(name, mode, perm));
caml_ml_set_channel_name(c, name);
return c;
}
var c = [0, 1, [0, 3, [0, 4, [0, 7, 0]]]];
function open_out(name){return open_out_gen(c, 438, name);}
var d = [0, 1, [0, 3, [0, 4, [0, 6, 0]]]];
function open_out_bin(name){return open_out_gen(d, 438, name);}
function flush_all(param){
var param$0 = runtime.caml_ml_out_channels_list(0);
for(;;){
if(! param$0) return 0;
var l = param$0[2], a = param$0[1];
try{caml_ml_flush(a); param$0 = l;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sys_error) throw caml_maybe_attach_backtrace(exn, 0);
param$0 = l;
}
}
}
function output_bytes(oc, s){
return caml_ml_output_bytes(oc, s, 0, caml_ml_bytes_length(s));
}
function output_string(oc, s){
return caml_ml_output(oc, s, 0, caml_ml_string_length(s));
}
function output(oc, s, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs)
return caml_ml_output_bytes(oc, s, ofs, len);
return invalid_arg("output");
}
function output_substring(oc, s, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ml_string_length(s) - len | 0) >= ofs)
return caml_ml_output(oc, s, ofs, len);
return invalid_arg("output_substring");
}
function output_value(chan, v){
return runtime.caml_output_value(chan, v, 0);
}
function close_out(oc){
caml_ml_flush(oc);
return caml_ml_close_channel(oc);
}
function close_out_noerr(oc){
try{caml_ml_flush(oc);}catch(exn){}
try{var a = caml_ml_close_channel(oc); return a;}catch(exn){return 0;}
}
function open_in_gen(mode, perm, name){
var c = caml_ml_open_descriptor_in(caml_sys_open(name, mode, perm));
caml_ml_set_channel_name(c, name);
return c;
}
var e = [0, 0, [0, 7, 0]];
function open_in(name){return open_in_gen(e, 0, name);}
var f = [0, 0, [0, 6, 0]];
function open_in_bin(name){return open_in_gen(f, 0, name);}
function input(ic, s, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs)
return caml_ml_input(ic, s, ofs, len);
return invalid_arg("input");
}
function unsafe_really_input(ic, s, ofs$1, len$1){
var ofs = ofs$1, len = len$1;
for(;;){
if(0 >= len) return 0;
var r = caml_ml_input(ic, s, ofs, len);
if(0 === r) throw caml_maybe_attach_backtrace(End_of_file, 1);
var len$0 = len - r | 0, ofs$0 = ofs + r | 0;
ofs = ofs$0;
len = len$0;
}
}
function really_input(ic, s, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs)
return unsafe_really_input(ic, s, ofs, len);
return invalid_arg("really_input");
}
function really_input_string(ic, len){
var s = caml_create_bytes(len);
really_input(ic, s, 0, len);
return caml_string_of_bytes(s);
}
function input_line(chan){
function build_result(buf, pos$1, param$0){
var pos = pos$1, param = param$0;
for(;;){
if(! param) return buf;
var tl = param[2], hd = param[1], len = caml_ml_bytes_length(hd);
runtime.caml_blit_bytes(hd, 0, buf, pos - len | 0, len);
var pos$0 = pos - len | 0;
pos = pos$0;
param = tl;
}
}
var accu = 0, len = 0;
for(;;){
var n = runtime.caml_ml_input_scan_line(chan);
if(0 === n){
if(! accu) throw caml_maybe_attach_backtrace(End_of_file, 1);
var a = build_result(caml_create_bytes(len), len, accu);
}
else{
if(0 >= n){
var beg = caml_create_bytes(- n | 0);
caml_ml_input(chan, beg, 0, - n | 0);
var len$1 = len - n | 0, accu$0 = [0, beg, accu];
accu = accu$0;
len = len$1;
continue;
}
var res = caml_create_bytes(n - 1 | 0);
caml_ml_input(chan, res, 0, n - 1 | 0);
caml_ml_input_char(chan);
if(accu)
var
len$0 = (len + n | 0) - 1 | 0,
a = build_result(caml_create_bytes(len$0), len$0, [0, res, accu]);
else
var a = res;
}
return caml_string_of_bytes(a);
}
}
function close_in_noerr(ic){
try{var a = caml_ml_close_channel(ic); return a;}catch(exn){return 0;}
}
function print_char(c){return caml_ml_output_char(stdout, c);}
function print_string(s){return output_string(stdout, s);}
function print_bytes(s){return output_bytes(stdout, s);}
function print_int(i){return output_string(stdout, "" + i);}
function print_float(f){return output_string(stdout, string_of_float(f));}
function print_endline(s){
output_string(stdout, s);
caml_ml_output_char(stdout, 10);
return caml_ml_flush(stdout);
}
function print_newline(param){
caml_ml_output_char(stdout, 10);
return caml_ml_flush(stdout);
}
function prerr_char(c){return caml_ml_output_char(stderr, c);}
function prerr_string(s){return output_string(stderr, s);}
function prerr_bytes(s){return output_bytes(stderr, s);}
function prerr_int(i){return output_string(stderr, "" + i);}
function prerr_float(f){return output_string(stderr, string_of_float(f));}
function prerr_endline(s){
output_string(stderr, s);
caml_ml_output_char(stderr, 10);
return caml_ml_flush(stderr);
}
function prerr_newline(param){
caml_ml_output_char(stderr, 10);
return caml_ml_flush(stderr);
}
function read_line(param){caml_ml_flush(stdout); return input_line(stdin);}
function read_int(param){return caml_int_of_string(read_line(0));}
function read_int_opt(param){return int_of_string_opt(read_line(0));}
function read_float(param){return caml_float_of_string(read_line(0));}
function read_float_opt(param){return float_of_string_opt(read_line(0));}
function string_of_format(param){var str = param[2]; return str;}
function symbol$0(a, param){
var
str2 = param[2],
fmt2 = param[1],
str1 = a[2],
fmt1 = a[1],
s2 = "%," + str2;
return [0, CamlinternalFormatBasics[3].call(null, fmt1, fmt2), str1 + s2];
}
var exit_function = [0, flush_all];
function at_exit(f){
for(;;){
var old_exit = caml_atomic_load(exit_function);
let f_yet_to_run = [0, 1], old_exit$0 = old_exit;
var
new_exit =
function(param){
if(caml_atomic_cas(f_yet_to_run, 1, 0)) caml_call1(f, 0);
return caml_call1(old_exit$0, 0);
},
success = caml_atomic_cas(exit_function, old_exit, new_exit),
a = 1 - success;
if(! a) return a;
}
}
var do_domain_local_at_exit = [0, function(param){return 0;}];
function do_at_exit(param){
caml_call1(do_domain_local_at_exit[1], 0);
return caml_call1(caml_atomic_load(exit_function), 0);
}
function exit(retcode){
do_at_exit(0);
return runtime.caml_sys_exit(retcode);
}
runtime.caml_register_named_value("Pervasives.do_at_exit", do_at_exit);
var
Stdlib =
[0,
invalid_arg,
failwith,
Exit,
Match_failure,
Assert_failure,
Invalid_argument,
Failure,
Not_found,
Out_of_memory,
Stack_overflow,
Sys_error,
End_of_file,
Division_by_zero,
Sys_blocked_io,
Undefined_recursive_module,
min,
max,
abs,
2147483647,
-2147483648,
lnot,
Infinity,
-Infinity,
NaN,
1.7976931348623157e+308,
2.2250738585072014e-308,
2.220446049250313e-16,
caml_string_concat,
char_of_int,
string_of_bool,
bool_of_string_opt,
bool_of_string,
string_of_int,
int_of_string_opt,
string_of_float,
float_of_string_opt,
symbol,
stdin,
stdout,
stderr,
print_char,
print_string,
print_bytes,
print_int,
print_float,
print_endline,
print_newline,
prerr_char,
prerr_string,
prerr_bytes,
prerr_int,
prerr_float,
prerr_endline,
prerr_newline,
read_line,
read_int_opt,
read_int,
read_float_opt,
read_float,
open_out,
open_out_bin,
open_out_gen,
caml_ml_flush,
flush_all,
caml_ml_output_char,
output_string,
output_bytes,
output,
output_substring,
caml_ml_output_char,
runtime.caml_ml_output_int,
output_value,
runtime.caml_ml_seek_out,
runtime.caml_ml_pos_out,
caml_ml_channel_size,
close_out,
close_out_noerr,
caml_ml_set_binary_mode,
open_in,
open_in_bin,
open_in_gen,
caml_ml_input_char,
input_line,
input,
really_input,
really_input_string,
caml_ml_input_char,
runtime.caml_ml_input_int,
runtime.caml_input_value,
runtime.caml_ml_seek_in,
runtime.caml_ml_pos_in,
caml_ml_channel_size,
caml_ml_close_channel,
close_in_noerr,
caml_ml_set_binary_mode,
[0,
runtime.caml_ml_seek_out_64,
runtime.caml_ml_pos_out_64,
caml_ml_channel_size_64,
runtime.caml_ml_seek_in_64,
runtime.caml_ml_pos_in_64,
caml_ml_channel_size_64],
string_of_format,
symbol$0,
exit,
at_exit,
valid_float_lexem,
unsafe_really_input,
do_at_exit,
do_domain_local_at_exit];
runtime.caml_register_global(45, Stdlib, "Stdlib");
return;
}
(globalThis));
//# 743 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Sys:[N,F(1),N,N,[N],N,N,N,N,N,N,N,N,N,F(2)*,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,F(1)*,N,N,N,F(1),F(1),[F(2)*]]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_wrap_exception = runtime.caml_wrap_exception,
Stdlib = runtime.caml_get_global_data().Stdlib,
executable_name = runtime.caml_sys_executable_name(0),
os_type = runtime.caml_sys_get_config(0)[1],
unix = runtime.caml_sys_const_ostype_unix(0),
win32 = runtime.caml_sys_const_ostype_win32(0),
cygwin = runtime.caml_sys_const_ostype_cygwin(0),
max_array_length = runtime.caml_sys_const_max_wosize(0),
max_floatarray_length = max_array_length / 2 | 0,
max_string_length = (4 * max_array_length | 0) - 1 | 0;
function getenv_opt(s){
try{var a = [0, runtime.caml_sys_getenv(s)]; return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function set_signal(sig_num, sig_beh){return 0;}
var Break = [248, "Stdlib.Sys.Break", runtime.caml_fresh_oo_id(0)];
function catch_break(on){return on ? 0 : 0;}
function Make(Immediate, Non_immediate){return [0, 1];}
var
Stdlib_Sys =
[0,
executable_name,
getenv_opt,
[0, 0],
os_type,
[0, "js_of_ocaml"],
unix,
win32,
cygwin,
32,
32,
0,
max_string_length,
max_array_length,
max_floatarray_length,
set_signal,
-1,
-2,
-3,
-4,
-5,
-6,
-7,
-8,
-9,
-10,
-11,
-12,
-13,
-14,
-15,
-16,
-17,
-18,
-19,
-20,
-21,
-22,
-23,
-24,
-25,
-26,
-27,
-28,
Break,
catch_break,
"5.2.0",
0,
[0, 5, 2, 0, 0],
runtime.caml_ml_enable_runtime_warnings,
runtime.caml_ml_runtime_warnings_enabled,
[0, Make]];
runtime.caml_register_global(4, Stdlib_Sys, "Stdlib__Sys");
return;
}
(globalThis));
//# 833 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Obj:[F(1)*,F(2),F(3),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,[F(1),F(1)*,F(1)*],N]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound,
caml_obj_tag = runtime.caml_obj_tag,
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Sys = global_data.Stdlib__Sys;
function is_block(a){return 1 - (typeof a === "number");}
function double_field(x, i){return caml_check_bound(x, i)[i + 1];}
function set_double_field(x, i, v){
caml_check_bound(x, i)[i + 1] = v;
return 0;
}
function of_val(x){
var
slot =
is_block(x)
? caml_obj_tag(x) !== 248 ? 1 <= x.length - 1 ? x[1] : x : x
: x,
cst_Obj_extension_constructor = "Obj.extension_constructor";
a:
{
if(is_block(slot) && caml_obj_tag(slot) === 248){var name = slot[1]; break a;}
var name = Stdlib[1].call(null, cst_Obj_extension_constructor);
}
return caml_obj_tag(name) === 252
? slot
: Stdlib[1].call(null, cst_Obj_extension_constructor);
}
function name(slot){return slot[1];}
function id(slot){return slot[2];}
var max_ephe_length = Stdlib_Sys[13] - 2 | 0;
function create(l){
var a = 0 <= l, b = a ? l <= max_ephe_length : a;
if(1 - b) Stdlib[1].call(null, "Obj.Ephemeron.create");
return runtime.caml_ephe_create(l);
}
function length(x){return x.length - 3 | 0;}
function raise_if_invalid_offset(e, o, msg){
var a = 0 <= o, c = a ? o < length(e) : a, b = 1 - c;
return b ? Stdlib[1].call(null, msg) : b;
}
function get_key(e, o){
raise_if_invalid_offset(e, o, "Obj.Ephemeron.get_key");
return runtime.caml_ephe_get_key(e, o);
}
function get_key_copy(e, o){
raise_if_invalid_offset(e, o, "Obj.Ephemeron.get_key_copy");
return runtime.caml_ephe_get_key_copy(e, o);
}
function set_key(e, o, x){
raise_if_invalid_offset(e, o, "Obj.Ephemeron.set_key");
return runtime.caml_ephe_set_key(e, o, x);
}
function unset_key(e, o){
raise_if_invalid_offset(e, o, "Obj.Ephemeron.unset_key");
return runtime.caml_ephe_unset_key(e, o);
}
function check_key(e, o){
raise_if_invalid_offset(e, o, "Obj.Ephemeron.check_key");
return runtime.caml_ephe_check_key(e, o);
}
function blit_key(e1, o1, e2, o2, l){
if
(0 <= l
&&
0 <= o1
&& (length(e1) - l | 0) >= o1 && 0 <= o2 && (length(e2) - l | 0) >= o2){
var
a = 0 !== l ? 1 : 0,
b = a ? runtime.caml_ephe_blit_key(e1, o1, e2, o2, l) : a;
return b;
}
return Stdlib[1].call(null, "Obj.Ephemeron.blit_key");
}
var
Stdlib_Obj =
[0,
is_block,
double_field,
set_double_field,
0,
243,
244,
245,
246,
247,
248,
249,
250,
251,
251,
252,
253,
254,
255,
1000,
1001,
1002,
[0, of_val, name, id],
[0,
create,
length,
get_key,
get_key_copy,
set_key,
unset_key,
check_key,
blit_key,
runtime.caml_ephe_get_data,
runtime.caml_ephe_get_data_copy,
runtime.caml_ephe_set_data,
runtime.caml_ephe_unset_data,
runtime.caml_ephe_check_data,
runtime.caml_ephe_blit_data,
max_ephe_length]];
runtime.caml_register_global(11, Stdlib_Obj, "Stdlib__Obj");
return;
}
(globalThis));
//# 984 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Atomic:[F(1)*,F(1),F(1),F(2),F(2),F(3),F(2),F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_atomic_exchange = runtime.caml_atomic_exchange,
caml_atomic_fetch_add = runtime.caml_atomic_fetch_add;
function set(r, x){caml_atomic_exchange(r, x); return 0;}
function incr(r){caml_atomic_fetch_add(r, 1); return 0;}
function decr(r){caml_atomic_fetch_add(r, -1); return 0;}
var
Stdlib_Atomic =
[0,
function(a){return [0, a];},
runtime.caml_atomic_make_contended,
runtime.caml_atomic_load,
set,
caml_atomic_exchange,
runtime.caml_atomic_cas,
caml_atomic_fetch_add,
incr,
decr];
runtime.caml_register_global(0, Stdlib_Atomic, "Stdlib__Atomic");
return;
}
(globalThis));
//# 1014 "../.js/default/stdlib/stdlib.cma.js"
//# shape: CamlinternalLazy:[N,F(1),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_lazy_update_to_forward = runtime.caml_lazy_update_to_forward,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
var
Stdlib_Obj = runtime.caml_get_global_data().Stdlib__Obj,
Undefined =
[248, "CamlinternalLazy.Undefined", runtime.caml_fresh_oo_id(0)];
function force_gen_lazy_block(only_val, blk){
if(0 !== runtime.caml_lazy_update_to_forcing(blk))
throw caml_maybe_attach_backtrace(Undefined, 1);
if(only_val){
var closure$0 = blk[1];
blk[1] = 0;
var result$0 = caml_call1(closure$0, 0);
blk[1] = result$0;
caml_lazy_update_to_forward(blk);
return result$0;
}
var closure = blk[1];
blk[1] = 0;
try{
var result = caml_call1(closure, 0);
blk[1] = result;
caml_lazy_update_to_forward(blk);
return result;
}
catch(e$0){
var e = caml_wrap_exception(e$0);
blk[1] = function(param){throw caml_maybe_attach_backtrace(e, 0);};
runtime.caml_lazy_reset_to_lazy(blk);
throw caml_maybe_attach_backtrace(e, 0);
}
}
function force_lazy_block(blk){return force_gen_lazy_block(0, blk);}
function force_gen(only_val, lzv){
var t = runtime.caml_obj_tag(lzv);
if(t === Stdlib_Obj[12]) return lzv[1];
if(t === Stdlib_Obj[6]) throw caml_maybe_attach_backtrace(Undefined, 1);
return t !== Stdlib_Obj[8] ? lzv : force_gen_lazy_block(only_val, lzv);
}
runtime.caml_register_global
(2, [0, Undefined, force_lazy_block, force_gen], "CamlinternalLazy");
return;
}
(globalThis));
//# 1073 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Lazy:[N,F(2)*,F(1),F(1),F(2),F(1),F(1)]
(function
(globalThis){
"use strict";
var runtime = globalThis.jsoo_runtime, caml_obj_tag = runtime.caml_obj_tag;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
var
global_data = runtime.caml_get_global_data(),
CamlinternalLazy = global_data.CamlinternalLazy,
Stdlib_Obj = global_data.Stdlib__Obj,
Undefined = CamlinternalLazy[1];
function force_val(l){return CamlinternalLazy[3].call(null, 1, l);}
function from_fun(f){
var x = runtime.caml_obj_block(Stdlib_Obj[8], 1);
x[1] = f;
return x;
}
function from_val(v){
var t = caml_obj_tag(v);
if
(t !== Stdlib_Obj[12]
&& t !== Stdlib_Obj[8] && t !== Stdlib_Obj[6] && t !== Stdlib_Obj[16])
return v;
return runtime.caml_lazy_make_forward(v);
}
function is_val(l){
var a = Stdlib_Obj[8];
return caml_obj_tag(l) !== a ? 1 : 0;
}
function map(f, x){
return [246,
function(param){
var a = caml_obj_tag(x);
a:
if(250 === a)
var b = x[1];
else{
if(246 !== a && 244 !== a){var b = x; break a;}
var b = CamlinternalLazy[2].call(null, x);
}
return caml_call1(f, b);
}];
}
function map_val(f, x){
if(! is_val(x))
return [246,
function(param){
var a = caml_obj_tag(x);
a:
if(250 === a)
var b = x[1];
else{
if(246 !== a && 244 !== a){var b = x; break a;}
var b = CamlinternalLazy[2].call(null, x);
}
return caml_call1(f, b);
}];
var a = caml_obj_tag(x);
a:
if(250 === a)
var b = x[1];
else{
if(246 !== a && 244 !== a){var b = x; break a;}
var b = CamlinternalLazy[2].call(null, x);
}
return from_val(caml_call1(f, b));
}
runtime.caml_register_global
(2,
[0, Undefined, map, is_val, from_val, map_val, from_fun, force_val],
"Stdlib__Lazy");
return;
}
(globalThis));
//# 1154 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Seq:[F(1),F(1),F(1),F(2),F(3),F(2),F(3),F(2),F(2),F(2),F(2),F(2),F(2),F(3),F(4),F(3),F(3),F(3),F(3),F(1)*,F(2)*,F(3)*,F(2),F(3),F(2)*,F(2),F(2),F(2)*->F(1)*,F(3),F(2)*->F(1),F(3),F(3),F(3)*->F(1)*,F(2),F(2),F(3),F(3),F(3),F(1)->F(1),N,F(1)*->F(1),F(2),F(3),F(2),F(3),F(3),F(3),F(4),F(3),F(4),F(2)*,F(3)*->F(1),F(1)*,F(1)*,F(2)*,F(2)*,F(1)*->F(1),F(1)*->F(1),F(2)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Assert_failure = global_data.Assert_failure,
Stdlib_Atomic = global_data.Stdlib__Atomic,
CamlinternalLazy = global_data.CamlinternalLazy,
Stdlib = global_data.Stdlib,
Stdlib_Lazy = global_data.Stdlib__Lazy;
function empty(param){return 0;}
function return$(x, param){return [0, x, empty];}
function cons(x, next, param){return [0, x, next];}
function append(seq1, seq2, param){
var match = caml_call1(seq1, 0);
if(! match) return caml_call1(seq2, 0);
var next = match[2], x = match[1];
return [0, x, function(a){return append(next, seq2, a);}];
}
function map(f, seq, param){
var match = caml_call1(seq, 0);
if(! match) return 0;
var next = match[2], x = match[1];
return [0, caml_call1(f, x), function(a){return map(f, next, a);}];
}
function filter_map(f, seq$0, param){
var seq = seq$0;
for(;;){
var match = caml_call1(seq, 0);
if(! match) return 0;
var next = match[2], x = match[1], match$0 = caml_call1(f, x);
if(match$0) break;
seq = next;
}
var y = match$0[1];
return [0, y, function(a){return filter_map(f, next, a);}];
}
function filter(f, seq$0, param){
var seq = seq$0;
for(;;){
var match = caml_call1(seq, 0);
if(! match) return 0;
var next = match[2], x = match[1];
if(caml_call1(f, x)) break;
seq = next;
}
return [0, x, function(a){return filter(f, next, a);}];
}
function concat(seq, param){
var match = caml_call1(seq, 0);
if(! match) return 0;
var next = match[2], x = match[1];
return append(x, function(a){return concat(next, a);}, 0);
}
function flat_map(f, seq, param){
var match = caml_call1(seq, 0);
if(! match) return 0;
var next = match[2], x = match[1];
return append
(caml_call1(f, x), function(a){return flat_map(f, next, a);}, 0);
}
function fold_left(f, acc$1, seq$0){
var acc = acc$1, seq = seq$0;
for(;;){
var match = caml_call1(seq, 0);
if(! match) return acc;
var next = match[2], x = match[1], acc$0 = caml_call2(f, acc, x);
acc = acc$0;
seq = next;
}
}
function iter(f, seq$0){
var seq = seq$0;
for(;;){
var match = caml_call1(seq, 0);
if(! match) return 0;
var next = match[2], x = match[1];
caml_call1(f, x);
seq = next;
}
}
function unfold(f, u, param){
var match = caml_call1(f, u);
if(! match) return 0;
var match$0 = match[1], u$0 = match$0[2], x = match$0[1];
return [0, x, function(a){return unfold(f, u$0, a);}];
}
function is_empty(xs){return caml_call1(xs, 0) ? 0 : 1;}
function uncons(xs){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1];
return [0, [0, x, xs$0]];
}
function length(xs$1){
var accu = 0, xs = xs$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return accu;
var xs$0 = match[2], accu$0 = accu + 1 | 0;
accu = accu$0;
xs = xs$0;
}
}
function iteri(f, xs$1){
var i = 0, xs = xs$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1];
caml_call2(f, i, x);
var i$0 = i + 1 | 0;
i = i$0;
xs = xs$0;
}
}
function fold_lefti(f, accu$1, xs$1){
var accu = accu$1, i = 0, xs = xs$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return accu;
var
xs$0 = match[2],
x = match[1],
accu$0 = caml_call3(f, accu, i, x),
i$0 = i + 1 | 0;
accu = accu$0;
i = i$0;
xs = xs$0;
}
}
function for_all(p, xs$1){
var xs = xs$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return 1;
var xs$0 = match[2], x = match[1], a = caml_call1(p, x);
if(! a) return a;
xs = xs$0;
}
}
function exists(p, xs$1){
var xs = xs$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], a = caml_call1(p, x);
if(a) return a;
xs = xs$0;
}
}
function find(p, xs$1){
var xs = xs$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1];
if(caml_call1(p, x)) return [0, x];
xs = xs$0;
}
}
function find_index(p, xs){
var i = 0, xs$0 = xs;
for(;;){
var match = caml_call1(xs$0, 0);
if(! match) return 0;
var xs$1 = match[2], x = match[1];
if(caml_call1(p, x)) return [0, i];
var i$0 = i + 1 | 0;
i = i$0;
xs$0 = xs$1;
}
}
function find_map(f, xs$1){
var xs = xs$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], result = caml_call1(f, x);
if(result) return result;
xs = xs$0;
}
}
function find_mapi(f, xs){
var i = 0, xs$0 = xs;
for(;;){
var match = caml_call1(xs$0, 0);
if(! match) return 0;
var xs$1 = match[2], x = match[1], result = caml_call2(f, i, x);
if(result) return result;
var i$0 = i + 1 | 0;
i = i$0;
xs$0 = xs$1;
}
}
function iter2(f, xs$1, ys$1){
var xs = xs$1, ys = ys$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], match$0 = caml_call1(ys, 0);
if(! match$0) return 0;
var ys$0 = match$0[2], y = match$0[1];
caml_call2(f, x, y);
xs = xs$0;
ys = ys$0;
}
}
function fold_left2(f, accu$1, xs$1, ys$1){
var accu = accu$1, xs = xs$1, ys = ys$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return accu;
var xs$0 = match[2], x = match[1], match$0 = caml_call1(ys, 0);
if(! match$0) return accu;
var
ys$0 = match$0[2],
y = match$0[1],
accu$0 = caml_call3(f, accu, x, y);
accu = accu$0;
xs = xs$0;
ys = ys$0;
}
}
function for_all2(f, xs$1, ys$1){
var xs = xs$1, ys = ys$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return 1;
var xs$0 = match[2], x = match[1], match$0 = caml_call1(ys, 0);
if(! match$0) return 1;
var ys$0 = match$0[2], y = match$0[1], a = caml_call2(f, x, y);
if(! a) return a;
xs = xs$0;
ys = ys$0;
}
}
function exists2(f, xs$1, ys$1){
var xs = xs$1, ys = ys$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], match$0 = caml_call1(ys, 0);
if(! match$0) return 0;
var ys$0 = match$0[2], y = match$0[1], a = caml_call2(f, x, y);
if(a) return a;
xs = xs$0;
ys = ys$0;
}
}
function equal(eq, xs$1, ys$1){
var xs = xs$1, ys = ys$1;
for(;;){
var match = caml_call1(xs, 0), match$0 = caml_call1(ys, 0);
if(match){
if(match$0){
var
ys$0 = match$0[2],
y = match$0[1],
xs$0 = match[2],
x = match[1],
a = caml_call2(eq, x, y);
if(! a) return a;
xs = xs$0;
ys = ys$0;
continue;
}
}
else if(! match$0) return 1;
return 0;
}
}
function compare(cmp, xs$1, ys$1){
var xs = xs$1, ys = ys$1;
for(;;){
var match = caml_call1(xs, 0), match$0 = caml_call1(ys, 0);
if(! match) return match$0 ? -1 : 0;
var xs$0 = match[2], x = match[1];
if(! match$0) return 1;
var ys$0 = match$0[2], y = match$0[1], c = caml_call2(cmp, x, y);
if(0 !== c) return c;
xs = xs$0;
ys = ys$0;
}
}
function init_aux(f, i, j, param){
if(i >= j) return 0;
var a = i + 1 | 0;
return [0, caml_call1(f, i), function(b){return init_aux(f, a, j, b);}];
}
function init(n, f){
if(0 > n) return Stdlib[1].call(null, "Seq.init");
return function(a){return init_aux(f, 0, n, a);};
}
function repeat(x, param){
return [0, x, function(a){return repeat(x, a);}];
}
function forever(f, param){
return [0, caml_call1(f, 0), function(a){return forever(f, a);}];
}
function cycle_nonempty(xs, param){
return append(xs, function(a){return cycle_nonempty(xs, a);}, 0);
}
function cycle(xs, param){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1];
function a(a){return cycle_nonempty(xs, a);}
return [0, x, function(b){return append(xs$0, a, b);}];
}
function iterate1(f, x, param){
var y = caml_call1(f, x);
return [0, y, function(a){return iterate1(f, y, a);}];
}
function iterate(f, x){
function next(a){return iterate1(f, x, a);}
return function(param){return [0, x, next];};
}
function mapi_aux(f, i, xs, param){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], a = i + 1 | 0;
return [0,
caml_call2(f, i, x),
function(b){return mapi_aux(f, a, xs$0, b);}];
}
function mapi(f, xs){return function(a){return mapi_aux(f, 0, xs, a);};}
function tail_scan(f, s, xs, param){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], s$0 = caml_call2(f, s, x);
return [0, s$0, function(a){return tail_scan(f, s$0, xs$0, a);}];
}
function scan(f, s, xs){
function next(a){return tail_scan(f, s, xs, a);}
return function(param){return [0, s, next];};
}
function take_aux(n, xs){
return 0 === n
? empty
: function
(param){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1];
return [0, x, take_aux(n - 1 | 0, xs$0)];
};
}
function take(n, xs){
if(n < 0) Stdlib[1].call(null, "Seq.take");
return take_aux(n, xs);
}
function drop(n, xs){
return 0 <= n
? 0
=== n
? xs
: function
(param){
var n$0 = n, xs$0 = xs;
for(;;){
var match = caml_call1(xs$0, 0);
if(! match) return 0;
var xs$1 = match[2], n$1 = n$0 - 1 | 0;
if(0 === n$1) return caml_call1(xs$1, 0);
n$0 = n$1;
xs$0 = xs$1;
}
}
: Stdlib[1].call(null, "Seq.drop");
}
function take_while(p, xs, param){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1];
return caml_call1(p, x)
? [0, x, function(a){return take_while(p, xs$0, a);}]
: 0;
}
function drop_while(p, xs$1, param){
var xs = xs$1;
for(;;){
var node = caml_call1(xs, 0);
if(! node) return 0;
var xs$0 = node[2], x = node[1];
if(! caml_call1(p, x)) return node;
xs = xs$0;
}
}
function group(eq, xs, param){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], a = caml_call1(eq, x);
function b(b){return drop_while(a, xs$0, b);}
var c = caml_call1(eq, x);
function next(a){return take_while(c, xs$0, a);}
return [0,
function(param){return [0, x, next];},
function(a){return group(eq, b, a);}];
}
var
Forced_twice =
[248, "Stdlib.Seq.Forced_twice", runtime.caml_fresh_oo_id(0)],
to_lazy = Stdlib_Lazy[6];
function failure(param){
throw caml_maybe_attach_backtrace(Forced_twice, 1);
}
function memoize(xs){
function s$0(param){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1];
return [0, x, memoize(xs$0)];
}
var s = to_lazy(s$0);
return function(param){
var a = runtime.caml_obj_tag(s);
if(250 === a) return s[1];
if(246 !== a && 244 !== a) return s;
return CamlinternalLazy[2].call(null, s);};
}
function once(xs){
function f(param){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1];
return [0, x, once(xs$0)];
}
var action = Stdlib_Atomic[1].call(null, f);
return function(param){
var f = Stdlib_Atomic[5].call(null, action, failure);
return caml_call1(f, 0);};
}
function zip(xs, ys, param){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], match$0 = caml_call1(ys, 0);
if(! match$0) return 0;
var ys$0 = match$0[2], y = match$0[1];
return [0, [0, x, y], function(a){return zip(xs$0, ys$0, a);}];
}
function map2(f, xs, ys, param){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], match$0 = caml_call1(ys, 0);
if(! match$0) return 0;
var ys$0 = match$0[2], y = match$0[1];
return [0,
caml_call2(f, x, y),
function(a){return map2(f, xs$0, ys$0, a);}];
}
function interleave(xs, ys, param){
var match = caml_call1(xs, 0);
if(! match) return caml_call1(ys, 0);
var xs$0 = match[2], x = match[1];
return [0, x, function(a){return interleave(ys, xs$0, a);}];
}
function sorted_merge1(cmp, x, xs, y, ys){
return 0 < caml_call2(cmp, x, y)
? [0,
y,
function(param){
var match = caml_call1(ys, 0);
if(! match) return [0, x, xs];
var ys$0 = match[2], y = match[1];
return sorted_merge1(cmp, x, xs, y, ys$0);
}]
: [0,
x,
function(param){
var match = caml_call1(xs, 0);
if(! match) return [0, y, ys];
var xs$0 = match[2], x = match[1];
return sorted_merge1(cmp, x, xs$0, y, ys);
}];
}
function sorted_merge(cmp, xs, ys, param){
var match = caml_call1(xs, 0), match$0 = caml_call1(ys, 0);
if(match){
if(match$0){
var ys$0 = match$0[2], y = match$0[1], xs$0 = match[2], x = match[1];
return sorted_merge1(cmp, x, xs$0, y, ys$0);
}
var c = match;
}
else{if(! match$0) return 0; var c = match$0;}
return c;
}
function map_fst(xys, param){
var match = caml_call1(xys, 0);
if(! match) return 0;
var xys$0 = match[2], x = match[1][1];
return [0, x, function(a){return map_fst(xys$0, a);}];
}
function map_snd(xys, param){
var match = caml_call1(xys, 0);
if(! match) return 0;
var xys$0 = match[2], y = match[1][2];
return [0, y, function(a){return map_snd(xys$0, a);}];
}
function unzip(xys){
return [0,
function(a){return map_fst(xys, a);},
function(a){return map_snd(xys, a);}];
}
function filter_map_find_left_map(f, xs$1, param){
var xs = xs$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], match$0 = caml_call1(f, x);
if(0 === match$0[0]) break;
xs = xs$0;
}
var y = match$0[1];
return [0, y, function(a){return filter_map_find_left_map(f, xs$0, a);}];
}
function filter_map_find_right_map(f, xs$1, param){
var xs = xs$1;
for(;;){
var match = caml_call1(xs, 0);
if(! match) return 0;
var xs$0 = match[2], x = match[1], match$0 = caml_call1(f, x);
if(0 !== match$0[0]) break;
xs = xs$0;
}
var z = match$0[1];
return [0, z, function(a){return filter_map_find_right_map(f, xs$0, a);}];
}
function partition_map(f, xs){
return [0,
function(a){return filter_map_find_left_map(f, xs, a);},
function(a){return filter_map_find_right_map(f, xs, a);}];
}
function partition(p, xs){
function a(x){return 1 - caml_call1(p, x);}
return [0,
function(a){return filter(p, xs, a);},
function(b){return filter(a, xs, b);}];
}
function peel(xss){
return unzip(function(a){return filter_map(uncons, xss, a);});
}
var b = [0, "seq.ml", 616, 4];
function transpose(xss, param){
var match = peel(xss), tails = match[2], heads = match[1];
if(! is_empty(heads))
return [0, heads, function(a){return transpose(tails, a);}];
if(is_empty(tails)) return 0;
throw caml_maybe_attach_backtrace([0, Assert_failure, b], 1);
}
function a(remainders, xss, param){
var match = caml_call1(xss, 0);
if(! match) return transpose(remainders, 0);
var xss$0 = match[2], xs = match[1], match$0 = caml_call1(xs, 0);
if(match$0){
var
xs$0 = match$0[2],
x = match$0[1],
match$1 = peel(remainders),
tails = match$1[2],
heads = match$1[1],
b = function(param){return [0, xs$0, tails];};
return [0,
function(param){return [0, x, heads];},
function(c){return a(b, xss$0, c);}];
}
var
match$2 = peel(remainders),
tails$0 = match$2[2],
heads$0 = match$2[1];
return [0, heads$0, function(b){return a(tails$0, xss$0, b);}];
}
function map_product(f, xs, ys){
function c(x){
function a(y){return caml_call2(f, x, y);}
return function(b){return map(a, ys, b);};
}
function xss(a){return map(c, xs, a);}
function b(b){return a(empty, xss, b);}
return function(a){return concat(b, a);};
}
function product(xs, ys){
return map_product(function(x, y){return [0, x, y];}, xs, ys);
}
function of_dispenser(it){
function c(param){
var match = caml_call1(it, 0);
if(! match) return 0;
var x = match[1];
return [0, x, c];
}
return c;
}
function to_dispenser(xs){
var s = [0, xs];
return function(param){
var match = caml_call1(s[1], 0);
if(! match) return 0;
var xs = match[2], x = match[1];
s[1] = xs;
return [0, x];};
}
function ints(i, param){
var a = i + 1 | 0;
return [0, i, function(b){return ints(a, b);}];
}
runtime.caml_register_global
(10,
[0,
is_empty,
uncons,
length,
iter,
fold_left,
iteri,
fold_lefti,
for_all,
exists,
find,
find_index,
find_map,
find_mapi,
iter2,
fold_left2,
for_all2,
exists2,
equal,
compare,
empty,
return$,
cons,
init,
unfold,
repeat,
forever,
cycle,
iterate,
map,
mapi,
filter,
filter_map,
scan,
take,
drop,
take_while,
drop_while,
group,
memoize,
Forced_twice,
once,
transpose,
append,
concat,
flat_map,
flat_map,
zip,
map2,
interleave,
sorted_merge,
product,
map_product,
unzip,
unzip,
partition_map,
partition,
of_dispenser,
to_dispenser,
ints],
"Stdlib__Seq");
return;
}
(globalThis));
//# 1849 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Option:[N,F(1)*,F(2)*,F(1),F(2),F(1)*,F(2),F(3),F(2),F(1)*,F(1)*,F(3),F(3),F(2)*,F(1)*,F(1)*->F(1)*]
(function
(globalThis){
"use strict";
var runtime = globalThis.jsoo_runtime;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Seq = global_data.Stdlib__Seq,
Stdlib = global_data.Stdlib;
function some(v){return [0, v];}
function value(o, default$){
if(! o) return default$;
var v = o[1];
return v;
}
function get(param){
if(! param) return Stdlib[1].call(null, "option is None");
var v = param[1];
return v;
}
function bind(o, f){
if(! o) return 0;
var v = o[1];
return caml_call1(f, v);
}
function join(param){if(! param) return 0; var o = param[1]; return o;}
function map(f, o){
if(! o) return 0;
var v = o[1];
return [0, caml_call1(f, v)];
}
function fold(none, some, param){
if(! param) return none;
var v = param[1];
return caml_call1(some, v);
}
function iter(f, param){
if(! param) return 0;
var v = param[1];
return caml_call1(f, v);
}
function is_none(param){return param ? 0 : 1;}
function is_some(param){return param ? 1 : 0;}
function equal(eq, o0, o1){
if(o0){
if(o1){var v1 = o1[1], v0 = o0[1]; return caml_call2(eq, v0, v1);}
}
else if(! o1) return 1;
return 0;
}
function compare(cmp, o0, o1){
if(! o0) return o1 ? -1 : 0;
var v0 = o0[1];
if(! o1) return 1;
var v1 = o1[1];
return caml_call2(cmp, v0, v1);
}
function to_result(none, param){
if(! param) return [1, none];
var v = param[1];
return [0, v];
}
function to_list(param){
if(! param) return 0;
var v = param[1];
return [0, v, 0];
}
function to_seq(param){
if(! param) return Stdlib_Seq[20];
var v = param[1], a = Stdlib_Seq[21];
return function(b){return a(v, b);};
}
runtime.caml_register_global
(3,
[0,
0,
some,
value,
get,
bind,
join,
map,
fold,
iter,
is_none,
is_some,
equal,
compare,
to_result,
to_list,
to_seq],
"Stdlib__Option");
return;
}
(globalThis));
//# 2121 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Char:[F(1),F(1),F(1)*,F(1)*,F(2)*,F(2)*,F(2)*,F(1)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_bytes_unsafe_set = runtime.caml_bytes_unsafe_set,
caml_create_bytes = runtime.caml_create_bytes,
caml_hash = runtime.caml_hash,
caml_string_of_bytes = runtime.caml_string_of_bytes,
Stdlib = runtime.caml_get_global_data().Stdlib;
function chr(n){
if(0 <= n && 255 >= n) return n;
return Stdlib[1].call(null, "Char.chr");
}
function escaped(c){
a:
{
if(40 <= c){
if(92 === c) return "\\\\";
if(127 <= c) break a;
}
else{
if(32 > c){
if(14 <= c) break a;
switch(c){
case 8:
return "\\b";
case 9:
return "\\t";
case 10:
return "\\n";
case 13:
return "\\r";
default: break a;
}
}
if(39 <= c) return "\\'";
}
var s$0 = caml_create_bytes(1);
caml_bytes_unsafe_set(s$0, 0, c);
return caml_string_of_bytes(s$0);
}
var s = caml_create_bytes(4);
caml_bytes_unsafe_set(s, 0, 92);
caml_bytes_unsafe_set(s, 1, 48 + (c / 100 | 0) | 0);
caml_bytes_unsafe_set(s, 2, 48 + ((c / 10 | 0) % 10 | 0) | 0);
caml_bytes_unsafe_set(s, 3, 48 + (c % 10 | 0) | 0);
return caml_string_of_bytes(s);
}
function lowercase_ascii(c){return 25 < c - 65 >>> 0 ? c : c + 32 | 0;}
function uppercase_ascii(c){return 25 < c - 97 >>> 0 ? c : c - 32 | 0;}
function compare(c1, c2){return c1 - c2 | 0;}
function equal(c1, c2){return 0 === (c1 - c2 | 0) ? 1 : 0;}
function seeded_hash(seed, x){return caml_hash(10, 100, seed, x);}
function hash(x){return caml_hash(10, 100, 0, x);}
runtime.caml_register_global
(8,
[0,
chr,
escaped,
lowercase_ascii,
uppercase_ascii,
compare,
equal,
seeded_hash,
hash],
"Stdlib__Char");
return;
}
(globalThis));
//# 2195 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Uchar:[N,N,N,N,F(1),F(1),F(1)*,F(1),F(1)*,F(1)*,F(1)*,F(1)*,F(1),F(1)*,F(2)*,F(2)*,F(1)*,F(1)*,F(1)*,F(1)*,F(2)*,F(1)*,F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_format_int = runtime.caml_format_int,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
global_data = runtime.caml_get_global_data(),
Assert_failure = global_data.Assert_failure,
Stdlib = global_data.Stdlib;
function succ(u){
return u === 55295
? 57344
: u
=== 1114111
? Stdlib[1].call(null, "U+10FFFF has no successor")
: u + 1 | 0;
}
function pred(u){
return u === 57344
? 55295
: u
=== 0
? Stdlib[1].call(null, "U+0000 has no predecessor")
: u - 1 | 0;
}
function is_valid(i){
var a = 0 <= i ? 1 : 0, b = a ? i <= 55295 ? 1 : 0 : a;
if(b)
var c = b;
else
var d = 57344 <= i ? 1 : 0, c = d ? i <= 1114111 ? 1 : 0 : d;
return c;
}
function of_int(i){
if(is_valid(i)) return i;
var
a =
Stdlib[28].call
(null, caml_format_int("%X", i), " is not an Unicode scalar value");
return Stdlib[1].call(null, a);
}
function is_char(u){return u < 256 ? 1 : 0;}
function of_char(c){return c;}
function to_char(u){
if(255 >= u) return u;
var
a =
Stdlib[28].call
(null, caml_format_int("%04X", u), " is not a latin1 character"),
b = Stdlib[28].call(null, "U+", a);
return Stdlib[1].call(null, b);
}
function unsafe_to_char(a){return a;}
function equal(b, a){return b === a ? 1 : 0;}
var compare = runtime.caml_int_compare;
function hash(a){return a;}
function utf_decode_is_valid(d){return 1 === (d >>> 27 | 0) ? 1 : 0;}
function utf_decode_length(d){return (d >>> 24 | 0) & 7;}
function utf_decode_uchar(d){return d & 16777215;}
function utf_decode(n, u){return (8 | n) << 24 | u;}
function utf_decode_invalid(n){return n << 24 | 65533;}
var
cst_uchar_ml = "uchar.ml",
a = [0, cst_uchar_ml, 85, 7],
b = [0, cst_uchar_ml, 80, 18];
function utf_8_byte_length(u){
if(0 > u) throw caml_maybe_attach_backtrace([0, Assert_failure, b], 1);
if(127 >= u) return 1;
if(2047 >= u) return 2;
if(65535 >= u) return 3;
if(1114111 < u)
throw caml_maybe_attach_backtrace([0, Assert_failure, a], 1);
return 4;
}
var c = [0, cst_uchar_ml, 91, 7], d = [0, cst_uchar_ml, 88, 18];
function utf_16_byte_length(u){
if(0 > u) throw caml_maybe_attach_backtrace([0, Assert_failure, d], 1);
if(65535 >= u) return 2;
if(1114111 < u)
throw caml_maybe_attach_backtrace([0, Assert_failure, c], 1);
return 4;
}
var
Stdlib_Uchar =
[0,
0,
1114111,
65279,
65533,
succ,
pred,
is_valid,
of_int,
function(a){return a;},
function(a){return a;},
is_char,
of_char,
to_char,
unsafe_to_char,
equal,
compare,
hash,
utf_decode_is_valid,
utf_decode_uchar,
utf_decode_length,
utf_decode,
utf_decode_invalid,
utf_8_byte_length,
utf_16_byte_length];
runtime.caml_register_global(13, Stdlib_Uchar, "Stdlib__Uchar");
return;
}
(globalThis));
//# 2313 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__List:[F(1),F(2),F(2),F(1)*,F(2)*,F(1),F(1),F(2),F(2),F(1),F(2),F(2),F(2),F(1),F(1),F(3),F(3),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(3),F(3),F(3),F(3),F(3),F(3),F(4),F(4),F(2),F(2),F(3),F(3),F(2),F(2),F(2),F(2),F(1)*->F(1),F(2),F(1)*->F(1),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(1),F(2),F(2),F(2),F(2),F(2),F(3),F(1)*->F(1)*,F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_compare = runtime.caml_compare,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var Stdlib = runtime.caml_get_global_data().Stdlib;
function length(l$0){
var len = 0, param = l$0;
for(;;){
if(! param) return len;
var l = param[2], len$0 = len + 1 | 0;
len = len$0;
param = l;
}
}
function cons(a, l){return [0, a, l];}
function hd(param){
if(! param) return Stdlib[2].call(null, "hd");
var a = param[1];
return a;
}
function tl(param){
if(! param) return Stdlib[2].call(null, "tl");
var l = param[2];
return l;
}
var cst_List_nth = "List.nth";
function nth(l, n){
if(0 > n) return Stdlib[1].call(null, cst_List_nth);
var l$0 = l, n$0 = n;
for(;;){
if(! l$0) return Stdlib[2].call(null, "nth");
var l$1 = l$0[2], a = l$0[1];
if(0 === n$0) return a;
var n$1 = n$0 - 1 | 0;
l$0 = l$1;
n$0 = n$1;
}
}
function nth_opt(l, n){
if(0 > n) return Stdlib[1].call(null, cst_List_nth);
var l$0 = l, n$0 = n;
for(;;){
if(! l$0) return 0;
var l$1 = l$0[2], a = l$0[1];
if(0 === n$0) return [0, a];
var n$1 = n$0 - 1 | 0;
l$0 = l$1;
n$0 = n$1;
}
}
var append = Stdlib[37];
function rev_append(l1$1, l2$1){
var l1 = l1$1, l2 = l2$1;
for(;;){
if(! l1) return l2;
var l1$0 = l1[2], a = l1[1], l2$0 = [0, a, l2];
l1 = l1$0;
l2 = l2$0;
}
}
function rev(l){return rev_append(l, 0);}
function init(len, f){
if(0 > len) return Stdlib[1].call(null, "List.init");
var last = len - 1 | 0;
if(last < 0) return 0;
var i$1 = 0;
if(0 === last) return [0, caml_call1(f, i$1), 0];
var
r1 = caml_call1(f, i$1),
r2 = caml_call1(f, 1),
block = [0, r2, 24029],
dst = block,
offset = 1,
i = 2;
for(;;){
if(last < i)
dst[offset + 1] = 0;
else{
if(i !== last){
var
r1$0 = caml_call1(f, i),
r2$0 = caml_call1(f, i + 1 | 0),
dst$0 = [0, r2$0, 24029];
dst[offset + 1] = [0, r1$0, dst$0];
var i$0 = i + 2 | 0;
dst = dst$0;
offset = 1;
i = i$0;
continue;
}
dst[offset + 1] = [0, caml_call1(f, i), 0];
}
return [0, r1, block];
}
}
function flatten(param){
if(! param) return 0;
var r = param[2], l = param[1], a = flatten(r);
return Stdlib[37].call(null, l, a);
}
function map(f, param){
if(! param) return 0;
var match = param[2], a1 = param[1];
if(! match){var r1$0 = caml_call1(f, a1); return [0, r1$0, 0];}
var
l = match[2],
a2 = match[1],
r1 = caml_call1(f, a1),
r2 = caml_call1(f, a2),
block = [0, r2, 24029],
dst = block,
offset = 1,
param$0 = l;
for(;;){
if(param$0){
var match$0 = param$0[2], a1$0 = param$0[1];
if(match$0){
var
l$0 = match$0[2],
a2$0 = match$0[1],
r1$1 = caml_call1(f, a1$0),
r2$0 = caml_call1(f, a2$0),
dst$0 = [0, r2$0, 24029];
dst[offset + 1] = [0, r1$1, dst$0];
dst = dst$0;
offset = 1;
param$0 = l$0;
continue;
}
var r1$2 = caml_call1(f, a1$0);
dst[offset + 1] = [0, r1$2, 0];
}
else
dst[offset + 1] = 0;
return [0, r1, block];
}
}
function mapi(f, l$1){
if(! l$1) return 0;
var match = l$1[2], a1 = l$1[1], i$1 = 0;
if(! match){var r1$0 = caml_call2(f, i$1, a1); return [0, r1$0, 0];}
var
l = match[2],
a2 = match[1],
r1 = caml_call2(f, i$1, a1),
r2 = caml_call2(f, 1, a2),
block = [0, r2, 24029],
dst = block,
offset = 1,
i = 2,
param = l;
for(;;){
if(param){
var match$0 = param[2], a1$0 = param[1];
if(match$0){
var
l$0 = match$0[2],
a2$0 = match$0[1],
r1$1 = caml_call2(f, i, a1$0),
r2$0 = caml_call2(f, i + 1 | 0, a2$0),
dst$0 = [0, r2$0, 24029];
dst[offset + 1] = [0, r1$1, dst$0];
var i$0 = i + 2 | 0;
dst = dst$0;
offset = 1;
i = i$0;
param = l$0;
continue;
}
var r1$2 = caml_call2(f, i, a1$0);
dst[offset + 1] = [0, r1$2, 0];
}
else
dst[offset + 1] = 0;
return [0, r1, block];
}
}
function rev_map(f, l){
var accu = 0, param = l;
for(;;){
if(! param) return accu;
var l$0 = param[2], a = param[1], accu$0 = [0, caml_call1(f, a), accu];
accu = accu$0;
param = l$0;
}
}
function iter(f, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], a = param[1];
caml_call1(f, a);
param = l;
}
}
function iteri(f, l$0){
var i = 0, param = l$0;
for(;;){
if(! param) return 0;
var l = param[2], a = param[1];
caml_call2(f, i, a);
var i$0 = i + 1 | 0;
i = i$0;
param = l;
}
}
function fold_left(f, accu$1, l$1){
var accu = accu$1, l = l$1;
for(;;){
if(! l) return accu;
var l$0 = l[2], a = l[1], accu$0 = caml_call2(f, accu, a);
accu = accu$0;
l = l$0;
}
}
function fold_right(f, l, accu){
if(! l) return accu;
var l$0 = l[2], a = l[1];
return caml_call2(f, a, fold_right(f, l$0, accu));
}
function map2(f, l1, l2){
var cst_List_map2 = "List.map2";
if(l1){
var a = l1[2], a1 = l1[1];
if(a){
if(l2){
var match = l2[2];
if(match){
var
l2$0 = match[2],
b2 = match[1],
b1 = l2[1],
l1$0 = a[2],
a2 = a[1],
r1 = caml_call2(f, a1, b1),
r2 = caml_call2(f, a2, b2),
block = [0, r2, 24029],
dst = block,
offset = 1,
l1$1 = l1$0,
l2$1 = l2$0;
for(;;){
a:
{
if(l1$1){
var b = l1$1[2], a1$0 = l1$1[1];
if(b){
if(l2$1){
var match$0 = l2$1[2];
if(match$0){
var
l2$2 = match$0[2],
b2$0 = match$0[1],
b1$1 = l2$1[1],
l1$2 = b[2],
a2$0 = b[1],
r1$1 = caml_call2(f, a1$0, b1$1),
r2$0 = caml_call2(f, a2$0, b2$0),
dst$0 = [0, r2$0, 24029];
dst[offset + 1] = [0, r1$1, dst$0];
dst = dst$0;
offset = 1;
l1$1 = l1$2;
l2$1 = l2$2;
continue;
}
}
}
else if(l2$1 && ! l2$1[2]){
var b1$2 = l2$1[1], r1$2 = caml_call2(f, a1$0, b1$2);
dst[offset + 1] = [0, r1$2, 0];
break a;
}
}
else if(! l2$1){dst[offset + 1] = 0; break a;}
dst[offset + 1] = Stdlib[1].call(null, cst_List_map2);
}
return [0, r1, block];
}
}
}
}
else if(l2 && ! l2[2]){
var b1$0 = l2[1], r1$0 = caml_call2(f, a1, b1$0);
return [0, r1$0, 0];
}
}
else if(! l2) return 0;
return Stdlib[1].call(null, cst_List_map2);
}
function rev_map2(f, l1, l2){
var accu = 0, l1$0 = l1, l2$0 = l2;
for(;;){
if(l1$0){
if(l2$0){
var
l2$1 = l2$0[2],
a2 = l2$0[1],
l1$1 = l1$0[2],
a1 = l1$0[1],
accu$0 = [0, caml_call2(f, a1, a2), accu];
accu = accu$0;
l1$0 = l1$1;
l2$0 = l2$1;
continue;
}
}
else if(! l2$0) return accu;
return Stdlib[1].call(null, "List.rev_map2");
}
}
function iter2(f, l1$1, l2$1){
var l1 = l1$1, l2 = l2$1;
for(;;){
if(l1){
if(l2){
var l2$0 = l2[2], a2 = l2[1], l1$0 = l1[2], a1 = l1[1];
caml_call2(f, a1, a2);
l1 = l1$0;
l2 = l2$0;
continue;
}
}
else if(! l2) return 0;
return Stdlib[1].call(null, "List.iter2");
}
}
function fold_left2(f, accu$1, l1$1, l2$1){
var accu = accu$1, l1 = l1$1, l2 = l2$1;
for(;;){
if(l1){
if(l2){
var
l2$0 = l2[2],
a2 = l2[1],
l1$0 = l1[2],
a1 = l1[1],
accu$0 = caml_call3(f, accu, a1, a2);
accu = accu$0;
l1 = l1$0;
l2 = l2$0;
continue;
}
}
else if(! l2) return accu;
return Stdlib[1].call(null, "List.fold_left2");
}
}
function fold_right2(f, l1, l2, accu){
if(l1){
if(l2){
var l2$0 = l2[2], a2 = l2[1], l1$0 = l1[2], a1 = l1[1];
return caml_call3(f, a1, a2, fold_right2(f, l1$0, l2$0, accu));
}
}
else if(! l2) return accu;
return Stdlib[1].call(null, "List.fold_right2");
}
function for_all(p, param$0){
var param = param$0;
for(;;){
if(! param) return 1;
var l = param[2], a = param[1], b = caml_call1(p, a);
if(! b) return b;
param = l;
}
}
function exists(p, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], a = param[1], b = caml_call1(p, a);
if(b) return b;
param = l;
}
}
function for_all2(p, l1$1, l2$1){
var l1 = l1$1, l2 = l2$1;
for(;;){
if(l1){
if(l2){
var
l2$0 = l2[2],
a2 = l2[1],
l1$0 = l1[2],
a1 = l1[1],
a = caml_call2(p, a1, a2);
if(! a) return a;
l1 = l1$0;
l2 = l2$0;
continue;
}
}
else if(! l2) return 1;
return Stdlib[1].call(null, "List.for_all2");
}
}
function exists2(p, l1$1, l2$1){
var l1 = l1$1, l2 = l2$1;
for(;;){
if(l1){
if(l2){
var
l2$0 = l2[2],
a2 = l2[1],
l1$0 = l1[2],
a1 = l1[1],
a = caml_call2(p, a1, a2);
if(a) return a;
l1 = l1$0;
l2 = l2$0;
continue;
}
}
else if(! l2) return 0;
return Stdlib[1].call(null, "List.exists2");
}
}
function mem(x, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], a = param[1], b = 0 === caml_compare(a, x) ? 1 : 0;
if(b) return b;
param = l;
}
}
function memq(x, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], a = param[1], b = a === x ? 1 : 0;
if(b) return b;
param = l;
}
}
function assoc(x, param$0){
var param = param$0;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var l = param[2], match = param[1], b = match[2], a = match[1];
if(0 === caml_compare(a, x)) return b;
param = l;
}
}
function assoc_opt(x, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], match = param[1], b = match[2], a = match[1];
if(0 === caml_compare(a, x)) return [0, b];
param = l;
}
}
function assq(x, param$0){
var param = param$0;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var l = param[2], match = param[1], b = match[2], a = match[1];
if(a === x) return b;
param = l;
}
}
function assq_opt(x, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], match = param[1], b = match[2], a = match[1];
if(a === x) return [0, b];
param = l;
}
}
function mem_assoc(x, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], a = param[1][1], b = 0 === caml_compare(a, x) ? 1 : 0;
if(b) return b;
param = l;
}
}
function mem_assq(x, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], a = param[1][1], b = a === x ? 1 : 0;
if(b) return b;
param = l;
}
}
function remove_assoc(x, param){
if(! param) return 0;
var l = param[2], pair = param[1], a = pair[1];
return 0 === caml_compare(a, x) ? l : [0, pair, remove_assoc(x, l)];
}
function remove_assq(x, param){
if(! param) return 0;
var l = param[2], pair = param[1], a = pair[1];
return a === x ? l : [0, pair, remove_assq(x, l)];
}
function find(p, param$0){
var param = param$0;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var l = param[2], x = param[1];
if(caml_call1(p, x)) return x;
param = l;
}
}
function find_opt(p, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], x = param[1];
if(caml_call1(p, x)) return [0, x];
param = l;
}
}
function find_index(p){
return function(param$0){
var i = 0, param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], a = param[1];
if(caml_call1(p, a)) return [0, i];
var i$0 = i + 1 | 0;
i = i$0;
param = l;
}};
}
function find_map(f, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], x = param[1], result = caml_call1(f, x);
if(result) return result;
param = l;
}
}
function find_mapi(f){
return function(param$0){
var i = 0, param = param$0;
for(;;){
if(! param) return 0;
var l = param[2], x = param[1], result = caml_call2(f, i, x);
if(result) return result;
var i$0 = i + 1 | 0;
i = i$0;
param = l;
}};
}
function find_all(p, param$1){
var param = param$1;
for(;;){
if(! param) return 0;
var l = param[2], x = param[1];
if(caml_call1(p, x)) break;
param = l;
}
var block = [0, x, 24029], dst = block, offset = 1, param$0 = l;
for(;;){
if(! param$0){dst[offset + 1] = 0; return block;}
var l$0 = param$0[2], x$0 = param$0[1];
if(caml_call1(p, x$0)){
var dst$0 = [0, x$0, 24029];
dst[offset + 1] = dst$0;
dst = dst$0;
offset = 1;
param$0 = l$0;
}
else
param$0 = l$0;
}
}
function filteri(p, l$1){
var i = 0, param = l$1;
for(;;){
if(! param) return 0;
var l = param[2], x = param[1], i$0 = i + 1 | 0;
if(caml_call2(p, i, x)) break;
i = i$0;
param = l;
}
var
block = [0, x, 24029],
dst = block,
offset = 1,
i$1 = i$0,
param$0 = l;
for(;;){
if(! param$0){dst[offset + 1] = 0; return block;}
var l$0 = param$0[2], x$0 = param$0[1], i$2 = i$1 + 1 | 0;
if(caml_call2(p, i$1, x$0)){
var dst$0 = [0, x$0, 24029];
dst[offset + 1] = dst$0;
dst = dst$0;
offset = 1;
i$1 = i$2;
param$0 = l$0;
}
else{i$1 = i$2; param$0 = l$0;}
}
}
function filter_map(f, param$1){
var param = param$1;
for(;;){
if(! param) return 0;
var l = param[2], x = param[1], match = caml_call1(f, x);
if(match) break;
param = l;
}
var
v = match[1],
block = [0, v, 24029],
dst = block,
offset = 1,
param$0 = l;
for(;;){
if(! param$0){dst[offset + 1] = 0; return block;}
var l$0 = param$0[2], x$0 = param$0[1], match$0 = caml_call1(f, x$0);
if(match$0){
var v$0 = match$0[1], dst$0 = [0, v$0, 24029];
dst[offset + 1] = dst$0;
dst = dst$0;
offset = 1;
param$0 = l$0;
}
else
param$0 = l$0;
}
}
function concat_map(f, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var xs = param[2], x = param[1], ys = caml_call1(f, x);
if(ys) break;
param = xs;
}
var
ys$1 = ys[2],
y = ys[1],
xs$1 = xs,
ys$4 = ys$1,
offset$0 = 1,
block = [0, y, 24029],
dst$1 = block;
for(;;){
var dst = dst$1, offset = offset$0, ys$2 = ys$4;
for(;;){
if(! ys$2){
if(xs$1){
var xs$0 = xs$1[2], x$0 = xs$1[1], ys$0 = caml_call1(f, x$0);
xs$1 = xs$0;
ys$4 = ys$0;
offset$0 = offset;
dst$1 = dst;
break;
}
dst[offset + 1] = 0;
return block;
}
var ys$3 = ys$2[2], y$0 = ys$2[1], dst$0 = [0, y$0, 24029];
dst[offset + 1] = dst$0;
dst = dst$0;
offset = 1;
ys$2 = ys$3;
}
}
}
function fold_left_map(f, accu, l){
var accu$0 = accu, l_accu = 0, param = l;
for(;;){
if(! param) return [0, accu$0, rev(l_accu)];
var
l$0 = param[2],
x = param[1],
match = caml_call2(f, accu$0, x),
x$0 = match[2],
accu$1 = match[1],
l_accu$0 = [0, x$0, l_accu];
accu$0 = accu$1;
l_accu = l_accu$0;
param = l$0;
}
}
function partition(p, l){
var yes = 0, no = 0, param = l;
for(;;){
if(! param){var a = rev(no); return [0, rev(yes), a];}
var l$0 = param[2], x = param[1];
if(caml_call1(p, x)){
var yes$0 = [0, x, yes];
yes = yes$0;
param = l$0;
}
else{var no$0 = [0, x, no]; no = no$0; param = l$0;}
}
}
function partition_map(p, l){
var left = 0, right = 0, param = l;
for(;;){
if(! param){var a = rev(right); return [0, rev(left), a];}
var l$0 = param[2], x = param[1], match = caml_call1(p, x);
if(0 === match[0]){
var v = match[1], left$0 = [0, v, left];
left = left$0;
param = l$0;
}
else{
var v$0 = match[1], right$0 = [0, v$0, right];
right = right$0;
param = l$0;
}
}
}
var a = [0, 0, 0];
function split(param){
if(! param) return a;
var
l = param[2],
match = param[1],
y = match[2],
x = match[1],
match$0 = split(l),
ry = match$0[2],
rx = match$0[1];
return [0, [0, x, rx], [0, y, ry]];
}
function combine(l1, l2){
if(l1){
if(l2){
var l2$0 = l2[2], a2 = l2[1], l1$0 = l1[2], a1 = l1[1];
return [0, [0, a1, a2], combine(l1$0, l2$0)];
}
}
else if(! l2) return 0;
return Stdlib[1].call(null, "List.combine");
}
function merge(cmp, l1, l2){
if(! l1) return l2;
if(! l2) return l1;
var t2 = l2[2], h2 = l2[1], t1 = l1[2], h1 = l1[1];
return 0 < caml_call2(cmp, h1, h2)
? [0, h2, merge(cmp, l1, t2)]
: [0, h1, merge(cmp, t1, l2)];
}
function stable_sort(cmp, l){
function sort(n, l){
if(2 === n){
if(l){
var match = l[2];
if(match){
var
tl = match[2],
x2 = match[1],
x1 = l[1],
s =
0 < caml_call2(cmp, x1, x2)
? [0, x2, [0, x1, 0]]
: [0, x1, [0, x2, 0]];
return [0, s, tl];
}
}
}
else if(3 === n && l){
var a = l[2];
if(a){
var match$2 = a[2];
if(match$2){
var
tl$1 = match$2[2],
x3 = match$2[1],
x2$0 = a[1],
x1$0 = l[1],
s$0 =
0 < caml_call2(cmp, x1$0, x2$0)
? 0
< caml_call2(cmp, x1$0, x3)
? 0
< caml_call2(cmp, x2$0, x3)
? [0, x3, [0, x2$0, [0, x1$0, 0]]]
: [0, x2$0, [0, x3, [0, x1$0, 0]]]
: [0, x2$0, [0, x1$0, [0, x3, 0]]]
: 0
< caml_call2(cmp, x2$0, x3)
? 0
< caml_call2(cmp, x1$0, x3)
? [0, x3, [0, x1$0, [0, x2$0, 0]]]
: [0, x1$0, [0, x3, [0, x2$0, 0]]]
: [0, x1$0, [0, x2$0, [0, x3, 0]]];
return [0, s$0, tl$1];
}
}
}
var
n1 = n >> 1,
n2 = n - n1 | 0,
match$0 = rev_sort(n1, l),
l2$0 = match$0[2],
s1 = match$0[1],
match$1 = rev_sort(n2, l2$0),
tl$0 = match$1[2],
s2 = match$1[1],
l1 = s1,
l2 = s2,
accu = 0;
for(;;){
if(l1){
if(l2){
var t2 = l2[2], h2 = l2[1], t1 = l1[2], h1 = l1[1];
if(0 < caml_call2(cmp, h1, h2)){
var accu$0 = [0, h1, accu];
l1 = t1;
accu = accu$0;
continue;
}
var accu$1 = [0, h2, accu];
l2 = t2;
accu = accu$1;
continue;
}
var b = rev_append(l1, accu);
}
else
var b = rev_append(l2, accu);
return [0, b, tl$0];
}
}
function rev_sort(n, l){
if(2 === n){
if(l){
var match = l[2];
if(match){
var
tl = match[2],
x2 = match[1],
x1 = l[1],
s =
0 < caml_call2(cmp, x1, x2)
? [0, x1, [0, x2, 0]]
: [0, x2, [0, x1, 0]];
return [0, s, tl];
}
}
}
else if(3 === n && l){
var a = l[2];
if(a){
var match$2 = a[2];
if(match$2){
var
tl$1 = match$2[2],
x3 = match$2[1],
x2$0 = a[1],
x1$0 = l[1],
s$0 =
0 < caml_call2(cmp, x1$0, x2$0)
? 0
< caml_call2(cmp, x2$0, x3)
? [0, x1$0, [0, x2$0, [0, x3, 0]]]
: 0
< caml_call2(cmp, x1$0, x3)
? [0, x1$0, [0, x3, [0, x2$0, 0]]]
: [0, x3, [0, x1$0, [0, x2$0, 0]]]
: 0
< caml_call2(cmp, x1$0, x3)
? [0, x2$0, [0, x1$0, [0, x3, 0]]]
: 0
< caml_call2(cmp, x2$0, x3)
? [0, x2$0, [0, x3, [0, x1$0, 0]]]
: [0, x3, [0, x2$0, [0, x1$0, 0]]];
return [0, s$0, tl$1];
}
}
}
var
n1 = n >> 1,
n2 = n - n1 | 0,
match$0 = sort(n1, l),
l2$0 = match$0[2],
s1 = match$0[1],
match$1 = sort(n2, l2$0),
tl$0 = match$1[2],
s2 = match$1[1],
l1 = s1,
l2 = s2,
accu = 0;
for(;;){
if(l1){
if(l2){
var t2 = l2[2], h2 = l2[1], t1 = l1[2], h1 = l1[1];
if(0 < caml_call2(cmp, h1, h2)){
var accu$0 = [0, h2, accu];
l2 = t2;
accu = accu$0;
continue;
}
var accu$1 = [0, h1, accu];
l1 = t1;
accu = accu$1;
continue;
}
var b = rev_append(l1, accu);
}
else
var b = rev_append(l2, accu);
return [0, b, tl$0];
}
}
var len = length(l);
return 2 <= len ? sort(len, l)[1] : l;
}
function sort_uniq(cmp, l){
function sort(n, l){
if(2 === n){
if(l){
var match = l[2];
if(match){
var
tl = match[2],
x2 = match[1],
x1 = l[1],
c$0 = caml_call2(cmp, x1, x2),
s =
0 === c$0
? [0, x1, 0]
: 0 <= c$0 ? [0, x2, [0, x1, 0]] : [0, x1, [0, x2, 0]];
return [0, s, tl];
}
}
}
else if(3 === n && l){
var a = l[2];
if(a){
var match$2 = a[2];
if(match$2){
var
tl$1 = match$2[2],
x3 = match$2[1],
x2$0 = a[1],
x1$0 = l[1],
c$1 = caml_call2(cmp, x1$0, x2$0);
if(0 === c$1)
var
c$2 = caml_call2(cmp, x2$0, x3),
s$0 =
0 === c$2
? [0, x2$0, 0]
: 0 <= c$2 ? [0, x3, [0, x2$0, 0]] : [0, x2$0, [0, x3, 0]];
else if(0 <= c$1){
var c$3 = caml_call2(cmp, x1$0, x3);
if(0 === c$3)
var s$0 = [0, x2$0, [0, x1$0, 0]];
else if(0 <= c$3)
var
c$4 = caml_call2(cmp, x2$0, x3),
s$0 =
0 === c$4
? [0, x2$0, [0, x1$0, 0]]
: 0
<= c$4
? [0, x3, [0, x2$0, [0, x1$0, 0]]]
: [0, x2$0, [0, x3, [0, x1$0, 0]]];
else
var s$0 = [0, x2$0, [0, x1$0, [0, x3, 0]]];
}
else{
var c$5 = caml_call2(cmp, x2$0, x3);
if(0 === c$5)
var s$0 = [0, x1$0, [0, x2$0, 0]];
else if(0 <= c$5)
var
c$6 = caml_call2(cmp, x1$0, x3),
s$0 =
0 === c$6
? [0, x1$0, [0, x2$0, 0]]
: 0
<= c$6
? [0, x3, [0, x1$0, [0, x2$0, 0]]]
: [0, x1$0, [0, x3, [0, x2$0, 0]]];
else
var s$0 = [0, x1$0, [0, x2$0, [0, x3, 0]]];
}
return [0, s$0, tl$1];
}
}
}
var
n1 = n >> 1,
n2 = n - n1 | 0,
match$0 = rev_sort(n1, l),
l2$0 = match$0[2],
s1 = match$0[1],
match$1 = rev_sort(n2, l2$0),
tl$0 = match$1[2],
s2 = match$1[1],
l1 = s1,
l2 = s2,
accu = 0;
for(;;){
if(l1){
if(l2){
var
t2 = l2[2],
h2 = l2[1],
t1 = l1[2],
h1 = l1[1],
c = caml_call2(cmp, h1, h2);
if(0 === c){
var accu$0 = [0, h1, accu];
l1 = t1;
l2 = t2;
accu = accu$0;
continue;
}
if(0 < c){
var accu$1 = [0, h1, accu];
l1 = t1;
accu = accu$1;
continue;
}
var accu$2 = [0, h2, accu];
l2 = t2;
accu = accu$2;
continue;
}
var b = rev_append(l1, accu);
}
else
var b = rev_append(l2, accu);
return [0, b, tl$0];
}
}
function rev_sort(n, l){
if(2 === n){
if(l){
var match = l[2];
if(match){
var
tl = match[2],
x2 = match[1],
x1 = l[1],
c$0 = caml_call2(cmp, x1, x2),
s =
0 === c$0
? [0, x1, 0]
: 0 < c$0 ? [0, x1, [0, x2, 0]] : [0, x2, [0, x1, 0]];
return [0, s, tl];
}
}
}
else if(3 === n && l){
var a = l[2];
if(a){
var match$2 = a[2];
if(match$2){
var
tl$1 = match$2[2],
x3 = match$2[1],
x2$0 = a[1],
x1$0 = l[1],
c$1 = caml_call2(cmp, x1$0, x2$0);
if(0 === c$1)
var
c$2 = caml_call2(cmp, x2$0, x3),
s$0 =
0 === c$2
? [0, x2$0, 0]
: 0 < c$2 ? [0, x2$0, [0, x3, 0]] : [0, x3, [0, x2$0, 0]];
else if(0 < c$1){
var c$3 = caml_call2(cmp, x2$0, x3);
if(0 === c$3)
var s$0 = [0, x1$0, [0, x2$0, 0]];
else if(0 < c$3)
var s$0 = [0, x1$0, [0, x2$0, [0, x3, 0]]];
else
var
c$4 = caml_call2(cmp, x1$0, x3),
s$0 =
0 === c$4
? [0, x1$0, [0, x2$0, 0]]
: 0
< c$4
? [0, x1$0, [0, x3, [0, x2$0, 0]]]
: [0, x3, [0, x1$0, [0, x2$0, 0]]];
}
else{
var c$5 = caml_call2(cmp, x1$0, x3);
if(0 === c$5)
var s$0 = [0, x2$0, [0, x1$0, 0]];
else if(0 < c$5)
var s$0 = [0, x2$0, [0, x1$0, [0, x3, 0]]];
else
var
c$6 = caml_call2(cmp, x2$0, x3),
s$0 =
0 === c$6
? [0, x2$0, [0, x1$0, 0]]
: 0
< c$6
? [0, x2$0, [0, x3, [0, x1$0, 0]]]
: [0, x3, [0, x2$0, [0, x1$0, 0]]];
}
return [0, s$0, tl$1];
}
}
}
var
n1 = n >> 1,
n2 = n - n1 | 0,
match$0 = sort(n1, l),
l2$0 = match$0[2],
s1 = match$0[1],
match$1 = sort(n2, l2$0),
tl$0 = match$1[2],
s2 = match$1[1],
l1 = s1,
l2 = s2,
accu = 0;
for(;;){
if(l1){
if(l2){
var
t2 = l2[2],
h2 = l2[1],
t1 = l1[2],
h1 = l1[1],
c = caml_call2(cmp, h1, h2);
if(0 === c){
var accu$0 = [0, h1, accu];
l1 = t1;
l2 = t2;
accu = accu$0;
continue;
}
if(0 <= c){
var accu$1 = [0, h2, accu];
l2 = t2;
accu = accu$1;
continue;
}
var accu$2 = [0, h1, accu];
l1 = t1;
accu = accu$2;
continue;
}
var b = rev_append(l1, accu);
}
else
var b = rev_append(l2, accu);
return [0, b, tl$0];
}
}
var len = length(l);
return 2 <= len ? sort(len, l)[1] : l;
}
function compare_lengths(l1$1, l2$1){
var l1 = l1$1, l2 = l2$1;
for(;;){
if(! l1) return l2 ? -1 : 0;
if(! l2) return 1;
var l2$0 = l2[2], l1$0 = l1[2];
l1 = l1$0;
l2 = l2$0;
}
}
function compare_length_with(l$1, n$1){
var l = l$1, n = n$1;
for(;;){
if(! l) return 0 === n ? 0 : 0 < n ? -1 : 1;
var l$0 = l[2];
if(0 >= n) return 1;
var n$0 = n - 1 | 0;
l = l$0;
n = n$0;
}
}
function is_empty(param){return param ? 0 : 1;}
function equal(eq, l1$1, l2$1){
var l1 = l1$1, l2 = l2$1;
for(;;){
if(l1){
if(l2){
var
l2$0 = l2[2],
a2 = l2[1],
l1$0 = l1[2],
a1 = l1[1],
a = caml_call2(eq, a1, a2);
if(! a) return a;
l1 = l1$0;
l2 = l2$0;
continue;
}
}
else if(! l2) return 1;
return 0;
}
}
function compare(cmp, l1$1, l2$1){
var l1 = l1$1, l2 = l2$1;
for(;;){
if(! l1) return l2 ? -1 : 0;
var l1$0 = l1[2], a1 = l1[1];
if(! l2) return 1;
var l2$0 = l2[2], a2 = l2[1], c = caml_call2(cmp, a1, a2);
if(0 !== c) return c;
l1 = l1$0;
l2 = l2$0;
}
}
function to_seq(l){
function aux(l, param){
if(! l) return 0;
var tail = l[2], x = l[1];
return [0, x, function(a){return aux(tail, a);}];
}
return function(a){return aux(l, a);};
}
function of_seq(seq){
var match = caml_call1(seq, 0);
if(! match) return 0;
var seq$0 = match[2], x1 = match[1], match$0 = caml_call1(seq$0, 0);
if(! match$0) return [0, x1, 0];
var
seq$1 = match$0[2],
x2 = match$0[1],
block = [0, x2, 24029],
dst = block,
offset = 1,
seq$2 = seq$1;
for(;;){
var match$1 = caml_call1(seq$2, 0);
if(match$1){
var
seq$3 = match$1[2],
x1$0 = match$1[1],
match$2 = caml_call1(seq$3, 0);
if(match$2){
var seq$4 = match$2[2], x2$0 = match$2[1], dst$0 = [0, x2$0, 24029];
dst[offset + 1] = [0, x1$0, dst$0];
dst = dst$0;
offset = 1;
seq$2 = seq$4;
continue;
}
dst[offset + 1] = [0, x1$0, 0];
}
else
dst[offset + 1] = 0;
return [0, x1, block];
}
}
runtime.caml_register_global
(17,
[0,
length,
compare_lengths,
compare_length_with,
is_empty,
cons,
hd,
tl,
nth,
nth_opt,
rev,
init,
append,
rev_append,
flatten,
flatten,
equal,
compare,
iter,
iteri,
map,
mapi,
rev_map,
filter_map,
concat_map,
fold_left_map,
fold_left,
fold_right,
iter2,
map2,
rev_map2,
fold_left2,
fold_right2,
for_all,
exists,
for_all2,
exists2,
mem,
memq,
find,
find_opt,
find_index,
find_map,
find_mapi,
find_all,
find_all,
filteri,
partition,
partition_map,
assoc,
assoc_opt,
assq,
assq_opt,
mem_assoc,
mem_assq,
remove_assoc,
remove_assq,
split,
combine,
stable_sort,
stable_sort,
stable_sort,
sort_uniq,
merge,
to_seq,
of_seq],
"Stdlib__List");
return;
}
(globalThis));
//# 3660 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Int:[N,N,N,F(1)*,N,N,F(1)*,F(2)*,F(2)*,F(2)*,F(2)*,F(1)*,F(2)*,F(1)*]
(function
(globalThis){
"use strict";
var runtime = globalThis.jsoo_runtime, caml_hash = runtime.caml_hash;
function abs(x){return 0 <= x ? x : - x | 0;}
function lognot(x){return x ^ -1;}
function equal(b, a){return b === a ? 1 : 0;}
var compare = runtime.caml_int_compare;
function min(x, y){return x <= y ? x : y;}
function max(x, y){return y <= x ? x : y;}
function to_string(x){return "" + x;}
function seeded_hash(seed, x){return caml_hash(10, 100, seed, x);}
function hash(x){return caml_hash(10, 100, 0, x);}
runtime.caml_register_global
(1,
[0,
0,
1,
-1,
abs,
2147483647,
-2147483648,
lognot,
equal,
compare,
min,
max,
to_string,
seeded_hash,
hash],
"Stdlib__Int");
return;
}
(globalThis));
//# 3698 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Bytes:[F(2),F(2),N,F(1),F(1),F(1),F(3),F(3),F(3),F(4),F(5),F(5),F(2),F(2),F(2),F(2),F(2),F(2),F(3),F(3),F(2),F(2),F(1),F(1),F(2),F(2),F(2),F(2),F(3),F(3),F(3),F(3),F(2),F(3),F(3),F(1),F(1),F(1),F(1),F(2)*,F(2)*,F(2),F(2),F(1),F(1)*,F(2),F(1)*->F(1),F(1)*->F(1),F(1),F(2),F(3),F(1),F(2),F(3),F(1),F(2),F(3),F(1),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_blit_bytes = runtime.caml_blit_bytes,
caml_bswap16 = runtime.caml_bswap16,
caml_bytes_get = runtime.caml_bytes_get,
caml_bytes_get16 = runtime.caml_bytes_get16,
caml_bytes_get32 = runtime.caml_bytes_get32,
caml_bytes_get64 = runtime.caml_bytes_get64,
caml_bytes_of_string = runtime.caml_bytes_of_string,
caml_bytes_set = runtime.caml_bytes_set,
caml_bytes_set16 = runtime.caml_bytes_set16,
caml_bytes_set32 = runtime.caml_bytes_set32,
caml_bytes_set64 = runtime.caml_bytes_set64,
caml_bytes_unsafe_get = runtime.caml_bytes_unsafe_get,
caml_bytes_unsafe_set = runtime.caml_bytes_unsafe_set,
caml_create_bytes = runtime.caml_create_bytes,
caml_fill_bytes = runtime.caml_fill_bytes,
caml_int32_bswap = runtime.caml_int32_bswap,
caml_int64_bswap = runtime.caml_int64_bswap,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_bytes_length = runtime.caml_ml_bytes_length,
caml_string_of_bytes = runtime.caml_string_of_bytes,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
dummy = 0,
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Uchar = global_data.Stdlib__Uchar,
Assert_failure = global_data.Assert_failure,
Stdlib_Sys = global_data.Stdlib__Sys,
Stdlib_Int = global_data.Stdlib__Int,
Stdlib_Seq = global_data.Stdlib__Seq,
Stdlib_Char = global_data.Stdlib__Char;
function make(n, c){
var s = caml_create_bytes(n);
caml_fill_bytes(s, 0, n, c);
return s;
}
function init(n, f){
var s = caml_create_bytes(n), a = n - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
caml_bytes_unsafe_set(s, i, caml_call1(f, i));
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return s;
}
var empty = caml_create_bytes(0);
function copy(s){
var len = caml_ml_bytes_length(s), r = caml_create_bytes(len);
caml_blit_bytes(s, 0, r, 0, len);
return r;
}
function to_string(b){return caml_string_of_bytes(copy(b));}
function of_string(s){return copy(caml_bytes_of_string(s));}
function sub(s, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs){
var r = caml_create_bytes(len);
caml_blit_bytes(s, ofs, r, 0, len);
return r;
}
return Stdlib[1].call(null, "String.sub / Bytes.sub");
}
function sub_string(b, ofs, len){
return caml_string_of_bytes(sub(b, ofs, len));
}
function symbol(a, b){
var c = a + b | 0, d = b < 0, match = c < 0;
a:
{
if(a < 0){if(! d || match) break a;} else if(d || ! match) break a;
return Stdlib[1].call(null, "Bytes.extend");
}
return c;
}
function extend(s, left, right){
var
len = symbol(symbol(caml_ml_bytes_length(s), left), right),
r = caml_create_bytes(len);
if(0 <= left)
var dstoff = left, srcoff = 0;
else
var dstoff = 0, srcoff = - left | 0;
var
cpylen =
Stdlib_Int[10].call
(null, caml_ml_bytes_length(s) - srcoff | 0, len - dstoff | 0);
if(0 < cpylen) caml_blit_bytes(s, srcoff, r, dstoff, cpylen);
return r;
}
function fill(s, ofs, len, c){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs)
return caml_fill_bytes(s, ofs, len, c);
return Stdlib[1].call(null, "String.fill / Bytes.fill");
}
function blit(s1, ofs1, s2, ofs2, len){
if
(0 <= len
&&
0 <= ofs1
&&
(caml_ml_bytes_length(s1) - len | 0) >= ofs1
&& 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2)
return caml_blit_bytes(s1, ofs1, s2, ofs2, len);
return Stdlib[1].call(null, "Bytes.blit");
}
function blit_string(s1, ofs1, s2, ofs2, len){
if
(0 <= len
&&
0 <= ofs1
&&
(runtime.caml_ml_string_length(s1) - len | 0) >= ofs1
&& 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2)
return runtime.caml_blit_string(s1, ofs1, s2, ofs2, len);
return Stdlib[1].call(null, "String.blit / Bytes.blit_string");
}
function iter(f, a){
var b = caml_ml_bytes_length(a) - 1 | 0;
if(b >= 0){
var i = 0;
for(;;){
caml_call1(f, caml_bytes_unsafe_get(a, i));
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function iteri(f, a){
var b = caml_ml_bytes_length(a) - 1 | 0;
if(b >= 0){
var i = 0;
for(;;){
caml_call2(f, i, caml_bytes_unsafe_get(a, i));
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function concat(sep, l){
if(! l) return empty;
var seplen = caml_ml_bytes_length(sep);
a:
{
var acc = 0, param = l, pos$1 = 0;
for(;;){
if(! param){var a = acc; break a;}
var hd = param[1];
if(! param[2]) break;
var
tl = param[2],
x = (caml_ml_bytes_length(hd) + seplen | 0) + acc | 0;
if(acc <= x){
acc = x;
param = tl;
}
else{acc = Stdlib[1].call(null, "Bytes.concat"); param = tl;}
}
var a = caml_ml_bytes_length(hd) + acc | 0;
}
var dst = caml_create_bytes(a), pos = pos$1, param$0 = l;
for(;;){
if(! param$0) return dst;
var hd$0 = param$0[1];
if(! param$0[2]){
caml_blit_bytes(hd$0, 0, dst, pos, caml_ml_bytes_length(hd$0));
return dst;
}
var tl$0 = param$0[2];
caml_blit_bytes(hd$0, 0, dst, pos, caml_ml_bytes_length(hd$0));
caml_blit_bytes
(sep, 0, dst, pos + caml_ml_bytes_length(hd$0) | 0, seplen);
var pos$0 = (pos + caml_ml_bytes_length(hd$0) | 0) + seplen | 0;
pos = pos$0;
param$0 = tl$0;
}
}
function cat(s1, s2){
var
l1 = caml_ml_bytes_length(s1),
l2 = caml_ml_bytes_length(s2),
r = caml_create_bytes(l1 + l2 | 0);
caml_blit_bytes(s1, 0, r, 0, l1);
caml_blit_bytes(s2, 0, r, l1, l2);
return r;
}
function is_space(param){
var a = param - 9 | 0;
a:
{
if(4 < a >>> 0){if(23 !== a) break a;} else if(2 === a) break a;
return 1;
}
return 0;
}
function trim(s){
var len = caml_ml_bytes_length(s), i = 0;
for(;;){
if(i >= len) break;
if(! is_space(caml_bytes_unsafe_get(s, i))) break;
var i$0 = i + 1 | 0;
i = i$0;
}
var j = len - 1 | 0;
for(;;){
if(i <= j && is_space(caml_bytes_unsafe_get(s, j))){var j$0 = j - 1 | 0; j = j$0; continue;}
return i <= j ? sub(s, i, (j - i | 0) + 1 | 0) : empty;
}
}
function unsafe_escape(s){
var e = caml_ml_bytes_length(s) - 1 | 0, d = 0;
if(e < 0)
var n$0 = d;
else{
var n = d, i$0 = 0;
for(;;){
var match = caml_bytes_unsafe_get(s, i$0);
a:
{
b:
{
c:
{
if(32 <= match){
var a = match - 34 | 0;
if(58 < a >>> 0){
if(93 <= a) break c;
}
else if(56 < a - 1 >>> 0) break b;
var b = 1;
break a;
}
if(11 <= match){
if(13 === match) break b;
}
else if(8 <= match) break b;
}
var b = 4;
break a;
}
var b = 2;
}
var g = n + b | 0, j = i$0 + 1 | 0;
if(e === i$0){var n$0 = g; break;}
n = g;
i$0 = j;
}
}
if(n$0 === caml_ml_bytes_length(s)) return s;
var s$0 = caml_create_bytes(n$0), f = caml_ml_bytes_length(s) - 1 | 0;
if(f >= 0){
var n$1 = 0, i = 0;
for(;;){
var c = caml_bytes_unsafe_get(s, i);
a:
{
b:
{
c:
{
if(35 <= c){
if(92 !== c){if(127 <= c) break b; break c;}
}
else{
if(32 > c){
if(14 <= c) break b;
switch(c){
case 8:
caml_bytes_unsafe_set(s$0, n$1, 92);
var n$2 = n$1 + 1 | 0;
caml_bytes_unsafe_set(s$0, n$2, 98);
var n$10 = n$2;
break a;
case 9:
caml_bytes_unsafe_set(s$0, n$1, 92);
var n$3 = n$1 + 1 | 0;
caml_bytes_unsafe_set(s$0, n$3, 116);
var n$10 = n$3;
break a;
case 10:
caml_bytes_unsafe_set(s$0, n$1, 92);
var n$4 = n$1 + 1 | 0;
caml_bytes_unsafe_set(s$0, n$4, 110);
var n$10 = n$4;
break a;
case 13:
caml_bytes_unsafe_set(s$0, n$1, 92);
var n$5 = n$1 + 1 | 0;
caml_bytes_unsafe_set(s$0, n$5, 114);
var n$10 = n$5;
break a;
default: break b;
}
}
if(34 > c) break c;
}
caml_bytes_unsafe_set(s$0, n$1, 92);
var n$9 = n$1 + 1 | 0;
caml_bytes_unsafe_set(s$0, n$9, c);
var n$10 = n$9;
break a;
}
caml_bytes_unsafe_set(s$0, n$1, c);
var n$10 = n$1;
break a;
}
caml_bytes_unsafe_set(s$0, n$1, 92);
var n$6 = n$1 + 1 | 0;
caml_bytes_unsafe_set(s$0, n$6, 48 + (c / 100 | 0) | 0);
var n$7 = n$6 + 1 | 0;
caml_bytes_unsafe_set(s$0, n$7, 48 + ((c / 10 | 0) % 10 | 0) | 0);
var n$8 = n$7 + 1 | 0;
caml_bytes_unsafe_set(s$0, n$8, 48 + (c % 10 | 0) | 0);
var n$10 = n$8;
}
var n$11 = n$10 + 1 | 0, h = i + 1 | 0;
if(f === i) break;
n$1 = n$11;
i = h;
}
}
return s$0;
}
function escaped(b){var b$0 = copy(b); return unsafe_escape(b$0);}
function map(f, s){
var l = caml_ml_bytes_length(s);
if(0 === l) return s;
var r = caml_create_bytes(l), a = l - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
caml_bytes_unsafe_set(r, i, caml_call1(f, caml_bytes_unsafe_get(s, i)));
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return r;
}
function mapi(f, s){
var l = caml_ml_bytes_length(s);
if(0 === l) return s;
var r = caml_create_bytes(l), a = l - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
caml_bytes_unsafe_set
(r, i, caml_call2(f, i, caml_bytes_unsafe_get(s, i)));
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return r;
}
function fold_left(f, x, a){
var b = caml_ml_bytes_length(a) - 1 | 0;
if(b < 0)
var r$0 = x;
else{
var r = x, i = 0;
for(;;){
var c = caml_call2(f, r, caml_bytes_unsafe_get(a, i)), d = i + 1 | 0;
if(b === i){var r$0 = c; break;}
r = c;
i = d;
}
}
return r$0;
}
function fold_right(f, a, x){
var b = caml_ml_bytes_length(a) - 1 | 0;
if(b < 0)
var r$0 = x;
else{
var r = x, i = b;
for(;;){
var c = caml_call2(f, caml_bytes_unsafe_get(a, i), r), d = i - 1 | 0;
if(0 === i){var r$0 = c; break;}
r = c;
i = d;
}
}
return r$0;
}
function exists(p, s){
var n = caml_ml_bytes_length(s), i = 0;
for(;;){
if(i === n) return 0;
if(caml_call1(p, caml_bytes_unsafe_get(s, i))) return 1;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function for_all(p, s){
var n = caml_ml_bytes_length(s), i = 0;
for(;;){
if(i === n) return 1;
if(! caml_call1(p, caml_bytes_unsafe_get(s, i))) return 0;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function uppercase_ascii(s){return map(Stdlib_Char[4], s);}
function lowercase_ascii(s){return map(Stdlib_Char[3], s);}
function apply1(f, s){
if(0 === caml_ml_bytes_length(s)) return s;
var r = copy(s);
caml_bytes_unsafe_set(r, 0, caml_call1(f, caml_bytes_unsafe_get(s, 0)));
return r;
}
function capitalize_ascii(s){return apply1(Stdlib_Char[4], s);}
function uncapitalize_ascii(s){return apply1(Stdlib_Char[3], s);}
function starts_with(prefix, s){
var
len_s = caml_ml_bytes_length(s),
len_pre = caml_ml_bytes_length(prefix),
a = len_pre <= len_s ? 1 : 0;
if(! a) return a;
var i = 0;
for(;;){
if(i === len_pre) return 1;
if(caml_bytes_unsafe_get(s, i) !== caml_bytes_unsafe_get(prefix, i))
return 0;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function ends_with(suffix, s){
var
len_s = caml_ml_bytes_length(s),
len_suf = caml_ml_bytes_length(suffix),
diff = len_s - len_suf | 0,
a = 0 <= diff ? 1 : 0;
if(! a) return a;
var i = 0;
for(;;){
if(i === len_suf) return 1;
if
(caml_bytes_unsafe_get(s, diff + i | 0)
!== caml_bytes_unsafe_get(suffix, i))
return 0;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function index_rec(s, lim, i$1, c){
var i = i$1;
for(;;){
if(lim <= i) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
if(caml_bytes_unsafe_get(s, i) === c) return i;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function index(s, c){return index_rec(s, caml_ml_bytes_length(s), 0, c);}
function index_rec_opt(s, lim, i$1, c){
var i = i$1;
for(;;){
if(lim <= i) return 0;
if(caml_bytes_unsafe_get(s, i) === c) return [0, i];
var i$0 = i + 1 | 0;
i = i$0;
}
}
function index_opt(s, c){
return index_rec_opt(s, caml_ml_bytes_length(s), 0, c);
}
function index_from(s, i, c){
var l = caml_ml_bytes_length(s);
if(0 <= i && l >= i) return index_rec(s, l, i, c);
return Stdlib[1].call(null, "String.index_from / Bytes.index_from");
}
function index_from_opt(s, i, c){
var l = caml_ml_bytes_length(s);
if(0 <= i && l >= i) return index_rec_opt(s, l, i, c);
return Stdlib[1].call
(null, "String.index_from_opt / Bytes.index_from_opt");
}
function rindex_rec(s, i$1, c){
var i = i$1;
for(;;){
if(0 > i) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
if(caml_bytes_unsafe_get(s, i) === c) return i;
var i$0 = i - 1 | 0;
i = i$0;
}
}
function rindex(s, c){
return rindex_rec(s, caml_ml_bytes_length(s) - 1 | 0, c);
}
function rindex_from(s, i, c){
if(-1 <= i && caml_ml_bytes_length(s) > i) return rindex_rec(s, i, c);
return Stdlib[1].call(null, "String.rindex_from / Bytes.rindex_from");
}
function rindex_rec_opt(s, i$1, c){
var i = i$1;
for(;;){
if(0 > i) return 0;
if(caml_bytes_unsafe_get(s, i) === c) return [0, i];
var i$0 = i - 1 | 0;
i = i$0;
}
}
function rindex_opt(s, c){
return rindex_rec_opt(s, caml_ml_bytes_length(s) - 1 | 0, c);
}
function rindex_from_opt(s, i, c){
if(-1 <= i && caml_ml_bytes_length(s) > i) return rindex_rec_opt(s, i, c);
return Stdlib[1].call
(null, "String.rindex_from_opt / Bytes.rindex_from_opt");
}
function contains_from(s, i, c){
var l = caml_ml_bytes_length(s);
if(0 <= i && l >= i)
try{index_rec(s, l, i, c); return 1;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
return Stdlib[1].call(null, "String.contains_from / Bytes.contains_from");
}
function contains(s, c){return contains_from(s, 0, c);}
function rcontains_from(s, i, c){
if(0 <= i && caml_ml_bytes_length(s) > i)
try{rindex_rec(s, i, c); return 1;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
return Stdlib[1].call
(null, "String.rcontains_from / Bytes.rcontains_from");
}
var compare = runtime.caml_bytes_compare;
function split_on_char(sep, s){
var
b = caml_ml_bytes_length(s),
c = caml_ml_bytes_length(s) - 1 | 0,
a = 0;
if(c < 0)
var j$1 = b, r$1 = a;
else{
var j = b, r = a, i = c;
for(;;){
if(caml_bytes_unsafe_get(s, i) === sep)
var j$0 = i, r$0 = [0, sub(s, i + 1 | 0, (j - i | 0) - 1 | 0), r];
else
var j$0 = j, r$0 = r;
var d = i - 1 | 0;
if(0 === i){var j$1 = j$0, r$1 = r$0; break;}
j = j$0;
r = r$0;
i = d;
}
}
return [0, sub(s, 0, j$1), r$1];
}
function to_seq(s){
function aux(i, param){
if(i === caml_ml_bytes_length(s)) return 0;
var x = caml_bytes_get(s, i), a = i + 1 | 0;
return [0, x, function(b){return aux(a, b);}];
}
return function(a){return aux(0, a);};
}
function to_seqi(s){
function aux(i, param){
if(i === caml_ml_bytes_length(s)) return 0;
var x = caml_bytes_get(s, i), a = i + 1 | 0;
return [0, [0, i, x], function(b){return aux(a, b);}];
}
return function(a){return aux(0, a);};
}
function of_seq(i){
var buf = [0, make(256, 0)], n = [0, 0];
Stdlib_Seq[4].call
(null,
function(c){
if(n[1] === caml_ml_bytes_length(buf[1])){
var
new_len =
Stdlib_Int[10].call
(null, 2 * caml_ml_bytes_length(buf[1]) | 0, Stdlib_Sys[12]);
if(caml_ml_bytes_length(buf[1]) === new_len)
Stdlib[2].call(null, "Bytes.of_seq: cannot grow bytes");
var new_buf = make(new_len, 0);
blit(buf[1], 0, new_buf, 0, n[1]);
buf[1] = new_buf;
}
caml_bytes_set(buf[1], n[1], c);
n[1]++;
return 0;
},
i);
return sub(buf[1], 0, n[1]);
}
function unsafe_get_uint16_le(b, i){
return Stdlib_Sys[11]
? caml_bswap16(caml_bytes_get16(b, i))
: caml_bytes_get16(b, i);
}
function unsafe_get_uint16_be(b, i){
return Stdlib_Sys[11]
? caml_bytes_get16(b, i)
: caml_bswap16(caml_bytes_get16(b, i));
}
function get_int8(b, i){
var a = Stdlib_Sys[10] - 8 | 0, c = Stdlib_Sys[10] - 8 | 0;
return caml_bytes_get(b, i) << c >> a;
}
function get_uint16_le(b, i){
return Stdlib_Sys[11]
? caml_bswap16(caml_bytes_get16(b, i))
: caml_bytes_get16(b, i);
}
function get_uint16_be(b, i){
return Stdlib_Sys[11]
? caml_bytes_get16(b, i)
: caml_bswap16(caml_bytes_get16(b, i));
}
function get_int16_ne(b, i){
var a = Stdlib_Sys[10] - 16 | 0, c = Stdlib_Sys[10] - 16 | 0;
return caml_bytes_get16(b, i) << c >> a;
}
function get_int16_le(b, i){
var a = Stdlib_Sys[10] - 16 | 0, c = Stdlib_Sys[10] - 16 | 0;
return get_uint16_le(b, i) << c >> a;
}
function get_int16_be(b, i){
var a = Stdlib_Sys[10] - 16 | 0, c = Stdlib_Sys[10] - 16 | 0;
return get_uint16_be(b, i) << c >> a;
}
function get_int32_le(b, i){
return Stdlib_Sys[11]
? caml_int32_bswap(caml_bytes_get32(b, i))
: caml_bytes_get32(b, i);
}
function get_int32_be(b, i){
return Stdlib_Sys[11]
? caml_bytes_get32(b, i)
: caml_int32_bswap(caml_bytes_get32(b, i));
}
function get_int64_le(b, i){
return Stdlib_Sys[11]
? caml_int64_bswap(caml_bytes_get64(b, i))
: caml_bytes_get64(b, i);
}
function get_int64_be(b, i){
return Stdlib_Sys[11]
? caml_bytes_get64(b, i)
: caml_int64_bswap(caml_bytes_get64(b, i));
}
function unsafe_set_uint16_le(b, i, x){
if(Stdlib_Sys[11]){caml_bytes_set16(b, i, caml_bswap16(x)); return;}
caml_bytes_set16(b, i, x);
}
function unsafe_set_uint16_be(b, i, x){
if(Stdlib_Sys[11]){caml_bytes_set16(b, i, x); return;}
caml_bytes_set16(b, i, caml_bswap16(x));
}
function set_int16_le(b, i, x){
return Stdlib_Sys[11]
? caml_bytes_set16(b, i, caml_bswap16(x))
: caml_bytes_set16(b, i, x);
}
function set_int16_be(b, i, x){
return Stdlib_Sys[11]
? caml_bytes_set16(b, i, x)
: caml_bytes_set16(b, i, caml_bswap16(x));
}
function set_int32_le(b, i, x){
return Stdlib_Sys[11]
? caml_bytes_set32(b, i, caml_int32_bswap(x))
: caml_bytes_set32(b, i, x);
}
function set_int32_be(b, i, x){
return Stdlib_Sys[11]
? caml_bytes_set32(b, i, x)
: caml_bytes_set32(b, i, caml_int32_bswap(x));
}
function set_int64_le(b, i, x){
return Stdlib_Sys[11]
? caml_bytes_set64(b, i, caml_int64_bswap(x))
: caml_bytes_set64(b, i, x);
}
function set_int64_be(b, i, x){
return Stdlib_Sys[11]
? caml_bytes_set64(b, i, x)
: caml_bytes_set64(b, i, caml_int64_bswap(x));
}
var dec_invalid = Stdlib_Uchar[22];
function dec_ret(n, u){
var a = Stdlib_Uchar[9].call(null, u);
return Stdlib_Uchar[21].call(null, n, a);
}
function not_in_x80_to_xBF(b){return 2 !== (b >>> 6 | 0) ? 1 : 0;}
function not_in_xA0_to_xBF(b){return 5 !== (b >>> 5 | 0) ? 1 : 0;}
function not_in_x80_to_x9F(b){return 4 !== (b >>> 5 | 0) ? 1 : 0;}
function not_in_x90_to_xBF(b){
var a = b < 144 ? 1 : 0, c = a || (191 < b ? 1 : 0);
return c;
}
function not_in_x80_to_x8F(b){return 8 !== (b >>> 4 | 0) ? 1 : 0;}
function utf_8_uchar_3(b0, b1, b2){
return (b0 & 15) << 12 | (b1 & 63) << 6 | b2 & 63;
}
function utf_8_uchar_4(b0, b1, b2, b3){
return (b0 & 7) << 18 | (b1 & 63) << 12 | (b2 & 63) << 6 | b3 & 63;
}
function get_utf_8_uchar(b, i){
var b0 = caml_bytes_get(b, i), max = caml_ml_bytes_length(b) - 1 | 0;
a:
{
if(224 <= b0){
if(237 <= b0){
if(245 <= b0) break a;
switch(b0 - 237 | 0){
case 0:
var i$0 = i + 1 | 0;
if(max < i$0) return dec_invalid(1);
var b1$4 = caml_bytes_unsafe_get(b, i$0);
if(not_in_x80_to_x9F(b1$4)) return dec_invalid(1);
var i$1 = i$0 + 1 | 0;
if(max < i$1) return dec_invalid(2);
var b2$3 = caml_bytes_unsafe_get(b, i$1);
return not_in_x80_to_xBF(b2$3)
? dec_invalid(2)
: dec_ret(3, utf_8_uchar_3(b0, b1$4, b2$3));
case 3:
var i$4 = i + 1 | 0;
if(max < i$4) return dec_invalid(1);
var b1$2 = caml_bytes_unsafe_get(b, i$4);
if(not_in_x90_to_xBF(b1$2)) return dec_invalid(1);
var i$5 = i$4 + 1 | 0;
if(max < i$5) return dec_invalid(2);
var b2$1 = caml_bytes_unsafe_get(b, i$5);
if(not_in_x80_to_xBF(b2$1)) return dec_invalid(2);
var i$6 = i$5 + 1 | 0;
if(max < i$6) return dec_invalid(3);
var b3$1 = caml_bytes_unsafe_get(b, i$6);
return not_in_x80_to_xBF(b3$1)
? dec_invalid(3)
: dec_ret(4, utf_8_uchar_4(b0, b1$2, b2$1, b3$1));
case 7:
var i$10 = i + 1 | 0;
if(max < i$10) return dec_invalid(1);
var b1$0 = caml_bytes_unsafe_get(b, i$10);
if(not_in_x80_to_x8F(b1$0)) return dec_invalid(1);
var i$11 = i$10 + 1 | 0;
if(max < i$11) return dec_invalid(2);
var b2 = caml_bytes_unsafe_get(b, i$11);
if(not_in_x80_to_xBF(b2)) return dec_invalid(2);
var i$12 = i$11 + 1 | 0;
if(max < i$12) return dec_invalid(3);
var b3 = caml_bytes_unsafe_get(b, i$12);
return not_in_x80_to_xBF(b3)
? dec_invalid(3)
: dec_ret(4, utf_8_uchar_4(b0, b1$0, b2, b3));
case 1:
case 2: break;
default:
var i$7 = i + 1 | 0;
if(max < i$7) return dec_invalid(1);
var b1$1 = caml_bytes_unsafe_get(b, i$7);
if(not_in_x80_to_xBF(b1$1)) return dec_invalid(1);
var i$8 = i$7 + 1 | 0;
if(max < i$8) return dec_invalid(2);
var b2$0 = caml_bytes_unsafe_get(b, i$8);
if(not_in_x80_to_xBF(b2$0)) return dec_invalid(2);
var i$9 = i$8 + 1 | 0;
if(max < i$9) return dec_invalid(3);
var b3$0 = caml_bytes_unsafe_get(b, i$9);
return not_in_x80_to_xBF(b3$0)
? dec_invalid(3)
: dec_ret(4, utf_8_uchar_4(b0, b1$1, b2$0, b3$0));
}
}
else if(225 > b0){
var i$13 = i + 1 | 0;
if(max < i$13) return dec_invalid(1);
var b1$5 = caml_bytes_unsafe_get(b, i$13);
if(not_in_xA0_to_xBF(b1$5)) return dec_invalid(1);
var i$14 = i$13 + 1 | 0;
if(max < i$14) return dec_invalid(2);
var b2$4 = caml_bytes_unsafe_get(b, i$14);
return not_in_x80_to_xBF(b2$4)
? dec_invalid(2)
: dec_ret(3, utf_8_uchar_3(b0, b1$5, b2$4));
}
var i$2 = i + 1 | 0;
if(max < i$2) return dec_invalid(1);
var b1$3 = caml_bytes_unsafe_get(b, i$2);
if(not_in_x80_to_xBF(b1$3)) return dec_invalid(1);
var i$3 = i$2 + 1 | 0;
if(max < i$3) return dec_invalid(2);
var b2$2 = caml_bytes_unsafe_get(b, i$3);
return not_in_x80_to_xBF(b2$2)
? dec_invalid(2)
: dec_ret(3, utf_8_uchar_3(b0, b1$3, b2$2));
}
if(128 > b0) return dec_ret(1, b0);
if(194 <= b0){
var i$15 = i + 1 | 0;
if(max < i$15) return dec_invalid(1);
var b1 = caml_bytes_unsafe_get(b, i$15);
return not_in_x80_to_xBF(b1)
? dec_invalid(1)
: dec_ret(2, (b0 & 31) << 6 | b1 & 63);
}
}
return dec_invalid(1);
}
var
cst_bytes_ml = "bytes.ml",
a = [0, cst_bytes_ml, 679, 9],
b = [0, cst_bytes_ml, 654, 20];
function set_utf_8_uchar(b$0, i, u){
function set(c, b, a){caml_bytes_unsafe_set(c, b, a);}
var
max = caml_ml_bytes_length(b$0) - 1 | 0,
u$0 = Stdlib_Uchar[10].call(null, u);
if(0 > u$0) throw caml_maybe_attach_backtrace([0, Assert_failure, b], 1);
if(127 >= u$0){caml_bytes_set(b$0, i, u$0); return 1;}
if(2047 >= u$0){
var last$1 = i + 1 | 0;
return max < last$1
? 0
: (caml_bytes_set
(b$0, i, 192 | u$0 >>> 6 | 0),
set(b$0, last$1, 128 | u$0 & 63),
2);
}
if(65535 >= u$0){
var last$0 = i + 2 | 0;
return max < last$0
? 0
: (caml_bytes_set
(b$0, i, 224 | u$0 >>> 12 | 0),
set(b$0, i + 1 | 0, 128 | (u$0 >>> 6 | 0) & 63),
set(b$0, last$0, 128 | u$0 & 63),
3);
}
if(1114111 < u$0)
throw caml_maybe_attach_backtrace([0, Assert_failure, a], 1);
var last = i + 3 | 0;
return max < last
? 0
: (caml_bytes_set
(b$0, i, 240 | u$0 >>> 18 | 0),
set(b$0, i + 1 | 0, 128 | (u$0 >>> 12 | 0) & 63),
set(b$0, i + 2 | 0, 128 | (u$0 >>> 6 | 0) & 63),
set(b$0, last, 128 | u$0 & 63),
4);
}
function is_valid_utf_8(b){
var max = caml_ml_bytes_length(b) - 1 | 0, i = 0;
for(;;){
if(max < i) return 1;
var match = caml_bytes_unsafe_get(b, i);
a:
{
if(224 <= match){
if(237 <= match){
if(245 <= match) break a;
switch(match - 237 | 0){
case 0:
var last = i + 2 | 0;
if
(max >= last
&&
!
not_in_x80_to_x9F(caml_bytes_unsafe_get(b, i + 1 | 0))
&& ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b, last))){var i$0 = last + 1 | 0; i = i$0; continue;}
return 0;
case 3:
var last$1 = i + 3 | 0;
if
(max >= last$1
&&
!
not_in_x90_to_xBF(caml_bytes_unsafe_get(b, i + 1 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b, i + 2 | 0))
&& ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b, last$1))){var i$2 = last$1 + 1 | 0; i = i$2; continue;}
return 0;
case 7:
var last$3 = i + 3 | 0;
if
(max >= last$3
&&
!
not_in_x80_to_x8F(caml_bytes_unsafe_get(b, i + 1 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b, i + 2 | 0))
&& ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b, last$3))){var i$4 = last$3 + 1 | 0; i = i$4; continue;}
return 0;
case 1:
case 2: break;
default:
var last$2 = i + 3 | 0;
if
(max >= last$2
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b, i + 1 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b, i + 2 | 0))
&& ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b, last$2))){var i$3 = last$2 + 1 | 0; i = i$3; continue;}
return 0;
}
}
else if(225 > match){
var last$4 = i + 2 | 0;
if
(max >= last$4
&&
!
not_in_xA0_to_xBF(caml_bytes_unsafe_get(b, i + 1 | 0))
&& ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b, last$4))){var i$5 = last$4 + 1 | 0; i = i$5; continue;}
return 0;
}
var last$0 = i + 2 | 0;
if
(max >= last$0
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b, i + 1 | 0))
&& ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b, last$0))){var i$1 = last$0 + 1 | 0; i = i$1; continue;}
return 0;
}
if(128 > match){var i$7 = i + 1 | 0; i = i$7; continue;}
if(194 <= match){
var last$5 = i + 1 | 0;
if
(max >= last$5
&& ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b, last$5))){var i$6 = last$5 + 1 | 0; i = i$6; continue;}
return 0;
}
}
return 0;
}
}
var cst_index_out_of_bounds = "index out of bounds";
function get_utf_16be_uchar(b, i){
var max = caml_ml_bytes_length(b) - 1 | 0;
if(0 <= i && max >= i){
if(i === max) return dec_invalid(1);
var hi = unsafe_get_uint16_be(b, i);
if(55296 <= hi && 57343 >= hi){
if(56319 < hi) return dec_invalid(2);
var last = i + 3 | 0;
if(max < last) return dec_invalid((max - i | 0) + 1 | 0);
var lo = unsafe_get_uint16_be(b, i + 2 | 0);
if(56320 <= lo && 57343 >= lo){
var u = ((hi & 1023) << 10 | lo & 1023) + 65536 | 0;
return dec_ret(4, u);
}
return dec_invalid(2);
}
return dec_ret(2, hi);
}
return Stdlib[1].call(null, cst_index_out_of_bounds);
}
var c = [0, cst_bytes_ml, 777, 9], d = [0, cst_bytes_ml, 766, 20];
function set_utf_16be_uchar(b, i, u){
var max = caml_ml_bytes_length(b) - 1 | 0;
if(0 <= i && max >= i){
var u$0 = Stdlib_Uchar[10].call(null, u);
if(0 > u$0) throw caml_maybe_attach_backtrace([0, Assert_failure, d], 1);
if(65535 >= u$0){
var last$0 = i + 1 | 0;
return max < last$0 ? 0 : (unsafe_set_uint16_be(b, i, u$0), 2);
}
if(1114111 < u$0)
throw caml_maybe_attach_backtrace([0, Assert_failure, c], 1);
var last = i + 3 | 0;
if(max < last) return 0;
var
u$1 = u$0 - 65536 | 0,
hi = 55296 | u$1 >>> 10 | 0,
lo = 56320 | u$1 & 1023;
unsafe_set_uint16_be(b, i, hi);
unsafe_set_uint16_be(b, i + 2 | 0, lo);
return 4;
}
return Stdlib[1].call(null, cst_index_out_of_bounds);
}
function is_valid_utf_16be(b){
var max = caml_ml_bytes_length(b) - 1 | 0, i = 0;
for(;;){
if(max < i) return 1;
if(i === max) return 0;
var u = unsafe_get_uint16_be(b, i);
if(55296 <= u && 57343 >= u){
if(56319 < u) return 0;
var last = i + 3 | 0;
if(max < last) return 0;
var u$0 = unsafe_get_uint16_be(b, i + 2 | 0);
if(56320 <= u$0 && 57343 >= u$0){
var i$1 = i + 4 | 0;
i = i$1;
continue;
}
return 0;
}
var i$0 = i + 2 | 0;
i = i$0;
}
}
function get_utf_16le_uchar(b, i){
var max = caml_ml_bytes_length(b) - 1 | 0;
if(0 <= i && max >= i){
if(i === max) return dec_invalid(1);
var hi = unsafe_get_uint16_le(b, i);
if(55296 <= hi && 57343 >= hi){
if(56319 < hi) return dec_invalid(2);
var last = i + 3 | 0;
if(max < last) return dec_invalid((max - i | 0) + 1 | 0);
var lo = unsafe_get_uint16_le(b, i + 2 | 0);
if(56320 <= lo && 57343 >= lo){
var u = ((hi & 1023) << 10 | lo & 1023) + 65536 | 0;
return dec_ret(4, u);
}
return dec_invalid(2);
}
return dec_ret(2, hi);
}
return Stdlib[1].call(null, cst_index_out_of_bounds);
}
var e = [0, cst_bytes_ml, 831, 9], f = [0, cst_bytes_ml, 820, 20];
function set_utf_16le_uchar(b, i, u){
var max = caml_ml_bytes_length(b) - 1 | 0;
if(0 <= i && max >= i){
var u$0 = Stdlib_Uchar[10].call(null, u);
if(0 > u$0) throw caml_maybe_attach_backtrace([0, Assert_failure, f], 1);
if(65535 >= u$0){
var last$0 = i + 1 | 0;
return max < last$0 ? 0 : (unsafe_set_uint16_le(b, i, u$0), 2);
}
if(1114111 < u$0)
throw caml_maybe_attach_backtrace([0, Assert_failure, e], 1);
var last = i + 3 | 0;
if(max < last) return 0;
var
u$1 = u$0 - 65536 | 0,
hi = 55296 | u$1 >>> 10 | 0,
lo = 56320 | u$1 & 1023;
unsafe_set_uint16_le(b, i, hi);
unsafe_set_uint16_le(b, i + 2 | 0, lo);
return 4;
}
return Stdlib[1].call(null, cst_index_out_of_bounds);
}
function is_valid_utf_16le(b){
var max = caml_ml_bytes_length(b) - 1 | 0, i = 0;
for(;;){
if(max < i) return 1;
if(i === max) return 0;
var u = unsafe_get_uint16_le(b, i);
if(55296 <= u && 57343 >= u){
if(56319 < u) return 0;
var last = i + 3 | 0;
if(max < last) return 0;
var u$0 = unsafe_get_uint16_le(b, i + 2 | 0);
if(56320 <= u$0 && 57343 >= u$0){
var i$1 = i + 4 | 0;
i = i$1;
continue;
}
return 0;
}
var i$0 = i + 2 | 0;
i = i$0;
}
}
var
Stdlib_Bytes =
[0,
make,
init,
empty,
copy,
of_string,
to_string,
sub,
sub_string,
extend,
fill,
blit,
blit_string,
concat,
cat,
iter,
iteri,
map,
mapi,
fold_left,
fold_right,
for_all,
exists,
trim,
escaped,
index,
index_opt,
rindex,
rindex_opt,
index_from,
index_from_opt,
rindex_from,
rindex_from_opt,
contains,
contains_from,
rcontains_from,
uppercase_ascii,
lowercase_ascii,
capitalize_ascii,
uncapitalize_ascii,
compare,
runtime.caml_bytes_equal,
starts_with,
ends_with,
caml_string_of_bytes,
caml_bytes_of_string,
split_on_char,
to_seq,
to_seqi,
of_seq,
get_utf_8_uchar,
set_utf_8_uchar,
is_valid_utf_8,
get_utf_16be_uchar,
set_utf_16be_uchar,
is_valid_utf_16be,
get_utf_16le_uchar,
set_utf_16le_uchar,
is_valid_utf_16le,
caml_bytes_get,
get_int8,
caml_bytes_get16,
get_uint16_be,
get_uint16_le,
get_int16_ne,
get_int16_be,
get_int16_le,
caml_bytes_get32,
get_int32_be,
get_int32_le,
caml_bytes_get64,
get_int64_be,
get_int64_le,
caml_bytes_set,
caml_bytes_set,
caml_bytes_set16,
set_int16_be,
set_int16_le,
caml_bytes_set16,
set_int16_be,
set_int16_le,
caml_bytes_set32,
set_int32_be,
set_int32_le,
caml_bytes_set64,
set_int64_be,
set_int64_le,
unsafe_escape];
runtime.caml_register_global(30, Stdlib_Bytes, "Stdlib__Bytes");
return;
}
(globalThis));
//# 4897 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__String:[F(2),F(2),N,F(1),F(1),F(5),F(2),F(2)*,F(2)*,F(2)*,F(2),F(2),F(3),F(3),F(2),F(3),F(2),F(2),F(2),F(3),F(3),F(2),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(2),F(3),F(3),F(3),F(3),F(2),F(2),F(2),F(2),F(1)*,F(1)*,F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(1),F(2),F(2),F(2),F(2),F(2),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_blit_string = runtime.caml_blit_string,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_string_equal = runtime.caml_string_equal,
caml_string_hash = runtime.caml_string_hash,
caml_string_unsafe_get = runtime.caml_string_unsafe_get,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Bytes = global_data.Stdlib__Bytes,
bts = Stdlib_Bytes[44],
bos = Stdlib_Bytes[45];
function make(n, c){return bts(Stdlib_Bytes[1].call(null, n, c));}
function init(n, f){return bts(Stdlib_Bytes[2].call(null, n, f));}
var of_bytes = Stdlib_Bytes[6], to_bytes = Stdlib_Bytes[5];
function sub(s, ofs, len){
var a = bos(s);
return bts(Stdlib_Bytes[7].call(null, a, ofs, len));
}
var blit = Stdlib_Bytes[12], cst = "";
function concat(sep, l){
if(! l) return cst;
var seplen = caml_ml_string_length(sep);
a:
{
var acc = 0, param = l, pos$1 = 0;
for(;;){
if(! param){var a = acc; break a;}
var hd = param[1];
if(! param[2]) break;
var
tl = param[2],
x = (caml_ml_string_length(hd) + seplen | 0) + acc | 0;
if(acc <= x){
acc = x;
param = tl;
}
else{acc = Stdlib[1].call(null, "String.concat"); param = tl;}
}
var a = caml_ml_string_length(hd) + acc | 0;
}
var dst = runtime.caml_create_bytes(a), pos = pos$1, param$0 = l;
for(;;){
if(param$0){
var hd$0 = param$0[1];
if(param$0[2]){
var tl$0 = param$0[2];
caml_blit_string(hd$0, 0, dst, pos, caml_ml_string_length(hd$0));
caml_blit_string
(sep, 0, dst, pos + caml_ml_string_length(hd$0) | 0, seplen);
var pos$0 = (pos + caml_ml_string_length(hd$0) | 0) + seplen | 0;
pos = pos$0;
param$0 = tl$0;
continue;
}
caml_blit_string(hd$0, 0, dst, pos, caml_ml_string_length(hd$0));
}
return bts(dst);
}
}
var cat = Stdlib[28];
function iter(f, s){
var a = caml_ml_string_length(s) - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
caml_call1(f, caml_string_unsafe_get(s, i));
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return 0;
}
function iteri(f, s){
var a = caml_ml_string_length(s) - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
caml_call2(f, i, caml_string_unsafe_get(s, i));
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return 0;
}
function map(f, s){
var a = bos(s);
return bts(Stdlib_Bytes[17].call(null, f, a));
}
function mapi(f, s){
var a = bos(s);
return bts(Stdlib_Bytes[18].call(null, f, a));
}
function fold_right(f, x, a){
var b = bos(x);
return Stdlib_Bytes[20].call(null, f, b, a);
}
function fold_left(f, a, x){
var b = bos(x);
return Stdlib_Bytes[19].call(null, f, a, b);
}
function exists(f, s){
var a = bos(s);
return Stdlib_Bytes[22].call(null, f, a);
}
function for_all(f, s){
var a = bos(s);
return Stdlib_Bytes[21].call(null, f, a);
}
function is_space(param){
var a = param - 9 | 0;
a:
{
if(4 < a >>> 0){if(23 !== a) break a;} else if(2 === a) break a;
return 1;
}
return 0;
}
function trim(s){
if(s === cst) return s;
if
(!
is_space(caml_string_unsafe_get(s, 0))
&&
!
is_space(caml_string_unsafe_get(s, caml_ml_string_length(s) - 1 | 0)))
return s;
var a = bos(s);
return bts(Stdlib_Bytes[23].call(null, a));
}
function escaped(s){
var b = bos(s);
return bts(Stdlib_Bytes[87].call(null, b));
}
function index_rec(s, lim, i$1, c){
var i = i$1;
for(;;){
if(lim <= i) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
if(caml_string_unsafe_get(s, i) === c) return i;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function index(s, c){return index_rec(s, caml_ml_string_length(s), 0, c);}
function index_rec_opt(s, lim, i$1, c){
var i = i$1;
for(;;){
if(lim <= i) return 0;
if(caml_string_unsafe_get(s, i) === c) return [0, i];
var i$0 = i + 1 | 0;
i = i$0;
}
}
function index_opt(s, c){
return index_rec_opt(s, caml_ml_string_length(s), 0, c);
}
function index_from(s, i, c){
var l = caml_ml_string_length(s);
if(0 <= i && l >= i) return index_rec(s, l, i, c);
return Stdlib[1].call(null, "String.index_from / Bytes.index_from");
}
function index_from_opt(s, i, c){
var l = caml_ml_string_length(s);
if(0 <= i && l >= i) return index_rec_opt(s, l, i, c);
return Stdlib[1].call
(null, "String.index_from_opt / Bytes.index_from_opt");
}
function rindex_rec(s, i$1, c){
var i = i$1;
for(;;){
if(0 > i) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
if(caml_string_unsafe_get(s, i) === c) return i;
var i$0 = i - 1 | 0;
i = i$0;
}
}
function rindex(s, c){
return rindex_rec(s, caml_ml_string_length(s) - 1 | 0, c);
}
function rindex_from(s, i, c){
if(-1 <= i && caml_ml_string_length(s) > i) return rindex_rec(s, i, c);
return Stdlib[1].call(null, "String.rindex_from / Bytes.rindex_from");
}
function rindex_rec_opt(s, i$1, c){
var i = i$1;
for(;;){
if(0 > i) return 0;
if(caml_string_unsafe_get(s, i) === c) return [0, i];
var i$0 = i - 1 | 0;
i = i$0;
}
}
function rindex_opt(s, c){
return rindex_rec_opt(s, caml_ml_string_length(s) - 1 | 0, c);
}
function rindex_from_opt(s, i, c){
if(-1 <= i && caml_ml_string_length(s) > i)
return rindex_rec_opt(s, i, c);
return Stdlib[1].call
(null, "String.rindex_from_opt / Bytes.rindex_from_opt");
}
function contains_from(s, i, c){
var l = caml_ml_string_length(s);
if(0 <= i && l >= i)
try{index_rec(s, l, i, c); return 1;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
return Stdlib[1].call(null, "String.contains_from / Bytes.contains_from");
}
function contains(s, c){return contains_from(s, 0, c);}
function rcontains_from(s, i, c){
if(0 <= i && caml_ml_string_length(s) > i)
try{rindex_rec(s, i, c); return 1;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
return Stdlib[1].call
(null, "String.rcontains_from / Bytes.rcontains_from");
}
function uppercase_ascii(s){
var a = bos(s);
return bts(Stdlib_Bytes[36].call(null, a));
}
function lowercase_ascii(s){
var a = bos(s);
return bts(Stdlib_Bytes[37].call(null, a));
}
function capitalize_ascii(s){
var a = bos(s);
return bts(Stdlib_Bytes[38].call(null, a));
}
function uncapitalize_ascii(s){
var a = bos(s);
return bts(Stdlib_Bytes[39].call(null, a));
}
function starts_with(prefix, s){
var
len_s = caml_ml_string_length(s),
len_pre = caml_ml_string_length(prefix),
a = len_pre <= len_s ? 1 : 0;
if(! a) return a;
var i = 0;
for(;;){
if(i === len_pre) return 1;
if(caml_string_unsafe_get(s, i) !== caml_string_unsafe_get(prefix, i))
return 0;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function ends_with(suffix, s){
var
len_s = caml_ml_string_length(s),
len_suf = caml_ml_string_length(suffix),
diff = len_s - len_suf | 0,
a = 0 <= diff ? 1 : 0;
if(! a) return a;
var i = 0;
for(;;){
if(i === len_suf) return 1;
if
(caml_string_unsafe_get(s, diff + i | 0)
!== caml_string_unsafe_get(suffix, i))
return 0;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function hash(x){return caml_string_hash(0, x);}
function split_on_char(sep, s){
var
b = caml_ml_string_length(s),
c = caml_ml_string_length(s) - 1 | 0,
a = 0;
if(c < 0)
var j$1 = b, r$1 = a;
else{
var j = b, r = a, i = c;
for(;;){
if(caml_string_unsafe_get(s, i) === sep)
var j$0 = i, r$0 = [0, sub(s, i + 1 | 0, (j - i | 0) - 1 | 0), r];
else
var j$0 = j, r$0 = r;
var d = i - 1 | 0;
if(0 === i){var j$1 = j$0, r$1 = r$0; break;}
j = j$0;
r = r$0;
i = d;
}
}
return [0, sub(s, 0, j$1), r$1];
}
var compare = runtime.caml_string_compare;
function to_seq(s){var a = bos(s); return Stdlib_Bytes[47].call(null, a);}
function to_seqi(s){var a = bos(s); return Stdlib_Bytes[48].call(null, a);}
function of_seq(g){return bts(Stdlib_Bytes[49].call(null, g));}
function get_utf_8_uchar(s, i){
var a = bos(s);
return Stdlib_Bytes[50].call(null, a, i);
}
function is_valid_utf_8(s){
var a = bos(s);
return Stdlib_Bytes[52].call(null, a);
}
function get_utf_16be_uchar(s, i){
var a = bos(s);
return Stdlib_Bytes[53].call(null, a, i);
}
function is_valid_utf_16be(s){
var a = bos(s);
return Stdlib_Bytes[55].call(null, a);
}
function get_utf_16le_uchar(s, i){
var a = bos(s);
return Stdlib_Bytes[56].call(null, a, i);
}
function is_valid_utf_16le(s){
var a = bos(s);
return Stdlib_Bytes[58].call(null, a);
}
function get_int8(s, i){
var a = bos(s);
return Stdlib_Bytes[60].call(null, a, i);
}
function get_uint16_le(s, i){
var a = bos(s);
return Stdlib_Bytes[63].call(null, a, i);
}
function get_uint16_be(s, i){
var a = bos(s);
return Stdlib_Bytes[62].call(null, a, i);
}
function get_int16_ne(s, i){
var a = bos(s);
return Stdlib_Bytes[64].call(null, a, i);
}
function get_int16_le(s, i){
var a = bos(s);
return Stdlib_Bytes[66].call(null, a, i);
}
function get_int16_be(s, i){
var a = bos(s);
return Stdlib_Bytes[65].call(null, a, i);
}
function get_int32_le(s, i){
var a = bos(s);
return Stdlib_Bytes[69].call(null, a, i);
}
function get_int32_be(s, i){
var a = bos(s);
return Stdlib_Bytes[68].call(null, a, i);
}
function get_int64_le(s, i){
var a = bos(s);
return Stdlib_Bytes[72].call(null, a, i);
}
function get_int64_be(s, i){
var a = bos(s);
return Stdlib_Bytes[71].call(null, a, i);
}
var
Stdlib_String =
[0,
make,
init,
cst,
of_bytes,
to_bytes,
blit,
concat,
cat,
caml_string_equal,
compare,
starts_with,
ends_with,
contains_from,
rcontains_from,
contains,
sub,
split_on_char,
map,
mapi,
fold_left,
fold_right,
for_all,
exists,
trim,
escaped,
uppercase_ascii,
lowercase_ascii,
capitalize_ascii,
uncapitalize_ascii,
iter,
iteri,
index_from,
index_from_opt,
rindex_from,
rindex_from_opt,
index,
index_opt,
rindex,
rindex_opt,
to_seq,
to_seqi,
of_seq,
get_utf_8_uchar,
is_valid_utf_8,
get_utf_16be_uchar,
is_valid_utf_16be,
get_utf_16le_uchar,
is_valid_utf_16le,
runtime.caml_string_get,
get_int8,
runtime.caml_string_get16,
get_uint16_be,
get_uint16_le,
get_int16_ne,
get_int16_be,
get_int16_le,
runtime.caml_string_get32,
hash,
caml_string_hash,
get_int32_be,
get_int32_le,
runtime.caml_string_get64,
get_int64_be,
get_int64_le];
runtime.caml_register_global(12, Stdlib_String, "Stdlib__String");
return;
}
(globalThis));
//# 5423 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Array:[F(2),F(3),F(3),F(2)*,F(1)*,F(3),F(1)*,F(4),F(5),F(1),F(1),F(2),F(2),F(2),F(2),F(2),F(2),F(3),F(3),F(3),F(3),F(3),F(2),F(2),F(3),F(3),F(2),F(2),F(2),F(2),F(2),F(2),F(1),F(2),F(2),F(2),F(2),F(2),F(1)*->F(1)*,F(1)*->F(1)*,F(1),[]]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_array_sub = runtime.caml_array_sub,
caml_check_bound = runtime.caml_check_bound,
caml_make_vect = runtime.caml_make_vect,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Seq = global_data.Stdlib__Seq,
Assert_failure = global_data.Assert_failure,
Stdlib = global_data.Stdlib;
function init(l, f){
if(0 === l) return [0];
if(0 > l) return Stdlib[1].call(null, "Array.init");
var res = caml_make_vect(l, caml_call1(f, 0)), a = l - 1 | 0;
if(a >= 1){
var i = 1;
for(;;){
res[i + 1] = caml_call1(f, i);
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return res;
}
function make_matrix(sx, sy, init){
if(sy < 0) Stdlib[1].call(null, "Array.make_matrix");
var res = caml_make_vect(sx, [0]);
if(0 < sy){
var a = sx - 1 | 0;
if(a >= 0){
var x = 0;
for(;;){
res[x + 1] = caml_make_vect(sy, init);
var b = x + 1 | 0;
if(a === x) break;
x = b;
}
}
}
return res;
}
function init_matrix(sx, sy, f){
if(sy < 0) Stdlib[1].call(null, "Array.init_matrix");
var res = caml_make_vect(sx, [0]);
if(0 < sy){
var a = sx - 1 | 0;
if(a >= 0){
var x = 0;
for(;;){
var row = caml_make_vect(sy, caml_call2(f, x, 0)), b = sy - 1 | 0;
if(b >= 1){
var y = 1;
for(;;){
row[y + 1] = caml_call2(f, x, y);
var d = y + 1 | 0;
if(b === y) break;
y = d;
}
}
res[x + 1] = row;
var c = x + 1 | 0;
if(a === x) break;
x = c;
}
}
}
return res;
}
function copy(a){
var l = a.length - 1;
return 0 === l ? [0] : caml_array_sub(a, 0, l);
}
function append(a1, a2){
var l1 = a1.length - 1;
return 0 === l1
? copy(a2)
: 0
=== a2.length - 1
? caml_array_sub(a1, 0, l1)
: runtime.caml_array_append(a1, a2);
}
function sub(a, ofs, len){
if(0 <= ofs && 0 <= len && (a.length - 1 - len | 0) >= ofs)
return caml_array_sub(a, ofs, len);
return Stdlib[1].call(null, "Array.sub");
}
function fill(a, ofs, len, v){
if(0 <= ofs && 0 <= len && (a.length - 1 - len | 0) >= ofs)
return runtime.caml_array_fill(a, ofs, len, v);
return Stdlib[1].call(null, "Array.fill");
}
function blit(a1, ofs1, a2, ofs2, len){
if
(0 <= len
&&
0 <= ofs1
&&
(a1.length - 1 - len | 0) >= ofs1
&& 0 <= ofs2 && (a2.length - 1 - len | 0) >= ofs2)
return runtime.caml_array_blit(a1, ofs1, a2, ofs2, len);
return Stdlib[1].call(null, "Array.blit");
}
function iter(f, a){
var b = a.length - 2 | 0;
if(b >= 0){
var i = 0;
for(;;){
caml_call1(f, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function iter2(f, a, b){
if(a.length - 1 !== b.length - 1)
return Stdlib[1].call
(null, "Array.iter2: arrays must have the same length");
var c = a.length - 2 | 0;
if(c >= 0){
var i = 0;
for(;;){
caml_call2(f, a[i + 1], b[i + 1]);
var d = i + 1 | 0;
if(c === i) break;
i = d;
}
}
return 0;
}
function map(f, a){
var l = a.length - 1;
if(0 === l) return [0];
var r = caml_make_vect(l, caml_call1(f, a[1])), b = l - 1 | 0;
if(b >= 1){
var i = 1;
for(;;){
r[i + 1] = caml_call1(f, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return r;
}
function map_inplace(f, a){
var b = a.length - 2 | 0;
if(b >= 0){
var i = 0;
for(;;){
a[i + 1] = caml_call1(f, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function mapi_inplace(f, a){
var b = a.length - 2 | 0;
if(b >= 0){
var i = 0;
for(;;){
a[i + 1] = caml_call2(f, i, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function map2(f, a, b){
var la = a.length - 1, lb = b.length - 1;
if(la !== lb)
return Stdlib[1].call
(null, "Array.map2: arrays must have the same length");
if(0 === la) return [0];
var r = caml_make_vect(la, caml_call2(f, a[1], b[1])), c = la - 1 | 0;
if(c >= 1){
var i = 1;
for(;;){
r[i + 1] = caml_call2(f, a[i + 1], b[i + 1]);
var d = i + 1 | 0;
if(c === i) break;
i = d;
}
}
return r;
}
function iteri(f, a){
var b = a.length - 2 | 0;
if(b >= 0){
var i = 0;
for(;;){
caml_call2(f, i, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function mapi(f, a){
var l = a.length - 1;
if(0 === l) return [0];
var r = caml_make_vect(l, caml_call2(f, 0, a[1])), b = l - 1 | 0;
if(b >= 1){
var i = 1;
for(;;){
r[i + 1] = caml_call2(f, i, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return r;
}
function to_list(a){
var i$1 = a.length - 2 | 0, i = i$1, res = 0;
for(;;){
if(0 > i) return res;
var res$0 = [0, a[i + 1], res], i$0 = i - 1 | 0;
i = i$0;
res = res$0;
}
}
function list_length(accu$1, param$0){
var accu = accu$1, param = param$0;
for(;;){
if(! param) return accu;
var t = param[2], accu$0 = accu + 1 | 0;
accu = accu$0;
param = t;
}
}
function of_list(l){
if(! l) return [0];
var
tl = l[2],
hd = l[1],
a = caml_make_vect(list_length(0, l), hd),
i = 1,
param = tl;
for(;;){
if(! param) return a;
var tl$0 = param[2], hd$0 = param[1];
a[i + 1] = hd$0;
var i$0 = i + 1 | 0;
i = i$0;
param = tl$0;
}
}
function fold_left(f, x, a){
var b = a.length - 2 | 0;
if(b < 0)
var r$0 = x;
else{
var r = x, i = 0;
for(;;){
var c = caml_call2(f, r, a[i + 1]), d = i + 1 | 0;
if(b === i){var r$0 = c; break;}
r = c;
i = d;
}
}
return r$0;
}
function fold_left_map(f, acc, input_array){
var len = input_array.length - 1;
if(0 === len) return [0, acc, [0]];
var
match = caml_call2(f, acc, input_array[1]),
elt = match[2],
acc$0 = match[1],
output_array = caml_make_vect(len, elt),
a = len - 1 | 0;
if(a < 1)
var acc$3 = acc$0;
else{
var acc$2 = acc$0, i = 1;
for(;;){
var
match$0 = caml_call2(f, acc$2, input_array[i + 1]),
elt$0 = match$0[2],
acc$1 = match$0[1];
output_array[i + 1] = elt$0;
var b = i + 1 | 0;
if(a === i){var acc$3 = acc$1; break;}
acc$2 = acc$1;
i = b;
}
}
return [0, acc$3, output_array];
}
function fold_right(f, a, x){
var b = a.length - 2 | 0;
if(b < 0)
var r$0 = x;
else{
var r = x, i = b;
for(;;){
var c = caml_call2(f, a[i + 1], r), d = i - 1 | 0;
if(0 === i){var r$0 = c; break;}
r = c;
i = d;
}
}
return r$0;
}
function exists(p, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
if(caml_call1(p, a[i + 1])) return 1;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function for_all(p, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 1;
if(! caml_call1(p, a[i + 1])) return 0;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function for_all2(p, l1, l2){
var n1 = l1.length - 1, n2 = l2.length - 1;
if(n1 !== n2) return Stdlib[1].call(null, "Array.for_all2");
var i = 0;
for(;;){
if(i === n1) return 1;
if(! caml_call2(p, l1[i + 1], l2[i + 1])) return 0;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function exists2(p, l1, l2){
var n1 = l1.length - 1, n2 = l2.length - 1;
if(n1 !== n2) return Stdlib[1].call(null, "Array.exists2");
var i = 0;
for(;;){
if(i === n1) return 0;
if(caml_call2(p, l1[i + 1], l2[i + 1])) return 1;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function mem(x, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
if(0 === runtime.caml_compare(a[i + 1], x)) return 1;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function memq(x, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
if(x === a[i + 1]) return 1;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function find_opt(p, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
var x = a[i + 1];
if(caml_call1(p, x)) return [0, x];
var i$0 = i + 1 | 0;
i = i$0;
}
}
function find_index(p, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
if(caml_call1(p, a[i + 1])) return [0, i];
var i$0 = i + 1 | 0;
i = i$0;
}
}
function find_map(f, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
var r = caml_call1(f, a[i + 1]);
if(r) return r;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function find_mapi(f, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
var r = caml_call2(f, i, a[i + 1]);
if(r) return r;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function split(x){
if(runtime.caml_equal(x, [0])) return [0, [0], [0]];
var
match = x[1],
b0 = match[2],
a0 = match[1],
n = x.length - 1,
a = caml_make_vect(n, a0),
b = caml_make_vect(n, b0),
c = n - 1 | 0;
if(c >= 1){
var i = 1;
for(;;){
var match$0 = x[i + 1], bi = match$0[2], ai = match$0[1];
a[i + 1] = ai;
b[i + 1] = bi;
var d = i + 1 | 0;
if(c === i) break;
i = d;
}
}
return [0, a, b];
}
function combine(a, b){
var na = a.length - 1, nb = b.length - 1;
if(na !== nb) Stdlib[1].call(null, "Array.combine");
if(0 === na) return [0];
var x = caml_make_vect(na, [0, a[1], b[1]]), c = na - 1 | 0;
if(c >= 1){
var i = 1;
for(;;){
x[i + 1] = [0, a[i + 1], b[i + 1]];
var d = i + 1 | 0;
if(c === i) break;
i = d;
}
}
return x;
}
var
Bottom = [248, "Stdlib.Array.Bottom", runtime.caml_fresh_oo_id(0)],
a = [0, "array.ml", 369, 4];
function sort(cmp, a$0){
function maxson(l, i){
var i31 = ((i + i | 0) + i | 0) + 1 | 0;
if((i31 + 2 | 0) < l){
var
a = i31 + 1 | 0,
d = caml_check_bound(a$0, a)[a + 1],
x =
caml_call2(cmp, caml_check_bound(a$0, i31)[i31 + 1], d) < 0
? i31 + 1 | 0
: i31,
b = i31 + 2 | 0,
e = caml_check_bound(a$0, b)[b + 1],
x$0 =
caml_call2(cmp, caml_check_bound(a$0, x)[x + 1], e) < 0
? i31 + 2 | 0
: x;
return x$0;
}
if((i31 + 1 | 0) < l){
var c = i31 + 1 | 0, f = caml_check_bound(a$0, c)[c + 1];
if(0 > caml_call2(cmp, caml_check_bound(a$0, i31)[i31 + 1], f))
return i31 + 1 | 0;
}
if(i31 < l) return i31;
throw caml_maybe_attach_backtrace([0, Bottom, i], 1);
}
var l = a$0.length - 1, b = ((l + 1 | 0) / 3 | 0) - 1 | 0;
if(b >= 0){
var i$5 = b;
for(;;){
var e$1 = caml_check_bound(a$0, i$5)[i$5 + 1];
try{
var i = i$5;
for(;;){
var j = maxson(l, i);
if(0 >= caml_call2(cmp, caml_check_bound(a$0, j)[j + 1], e$1)){caml_check_bound(a$0, i)[i + 1] = e$1; break;}
var g = caml_check_bound(a$0, j)[j + 1];
caml_check_bound(a$0, i)[i + 1] = g;
i = j;
}
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Bottom) throw caml_maybe_attach_backtrace(exn, 0);
var i$0 = exn[2];
caml_check_bound(a$0, i$0)[i$0 + 1] = e$1;
}
var n = i$5 - 1 | 0;
if(0 === i$5) break;
i$5 = n;
}
}
var c = l - 1 | 0;
if(c >= 2){
var i$4 = c;
a:
for(;;){
var e$0 = caml_check_bound(a$0, i$4)[i$4 + 1];
a$0[i$4 + 1] = caml_check_bound(a$0, 0)[1];
try{
var i$1 = 0;
for(;;){
var j$0 = maxson(i$4, i$1), h = caml_check_bound(a$0, j$0)[j$0 + 1];
caml_check_bound(a$0, i$1)[i$1 + 1] = h;
i$1 = j$0;
}
}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0[1] !== Bottom) throw caml_maybe_attach_backtrace(exn$0, 0);
var i$2 = exn$0[2], i$3 = i$2;
for(;;){
var father = (i$3 - 1 | 0) / 3 | 0;
if(i$3 === father)
throw caml_maybe_attach_backtrace([0, Assert_failure, a], 1);
if
(0 <= caml_call2(cmp, caml_check_bound(a$0, father)[father + 1], e$0))
caml_check_bound(a$0, i$3)[i$3 + 1] = e$0;
else{
var k = caml_check_bound(a$0, father)[father + 1];
caml_check_bound(a$0, i$3)[i$3 + 1] = k;
if(0 < father){i$3 = father; continue;}
caml_check_bound(a$0, 0)[1] = e$0;
}
var m = i$4 - 1 | 0;
if(2 === i$4) break a;
i$4 = m;
break;
}
}
}
}
var d = 1 < l ? 1 : 0;
if(d){
var e = caml_check_bound(a$0, 1)[2];
a$0[2] = caml_check_bound(a$0, 0)[1];
a$0[1] = e;
var f = 0;
}
else
var f = d;
return f;
}
function stable_sort(cmp, a){
function merge(src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs){
var
src1r = src1ofs + src1len | 0,
src2r = src2ofs + src2len | 0,
s2$1 = caml_check_bound(src2, src2ofs)[src2ofs + 1],
s1$1 = caml_check_bound(a, src1ofs)[src1ofs + 1],
i1 = src1ofs,
s1 = s1$1,
i2 = src2ofs,
s2 = s2$1,
d = dstofs;
for(;;)
if(0 < caml_call2(cmp, s1, s2)){
caml_check_bound(dst, d)[d + 1] = s2;
var i2$0 = i2 + 1 | 0;
if(i2$0 >= src2r) return blit(a, i1, dst, d + 1 | 0, src1r - i1 | 0);
var d$0 = d + 1 | 0, s2$0 = caml_check_bound(src2, i2$0)[i2$0 + 1];
i2 = i2$0;
s2 = s2$0;
d = d$0;
}
else{
caml_check_bound(dst, d)[d + 1] = s1;
var i1$0 = i1 + 1 | 0;
if(i1$0 >= src1r)
return blit(src2, i2, dst, d + 1 | 0, src2r - i2 | 0);
var d$1 = d + 1 | 0, s1$0 = caml_check_bound(a, i1$0)[i1$0 + 1];
i1 = i1$0;
s1 = s1$0;
d = d$1;
}
}
function isortto(srcofs, dst, dstofs, len){
var b = len - 1 | 0;
if(b >= 0){
var i = 0;
a:
for(;;){
var
c = srcofs + i | 0,
e = caml_check_bound(a, c)[c + 1],
j = (dstofs + i | 0) - 1 | 0;
for(;;){
if
(dstofs <= j
&& 0 < caml_call2(cmp, caml_check_bound(dst, j)[j + 1], e)){
var d = j + 1 | 0, g = caml_check_bound(dst, j)[j + 1];
caml_check_bound(dst, d)[d + 1] = g;
var j$0 = j - 1 | 0;
j = j$0;
continue;
}
var f = j + 1 | 0;
caml_check_bound(dst, f)[f + 1] = e;
var h = i + 1 | 0;
if(b === i) break a;
i = h;
break;
}
}
}
return 0;
}
function sortto(srcofs, dst, dstofs, len){
if(len <= 5) return isortto(srcofs, dst, dstofs, len);
var l1 = len / 2 | 0, l2 = len - l1 | 0;
sortto(srcofs + l1 | 0, dst, dstofs + l1 | 0, l2);
sortto(srcofs, a, srcofs + l2 | 0, l1);
return merge(srcofs + l2 | 0, l1, dst, dstofs + l1 | 0, l2, dst, dstofs);
}
var l = a.length - 1;
if(l <= 5) return isortto(0, a, 0, l);
var
l1 = l / 2 | 0,
l2 = l - l1 | 0,
t = caml_make_vect(l2, caml_check_bound(a, 0)[1]);
sortto(l1, t, 0, l2);
sortto(0, a, l2, l1);
return merge(l2, l1, t, 0, l2, a, 0);
}
function shuffle(rand, a){
var b = a.length - 2 | 0;
if(b >= 1){
var i = b;
for(;;){
var j = caml_call1(rand, i + 1 | 0), v = a[i + 1];
a[i + 1] = caml_check_bound(a, j)[j + 1];
a[j + 1] = v;
var c = i - 1 | 0;
if(1 === i) break;
i = c;
}
}
return 0;
}
function to_seq(a){
function aux(i, param){
if(i >= a.length - 1) return 0;
var x = a[i + 1], b = i + 1 | 0;
return [0, x, function(a){return aux(b, a);}];
}
return function(a){return aux(0, a);};
}
function to_seqi(a){
function aux(i, param){
if(i >= a.length - 1) return 0;
var x = a[i + 1], b = i + 1 | 0;
return [0, [0, i, x], function(a){return aux(b, a);}];
}
return function(a){return aux(0, a);};
}
function of_seq(i$2){
var
l =
Stdlib_Seq[5].call(null, function(acc, x){return [0, x, acc];}, 0, i$2);
if(! l) return [0];
var
tl = l[2],
hd = l[1],
len = list_length(0, l),
a = caml_make_vect(len, hd),
i$1 = len - 2 | 0,
i = i$1,
param = tl;
for(;;){
if(! param) return a;
var tl$0 = param[2], hd$0 = param[1];
a[i + 1] = hd$0;
var i$0 = i - 1 | 0;
i = i$0;
param = tl$0;
}
}
var
Stdlib_Array =
[0,
init,
make_matrix,
init_matrix,
append,
runtime.caml_array_concat,
sub,
copy,
fill,
blit,
to_list,
of_list,
iter,
iteri,
map,
map_inplace,
mapi,
mapi_inplace,
fold_left,
fold_left_map,
fold_right,
iter2,
map2,
for_all,
exists,
for_all2,
exists2,
mem,
memq,
find_opt,
find_index,
find_map,
find_mapi,
split,
combine,
sort,
stable_sort,
stable_sort,
shuffle,
to_seq,
to_seqi,
of_seq,
[0]];
runtime.caml_register_global(16, Stdlib_Array, "Stdlib__Array");
return;
}
(globalThis));
//# 6179 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Float:[N,N,N,F(1)*,F(1)*,N,N,N,N,N,N,N,N,N,F(1)*,F(1)*,F(1)*,F(1)*,F(1),F(1),F(2)*,F(2)*,F(2)*,F(2)*,F(2)*,F(2)*,F(2)*,F(2)*,F(2)*,F(1)*,N,N]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound,
caml_float_compare = runtime.caml_float_compare,
caml_floatarray_blit = runtime.caml_floatarray_blit,
caml_floatarray_create = runtime.caml_floatarray_create,
caml_hash = runtime.caml_hash,
caml_make_vect = runtime.caml_make_vect,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_nextafter_float = runtime.caml_nextafter_float,
caml_signbit_float = runtime.caml_signbit_float,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Seq = global_data.Stdlib__Seq,
Stdlib_List = global_data.Stdlib__List,
Assert_failure = global_data.Assert_failure,
Stdlib = global_data.Stdlib,
infinity = Stdlib[22],
neg_infinity = Stdlib[23],
nan = Stdlib[24];
function is_finite(x){return x - x === 0. ? 1 : 0;}
function is_infinite(x){return 1. / x === 0. ? 1 : 0;}
function is_nan(x){return x !== x ? 1 : 0;}
var
max_float = Stdlib[25],
min_float = Stdlib[26],
epsilon = Stdlib[27],
of_string_opt = Stdlib[36],
to_string = Stdlib[35];
function is_integer(x){
var a = x === runtime.caml_trunc_float(x) ? 1 : 0;
return a ? is_finite(x) : a;
}
function succ(x){return caml_nextafter_float(x, infinity);}
function pred(x){return caml_nextafter_float(x, neg_infinity);}
function equal(x, y){return 0 === caml_float_compare(x, y) ? 1 : 0;}
function min(x, y){
a:
if(! (x < y)){
if(! caml_signbit_float(y) && caml_signbit_float(x)) break a;
return x !== x ? x : y;
}
return y !== y ? y : x;
}
function max(x, y){
a:
if(! (x < y)){
if(! caml_signbit_float(y) && caml_signbit_float(x)) break a;
return y !== y ? y : x;
}
return x !== x ? x : y;
}
function min_max(x, y){
if(x === x && y === y){
a:
if(! (x < y)){
if(! caml_signbit_float(y) && caml_signbit_float(x)) break a;
return [0, y, x];
}
return [0, x, y];
}
return [0, nan, nan];
}
function min_num(x, y){
a:
if(! (x < y)){
if(! caml_signbit_float(y) && caml_signbit_float(x)) break a;
return y !== y ? x : y;
}
return x !== x ? y : x;
}
function max_num(x, y){
a:
if(! (x < y)){
if(! caml_signbit_float(y) && caml_signbit_float(x)) break a;
return x !== x ? y : x;
}
return y !== y ? x : y;
}
function min_max_num(x, y){
if(x !== x) return [0, y, y];
if(y !== y) return [0, x, x];
a:
if(! (x < y)){
if(! caml_signbit_float(y) && caml_signbit_float(x)) break a;
return [0, y, x];
}
return [0, x, y];
}
function seeded_hash(seed, x){return caml_hash(10, 100, seed, x);}
function hash(x){return caml_hash(10, 100, 0, x);}
function unsafe_fill(a, ofs, len, v){
var b = (ofs + len | 0) - 1 | 0;
if(b >= ofs){
var i = ofs;
for(;;){a[i + 1] = v; var c = i + 1 | 0; if(b === i) break; i = c;}
}
return 0;
}
function check(a, ofs, len, msg){
var c = ofs < 0 ? 1 : 0;
if(c)
var b = c;
else{
var d = len < 0 ? 1 : 0;
if(d)
var b = d;
else
var
e = (ofs + len | 0) < 0 ? 1 : 0,
b = e || (a.length - 1 < (ofs + len | 0) ? 1 : 0);
}
return b ? Stdlib[1].call(null, msg) : b;
}
function make(n, v){
var result = caml_floatarray_create(n);
unsafe_fill(result, 0, n, v);
return result;
}
function init(l, f){
if(0 > l) return Stdlib[1].call(null, "Float.Array.init");
var res = caml_floatarray_create(l), a = l - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
res[i + 1] = caml_call1(f, i);
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return res;
}
function make_matrix(sx, sy, v){
if(sy < 0) Stdlib[1].call(null, "Float.Array.make_matrix");
var res = caml_make_vect(sx, caml_floatarray_create(0));
if(0 < sy){
var a = sx - 1 | 0;
if(a >= 0){
var x = 0;
for(;;){
res[x + 1] = make(sy, v);
var b = x + 1 | 0;
if(a === x) break;
x = b;
}
}
}
return res;
}
function init_matrix(sx, sy, f){
if(sy < 0) Stdlib[1].call(null, "Float.Array.init_matrix");
var res = caml_make_vect(sx, caml_floatarray_create(0));
if(0 < sy){
var a = sx - 1 | 0;
if(a >= 0){
var x = 0;
for(;;){
var row = caml_floatarray_create(sy), b = sy - 1 | 0;
if(b >= 0){
var y = 0;
for(;;){
row[y + 1] = caml_call2(f, x, y);
var d = y + 1 | 0;
if(b === y) break;
y = d;
}
}
res[x + 1] = row;
var c = x + 1 | 0;
if(a === x) break;
x = c;
}
}
}
return res;
}
function append(a1, a2){
var
l1 = a1.length - 1,
l2 = a2.length - 1,
result = caml_floatarray_create(l1 + l2 | 0);
caml_floatarray_blit(a1, 0, result, 0, l1);
caml_floatarray_blit(a2, 0, result, l1, l2);
return result;
}
var cst_float_ml = "float.ml", a = [0, cst_float_ml, 254, 14];
function concat(l){
var acc = 0, param = l;
for(;;){
if(! param) break;
var tl = param[2], hd = param[1], x = hd.length - 1 + acc | 0;
if(acc <= x){
acc = x;
param = tl;
}
else{acc = Stdlib[1].call(null, "Float.Array.concat"); param = tl;}
}
var result = caml_floatarray_create(acc), l$0 = l, i = 0;
for(;;){
if(! l$0){
if(i === acc) return result;
throw caml_maybe_attach_backtrace([0, Assert_failure, a], 1);
}
var tl$0 = l$0[2], hd$0 = l$0[1], hlen = hd$0.length - 1;
caml_floatarray_blit(hd$0, 0, result, i, hlen);
var i$0 = i + hlen | 0;
l$0 = tl$0;
i = i$0;
}
}
function sub(a, ofs, len){
check(a, ofs, len, "Float.Array.sub");
var result = caml_floatarray_create(len);
caml_floatarray_blit(a, ofs, result, 0, len);
return result;
}
function copy(a){
var l = a.length - 1, result = caml_floatarray_create(l);
caml_floatarray_blit(a, 0, result, 0, l);
return result;
}
function fill(a, ofs, len, v){
check(a, ofs, len, "Float.Array.fill");
return unsafe_fill(a, ofs, len, v);
}
function blit(src, sofs, dst, dofs, len){
var cst_Float_array_blit = "Float.array.blit";
check(src, sofs, len, cst_Float_array_blit);
check(dst, dofs, len, cst_Float_array_blit);
return caml_floatarray_blit(src, sofs, dst, dofs, len);
}
function to_list(a){
return Stdlib_List[11].call
(null, a.length - 1, function(b){return a[b + 1];});
}
function of_list(l){
var
result = caml_floatarray_create(Stdlib_List[1].call(null, l)),
i = 0,
l$0 = l;
for(;;){
if(! l$0) return result;
var t = l$0[2], h = l$0[1];
result[i + 1] = h;
var i$0 = i + 1 | 0;
i = i$0;
l$0 = t;
}
}
function iter(f, a){
var b = a.length - 2 | 0;
if(b >= 0){
var i = 0;
for(;;){
caml_call1(f, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function iter2(f, a, b){
if(a.length - 1 !== b.length - 1)
return Stdlib[1].call
(null, "Float.Array.iter2: arrays must have the same length");
var c = a.length - 2 | 0;
if(c >= 0){
var i = 0;
for(;;){
caml_call2(f, a[i + 1], b[i + 1]);
var d = i + 1 | 0;
if(c === i) break;
i = d;
}
}
return 0;
}
function map(f, a){
var l = a.length - 1, r = caml_floatarray_create(l), b = l - 1 | 0;
if(b >= 0){
var i = 0;
for(;;){
r[i + 1] = caml_call1(f, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return r;
}
function map_inplace(f, a){
var b = a.length - 2 | 0;
if(b >= 0){
var i = 0;
for(;;){
a[i + 1] = caml_call1(f, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function map2(f, a, b){
var la = a.length - 1, lb = b.length - 1;
if(la !== lb)
return Stdlib[1].call
(null, "Float.Array.map2: arrays must have the same length");
var r = caml_floatarray_create(la), c = la - 1 | 0;
if(c >= 0){
var i = 0;
for(;;){
r[i + 1] = caml_call2(f, a[i + 1], b[i + 1]);
var d = i + 1 | 0;
if(c === i) break;
i = d;
}
}
return r;
}
function iteri(f, a){
var b = a.length - 2 | 0;
if(b >= 0){
var i = 0;
for(;;){
caml_call2(f, i, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function mapi(f, a){
var l = a.length - 1, r = caml_floatarray_create(l), b = l - 1 | 0;
if(b >= 0){
var i = 0;
for(;;){
r[i + 1] = caml_call2(f, i, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return r;
}
function mapi_inplace(f, a){
var b = a.length - 2 | 0;
if(b >= 0){
var i = 0;
for(;;){
a[i + 1] = caml_call2(f, i, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function fold_left(f, x, a){
var b = a.length - 2 | 0;
if(b < 0)
var r$0 = x;
else{
var r = x, i = 0;
for(;;){
var c = caml_call2(f, r, a[i + 1]), d = i + 1 | 0;
if(b === i){var r$0 = c; break;}
r = c;
i = d;
}
}
return r$0;
}
function fold_right(f, a, x){
var b = a.length - 2 | 0;
if(b < 0)
var r$0 = x;
else{
var r = x, i = b;
for(;;){
var c = caml_call2(f, a[i + 1], r), d = i - 1 | 0;
if(0 === i){var r$0 = c; break;}
r = c;
i = d;
}
}
return r$0;
}
function exists(p, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
if(caml_call1(p, a[i + 1])) return 1;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function for_all(p, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 1;
if(! caml_call1(p, a[i + 1])) return 0;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function mem(x, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
if(0 === caml_float_compare(a[i + 1], x)) return 1;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function mem_ieee(x, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
if(x === a[i + 1]) return 1;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function find_opt(p, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
var x = a[i + 1];
if(caml_call1(p, x)) return [0, x];
var i$0 = i + 1 | 0;
i = i$0;
}
}
function find_index(p, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
if(caml_call1(p, a[i + 1])) return [0, i];
var i$0 = i + 1 | 0;
i = i$0;
}
}
function find_map(f, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
var r = caml_call1(f, a[i + 1]);
if(r) return r;
var i$0 = i + 1 | 0;
i = i$0;
}
}
function find_mapi(f, a){
var n = a.length - 1, i = 0;
for(;;){
if(i === n) return 0;
var r = caml_call2(f, i, a[i + 1]);
if(r) return r;
var i$0 = i + 1 | 0;
i = i$0;
}
}
var
Bottom = [248, "Stdlib.Float.Array.Bottom", runtime.caml_fresh_oo_id(0)],
b = [0, cst_float_ml, 484, 6];
function sort(cmp, a){
function maxson(l, i){
var i31 = ((i + i | 0) + i | 0) + 1 | 0;
if((i31 + 2 | 0) < l){
var
b = i31 + 1 | 0,
e = caml_check_bound(a, b)[b + 1],
x =
caml_call2(cmp, caml_check_bound(a, i31)[i31 + 1], e) < 0
? i31 + 1 | 0
: i31,
c = i31 + 2 | 0,
f = caml_check_bound(a, c)[c + 1],
x$0 =
caml_call2(cmp, caml_check_bound(a, x)[x + 1], f) < 0
? i31 + 2 | 0
: x;
return x$0;
}
if((i31 + 1 | 0) < l){
var d = i31 + 1 | 0, g = caml_check_bound(a, d)[d + 1];
if(0 > caml_call2(cmp, caml_check_bound(a, i31)[i31 + 1], g))
return i31 + 1 | 0;
}
if(i31 < l) return i31;
throw caml_maybe_attach_backtrace([0, Bottom, i], 1);
}
var l = a.length - 1, c = ((l + 1 | 0) / 3 | 0) - 1 | 0;
if(c >= 0){
var i$5 = c;
for(;;){
var e$1 = caml_check_bound(a, i$5)[i$5 + 1];
try{
var i = i$5;
for(;;){
var j = maxson(l, i);
if(0 >= caml_call2(cmp, caml_check_bound(a, j)[j + 1], e$1)){caml_check_bound(a, i)[i + 1] = e$1; break;}
var h = caml_check_bound(a, j)[j + 1];
caml_check_bound(a, i)[i + 1] = h;
i = j;
}
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Bottom) throw caml_maybe_attach_backtrace(exn, 0);
var i$0 = exn[2];
caml_check_bound(a, i$0)[i$0 + 1] = e$1;
}
var o = i$5 - 1 | 0;
if(0 === i$5) break;
i$5 = o;
}
}
var d = l - 1 | 0;
if(d >= 2){
var i$4 = d;
a:
for(;;){
var e$0 = caml_check_bound(a, i$4)[i$4 + 1];
a[i$4 + 1] = caml_check_bound(a, 0)[1];
try{
var i$1 = 0;
for(;;){
var j$0 = maxson(i$4, i$1), k = caml_check_bound(a, j$0)[j$0 + 1];
caml_check_bound(a, i$1)[i$1 + 1] = k;
i$1 = j$0;
}
}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0[1] !== Bottom) throw caml_maybe_attach_backtrace(exn$0, 0);
var i$2 = exn$0[2], i$3 = i$2;
for(;;){
var father = (i$3 - 1 | 0) / 3 | 0;
if(i$3 === father)
throw caml_maybe_attach_backtrace([0, Assert_failure, b], 1);
if(0 <= caml_call2(cmp, caml_check_bound(a, father)[father + 1], e$0))
caml_check_bound(a, i$3)[i$3 + 1] = e$0;
else{
var m = caml_check_bound(a, father)[father + 1];
caml_check_bound(a, i$3)[i$3 + 1] = m;
if(0 < father){i$3 = father; continue;}
caml_check_bound(a, 0)[1] = e$0;
}
var n = i$4 - 1 | 0;
if(2 === i$4) break a;
i$4 = n;
break;
}
}
}
}
var f = 1 < l ? 1 : 0;
if(f){
var e = caml_check_bound(a, 1)[2];
a[2] = caml_check_bound(a, 0)[1];
a[1] = e;
var g = 0;
}
else
var g = f;
return g;
}
function stable_sort(cmp, a){
function merge(src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs){
var
src1r = src1ofs + src1len | 0,
src2r = src2ofs + src2len | 0,
s2$1 = caml_check_bound(src2, src2ofs)[src2ofs + 1],
s1$1 = caml_check_bound(a, src1ofs)[src1ofs + 1],
i1 = src1ofs,
s1 = s1$1,
i2 = src2ofs,
s2 = s2$1,
d = dstofs;
for(;;)
if(0 < caml_call2(cmp, s1, s2)){
caml_check_bound(dst, d)[d + 1] = s2;
var i2$0 = i2 + 1 | 0;
if(i2$0 >= src2r) return blit(a, i1, dst, d + 1 | 0, src1r - i1 | 0);
var d$0 = d + 1 | 0, s2$0 = caml_check_bound(src2, i2$0)[i2$0 + 1];
i2 = i2$0;
s2 = s2$0;
d = d$0;
}
else{
caml_check_bound(dst, d)[d + 1] = s1;
var i1$0 = i1 + 1 | 0;
if(i1$0 >= src1r)
return blit(src2, i2, dst, d + 1 | 0, src2r - i2 | 0);
var d$1 = d + 1 | 0, s1$0 = caml_check_bound(a, i1$0)[i1$0 + 1];
i1 = i1$0;
s1 = s1$0;
d = d$1;
}
}
function isortto(srcofs, dst, dstofs, len){
var b = len - 1 | 0;
if(b >= 0){
var i = 0;
a:
for(;;){
var
c = srcofs + i | 0,
e = caml_check_bound(a, c)[c + 1],
j = (dstofs + i | 0) - 1 | 0;
for(;;){
if
(dstofs <= j
&& 0 < caml_call2(cmp, caml_check_bound(dst, j)[j + 1], e)){
var d = j + 1 | 0, g = caml_check_bound(dst, j)[j + 1];
caml_check_bound(dst, d)[d + 1] = g;
var j$0 = j - 1 | 0;
j = j$0;
continue;
}
var f = j + 1 | 0;
caml_check_bound(dst, f)[f + 1] = e;
var h = i + 1 | 0;
if(b === i) break a;
i = h;
break;
}
}
}
return 0;
}
function sortto(srcofs, dst, dstofs, len){
if(len <= 5) return isortto(srcofs, dst, dstofs, len);
var l1 = len / 2 | 0, l2 = len - l1 | 0;
sortto(srcofs + l1 | 0, dst, dstofs + l1 | 0, l2);
sortto(srcofs, a, srcofs + l2 | 0, l1);
return merge(srcofs + l2 | 0, l1, dst, dstofs + l1 | 0, l2, dst, dstofs);
}
var l = a.length - 1;
if(l <= 5) return isortto(0, a, 0, l);
var l1 = l / 2 | 0, l2 = l - l1 | 0, t = caml_floatarray_create(l2);
sortto(l1, t, 0, l2);
sortto(0, a, l2, l1);
return merge(l2, l1, t, 0, l2, a, 0);
}
function shuffle(rand, a){
var b = a.length - 2 | 0;
if(b >= 1){
var i = b;
for(;;){
var j = caml_call1(rand, i + 1 | 0), v = a[i + 1];
a[i + 1] = caml_check_bound(a, j)[j + 1];
a[j + 1] = v;
var c = i - 1 | 0;
if(1 === i) break;
i = c;
}
}
return 0;
}
function to_seq(a){
function aux(i, param){
if(i >= a.length - 1) return 0;
var x = a[i + 1], b = i + 1 | 0;
return [0, x, function(a){return aux(b, a);}];
}
return function(a){return aux(0, a);};
}
function to_seqi(a){
function aux(i, param){
if(i >= a.length - 1) return 0;
var x = a[i + 1], b = i + 1 | 0;
return [0, [0, i, x], function(a){return aux(b, a);}];
}
return function(a){return aux(0, a);};
}
function of_seq(i$2){
var
l =
Stdlib_Seq[5].call(null, function(acc, x){return [0, x, acc];}, 0, i$2),
len = Stdlib_List[1].call(null, l),
a = caml_floatarray_create(len),
i$1 = len - 1 | 0,
i = i$1,
param = l;
for(;;){
if(! param) return a;
var tl = param[2], hd = param[1];
a[i + 1] = hd;
var i$0 = i - 1 | 0;
i = i$0;
param = tl;
}
}
function map_to_array(f, a){
var l = a.length - 1;
if(0 === l) return [0];
var r = caml_make_vect(l, caml_call1(f, a[1])), b = l - 1 | 0;
if(b >= 1){
var i = 1;
for(;;){
r[i + 1] = caml_call1(f, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return r;
}
function map_from_array(f, a){
var l = a.length - 1, r = caml_floatarray_create(l), b = l - 1 | 0;
if(b >= 0){
var i = 0;
for(;;){
r[i + 1] = caml_call1(f, a[i + 1]);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return r;
}
var
Stdlib_Float =
[0,
0.,
1.,
-1.,
succ,
pred,
infinity,
neg_infinity,
nan,
NaN,
nan,
3.141592653589793,
max_float,
min_float,
epsilon,
is_finite,
is_infinite,
is_nan,
is_integer,
of_string_opt,
to_string,
caml_float_compare,
equal,
min,
max,
min_max,
min_num,
max_num,
min_max_num,
seeded_hash,
hash,
[0,
function(a){return a.length - 1;},
function(b, a){return caml_check_bound(b, a)[a + 1];},
function(c, a, b){caml_check_bound(c, a)[a + 1] = b; return 0;},
make,
caml_floatarray_create,
init,
make_matrix,
init_matrix,
append,
concat,
sub,
copy,
fill,
blit,
to_list,
of_list,
iter,
iteri,
map,
map_inplace,
mapi,
mapi_inplace,
fold_left,
fold_right,
iter2,
map2,
for_all,
exists,
mem,
mem_ieee,
find_opt,
find_index,
find_map,
find_mapi,
sort,
stable_sort,
stable_sort,
shuffle,
to_seq,
to_seqi,
of_seq,
map_to_array,
map_from_array],
[0,
function(a){return a.length - 1;},
function(b, a){return caml_check_bound(b, a)[a + 1];},
function(c, a, b){caml_check_bound(c, a)[a + 1] = b; return 0;},
make,
caml_floatarray_create,
init,
make_matrix,
init_matrix,
append,
concat,
sub,
copy,
fill,
blit,
to_list,
of_list,
iter,
iteri,
map,
map_inplace,
mapi,
mapi_inplace,
fold_left,
fold_right,
iter2,
map2,
for_all,
exists,
mem,
mem_ieee,
find_opt,
find_index,
find_map,
find_mapi,
sort,
stable_sort,
stable_sort,
shuffle,
to_seq,
to_seqi,
of_seq,
map_to_array,
map_from_array]];
runtime.caml_register_global(25, Stdlib_Float, "Stdlib__Float");
return;
}
(globalThis));
//# 7049 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Int32:[N,N,N,F(2),F(2),F(1)*,F(1)*,F(1),N,N,F(1)*,F(1),F(1),F(1)*,F(2)*,F(2)*,F(2),F(2),F(2),F(2)*,F(1)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_greaterequal = runtime.caml_greaterequal,
caml_hash = runtime.caml_hash,
caml_int_compare = runtime.caml_int_compare,
caml_lessequal = runtime.caml_lessequal,
caml_lessthan = runtime.caml_lessthan,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_mul = runtime.caml_mul,
caml_wrap_exception = runtime.caml_wrap_exception,
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Sys = global_data.Stdlib__Sys,
Assert_failure = global_data.Assert_failure;
function succ(n){return n + 1 | 0;}
function pred(n){return n - 1 | 0;}
function abs(n){return caml_greaterequal(n, 0) ? n : - n | 0;}
function lognot(n){return n ^ -1;}
var match = Stdlib_Sys[9];
if(32 === match)
var
max_int = Stdlib[19],
unsigned_to_int =
function(n){
if(caml_greaterequal(n, 0) && caml_lessequal(n, max_int))
return [0, n];
return 0;
};
else{
if(64 !== match)
throw caml_maybe_attach_backtrace
([0, Assert_failure, [0, "int32.ml", 69, 6]], 1);
var unsigned_to_int = function(n){return [0, n & -1];};
}
function to_string(n){return runtime.caml_format_int("%d", n);}
function of_string_opt(s){
try{var a = [0, runtime.caml_int_of_string(s)]; return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Stdlib[7]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
var equal = runtime.caml_equal;
function unsigned_compare(n, m){
var y = m + 2147483648 | 0, x = n + 2147483648 | 0;
return caml_int_compare(x, y);
}
function unsigned_lt(n, m){
return caml_lessthan(n + 2147483648 | 0, m + 2147483648 | 0);
}
function min(x, y){return caml_lessequal(x, y) ? x : y;}
function max(x, y){return caml_greaterequal(x, y) ? x : y;}
var zero = 0, one = 1;
function unsigned_div(n, d){
if(caml_lessthan(d, 0)) return unsigned_lt(n, d) ? zero : one;
var q = runtime.caml_div(n >>> 1 | 0, d) << 1, r = n - caml_mul(q, d) | 0;
return unsigned_lt(r, d) ? q : q + 1 | 0;
}
function unsigned_rem(n, d){
return n - caml_mul(unsigned_div(n, d), d) | 0;
}
function seeded_hash(seed, x){return caml_hash(10, 100, seed, x);}
function hash(x){return caml_hash(10, 100, 0, x);}
var
Stdlib_Int32 =
[0,
zero,
one,
-1,
unsigned_div,
unsigned_rem,
succ,
pred,
abs,
2147483647,
-2147483648,
lognot,
unsigned_to_int,
of_string_opt,
to_string,
caml_int_compare,
unsigned_compare,
equal,
min,
max,
seeded_hash,
hash];
runtime.caml_register_global(15, Stdlib_Int32, "Stdlib__Int32");
return;
}
(globalThis));
//# 7148 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Int64:[N,N,N,F(2),F(2),F(1)*,F(1)*,F(1),N,N,F(1)*,F(1),F(1),F(1)*,F(2)*,F(2)*,F(2),F(2),F(2),F(2)*,F(1)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_greaterequal = runtime.caml_greaterequal,
caml_hash = runtime.caml_hash,
caml_int64_add = runtime.caml_int64_add,
caml_int64_compare = runtime.caml_int64_compare,
caml_int64_create_lo_mi_hi = runtime.caml_int64_create_lo_mi_hi,
caml_int64_mul = runtime.caml_int64_mul,
caml_int64_sub = runtime.caml_int64_sub,
caml_lessequal = runtime.caml_lessequal,
caml_lessthan = runtime.caml_lessthan,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_wrap_exception = runtime.caml_wrap_exception,
a = caml_int64_create_lo_mi_hi(1, 0, 0),
zero = caml_int64_create_lo_mi_hi(0, 0, 0),
one = caml_int64_create_lo_mi_hi(1, 0, 0),
minus_one = caml_int64_create_lo_mi_hi(16777215, 16777215, 65535),
min_int = caml_int64_create_lo_mi_hi(0, 0, 32768),
max_int = caml_int64_create_lo_mi_hi(16777215, 16777215, 32767),
Stdlib = runtime.caml_get_global_data().Stdlib,
b = caml_int64_create_lo_mi_hi(1, 0, 0),
c = caml_int64_create_lo_mi_hi(0, 0, 0),
d = caml_int64_create_lo_mi_hi(16777215, 16777215, 65535);
function succ(n){return caml_int64_add(n, a);}
function pred(n){return caml_int64_sub(n, b);}
function abs(n){
return caml_greaterequal(n, c) ? n : runtime.caml_int64_neg(n);
}
function lognot(n){return runtime.caml_int64_xor(n, d);}
var
max_int$0 = runtime.caml_int64_of_int32(Stdlib[19]),
e = caml_int64_create_lo_mi_hi(0, 0, 0);
function unsigned_to_int(n){
if(caml_greaterequal(n, e) && caml_lessequal(n, max_int$0))
return [0, runtime.caml_int64_to_int32(n)];
return 0;
}
function to_string(n){return runtime.caml_int64_format("%d", n);}
function of_string_opt(s){
try{var a = [0, runtime.caml_int64_of_string(s)]; return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Stdlib[7]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function compare(x, y){return caml_int64_compare(x, y);}
var equal = runtime.caml_equal;
function unsigned_compare(n, m){
var y = caml_int64_sub(m, min_int), x = caml_int64_sub(n, min_int);
return caml_int64_compare(x, y);
}
function unsigned_lt(n, m){
return caml_lessthan
(caml_int64_sub(n, min_int), caml_int64_sub(m, min_int));
}
function min(x, y){return caml_lessequal(x, y) ? x : y;}
function max(x, y){return caml_greaterequal(x, y) ? x : y;}
function unsigned_div(n, d){
if(caml_lessthan(d, zero)) return unsigned_lt(n, d) ? zero : one;
var
q =
runtime.caml_int64_shift_left
(runtime.caml_int64_div
(runtime.caml_int64_shift_right_unsigned(n, 1), d),
1),
r = caml_int64_sub(n, caml_int64_mul(q, d));
return unsigned_lt(r, d) ? q : caml_int64_add(q, a);
}
function unsigned_rem(n, d){
return caml_int64_sub(n, caml_int64_mul(unsigned_div(n, d), d));
}
function seeded_hash(seed, x){return caml_hash(10, 100, seed, x);}
function hash(x){return caml_hash(10, 100, 0, x);}
runtime.caml_register_global
(12,
[0,
zero,
one,
minus_one,
unsigned_div,
unsigned_rem,
succ,
pred,
abs,
max_int,
min_int,
lognot,
unsigned_to_int,
of_string_opt,
to_string,
compare,
unsigned_compare,
equal,
min,
max,
seeded_hash,
hash],
"Stdlib__Int64");
return;
}
(globalThis));
//# 7257 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Nativeint:[N,N,N,F(2),F(2),F(1)*,F(1)*,F(1),N,N,N,F(1)*,F(1),F(1),F(1)*,F(2)*,F(2)*,F(2)*,F(2),F(2),F(2)*,F(1)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_greaterequal = runtime.caml_greaterequal,
caml_hash = runtime.caml_hash,
caml_int_compare = runtime.caml_int_compare,
caml_lessequal = runtime.caml_lessequal,
caml_lessthan = runtime.caml_lessthan,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_mul = runtime.caml_mul,
caml_wrap_exception = runtime.caml_wrap_exception,
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Sys = global_data.Stdlib__Sys;
function succ(n){return n + 1 | 0;}
function pred(n){return n - 1 | 0;}
function abs(n){return caml_greaterequal(n, 0) ? n : - n | 0;}
var
size = Stdlib_Sys[9],
min_int = 1 << (size - 1 | 0),
max_int = min_int - 1 | 0;
function lognot(n){return n ^ -1;}
var max_int$0 = Stdlib[19];
function unsigned_to_int(n){
if(caml_greaterequal(n, 0) && caml_lessequal(n, max_int$0)) return [0, n];
return 0;
}
function to_string(n){return runtime.caml_format_int("%d", n);}
function of_string_opt(s){
try{var a = [0, runtime.caml_int_of_string(s)]; return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Stdlib[7]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function equal(x, y){return 0 === caml_int_compare(x, y) ? 1 : 0;}
function unsigned_compare(n, m){
var y = m - min_int | 0, x = n - min_int | 0;
return caml_int_compare(x, y);
}
function unsigned_lt(n, m){
return caml_lessthan(n - min_int | 0, m - min_int | 0);
}
function min(x, y){return caml_lessequal(x, y) ? x : y;}
function max(x, y){return caml_greaterequal(x, y) ? x : y;}
var zero = 0, one = 1;
function unsigned_div(n, d){
if(caml_lessthan(d, 0)) return unsigned_lt(n, d) ? zero : one;
var q = runtime.caml_div(n >>> 1 | 0, d) << 1, r = n - caml_mul(q, d) | 0;
return unsigned_lt(r, d) ? q : q + 1 | 0;
}
function unsigned_rem(n, d){
return n - caml_mul(unsigned_div(n, d), d) | 0;
}
function seeded_hash(seed, x){return caml_hash(10, 100, seed, x);}
function hash(x){return caml_hash(10, 100, 0, x);}
runtime.caml_register_global
(13,
[0,
zero,
one,
-1,
unsigned_div,
unsigned_rem,
succ,
pred,
abs,
size,
max_int,
min_int,
lognot,
unsigned_to_int,
of_string_opt,
to_string,
caml_int_compare,
unsigned_compare,
equal,
min,
max,
seeded_hash,
hash],
"Stdlib__Nativeint");
return;
}
(globalThis));
//# 7778 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Set:[F(1)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Seq = global_data.Stdlib__Seq,
Stdlib_List = global_data.Stdlib__List,
Assert_failure = global_data.Assert_failure,
a = [0, 0, 0, 0],
b = [0, 0, 0],
c = [0, "set.ml", 571, 18],
Stdlib_Set =
[0,
function(Ord){
function height(param){
if(! param) return 0;
var h = param[4];
return h;
}
function create(l, v, r){
if(l) var h = l[4], hl = h; else var hl = 0;
if(r) var h$0 = r[4], hr = h$0; else var hr = 0;
var a = hr <= hl ? hl + 1 | 0 : hr + 1 | 0;
return [0, l, v, r, a];
}
function bal(l, v, r){
if(l) var h = l[4], hl = h; else var hl = 0;
if(r) var h$0 = r[4], hr = h$0; else var hr = 0;
var cst_Set_bal = "Set.bal";
if((hr + 2 | 0) < hl){
if(! l) return Stdlib[1].call(null, cst_Set_bal);
var lr = l[3], lv = l[2], ll = l[1], a = height(lr);
if(a <= height(ll)) return create(ll, lv, create(lr, v, r));
if(! lr) return Stdlib[1].call(null, cst_Set_bal);
var lrr = lr[3], lrv = lr[2], lrl = lr[1], b = create(lrr, v, r);
return create(create(ll, lv, lrl), lrv, b);
}
if((hl + 2 | 0) >= hr){
var e = hr <= hl ? hl + 1 | 0 : hr + 1 | 0;
return [0, l, v, r, e];
}
if(! r) return Stdlib[1].call(null, cst_Set_bal);
var rr = r[3], rv = r[2], rl = r[1], c = height(rl);
if(c <= height(rr)) return create(create(l, v, rl), rv, rr);
if(! rl) return Stdlib[1].call(null, cst_Set_bal);
var rlr = rl[3], rlv = rl[2], rll = rl[1], d = create(rlr, rv, rr);
return create(create(l, v, rll), rlv, d);
}
function add(x, t){
if(! t) return [0, 0, x, 0, 1];
var r = t[3], v = t[2], l = t[1], c = caml_call2(Ord[1], x, v);
if(0 === c) return t;
if(0 <= c){var rr = add(x, r); return r === rr ? t : bal(l, v, rr);}
var ll = add(x, l);
return l === ll ? t : bal(ll, v, r);
}
function singleton(x){return [0, 0, x, 0, 1];}
function add_min_element(x, param){
if(! param) return singleton(x);
var r = param[3], v = param[2], l = param[1];
return bal(add_min_element(x, l), v, r);
}
function add_max_element(x, param){
if(! param) return singleton(x);
var r = param[3], v = param[2], l = param[1];
return bal(l, v, add_max_element(x, r));
}
function join(l, v, r){
if(! l) return add_min_element(v, r);
if(! r) return add_max_element(v, l);
var
rh = r[4],
rr = r[3],
rv = r[2],
rl = r[1],
lh = l[4],
lr = l[3],
lv = l[2],
ll = l[1];
return (rh + 2 | 0) < lh
? bal(ll, lv, join(lr, v, r))
: (lh
+ 2
| 0)
< rh
? bal(join(l, v, rl), rv, rr)
: create(l, v, r);
}
function min_elt(param$0){
var param = param$0;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var l = param[1];
if(! l){var v = param[2]; return v;}
param = l;
}
}
function min_elt_opt(param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[1];
if(! l){var v = param[2]; return [0, v];}
param = l;
}
}
function max_elt(param$0){
var param = param$0;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
if(! param[3]){var v = param[2]; return v;}
var r = param[3];
param = r;
}
}
function max_elt_opt(param$0){
var param = param$0;
for(;;){
if(! param) return 0;
if(! param[3]){var v = param[2]; return [0, v];}
var r = param[3];
param = r;
}
}
function remove_min_elt(param){
if(! param) return Stdlib[1].call(null, "Set.remove_min_elt");
var l = param[1];
if(l){
var r = param[3], v = param[2];
return bal(remove_min_elt(l), v, r);
}
var r$0 = param[3];
return r$0;
}
function concat(t1, t2){
if(! t1) return t2;
if(! t2) return t1;
var a = remove_min_elt(t2);
return join(t1, min_elt(t2), a);
}
function split(x, param){
if(! param) return a;
var
r = param[3],
v = param[2],
l = param[1],
c = caml_call2(Ord[1], x, v);
if(0 === c) return [0, l, 1, r];
if(0 <= c){
var
match = split(x, r),
rr = match[3],
pres = match[2],
lr = match[1];
return [0, join(l, v, lr), pres, rr];
}
var
match$0 = split(x, l),
rl = match$0[3],
pres$0 = match$0[2],
ll = match$0[1];
return [0, ll, pres$0, join(rl, v, r)];
}
function is_empty(param){return param ? 0 : 1;}
function mem(x, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var
r = param[3],
v = param[2],
l = param[1],
c = caml_call2(Ord[1], x, v),
a = 0 === c ? 1 : 0;
if(a) return a;
param = 0 <= c ? r : l;
}
}
function remove(x, t){
if(! t) return 0;
var t2 = t[3], v = t[2], t1 = t[1], c = caml_call2(Ord[1], x, v);
if(0 === c){
if(! t1) return t2;
if(! t2) return t1;
var a = remove_min_elt(t2);
return bal(t1, min_elt(t2), a);
}
if(0 <= c){
var rr = remove(x, t2);
return t2 === rr ? t : bal(t1, v, rr);
}
var ll = remove(x, t1);
return t1 === ll ? t : bal(ll, v, t2);
}
function union(s1, s2){
if(! s1) return s2;
if(! s2) return s1;
var
h2 = s2[4],
r2 = s2[3],
v2 = s2[2],
l2 = s2[1],
h1 = s1[4],
r1 = s1[3],
v1 = s1[2],
l1 = s1[1];
if(h2 <= h1){
if(1 === h2) return add(v2, s1);
var
match = split(v1, s2),
r2$0 = match[3],
l2$0 = match[1],
a = union(r1, r2$0);
return join(union(l1, l2$0), v1, a);
}
if(1 === h1) return add(v1, s2);
var
match$0 = split(v2, s1),
r1$0 = match$0[3],
l1$0 = match$0[1],
b = union(r1$0, r2);
return join(union(l1$0, l2), v2, b);
}
function inter(s1, s2){
if(! s1) return 0;
if(! s2) return 0;
var r1 = s1[3], v1 = s1[2], l1 = s1[1], a = split(v1, s2), l2 = a[1];
if(a[2]){
var r2 = a[3], b = inter(r1, r2);
return join(inter(l1, l2), v1, b);
}
var r2$0 = a[3], c = inter(r1, r2$0);
return concat(inter(l1, l2), c);
}
function split_bis(x, param){
if(! param) return [0, 0, function(param){return 0;}];
var
r = param[3],
v = param[2],
l = param[1],
c = caml_call2(Ord[1], x, v);
if(0 === c) return 0;
if(0 <= c){
var match = split_bis(x, r);
if(! match) return 0;
var rr = match[2], lr = match[1];
return [0, join(l, v, lr), rr];
}
var match$0 = split_bis(x, l);
if(! match$0) return 0;
var rl = match$0[2], ll = match$0[1];
return [0, ll, function(param){return join(rl(0), v, r);}];
}
function disjoint(s1$0, s2$1){
var s1 = s1$0, s2 = s2$1;
for(;;){
if(s1 && s2){
var r1 = s1[3], v1 = s1[2], l1 = s1[1];
if(s1 === s2) return 0;
var match = split_bis(v1, s2);
if(! match) return 0;
var r2 = match[2], l2 = match[1], a = disjoint(l1, l2);
if(! a) return a;
var s2$0 = r2(0);
s1 = r1;
s2 = s2$0;
continue;
}
return 1;
}
}
function diff(s1, s2){
if(! s1) return 0;
if(! s2) return s1;
var r1 = s1[3], v1 = s1[2], l1 = s1[1], a = split(v1, s2), l2 = a[1];
if(a[2]){
var r2 = a[3], b = diff(r1, r2);
return concat(diff(l1, l2), b);
}
var r2$0 = a[3], c = diff(r1, r2$0);
return join(diff(l1, l2), v1, c);
}
function cons_enum(s$0, e$1){
var s = s$0, e = e$1;
for(;;){
if(! s) return e;
var r = s[3], v = s[2], l = s[1], e$0 = [0, v, r, e];
s = l;
e = e$0;
}
}
function compare(s1, s2){
var
e2$2 = cons_enum(s2, 0),
e1$2 = cons_enum(s1, 0),
e1 = e1$2,
e2 = e2$2;
for(;;){
if(! e1) return e2 ? -1 : 0;
if(! e2) return 1;
var
e2$0 = e2[3],
r2 = e2[2],
v2 = e2[1],
e1$0 = e1[3],
r1 = e1[2],
v1 = e1[1],
c = caml_call2(Ord[1], v1, v2);
if(0 !== c) return c;
var e2$1 = cons_enum(r2, e2$0), e1$1 = cons_enum(r1, e1$0);
e1 = e1$1;
e2 = e2$1;
}
}
function equal(s1, s2){return 0 === compare(s1, s2) ? 1 : 0;}
function subset(s1$0, s2$0){
var s1 = s1$0, s2 = s2$0;
for(;;){
if(! s1) return 1;
if(! s2) return 0;
var
r2 = s2[3],
v2 = s2[2],
l2 = s2[1],
r1 = s1[3],
v1 = s1[2],
l1 = s1[1],
c = caml_call2(Ord[1], v1, v2);
if(0 === c){
var a = subset(l1, l2);
if(! a) return a;
s1 = r1;
s2 = r2;
}
else if(0 <= c){
var b = subset([0, 0, v1, r1, 0], r2);
if(! b) return b;
s1 = l1;
}
else{
var d = subset([0, l1, v1, 0, 0], l2);
if(! d) return d;
s1 = r1;
}
}
}
function iter(f, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var r = param[3], v = param[2], l = param[1];
iter(f, l);
caml_call1(f, v);
param = r;
}
}
function fold(f, s$0, accu$1){
var s = s$0, accu = accu$1;
for(;;){
if(! s) return accu;
var
r = s[3],
v = s[2],
l = s[1],
accu$0 = caml_call2(f, v, fold(f, l, accu));
s = r;
accu = accu$0;
}
}
function for_all(p, param$0){
var param = param$0;
for(;;){
if(! param) return 1;
var r = param[3], v = param[2], l = param[1], a = caml_call1(p, v);
if(a){
var b = for_all(p, l);
if(b){param = r; continue;}
var c = b;
}
else
var c = a;
return c;
}
}
function exists(p, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var r = param[3], v = param[2], l = param[1], a = caml_call1(p, v);
if(a)
var b = a;
else{var c = exists(p, l); if(! c){param = r; continue;} var b = c;}
return b;
}
}
function filter(p, t){
if(! t) return 0;
var
r = t[3],
v = t[2],
l = t[1],
l$0 = filter(p, l),
pv = caml_call1(p, v),
r$0 = filter(p, r);
if(! pv) return concat(l$0, r$0);
if(l === l$0 && r === r$0) return t;
return join(l$0, v, r$0);
}
function partition(p, param){
if(! param) return b;
var
r = param[3],
v = param[2],
l = param[1],
match = partition(p, l),
lf = match[2],
lt = match[1],
pv = caml_call1(p, v),
match$0 = partition(p, r),
rf = match$0[2],
rt = match$0[1];
if(pv){var a = concat(lf, rf); return [0, join(lt, v, rt), a];}
var c = join(lf, v, rf);
return [0, concat(lt, rt), c];
}
function cardinal(param){
if(! param) return 0;
var r = param[3], l = param[1], a = cardinal(r);
return (cardinal(l) + 1 | 0) + a | 0;
}
function elements_aux(accu$1, param$0){
var accu = accu$1, param = param$0;
for(;;){
if(! param) return accu;
var
r = param[3],
v = param[2],
l = param[1],
accu$0 = [0, v, elements_aux(accu, r)];
accu = accu$0;
param = l;
}
}
function elements(s){return elements_aux(0, s);}
function find(x, param$0){
var param = param$0;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var
r = param[3],
v = param[2],
l = param[1],
c = caml_call2(Ord[1], x, v);
if(0 === c) return v;
param = 0 <= c ? r : l;
}
}
function find_first(f, param$1){
var param$0 = param$1;
for(;;){
if(! param$0) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var r$0 = param$0[3], v0$1 = param$0[2], l$0 = param$0[1];
if(caml_call1(f, v0$1)){var v0 = v0$1, param = l$0; break;}
param$0 = r$0;
}
for(;;){
if(! param) return v0;
var r = param[3], v0$0 = param[2], l = param[1];
if(caml_call1(f, v0$0)){v0 = v0$0; param = l;} else param = r;
}
}
function find_first_opt(f, param$1){
var param$0 = param$1;
for(;;){
if(! param$0) return 0;
var r$0 = param$0[3], v0$1 = param$0[2], l$0 = param$0[1];
if(caml_call1(f, v0$1)){var v0 = v0$1, param = l$0; break;}
param$0 = r$0;
}
for(;;){
if(! param) return [0, v0];
var r = param[3], v0$0 = param[2], l = param[1];
if(caml_call1(f, v0$0)){v0 = v0$0; param = l;} else param = r;
}
}
function find_last(f, param$1){
var param$0 = param$1;
for(;;){
if(! param$0) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var r$0 = param$0[3], v0$1 = param$0[2], l$0 = param$0[1];
if(caml_call1(f, v0$1)){var v0 = v0$1, param = r$0; break;}
param$0 = l$0;
}
for(;;){
if(! param) return v0;
var r = param[3], v0$0 = param[2], l = param[1];
if(caml_call1(f, v0$0)){v0 = v0$0; param = r;} else param = l;
}
}
function find_last_opt(f, param$1){
var param$0 = param$1;
for(;;){
if(! param$0) return 0;
var r$0 = param$0[3], v0$1 = param$0[2], l$0 = param$0[1];
if(caml_call1(f, v0$1)){var v0 = v0$1, param = r$0; break;}
param$0 = l$0;
}
for(;;){
if(! param) return [0, v0];
var r = param[3], v0$0 = param[2], l = param[1];
if(caml_call1(f, v0$0)){v0 = v0$0; param = r;} else param = l;
}
}
function find_opt(x, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var
r = param[3],
v = param[2],
l = param[1],
c = caml_call2(Ord[1], x, v);
if(0 === c) return [0, v];
param = 0 <= c ? r : l;
}
}
function try_join(l, v, r){
a:
{
if(0 !== l){
var b = max_elt(l);
if(0 <= caml_call2(Ord[1], b, v)) break a;
}
if(0 !== r){
var a = min_elt(r);
if(0 <= caml_call2(Ord[1], v, a)) break a;
}
return join(l, v, r);
}
return union(l, add(v, r));
}
function map(f, t){
if(! t) return 0;
var
r = t[3],
v = t[2],
l = t[1],
l$0 = map(f, l),
v$0 = caml_call1(f, v),
r$0 = map(f, r);
if(l === l$0 && v === v$0 && r === r$0) return t;
return try_join(l$0, v$0, r$0);
}
function filter_map(f, t){
if(! t) return 0;
var
r = t[3],
v = t[2],
l = t[1],
t1 = filter_map(f, l),
v$0 = caml_call1(f, v),
t2 = filter_map(f, r);
if(v$0){
var v$1 = v$0[1];
if(l === t1 && v === v$1 && r === t2) return t;
return try_join(t1, v$1, t2);
}
if(! t1) return t2;
if(! t2) return t1;
var a = remove_min_elt(t2);
return try_join(t1, min_elt(t2), a);
}
var empty = 0;
function of_list(l){
if(! l) return empty;
var match = l[2], x0 = l[1];
if(! match) return singleton(x0);
var match$0 = match[2], x1 = match[1];
if(! match$0) return add(x1, singleton(x0));
var match$1 = match$0[2], x2 = match$0[1];
if(! match$1) return add(x2, add(x1, singleton(x0)));
var match$2 = match$1[2], x3 = match$1[1];
if(! match$2) return add(x3, add(x2, add(x1, singleton(x0))));
if(match$2[2]){
var
l$0 = Stdlib_List[62].call(null, Ord[1], l),
sub =
function(n, l){
if(3 >= n >>> 0)
switch(n){
case 0:
return [0, 0, l];
case 1:
if(l){
var l$3 = l[2], x0 = l[1];
return [0, [0, 0, x0, 0, 1], l$3];
}
break;
case 2:
if(l){
var match$1 = l[2];
if(match$1){
var l$4 = match$1[2], x1 = match$1[1], x0$0 = l[1];
return [0, [0, [0, 0, x0$0, 0, 1], x1, 0, 2], l$4];
}
}
break;
default:
if(l){
var a = l[2];
if(a){
var match$2 = a[2];
if(match$2){
var
l$5 = match$2[2],
x2 = match$2[1],
x1$0 = a[1],
x0$1 = l[1];
return [0,
[0, [0, 0, x0$1, 0, 1], x1$0, [0, 0, x2, 0, 1], 2],
l$5];
}
}
}
}
var
nl = n / 2 | 0,
match = sub(nl, l),
l$0 = match[2],
left = match[1];
if(! l$0)
throw caml_maybe_attach_backtrace([0, Assert_failure, c], 1);
var
l$1 = l$0[2],
mid = l$0[1],
match$0 = sub((n - nl | 0) - 1 | 0, l$1),
l$2 = match$0[2],
right = match$0[1];
return [0, create(left, mid, right), l$2];
};
return sub(Stdlib_List[1].call(null, l$0), l$0)[1];
}
var x4 = match$2[1];
return add(x4, add(x3, add(x2, add(x1, singleton(x0)))));
}
function add_seq(i, m){
return Stdlib_Seq[5].call
(null, function(s, x){return add(x, s);}, m, i);
}
function of_seq(i){return add_seq(i, empty);}
function seq_of_enum(c, param){
if(! c) return 0;
var rest = c[3], t = c[2], x = c[1], a = cons_enum(t, rest);
return [0, x, function(b){return seq_of_enum(a, b);}];
}
function to_seq(c){
var a = cons_enum(c, 0);
return function(b){return seq_of_enum(a, b);};
}
function snoc_enum(s$0, e$1){
var s = s$0, e = e$1;
for(;;){
if(! s) return e;
var r = s[3], v = s[2], l = s[1], e$0 = [0, v, l, e];
s = r;
e = e$0;
}
}
function rev_seq_of_enum(c, param){
if(! c) return 0;
var rest = c[3], t = c[2], x = c[1], a = snoc_enum(t, rest);
return [0, x, function(b){return rev_seq_of_enum(a, b);}];
}
function to_rev_seq(c){
var a = snoc_enum(c, 0);
return function(b){return rev_seq_of_enum(a, b);};
}
function to_seq_from(low, s){
a:
{
var s$0 = s, c = 0;
for(;;){
if(! s$0){var a = c; break a;}
var
r = s$0[3],
v = s$0[2],
l = s$0[1],
n = caml_call2(Ord[1], v, low);
if(0 === n) break;
if(0 <= n){var c$0 = [0, v, r, c]; s$0 = l; c = c$0;} else s$0 = r;
}
var a = [0, v, r, c];
}
return function(b){return seq_of_enum(a, b);};
}
return [0,
empty,
add,
singleton,
remove,
union,
inter,
disjoint,
diff,
cardinal,
elements,
min_elt,
min_elt_opt,
max_elt,
max_elt_opt,
min_elt,
min_elt_opt,
find,
find_opt,
find_first,
find_first_opt,
find_last,
find_last_opt,
iter,
fold,
map,
filter,
filter_map,
partition,
split,
is_empty,
mem,
equal,
compare,
subset,
for_all,
exists,
elements,
of_list,
to_seq_from,
to_seq,
to_rev_seq,
add_seq,
of_seq];
}];
runtime.caml_register_global(12, Stdlib_Set, "Stdlib__Set");
return;
}
(globalThis));
//# 8540 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Map:[F(1)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Assert_failure = global_data.Assert_failure,
Stdlib_Seq = global_data.Stdlib__Seq,
Stdlib_List = global_data.Stdlib__List,
a = [0, 0, 0, 0],
b = [0, "map.ml", 408, 10],
c = [0, 0, 0],
Stdlib_Map =
[0,
function(Ord){
function height(param){
if(! param) return 0;
var h = param[5];
return h;
}
function create(l, x, d, r){
var
hl = height(l),
hr = height(r),
a = hr <= hl ? hl + 1 | 0 : hr + 1 | 0;
return [0, l, x, d, r, a];
}
function singleton(x, d){return [0, 0, x, d, 0, 1];}
function bal(l, x, d, r){
if(l) var h = l[5], hl = h; else var hl = 0;
if(r) var h$0 = r[5], hr = h$0; else var hr = 0;
var cst_Map_bal = "Map.bal";
if((hr + 2 | 0) < hl){
if(! l) return Stdlib[1].call(null, cst_Map_bal);
var lr = l[4], ld = l[3], lv = l[2], ll = l[1], a = height(lr);
if(a <= height(ll)) return create(ll, lv, ld, create(lr, x, d, r));
if(! lr) return Stdlib[1].call(null, cst_Map_bal);
var
lrr = lr[4],
lrd = lr[3],
lrv = lr[2],
lrl = lr[1],
b = create(lrr, x, d, r);
return create(create(ll, lv, ld, lrl), lrv, lrd, b);
}
if((hl + 2 | 0) >= hr){
var f = hr <= hl ? hl + 1 | 0 : hr + 1 | 0;
return [0, l, x, d, r, f];
}
if(! r) return Stdlib[1].call(null, cst_Map_bal);
var rr = r[4], rd = r[3], rv = r[2], rl = r[1], c = height(rl);
if(c <= height(rr)) return create(create(l, x, d, rl), rv, rd, rr);
if(! rl) return Stdlib[1].call(null, cst_Map_bal);
var
rlr = rl[4],
rld = rl[3],
rlv = rl[2],
rll = rl[1],
e = create(rlr, rv, rd, rr);
return create(create(l, x, d, rll), rlv, rld, e);
}
function is_empty(param){return param ? 0 : 1;}
function add(x, data, m){
if(! m) return [0, 0, x, data, 0, 1];
var
h = m[5],
r = m[4],
d = m[3],
v = m[2],
l = m[1],
c = caml_call2(Ord[1], x, v);
if(0 === c) return d === data ? m : [0, l, x, data, r, h];
if(0 <= c){
var rr = add(x, data, r);
return r === rr ? m : bal(l, v, d, rr);
}
var ll = add(x, data, l);
return l === ll ? m : bal(ll, v, d, r);
}
function find(x, param$0){
var param = param$0;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var
r = param[4],
d = param[3],
v = param[2],
l = param[1],
c = caml_call2(Ord[1], x, v);
if(0 === c) return d;
param = 0 <= c ? r : l;
}
}
function find_first(f, param$1){
var param$0 = param$1;
for(;;){
if(! param$0) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var
r$0 = param$0[4],
d0$1 = param$0[3],
v0$1 = param$0[2],
l$0 = param$0[1];
if(caml_call1(f, v0$1)){
var v0 = v0$1, d0 = d0$1, param = l$0;
break;
}
param$0 = r$0;
}
for(;;){
if(! param) return [0, v0, d0];
var r = param[4], d0$0 = param[3], v0$0 = param[2], l = param[1];
if(caml_call1(f, v0$0)){
v0 = v0$0;
d0 = d0$0;
param = l;
}
else
param = r;
}
}
function find_first_opt(f, param$1){
var param$0 = param$1;
for(;;){
if(! param$0) return 0;
var
r$0 = param$0[4],
d0$1 = param$0[3],
v0$1 = param$0[2],
l$0 = param$0[1];
if(caml_call1(f, v0$1)){
var v0 = v0$1, d0 = d0$1, param = l$0;
break;
}
param$0 = r$0;
}
for(;;){
if(! param) return [0, [0, v0, d0]];
var r = param[4], d0$0 = param[3], v0$0 = param[2], l = param[1];
if(caml_call1(f, v0$0)){
v0 = v0$0;
d0 = d0$0;
param = l;
}
else
param = r;
}
}
function find_last(f, param$1){
var param$0 = param$1;
for(;;){
if(! param$0) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var
r$0 = param$0[4],
d0$1 = param$0[3],
v0$1 = param$0[2],
l$0 = param$0[1];
if(caml_call1(f, v0$1)){
var v0 = v0$1, d0 = d0$1, param = r$0;
break;
}
param$0 = l$0;
}
for(;;){
if(! param) return [0, v0, d0];
var r = param[4], d0$0 = param[3], v0$0 = param[2], l = param[1];
if(caml_call1(f, v0$0)){
v0 = v0$0;
d0 = d0$0;
param = r;
}
else
param = l;
}
}
function find_last_opt(f, param$1){
var param$0 = param$1;
for(;;){
if(! param$0) return 0;
var
r$0 = param$0[4],
d0$1 = param$0[3],
v0$1 = param$0[2],
l$0 = param$0[1];
if(caml_call1(f, v0$1)){
var v0 = v0$1, d0 = d0$1, param = r$0;
break;
}
param$0 = l$0;
}
for(;;){
if(! param) return [0, [0, v0, d0]];
var r = param[4], d0$0 = param[3], v0$0 = param[2], l = param[1];
if(caml_call1(f, v0$0)){
v0 = v0$0;
d0 = d0$0;
param = r;
}
else
param = l;
}
}
function find_opt(x, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var
r = param[4],
d = param[3],
v = param[2],
l = param[1],
c = caml_call2(Ord[1], x, v);
if(0 === c) return [0, d];
param = 0 <= c ? r : l;
}
}
function mem(x, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var
r = param[4],
v = param[2],
l = param[1],
c = caml_call2(Ord[1], x, v),
a = 0 === c ? 1 : 0;
if(a) return a;
param = 0 <= c ? r : l;
}
}
function min_binding(param$0){
var param = param$0;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var l = param[1];
if(! l){var d = param[3], v = param[2]; return [0, v, d];}
param = l;
}
}
function min_binding_opt(param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var l = param[1];
if(! l){var d = param[3], v = param[2]; return [0, [0, v, d]];}
param = l;
}
}
function max_binding(param$0){
var param = param$0;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
if(! param[4]){var d = param[3], v = param[2]; return [0, v, d];}
var r = param[4];
param = r;
}
}
function max_binding_opt(param$0){
var param = param$0;
for(;;){
if(! param) return 0;
if(! param[4]){
var d = param[3], v = param[2];
return [0, [0, v, d]];
}
var r = param[4];
param = r;
}
}
function remove_min_binding(param){
if(! param) return Stdlib[1].call(null, "Map.remove_min_elt");
var l = param[1];
if(l){
var r = param[4], d = param[3], v = param[2];
return bal(remove_min_binding(l), v, d, r);
}
var r$0 = param[4];
return r$0;
}
function d(t1, t2){
if(! t1) return t2;
if(! t2) return t1;
var match = min_binding(t2), d = match[2], x = match[1];
return bal(t1, x, d, remove_min_binding(t2));
}
function remove(x, m){
if(! m) return 0;
var
r = m[4],
d$0 = m[3],
v = m[2],
l = m[1],
c = caml_call2(Ord[1], x, v);
if(0 === c) return d(l, r);
if(0 <= c){
var rr = remove(x, r);
return r === rr ? m : bal(l, v, d$0, rr);
}
var ll = remove(x, l);
return l === ll ? m : bal(ll, v, d$0, r);
}
function update(x, f, m){
if(! m){
var match$0 = caml_call1(f, 0);
if(! match$0) return 0;
var data$0 = match$0[1];
return [0, 0, x, data$0, 0, 1];
}
var
h = m[5],
r = m[4],
d$0 = m[3],
v = m[2],
l = m[1],
c = caml_call2(Ord[1], x, v);
if(0 === c){
var match = caml_call1(f, [0, d$0]);
if(! match) return d(l, r);
var data = match[1];
return d$0 === data ? m : [0, l, x, data, r, h];
}
if(0 <= c){
var rr = update(x, f, r);
return r === rr ? m : bal(l, v, d$0, rr);
}
var ll = update(x, f, l);
return l === ll ? m : bal(ll, v, d$0, r);
}
function add_to_list(x, data, m){
function add(param){
if(! param) return [0, [0, data, 0]];
var l = param[1];
return [0, [0, data, l]];
}
return update(x, add, m);
}
function iter(f, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var r = param[4], d = param[3], v = param[2], l = param[1];
iter(f, l);
caml_call2(f, v, d);
param = r;
}
}
function map(f, param){
if(! param) return 0;
var
h = param[5],
r = param[4],
d = param[3],
v = param[2],
l = param[1],
l$0 = map(f, l),
d$0 = caml_call1(f, d),
r$0 = map(f, r);
return [0, l$0, v, d$0, r$0, h];
}
function mapi(f, param){
if(! param) return 0;
var
h = param[5],
r = param[4],
d = param[3],
v = param[2],
l = param[1],
l$0 = mapi(f, l),
d$0 = caml_call2(f, v, d),
r$0 = mapi(f, r);
return [0, l$0, v, d$0, r$0, h];
}
function fold(f, m$0, accu$1){
var m = m$0, accu = accu$1;
for(;;){
if(! m) return accu;
var
r = m[4],
d = m[3],
v = m[2],
l = m[1],
accu$0 = caml_call3(f, v, d, fold(f, l, accu));
m = r;
accu = accu$0;
}
}
function for_all(p, param$0){
var param = param$0;
for(;;){
if(! param) return 1;
var
r = param[4],
d = param[3],
v = param[2],
l = param[1],
a = caml_call2(p, v, d);
if(a){
var b = for_all(p, l);
if(b){param = r; continue;}
var c = b;
}
else
var c = a;
return c;
}
}
function exists(p, param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var
r = param[4],
d = param[3],
v = param[2],
l = param[1],
a = caml_call2(p, v, d);
if(a)
var b = a;
else{var c = exists(p, l); if(! c){param = r; continue;} var b = c;}
return b;
}
}
function add_min_binding(k, x, param){
if(! param) return singleton(k, x);
var r = param[4], d = param[3], v = param[2], l = param[1];
return bal(add_min_binding(k, x, l), v, d, r);
}
function add_max_binding(k, x, param){
if(! param) return singleton(k, x);
var r = param[4], d = param[3], v = param[2], l = param[1];
return bal(l, v, d, add_max_binding(k, x, r));
}
function join(l, v, d, r){
if(! l) return add_min_binding(v, d, r);
if(! r) return add_max_binding(v, d, l);
var
rh = r[5],
rr = r[4],
rd = r[3],
rv = r[2],
rl = r[1],
lh = l[5],
lr = l[4],
ld = l[3],
lv = l[2],
ll = l[1];
return (rh + 2 | 0) < lh
? bal(ll, lv, ld, join(lr, v, d, r))
: (lh
+ 2
| 0)
< rh
? bal(join(l, v, d, rl), rv, rd, rr)
: create(l, v, d, r);
}
function concat(t1, t2){
if(! t1) return t2;
if(! t2) return t1;
var match = min_binding(t2), d = match[2], x = match[1];
return join(t1, x, d, remove_min_binding(t2));
}
function concat_or_join(t1, v, d, t2){
if(! d) return concat(t1, t2);
var d$0 = d[1];
return join(t1, v, d$0, t2);
}
function split(x, param){
if(! param) return a;
var
r = param[4],
d = param[3],
v = param[2],
l = param[1],
c = caml_call2(Ord[1], x, v);
if(0 === c) return [0, l, [0, d], r];
if(0 <= c){
var
match = split(x, r),
rr = match[3],
pres = match[2],
lr = match[1];
return [0, join(l, v, d, lr), pres, rr];
}
var
match$0 = split(x, l),
rl = match$0[3],
pres$0 = match$0[2],
ll = match$0[1];
return [0, ll, pres$0, join(rl, v, d, r)];
}
function merge(f, s1, s2){
if(s1){
var h1 = s1[5], r1 = s1[4], d1 = s1[3], v1 = s1[2], l1 = s1[1];
if(height(s2) <= h1){
var
match = split(v1, s2),
r2 = match[3],
d2 = match[2],
l2 = match[1],
a = merge(f, r1, r2),
c = caml_call3(f, v1, [0, d1], d2);
return concat_or_join(merge(f, l1, l2), v1, c, a);
}
}
else if(! s2) return 0;
if(! s2)
throw caml_maybe_attach_backtrace([0, Assert_failure, b], 1);
var
r2$0 = s2[4],
d2$0 = s2[3],
v2 = s2[2],
l2$0 = s2[1],
match$0 = split(v2, s1),
r1$0 = match$0[3],
d1$0 = match$0[2],
l1$0 = match$0[1],
d = merge(f, r1$0, r2$0),
e = caml_call3(f, v2, d1$0, [0, d2$0]);
return concat_or_join(merge(f, l1$0, l2$0), v2, e, d);
}
function union(f, s1, s2){
if(s1){
if(s2){
var
h2 = s2[5],
r2 = s2[4],
d2 = s2[3],
v2 = s2[2],
l2 = s2[1],
h1 = s1[5],
r1 = s1[4],
d1 = s1[3],
v1 = s1[2],
l1 = s1[1];
if(h2 <= h1){
var
match = split(v1, s2),
r2$0 = match[3],
d2$0 = match[2],
l2$0 = match[1],
l = union(f, l1, l2$0),
r = union(f, r1, r2$0);
if(! d2$0) return join(l, v1, d1, r);
var d2$1 = d2$0[1];
return concat_or_join(l, v1, caml_call3(f, v1, d1, d2$1), r);
}
var
match$0 = split(v2, s1),
r1$0 = match$0[3],
d1$0 = match$0[2],
l1$0 = match$0[1],
l$0 = union(f, l1$0, l2),
r$0 = union(f, r1$0, r2);
if(! d1$0) return join(l$0, v2, d2, r$0);
var d1$1 = d1$0[1];
return concat_or_join(l$0, v2, caml_call3(f, v2, d1$1, d2), r$0);
}
var s = s1;
}
else
var s = s2;
return s;
}
function filter(p, m){
if(! m) return 0;
var
r = m[4],
d = m[3],
v = m[2],
l = m[1],
l$0 = filter(p, l),
pvd = caml_call2(p, v, d),
r$0 = filter(p, r);
if(! pvd) return concat(l$0, r$0);
if(l === l$0 && r === r$0) return m;
return join(l$0, v, d, r$0);
}
function filter_map(f, param){
if(! param) return 0;
var
r = param[4],
d = param[3],
v = param[2],
l = param[1],
l$0 = filter_map(f, l),
fvd = caml_call2(f, v, d),
r$0 = filter_map(f, r);
if(! fvd) return concat(l$0, r$0);
var d$0 = fvd[1];
return join(l$0, v, d$0, r$0);
}
function partition(p, param){
if(! param) return c;
var
r = param[4],
d = param[3],
v = param[2],
l = param[1],
match = partition(p, l),
lf = match[2],
lt = match[1],
pvd = caml_call2(p, v, d),
match$0 = partition(p, r),
rf = match$0[2],
rt = match$0[1];
if(pvd){var a = concat(lf, rf); return [0, join(lt, v, d, rt), a];}
var b = join(lf, v, d, rf);
return [0, concat(lt, rt), b];
}
function cons_enum(m$0, e$1){
var m = m$0, e = e$1;
for(;;){
if(! m) return e;
var r = m[4], d = m[3], v = m[2], l = m[1], e$0 = [0, v, d, r, e];
m = l;
e = e$0;
}
}
function compare(cmp, m1, m2){
var
e2$2 = cons_enum(m2, 0),
e1$2 = cons_enum(m1, 0),
e1 = e1$2,
e2 = e2$2;
for(;;){
if(! e1) return e2 ? -1 : 0;
if(! e2) return 1;
var
e2$0 = e2[4],
r2 = e2[3],
d2 = e2[2],
v2 = e2[1],
e1$0 = e1[4],
r1 = e1[3],
d1 = e1[2],
v1 = e1[1],
c = caml_call2(Ord[1], v1, v2);
if(0 !== c) return c;
var c$0 = caml_call2(cmp, d1, d2);
if(0 !== c$0) return c$0;
var e2$1 = cons_enum(r2, e2$0), e1$1 = cons_enum(r1, e1$0);
e1 = e1$1;
e2 = e2$1;
}
}
function equal(cmp, m1, m2){
var
e2$2 = cons_enum(m2, 0),
e1$2 = cons_enum(m1, 0),
e1 = e1$2,
e2 = e2$2;
for(;;){
if(! e1) return e2 ? 0 : 1;
if(! e2) return 0;
var
e2$0 = e2[4],
r2 = e2[3],
d2 = e2[2],
v2 = e2[1],
e1$0 = e1[4],
r1 = e1[3],
d1 = e1[2],
v1 = e1[1],
a = 0 === caml_call2(Ord[1], v1, v2) ? 1 : 0;
if(a){
var b = caml_call2(cmp, d1, d2);
if(b){
var e2$1 = cons_enum(r2, e2$0), e1$1 = cons_enum(r1, e1$0);
e1 = e1$1;
e2 = e2$1;
continue;
}
var c = b;
}
else
var c = a;
return c;
}
}
function cardinal(param){
if(! param) return 0;
var r = param[4], l = param[1], a = cardinal(r);
return (cardinal(l) + 1 | 0) + a | 0;
}
function bindings_aux(accu$1, param$0){
var accu = accu$1, param = param$0;
for(;;){
if(! param) return accu;
var
r = param[4],
d = param[3],
v = param[2],
l = param[1],
accu$0 = [0, [0, v, d], bindings_aux(accu, r)];
accu = accu$0;
param = l;
}
}
function bindings(s){return bindings_aux(0, s);}
var empty = 0;
function of_list(bs){
return Stdlib_List[26].call
(null,
function(m, param){
var v = param[2], k = param[1];
return add(k, v, m);
},
empty,
bs);
}
function add_seq(i, m){
return Stdlib_Seq[5].call
(null,
function(m, param){
var v = param[2], k = param[1];
return add(k, v, m);
},
m,
i);
}
function of_seq(i){return add_seq(i, empty);}
function seq_of_enum(c, param){
if(! c) return 0;
var
rest = c[4],
t = c[3],
v = c[2],
k = c[1],
a = cons_enum(t, rest);
return [0, [0, k, v], function(b){return seq_of_enum(a, b);}];
}
function to_seq(m){
var a = cons_enum(m, 0);
return function(b){return seq_of_enum(a, b);};
}
function snoc_enum(s$0, e$1){
var s = s$0, e = e$1;
for(;;){
if(! s) return e;
var r = s[4], d = s[3], v = s[2], l = s[1], e$0 = [0, v, d, l, e];
s = r;
e = e$0;
}
}
function rev_seq_of_enum(c, param){
if(! c) return 0;
var
rest = c[4],
t = c[3],
v = c[2],
k = c[1],
a = snoc_enum(t, rest);
return [0, [0, k, v], function(b){return rev_seq_of_enum(a, b);}];
}
function to_rev_seq(c){
var a = snoc_enum(c, 0);
return function(b){return rev_seq_of_enum(a, b);};
}
function to_seq_from(low, m){
a:
{
var m$0 = m, c = 0;
for(;;){
if(! m$0){var a = c; break a;}
var
r = m$0[4],
d = m$0[3],
v = m$0[2],
l = m$0[1],
n = caml_call2(Ord[1], v, low);
if(0 === n) break;
if(0 <= n){
var c$0 = [0, v, d, r, c];
m$0 = l;
c = c$0;
}
else
m$0 = r;
}
var a = [0, v, d, r, c];
}
return function(b){return seq_of_enum(a, b);};
}
return [0,
empty,
add,
add_to_list,
update,
singleton,
remove,
merge,
union,
cardinal,
bindings,
min_binding,
min_binding_opt,
max_binding,
max_binding_opt,
min_binding,
min_binding_opt,
find,
find_opt,
find_first,
find_first_opt,
find_last,
find_last_opt,
iter,
fold,
map,
mapi,
filter,
filter_map,
partition,
split,
is_empty,
mem,
equal,
compare,
for_all,
exists,
bindings,
of_list,
to_seq,
to_rev_seq,
to_seq_from,
add_seq,
of_seq];
}];
runtime.caml_register_global(12, Stdlib_Map, "Stdlib__Map");
return;
}
(globalThis));
//# 9393 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Stack:[N,F(1)*,F(2),F(1),F(1),F(1),F(1),F(1)*,F(1),F(1)*,F(1)*,F(1)*,F(2),F(3),F(1)*,F(2),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
global_data = runtime.caml_get_global_data(),
Stdlib_Seq = global_data.Stdlib__Seq,
Stdlib_List = global_data.Stdlib__List,
Empty = [248, "Stdlib.Stack.Empty", runtime.caml_fresh_oo_id(0)];
function create(param){return [0, 0, 0];}
function clear(s){s[1] = 0; s[2] = 0; return 0;}
function copy(s){return [0, s[1], s[2]];}
function push(x, s){s[1] = [0, x, s[1]]; s[2] = s[2] + 1 | 0; return 0;}
function pop(s){
var match = s[1];
if(! match) throw caml_maybe_attach_backtrace(Empty, 1);
var tl = match[2], hd = match[1];
s[1] = tl;
s[2] = s[2] - 1 | 0;
return hd;
}
function pop_opt(s){
var match = s[1];
if(! match) return 0;
var tl = match[2], hd = match[1];
s[1] = tl;
s[2] = s[2] - 1 | 0;
return [0, hd];
}
function drop(s){
var match = s[1];
if(! match) throw caml_maybe_attach_backtrace(Empty, 1);
var tl = match[2];
s[1] = tl;
s[2] = s[2] - 1 | 0;
return 0;
}
function top(s){
var match = s[1];
if(! match) throw caml_maybe_attach_backtrace(Empty, 1);
var hd = match[1];
return hd;
}
function top_opt(s){
var match = s[1];
if(! match) return 0;
var hd = match[1];
return [0, hd];
}
function is_empty(s){return 0 === s[1] ? 1 : 0;}
function length(s){return s[2];}
function iter(f, s){return Stdlib_List[18].call(null, f, s[1]);}
function fold(f, acc, s){return Stdlib_List[26].call(null, f, acc, s[1]);}
function to_seq(s){return Stdlib_List[64].call(null, s[1]);}
function add_seq(q, i){
return Stdlib_Seq[4].call(null, function(x){return push(x, q);}, i);
}
function of_seq(g){var s = create(0); add_seq(s, g); return s;}
runtime.caml_register_global
(3,
[0,
Empty,
create,
push,
pop,
pop_opt,
drop,
top,
top_opt,
clear,
copy,
is_empty,
length,
iter,
fold,
to_seq,
add_seq,
of_seq],
"Stdlib__Stack");
return;
}
(globalThis));
//# 9480 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Queue:[N,F(1)*,F(2),F(2),F(1),F(1),F(1),F(1),F(1)*,F(1),F(1),F(1),F(1)*,F(1)*,F(2),F(3),F(2),F(1)*->F(1)*,F(2),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
Stdlib_Seq = runtime.caml_get_global_data().Stdlib__Seq,
Empty = [248, "Stdlib.Queue.Empty", runtime.caml_fresh_oo_id(0)];
function create(param){return [0, 0, 0, 0];}
function clear(q){q[1] = 0; q[2] = 0; q[3] = 0; return 0;}
function add(x, q){
var cell = [0, x, 0], match = q[3];
return match
? (q[1] = q[1] + 1 | 0, match[2] = cell, q[3] = cell, 0)
: (q[1] = 1, q[2] = cell, q[3] = cell, 0);
}
function peek(q){
var match = q[2];
if(! match) throw caml_maybe_attach_backtrace(Empty, 1);
var content = match[1];
return content;
}
function peek_opt(q){
var match = q[2];
if(! match) return 0;
var content = match[1];
return [0, content];
}
function take(q){
var match = q[2];
if(! match) throw caml_maybe_attach_backtrace(Empty, 1);
var content = match[1];
if(match[2]){
var next = match[2];
q[1] = q[1] - 1 | 0;
q[2] = next;
return content;
}
clear(q);
return content;
}
function take_opt(q){
var match = q[2];
if(! match) return 0;
var content = match[1];
if(match[2]){
var next = match[2];
q[1] = q[1] - 1 | 0;
q[2] = next;
return [0, content];
}
clear(q);
return [0, content];
}
function copy(q){
var cell$0 = q[2], q_res = [0, q[1], 0, 0], prev = 0, cell = cell$0;
for(;;){
if(! cell){q_res[3] = prev; return q_res;}
var content = cell[1], next = cell[2], prev$0 = [0, content, 0];
if(prev){
prev[2] = prev$0;
prev = prev$0;
cell = next;
}
else{q_res[2] = prev$0; prev = prev$0; cell = next;}
}
}
function is_empty(q){return 0 === q[1] ? 1 : 0;}
function length(q){return q[1];}
function iter(f, q){
var cell$0 = q[2], cell = cell$0;
for(;;){
if(! cell) return 0;
var content = cell[1], next = cell[2];
caml_call1(f, content);
cell = next;
}
}
function fold(f, accu$1, q){
var cell$0 = q[2], accu = accu$1, cell = cell$0;
for(;;){
if(! cell) return accu;
var
content = cell[1],
next = cell[2],
accu$0 = caml_call2(f, accu, content);
accu = accu$0;
cell = next;
}
}
function transfer(q1, q2){
var a = 0 < q1[1] ? 1 : 0;
if(! a) return a;
var match = q2[3];
return match
? (q2
[1]
= q2[1] + q1[1] | 0,
match[2] = q1[2],
q2[3] = q1[3],
clear(q1))
: (q2[1] = q1[1], q2[2] = q1[2], q2[3] = q1[3], clear(q1));
}
function to_seq(q){
function aux(c, param){
if(! c) return 0;
var x = c[1], next = c[2];
return [0, x, function(a){return aux(next, a);}];
}
var a = q[2];
return function(b){return aux(a, b);};
}
function add_seq(q, i){
return Stdlib_Seq[4].call(null, function(x){return add(x, q);}, i);
}
function of_seq(g){var q = create(0); add_seq(q, g); return q;}
runtime.caml_register_global
(2,
[0,
Empty,
create,
add,
add,
take,
take_opt,
take,
peek,
peek_opt,
peek,
clear,
copy,
is_empty,
length,
iter,
fold,
transfer,
to_seq,
add_seq,
of_seq],
"Stdlib__Queue");
return;
}
(globalThis));
//# 9638 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Buffer:[F(1)*,F(1),F(1),F(3),F(5),F(2),F(1)*,F(1),F(1),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(4),F(4),F(3),F(2),F(3),F(1)*->F(1),F(1)*->F(1),F(2),F(1),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_blit_string = runtime.caml_blit_string,
caml_bswap16 = runtime.caml_bswap16,
caml_bytes_get = runtime.caml_bytes_get,
caml_bytes_set = runtime.caml_bytes_set,
caml_bytes_set16 = runtime.caml_bytes_set16,
caml_bytes_set32 = runtime.caml_bytes_set32,
caml_bytes_set64 = runtime.caml_bytes_set64,
caml_bytes_unsafe_set = runtime.caml_bytes_unsafe_set,
caml_create_bytes = runtime.caml_create_bytes,
caml_int32_bswap = runtime.caml_int32_bswap,
caml_int64_bswap = runtime.caml_int64_bswap,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_bytes_length = runtime.caml_ml_bytes_length,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_string_get = runtime.caml_string_get,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Bytes = global_data.Stdlib__Bytes,
Stdlib_Sys = global_data.Stdlib__Sys,
Stdlib_Seq = global_data.Stdlib__Seq,
Stdlib = global_data.Stdlib,
Stdlib_String = global_data.Stdlib__String,
Assert_failure = global_data.Assert_failure,
dummy = 0;
function create(n){
var
n$0 = 1 <= n ? n : 1,
n$1 = Stdlib_Sys[12] < n$0 ? Stdlib_Sys[12] : n$0,
s = caml_create_bytes(n$1);
return [0, [0, s, n$1], 0, s];
}
function contents(b){return Stdlib_Bytes[8].call(null, b[1][1], 0, b[2]);}
function to_bytes(b){return Stdlib_Bytes[7].call(null, b[1][1], 0, b[2]);}
function sub(b, ofs, len){
if(0 <= ofs && 0 <= len && (b[2] - len | 0) >= ofs)
return Stdlib_Bytes[8].call(null, b[1][1], ofs, len);
return Stdlib[1].call(null, "Buffer.sub");
}
function blit(src, srcoff, dst, dstoff, len){
if
(0 <= len
&&
0 <= srcoff
&&
(src[2] - len | 0) >= srcoff
&& 0 <= dstoff && (caml_ml_bytes_length(dst) - len | 0) >= dstoff)
return Stdlib_Bytes[11].call(null, src[1][1], srcoff, dst, dstoff, len);
return Stdlib[1].call(null, "Buffer.blit");
}
function nth(b, ofs){
var position = b[2], match = b[1], length = match[2], buffer = match[1];
if(0 <= ofs && position > ofs && length >= position)
return runtime.caml_bytes_unsafe_get(buffer, ofs);
return Stdlib[1].call(null, "Buffer.nth");
}
function length(b){return b[2];}
function clear(b){b[2] = 0; return 0;}
function reset(b){
b[2] = 0;
var inner = [0, b[3], caml_ml_bytes_length(b[3])];
b[1] = inner;
return 0;
}
function resize(b, more){
var old_pos = b[2], old_len = b[1][2], new_len = old_len;
for(;;){
if(new_len >= (old_pos + more | 0)) break;
new_len = 2 * new_len | 0;
}
var
new_len$0 =
Stdlib_Sys[12] < new_len
? (old_pos
+ more
| 0)
<= Stdlib_Sys[12]
? Stdlib_Sys[12]
: (Stdlib[2].call(null, "Buffer.add: cannot grow buffer"), new_len)
: new_len,
new_buffer = caml_create_bytes(new_len$0);
Stdlib_Bytes[11].call(null, b[1][1], 0, new_buffer, 0, b[2]);
b[1] = [0, new_buffer, new_len$0];
}
function add_char(b, c){
var pos = b[2], match = b[1], length = match[2], buffer = match[1];
if(length <= pos){
resize(b, 1);
caml_bytes_set(b[1][1], b[2], c);
}
else
caml_bytes_unsafe_set(buffer, pos, c);
b[2] = pos + 1 | 0;
return 0;
}
function add_utf_8_uchar(b, u){
for(;;){
var pos = b[2], uchar_utf_8_byte_length_max = 4;
if(b[1][2] <= pos) resize(b, uchar_utf_8_byte_length_max);
var n = Stdlib_Bytes[51].call(null, b[1][1], pos, u);
if(0 !== n){b[2] = pos + n | 0; return 0;}
resize(b, uchar_utf_8_byte_length_max);
}
}
var uchar_utf_16_byte_length_max = 4;
function add_utf_16be_uchar(b, u){
for(;;){
var pos = b[2];
if(b[1][2] <= pos) resize(b, uchar_utf_16_byte_length_max);
var n = Stdlib_Bytes[54].call(null, b[1][1], pos, u);
if(0 !== n){b[2] = pos + n | 0; return 0;}
resize(b, uchar_utf_16_byte_length_max);
}
}
function add_utf_16le_uchar(b, u){
for(;;){
var pos = b[2];
if(b[1][2] <= pos) resize(b, uchar_utf_16_byte_length_max);
var n = Stdlib_Bytes[57].call(null, b[1][1], pos, u);
if(0 !== n){b[2] = pos + n | 0; return 0;}
resize(b, uchar_utf_16_byte_length_max);
}
}
function add_substring(b, s, offset, len){
var a = offset < 0;
if(a)
var c = a;
else
var d = len < 0, c = d || (caml_ml_string_length(s) - len | 0) < offset;
if(c) Stdlib[1].call(null, "Buffer.add_substring/add_subbytes");
var
position = b[2],
match = b[1],
length = match[2],
buffer = match[1],
new_position = position + len | 0;
if(length < new_position){
resize(b, len);
Stdlib_Bytes[12].call(null, s, offset, b[1][1], b[2], len);
}
else
caml_blit_string(s, offset, buffer, position, len);
b[2] = new_position;
return 0;
}
function add_subbytes(b, s, offset, len){
return add_substring(b, Stdlib_Bytes[44].call(null, s), offset, len);
}
function add_string(b, s){
var
len = caml_ml_string_length(s),
position = b[2],
match = b[1],
length = match[2],
buffer = match[1],
new_position = position + len | 0;
if(length < new_position){
resize(b, len);
Stdlib_Bytes[12].call(null, s, 0, b[1][1], b[2], len);
}
else
caml_blit_string(s, 0, buffer, position, len);
b[2] = new_position;
return 0;
}
function add_bytes(b, s){
return add_string(b, Stdlib_Bytes[44].call(null, s));
}
function add_buffer(b, bs){return add_subbytes(b, bs[1][1], 0, bs[2]);}
function add_channel(b, ic, to_read$1){
var a = to_read$1 < 0, c = a || Stdlib_Sys[12] < to_read$1;
if(c) Stdlib[1].call(null, "Buffer.add_channel");
if(b[1][2] < (b[2] + to_read$1 | 0)) resize(b, to_read$1);
var
ofs$1 = b[2],
buf = b[1][1],
already_read = 0,
ofs = ofs$1,
to_read = to_read$1;
for(;;){
if(0 !== to_read){
var r = Stdlib[84].call(null, ic, buf, ofs, to_read);
if(0 !== r){
var
already_read$0 = already_read + r | 0,
ofs$0 = ofs + r | 0,
to_read$0 = to_read - r | 0;
already_read = already_read$0;
ofs = ofs$0;
to_read = to_read$0;
continue;
}
}
b[2] = b[2] + already_read | 0;
if(already_read < to_read$1)
throw caml_maybe_attach_backtrace(Stdlib[12], 1);
return 0;
}
}
function output_buffer(oc, b){
return Stdlib[68].call(null, oc, b[1][1], 0, b[2]);
}
var a = [0, "buffer.ml", 220, 9];
function add_substitute(b, f, s){
var lim$1 = caml_ml_string_length(s), previous = 32, i$4 = 0;
for(;;){
if(i$4 >= lim$1){
var c = 92 === previous ? 1 : 0;
return c ? add_char(b, previous) : c;
}
var previous$0 = caml_string_get(s, i$4);
if(36 === previous$0)
if(92 === previous){
add_char(b, previous$0);
var i$5 = i$4 + 1 | 0;
previous = 32;
i$4 = i$5;
}
else{
var start = i$4 + 1 | 0;
try{
if(lim$1 <= start) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var opening = caml_string_get(s, start);
a:
{
if(40 !== opening && 123 !== opening){
var lim$0 = caml_ml_string_length(s), i$2 = start;
for(;;){
b:
{
if(lim$0 > i$2){
var match = caml_string_get(s, i$2);
if(91 <= match){
if(97 <= match){
if(123 <= match){var stop$0 = i$2; break b;}
}
else if(95 !== match){var stop$0 = i$2; break b;}
}
else
if(58 <= match){
if(65 > match){var stop$0 = i$2; break b;}
}
else if(48 > match){var stop$0 = i$2; break b;}
var i$3 = i$2 + 1 | 0;
i$2 = i$3;
continue;
}
var stop$0 = lim$0;
}
if(stop$0 === start)
throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var
val =
[0,
Stdlib_String[16].call(null, s, start, stop$0 - start | 0),
stop$0];
break a;
}
}
var new_start = start + 1 | 0;
if(40 === opening)
var closing = 41;
else{
if(123 !== opening)
throw caml_maybe_attach_backtrace([0, Assert_failure, a], 1);
var closing = 125;
}
var lim = caml_ml_string_length(s), k = 0, stop = new_start;
for(;;){
if(lim <= stop) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
if(caml_string_get(s, stop) === opening){
var i = stop + 1 | 0, k$0 = k + 1 | 0;
k = k$0;
stop = i;
}
else if(caml_string_get(s, stop) === closing){
if(0 === k){
var
val =
[0,
Stdlib_String[16].call
(null, s, new_start, (stop - start | 0) - 1 | 0),
stop + 1 | 0];
break;
}
var i$0 = stop + 1 | 0, k$1 = k - 1 | 0;
k = k$1;
stop = i$0;
}
else{var i$1 = stop + 1 | 0; stop = i$1;}
}
}
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
add_char(b, 36);
previous = 32;
i$4 = start;
continue;
}
var next_i = val[2], ident = val[1];
add_string(b, caml_call1(f, ident));
previous = 32;
i$4 = next_i;
}
else{
if(92 === previous) add_char(b, previous);
if(92 !== previous$0) add_char(b, previous$0);
var i$6 = i$4 + 1 | 0;
previous = previous$0;
i$4 = i$6;
}
}
}
function truncate(b, len){
if(0 <= len && b[2] >= len){b[2] = len; return 0;}
return Stdlib[1].call(null, "Buffer.truncate");
}
function to_seq(b){
function aux(i, param){
if(b[2] <= i) return 0;
var x = caml_bytes_get(b[1][1], i), a = i + 1 | 0;
return [0, x, function(b){return aux(a, b);}];
}
return function(a){return aux(0, a);};
}
function to_seqi(b){
function aux(i, param){
if(b[2] <= i) return 0;
var x = caml_bytes_get(b[1][1], i), a = i + 1 | 0;
return [0, [0, i, x], function(b){return aux(a, b);}];
}
return function(a){return aux(0, a);};
}
function add_seq(b, seq){
return Stdlib_Seq[4].call(null, function(a){return add_char(b, a);}, seq);
}
function of_seq(i){var b = create(32); add_seq(b, i); return b;}
function add_int8(b, x){
var
position = b[2],
match = b[1],
length = match[2],
buffer = match[1],
new_position = position + 1 | 0;
if(length < new_position){
resize(b, 1);
caml_bytes_set(b[1][1], b[2], x);
}
else
caml_bytes_unsafe_set(buffer, position, x);
b[2] = new_position;
return 0;
}
function add_int16_ne(b, x){
var
position = b[2],
match = b[1],
length = match[2],
buffer = match[1],
new_position = position + 2 | 0;
if(length < new_position){
resize(b, 2);
caml_bytes_set16(b[1][1], b[2], x);
}
else
caml_bytes_set16(buffer, position, x);
b[2] = new_position;
return 0;
}
function add_int32_ne(b, x){
var
position = b[2],
match = b[1],
length = match[2],
buffer = match[1],
new_position = position + 4 | 0;
if(length < new_position){
resize(b, 4);
caml_bytes_set32(b[1][1], b[2], x);
}
else
caml_bytes_set32(buffer, position, x);
b[2] = new_position;
return 0;
}
function add_int64_ne(b, x){
var
position = b[2],
match = b[1],
length = match[2],
buffer = match[1],
new_position = position + 8 | 0;
if(length < new_position){
resize(b, 8);
caml_bytes_set64(b[1][1], b[2], x);
}
else
caml_bytes_set64(buffer, position, x);
b[2] = new_position;
return 0;
}
function add_int16_le(b, x){
var a = Stdlib_Sys[11] ? caml_bswap16(x) : x;
return add_int16_ne(b, a);
}
function add_int16_be(b, x){
var x$0 = Stdlib_Sys[11] ? x : caml_bswap16(x);
return add_int16_ne(b, x$0);
}
function add_int32_le(b, x){
var a = Stdlib_Sys[11] ? caml_int32_bswap(x) : x;
return add_int32_ne(b, a);
}
function add_int32_be(b, x){
var x$0 = Stdlib_Sys[11] ? x : caml_int32_bswap(x);
return add_int32_ne(b, x$0);
}
function add_int64_le(b, x){
var a = Stdlib_Sys[11] ? caml_int64_bswap(x) : x;
return add_int64_ne(b, a);
}
function add_int64_be(b, x){
var x$0 = Stdlib_Sys[11] ? x : caml_int64_bswap(x);
return add_int64_ne(b, x$0);
}
runtime.caml_register_global
(14,
[0,
create,
contents,
to_bytes,
sub,
blit,
nth,
length,
clear,
reset,
output_buffer,
truncate,
add_char,
add_utf_8_uchar,
add_utf_16le_uchar,
add_utf_16be_uchar,
add_string,
add_bytes,
add_substring,
add_subbytes,
add_substitute,
add_buffer,
add_channel,
to_seq,
to_seqi,
add_seq,
of_seq,
add_int8,
add_int8,
add_int16_ne,
add_int16_be,
add_int16_le,
add_int16_ne,
add_int16_be,
add_int16_le,
add_int32_ne,
add_int32_be,
add_int32_le,
add_int64_ne,
add_int64_be,
add_int64_le],
"Stdlib__Buffer");
return;
}
(globalThis));
//# 10125 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Mutex:[F(1),F(1),F(1),F(1),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_mutex_lock = runtime.caml_ml_mutex_lock,
caml_ml_mutex_unlock = runtime.caml_ml_mutex_unlock,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function protect(m, f){
caml_ml_mutex_lock(m);
try{var x = caml_call1(f, 0);}
catch(e$0){
var e = caml_wrap_exception(e$0);
caml_ml_mutex_unlock(m);
throw caml_maybe_attach_backtrace(e, 0);
}
caml_ml_mutex_unlock(m);
return x;
}
var
Stdlib_Mutex =
[0,
runtime.caml_ml_mutex_new,
caml_ml_mutex_lock,
runtime.caml_ml_mutex_try_lock,
caml_ml_mutex_unlock,
protect];
runtime.caml_register_global(0, Stdlib_Mutex, "Stdlib__Mutex");
return;
}
(globalThis));
//# 10165 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Condition:[F(1),F(2),F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
Stdlib_Condition =
[0,
runtime.caml_ml_condition_new,
runtime.caml_ml_condition_wait,
runtime.caml_ml_condition_signal,
runtime.caml_ml_condition_broadcast];
runtime.caml_register_global(0, Stdlib_Condition, "Stdlib__Condition");
return;
}
(globalThis));
//# 10264 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Domain:[F(1),F(1),F(1)*,F(1),F(1),F(1),F(1),F(1),F(1),N]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound,
caml_domain_dls_get = runtime.caml_domain_dls_get,
caml_make_vect = runtime.caml_make_vect,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_domain_id = runtime.caml_ml_domain_id,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
var
dummy = 0,
global_data = runtime.caml_get_global_data(),
Stdlib_Condition = global_data.Stdlib__Condition,
Stdlib_Mutex = global_data.Stdlib__Mutex,
Stdlib_Atomic = global_data.Stdlib__Atomic,
Stdlib = global_data.Stdlib,
Stdlib_Array = global_data.Stdlib__Array,
Stdlib_List = global_data.Stdlib__List,
Assert_failure = global_data.Assert_failure;
function cpu_relax(param){return runtime.caml_ml_domain_cpu_relax(0);}
var none = [0, 0];
function create_dls(param){
var st = caml_make_vect(8, none);
runtime.caml_domain_dls_set(st);
}
create_dls(0);
var
key_counter = Stdlib_Atomic[1].call(null, 0),
parent_keys = Stdlib_Atomic[1].call(null, 0);
function new_key(split_from_parent, init_orphan){
var
idx = Stdlib_Atomic[7].call(null, key_counter, 1),
k = [0, idx, init_orphan];
if(split_from_parent){
var split = split_from_parent[1], ki = [0, k, split];
for(;;){
var l = Stdlib_Atomic[3].call(null, parent_keys);
if(! (1 - Stdlib_Atomic[6].call(null, parent_keys, l, [0, ki, l])))
break;
}
}
return k;
}
function maybe_grow(idx){
for(;;){
var st = caml_domain_dls_get(0), sz = st.length - 1;
if(idx < sz) return st;
var new_sz = sz;
for(;;){
if(idx < new_sz){
var new_st = caml_make_vect(new_sz, none);
Stdlib_Array[9].call(null, st, 0, new_st, 0, sz);
if(runtime.caml_domain_dls_compare_and_set(st, new_st)) return new_st;
break;
}
var s = 2 * new_sz | 0;
new_sz = s;
}
}
}
function set(param, x){
var idx = param[1], st = maybe_grow(idx);
caml_check_bound(st, idx)[idx + 1] = x;
return 0;
}
var a = [0, "domain.ml", 184, 13];
function get(param){
var
init = param[2],
idx = param[1],
st = maybe_grow(idx),
oldval = caml_check_bound(st, idx)[idx + 1];
if(oldval !== none) return oldval;
var
new_obj = caml_call1(init, 0),
st$0 = caml_domain_dls_get(0),
curval = caml_check_bound(st$0, idx)[idx + 1],
b = curval === oldval ? (st$0[idx + 1] = new_obj, 1) : 0;
if(b) return new_obj;
var updated_obj = caml_check_bound(st$0, idx)[idx + 1];
if(updated_obj !== none) return updated_obj;
throw caml_maybe_attach_backtrace([0, Assert_failure, a], 1);
}
function set_initial_keys(l){
return Stdlib_List[18].call
(null,
function(param){
var v = param[2], k = param[1];
return set(k, v);
},
l);
}
function get_id(param){var domain = param[1]; return domain;}
function self(param){return caml_ml_domain_id(0);}
function is_main_domain(param){return 0 === caml_ml_domain_id(0) ? 1 : 0;}
var
first_domain_spawned = Stdlib_Atomic[1].call(null, 0),
first_spawn_function = [0, function(param){}];
function before_first_spawn(f){
if(Stdlib_Atomic[3].call(null, first_domain_spawned))
throw caml_maybe_attach_backtrace
([0, Stdlib[6], "first domain already spawned"], 1);
var old_f = first_spawn_function[1];
function new_f(param){caml_call1(old_f, 0); return caml_call1(f, 0);}
first_spawn_function[1] = new_f;
return 0;
}
var
at_exit_key =
new_key(0, function(param){return function(param){return 0;};});
function at_exit(f){
var old_exit = get(at_exit_key);
function new_exit(param){
caml_call1(f, 0);
return caml_call1(old_exit, 0);
}
return set(at_exit_key, new_exit);
}
function do_at_exit(param){
var f = get(at_exit_key);
return caml_call1(f, 0);
}
Stdlib[104][1] = do_at_exit;
function spawn(f){
if(1 - Stdlib_Atomic[3].call(null, first_domain_spawned)){
Stdlib_Atomic[4].call(null, first_domain_spawned, 1);
caml_call1(first_spawn_function[1], 0);
first_spawn_function[1] = function(param){return 0;};
}
var
a = Stdlib_Atomic[3].call(null, parent_keys),
pk =
Stdlib_List[20].call
(null,
function(param){
var split = param[2], k = param[1];
return [0, k, caml_call1(split, get(k))];
},
a),
b = Stdlib_Condition[1].call(null, 0),
term_sync = [0, 0, Stdlib_Mutex[1].call(null, 0), b];
function body(param){
try{create_dls(0); set_initial_keys(pk); var res = caml_call1(f, 0);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
try{do_at_exit(0);}catch(exn){}
throw caml_maybe_attach_backtrace(exn, 0);
}
do_at_exit(0);
return res;
}
var domain = runtime.caml_domain_spawn(body, term_sync);
return [0, domain, term_sync];
}
function join(param){
var term_sync = param[2];
function loop(param){
for(;;){
var match = term_sync[1];
if(match){var res = match[1]; return res;}
Stdlib_Condition[2].call(null, term_sync[3], term_sync[2]);
}
}
var match = Stdlib_Mutex[5].call(null, term_sync[2], loop);
if(0 === match[0]){var x = match[1]; return x;}
var ex = match[1];
throw caml_maybe_attach_backtrace(ex, 1);
}
var recommended_domain_count = runtime.caml_recommended_domain_count;
runtime.caml_register_global
(9,
[0,
spawn,
join,
get_id,
self,
before_first_spawn,
at_exit,
cpu_relax,
is_main_domain,
recommended_domain_count,
[0, new_key, get, set]],
"Stdlib__Domain");
return;
}
(globalThis));
//# 10461 "../.js/default/stdlib/stdlib.cma.js"
//# shape: CamlinternalFormat:[F(2),F(1),F(1),F(2),F(1),F(2)*,F(3),F(3),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(1)*,F(1),F(1),F(1),F(1),F(1),F(2),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_blit_string = runtime.caml_blit_string,
caml_bytes_set = runtime.caml_bytes_set,
caml_create_bytes = runtime.caml_create_bytes,
caml_format_float = runtime.caml_format_float,
caml_format_int = runtime.caml_format_int,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_notequal = runtime.caml_notequal,
caml_string_get = runtime.caml_string_get,
caml_string_unsafe_get = runtime.caml_string_unsafe_get,
caml_trampoline = runtime.caml_trampoline,
caml_trampoline_return = runtime.caml_trampoline_return,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
function caml_call4(f, a0, a1, a2, a3){
return (f.l >= 0 ? f.l : f.l = f.length) === 4
? f(a0, a1, a2, a3)
: runtime.caml_call_gen(f, [a0, a1, a2, a3]);
}
function caml_call5(f, a0, a1, a2, a3, a4){
return (f.l >= 0 ? f.l : f.l = f.length) === 5
? f(a0, a1, a2, a3, a4)
: runtime.caml_call_gen(f, [a0, a1, a2, a3, a4]);
}
var
dummy = 0,
global_data = runtime.caml_get_global_data(),
Assert_failure = global_data.Assert_failure,
CamlinternalFormatBasics = global_data.CamlinternalFormatBasics,
Stdlib = global_data.Stdlib,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_String = global_data.Stdlib__String,
Stdlib_Sys = global_data.Stdlib__Sys,
Stdlib_Char = global_data.Stdlib__Char,
Stdlib_Bytes = global_data.Stdlib__Bytes,
Stdlib_Int = global_data.Stdlib__Int;
function create_char_set(param){return Stdlib_Bytes[1].call(null, 32, 0);}
function add_in_char_set(char_set, c){
var
str_ind = c >>> 3 | 0,
mask = 1 << (c & 7),
a = runtime.caml_bytes_get(char_set, str_ind) | mask;
return caml_bytes_set(char_set, str_ind, Stdlib[29].call(null, a));
}
function freeze_char_set(char_set){
return Stdlib_Bytes[6].call(null, char_set);
}
function rev_char_set(char_set){
var char_set$0 = create_char_set(0), i = 0;
for(;;){
var a = caml_string_get(char_set, i) ^ 255;
caml_bytes_set(char_set$0, i, Stdlib[29].call(null, a));
var b = i + 1 | 0;
if(31 === i) return Stdlib_Bytes[44].call(null, char_set$0);
i = b;
}
}
function is_in_char_set(char_set, c){
var str_ind = c >>> 3 | 0, mask = 1 << (c & 7);
return 0 !== (caml_string_get(char_set, str_ind) & mask) ? 1 : 0;
}
function pad_of_pad_opt(pad_opt){
if(! pad_opt) return 0;
var width = pad_opt[1];
return [0, 1, width];
}
var a = [0, 0, 0];
function param_format_of_ignored_format(ign, fmt){
if(typeof ign === "number")
switch(ign){
case 0:
return [0, [0, fmt]];
case 1:
return [0, [1, fmt]];
case 2:
return [0, [19, fmt]];
default: return [0, [22, fmt]];
}
switch(ign[0]){
case 0:
var pad_opt = ign[1]; return [0, [2, pad_of_pad_opt(pad_opt), fmt]];
case 1:
var pad_opt$0 = ign[1];
return [0, [3, pad_of_pad_opt(pad_opt$0), fmt]];
case 2:
var pad_opt$1 = ign[2], iconv = ign[1];
return [0, [4, iconv, pad_of_pad_opt(pad_opt$1), 0, fmt]];
case 3:
var pad_opt$2 = ign[2], iconv$0 = ign[1];
return [0, [5, iconv$0, pad_of_pad_opt(pad_opt$2), 0, fmt]];
case 4:
var pad_opt$3 = ign[2], iconv$1 = ign[1];
return [0, [6, iconv$1, pad_of_pad_opt(pad_opt$3), 0, fmt]];
case 5:
var pad_opt$4 = ign[2], iconv$2 = ign[1];
return [0, [7, iconv$2, pad_of_pad_opt(pad_opt$4), 0, fmt]];
case 6:
var prec_opt = ign[2], pad_opt$5 = ign[1];
if(prec_opt) var ndec = prec_opt[1], b = [0, ndec]; else var b = 0;
return [0, [8, a, pad_of_pad_opt(pad_opt$5), b, fmt]];
case 7:
var pad_opt$6 = ign[1];
return [0, [9, pad_of_pad_opt(pad_opt$6), fmt]];
case 8:
var fmtty = ign[2], pad_opt$7 = ign[1];
return [0, [13, pad_opt$7, fmtty, fmt]];
case 9:
var fmtty$0 = ign[2], pad_opt$8 = ign[1];
return [0, [14, pad_opt$8, fmtty$0, fmt]];
case 10:
var char_set = ign[2], width_opt = ign[1];
return [0, [20, width_opt, char_set, fmt]];
default: var counter = ign[1]; return [0, [21, counter, fmt]];
}
}
function default_float_precision(fconv){return 5 === fconv[2] ? 12 : -6;}
function buffer_create(init_size){
return [0, 0, caml_create_bytes(init_size)];
}
function buffer_check_size(buf, overhead){
var
len = runtime.caml_ml_bytes_length(buf[2]),
min_len = buf[1] + overhead | 0;
if(len < min_len){
var
new_len = Stdlib_Int[11].call(null, len * 2 | 0, min_len),
new_str = caml_create_bytes(new_len);
Stdlib_Bytes[11].call(null, buf[2], 0, new_str, 0, len);
buf[2] = new_str;
}
}
function buffer_add_char(buf, c){
buffer_check_size(buf, 1);
caml_bytes_set(buf[2], buf[1], c);
buf[1] = buf[1] + 1 | 0;
}
function buffer_add_string(buf, s){
var str_len = caml_ml_string_length(s);
buffer_check_size(buf, str_len);
Stdlib_String[6].call(null, s, 0, buf[2], buf[1], str_len);
buf[1] = buf[1] + str_len | 0;
}
function buffer_contents(buf){
return Stdlib_Bytes[8].call(null, buf[2], 0, buf[1]);
}
function char_of_iconv(iconv){
switch(iconv){
case 6:
case 7:
return 120;
case 8:
case 9:
return 88;
case 10:
case 11:
return 111;
case 12:
case 15:
return 117;
case 0:
case 1:
case 2:
case 13:
return 100;
default: return 105;
}
}
function char_of_fconv(opt, fconv){
var cF = opt ? opt[1] : 70;
switch(fconv[2]){
case 0:
return 102;
case 1:
return 101;
case 2:
return 69;
case 3:
return 103;
case 4:
return 71;
case 5:
return cF;
case 6:
return 104;
case 7:
return 72;
default: return 70;
}
}
function bprint_char_set(buf, char_set){
function print_char(buf, i){
var c = Stdlib[29].call(null, i);
return 37 === c
? (buffer_add_char(buf, 37), buffer_add_char(buf, 37))
: 64
=== c
? (buffer_add_char(buf, 37), buffer_add_char(buf, 64))
: buffer_add_char(buf, c);
}
buffer_add_char(buf, 91);
var
set =
is_in_char_set(char_set, 0)
? (buffer_add_char(buf, 94), rev_char_set(char_set))
: char_set;
function is_alone(c){
var
after = Stdlib_Char[1].call(null, c + 1 | 0),
before = Stdlib_Char[1].call(null, c - 1 | 0),
a = is_in_char_set(set, c);
if(a)
var
b = is_in_char_set(set, before),
e = b ? is_in_char_set(set, after) : b,
d = 1 - e;
else
var d = a;
return d;
}
if(is_alone(93)) buffer_add_char(buf, 93);
var i = 1;
a:
for(;;){
b:
if(i < 256){
if(! is_in_char_set(set, Stdlib[29].call(null, i))){var i$0 = i + 1 | 0; i = i$0; continue;}
var switcher = Stdlib[29].call(null, i) - 45 | 0;
if(48 < switcher >>> 0){
if(210 <= switcher){print_char(buf, 255); break b;}
}
else if(46 < switcher - 1 >>> 0){
var i$2 = i + 1 | 0;
i = i$2;
continue;
}
var i$1 = i + 1 | 0;
if(! is_in_char_set(set, Stdlib[29].call(null, i$1))){
print_char(buf, i$1 - 1 | 0);
var i$6 = i$1 + 1 | 0;
i = i$6;
continue;
}
var switcher$0 = Stdlib[29].call(null, i$1) - 45 | 0;
if(48 < switcher$0 >>> 0){
if(210 <= switcher$0){
print_char(buf, 254);
print_char(buf, 255);
break b;
}
}
else if
(46 < switcher$0 - 1 >>> 0
&& ! is_in_char_set(set, Stdlib[29].call(null, i$1 + 1 | 0))){
print_char(buf, i$1 - 1 | 0);
var i$5 = i$1 + 1 | 0;
i = i$5;
continue;
}
if(! is_in_char_set(set, Stdlib[29].call(null, i$1 + 1 | 0))){
print_char(buf, i$1 - 1 | 0);
print_char(buf, i$1);
var i$4 = i$1 + 2 | 0;
i = i$4;
continue;
}
var j = i$1 + 2 | 0, i$3 = i$1 - 1 | 0, j$0 = j;
for(;;){
if(256 !== j$0 && is_in_char_set(set, Stdlib[29].call(null, j$0))){var j$1 = j$0 + 1 | 0; j$0 = j$1; continue;}
print_char(buf, i$3);
print_char(buf, 45);
print_char(buf, j$0 - 1 | 0);
if(j$0 >= 256) break;
var i$7 = j$0 + 1 | 0;
i = i$7;
continue a;
}
}
if(is_alone(45)) buffer_add_char(buf, 45);
return buffer_add_char(buf, 93);
}
}
function bprint_padty(buf, padty){
switch(padty){
case 0:
return buffer_add_char(buf, 45);
case 1:
return;
default: return buffer_add_char(buf, 48);
}
}
function bprint_ignored_flag(buf, ign_flag){
return ign_flag ? buffer_add_char(buf, 95) : ign_flag;
}
function bprint_pad_opt(buf, pad_opt){
if(! pad_opt) return;
var width = pad_opt[1];
return buffer_add_string(buf, Stdlib_Int[12].call(null, width));
}
function bprint_padding(buf, pad){
if(typeof pad === "number") return;
if(0 === pad[0]){
var n = pad[2], padty = pad[1];
bprint_padty(buf, padty);
return buffer_add_string(buf, Stdlib_Int[12].call(null, n));
}
var padty$0 = pad[1];
bprint_padty(buf, padty$0);
return buffer_add_char(buf, 42);
}
function bprint_precision(buf, prec){
if(typeof prec !== "number"){
var n = prec[1];
buffer_add_char(buf, 46);
return buffer_add_string(buf, Stdlib_Int[12].call(null, n));
}
if(prec) return buffer_add_string(buf, ".*");
}
function bprint_iconv_flag(buf, iconv){
switch(iconv){
case 1:
case 4:
return buffer_add_char(buf, 43);
case 2:
case 5:
return buffer_add_char(buf, 32);
case 7:
case 9:
case 11:
case 13:
case 14:
case 15:
return buffer_add_char(buf, 35);
default: return;
}
}
function bprint_altint_fmt(buf, ign_flag, iconv, pad, prec, c){
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
bprint_iconv_flag(buf, iconv);
bprint_padding(buf, pad);
bprint_precision(buf, prec);
buffer_add_char(buf, c);
return buffer_add_char(buf, char_of_iconv(iconv));
}
function bprint_fconv_flag(buf, fconv){
switch(fconv[1]){
case 1:
buffer_add_char(buf, 43); break;
case 2:
buffer_add_char(buf, 32); break;
}
if(8 <= fconv[2]) return buffer_add_char(buf, 35);
}
function string_of_formatting_lit(formatting_lit){
if(typeof formatting_lit === "number")
switch(formatting_lit){
case 0:
return "@]";
case 1:
return "@}";
case 2:
return "@?";
case 3:
return "@\n";
case 4:
return "@.";
case 5:
return "@@";
default: return "@%";
}
if(2 === formatting_lit[0]){
var c = formatting_lit[1], a = Stdlib_String[1].call(null, 1, c);
return Stdlib[28].call(null, "@", a);
}
var str = formatting_lit[1];
return str;
}
function bprint_char_literal(buf, chr){
return 37 === chr
? buffer_add_string(buf, "%%")
: buffer_add_char(buf, chr);
}
function bprint_string_literal(buf, str){
var a = caml_ml_string_length(str) - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
bprint_char_literal(buf, caml_string_get(str, i));
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
}
var cst_Li = "%Li", cst_i = "%i", cst_li = "%li", cst_ni = "%ni";
function bprint_fmtty(buf, fmtty$15){
var fmtty = fmtty$15;
for(;;){
if(typeof fmtty === "number") return;
switch(fmtty[0]){
case 0:
var fmtty$0 = fmtty[1];
buffer_add_string(buf, "%c");
fmtty = fmtty$0;
break;
case 1:
var fmtty$1 = fmtty[1];
buffer_add_string(buf, "%s");
fmtty = fmtty$1;
break;
case 2:
var fmtty$2 = fmtty[1];
buffer_add_string(buf, cst_i);
fmtty = fmtty$2;
break;
case 3:
var fmtty$3 = fmtty[1];
buffer_add_string(buf, cst_li);
fmtty = fmtty$3;
break;
case 4:
var fmtty$4 = fmtty[1];
buffer_add_string(buf, cst_ni);
fmtty = fmtty$4;
break;
case 5:
var fmtty$5 = fmtty[1];
buffer_add_string(buf, cst_Li);
fmtty = fmtty$5;
break;
case 6:
var fmtty$6 = fmtty[1];
buffer_add_string(buf, "%f");
fmtty = fmtty$6;
break;
case 7:
var fmtty$7 = fmtty[1];
buffer_add_string(buf, "%B");
fmtty = fmtty$7;
break;
case 8:
var fmtty$8 = fmtty[2], sub_fmtty = fmtty[1];
buffer_add_string(buf, "%{");
bprint_fmtty(buf, sub_fmtty);
buffer_add_string(buf, "%}");
fmtty = fmtty$8;
break;
case 9:
var fmtty$9 = fmtty[3], sub_fmtty$0 = fmtty[1];
buffer_add_string(buf, "%(");
bprint_fmtty(buf, sub_fmtty$0);
buffer_add_string(buf, "%)");
fmtty = fmtty$9;
break;
case 10:
var fmtty$10 = fmtty[1];
buffer_add_string(buf, "%a");
fmtty = fmtty$10;
break;
case 11:
var fmtty$11 = fmtty[1];
buffer_add_string(buf, "%t");
fmtty = fmtty$11;
break;
case 12:
var fmtty$12 = fmtty[1];
buffer_add_string(buf, "%?");
fmtty = fmtty$12;
break;
case 13:
var fmtty$13 = fmtty[1];
buffer_add_string(buf, "%r");
fmtty = fmtty$13;
break;
default:
var fmtty$14 = fmtty[1];
buffer_add_string(buf, "%_r");
fmtty = fmtty$14;
}
}
}
function int_of_custom_arity(param){
if(! param) return 0;
var x = param[1];
return 1 + int_of_custom_arity(x) | 0;
}
var cst$0 = "@[", cst = "@{";
function string_of_fmt(fmt){
var buf = buffer_create(16);
function fmtiter(fmt$1, ign_flag$0){
var fmt = fmt$1, ign_flag = ign_flag$0;
for(;;){
if(typeof fmt === "number") return;
switch(fmt[0]){
case 0:
var rest = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
buffer_add_char(buf, 99);
fmt = rest;
ign_flag = 0;
break;
case 1:
var rest$0 = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
buffer_add_char(buf, 67);
fmt = rest$0;
ign_flag = 0;
break;
case 2:
var rest$1 = fmt[2], pad = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
bprint_padding(buf, pad);
buffer_add_char(buf, 115);
fmt = rest$1;
ign_flag = 0;
break;
case 3:
var rest$2 = fmt[2], pad$0 = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
bprint_padding(buf, pad$0);
buffer_add_char(buf, 83);
fmt = rest$2;
ign_flag = 0;
break;
case 4:
var rest$3 = fmt[4], prec = fmt[3], pad$1 = fmt[2], iconv = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
bprint_iconv_flag(buf, iconv);
bprint_padding(buf, pad$1);
bprint_precision(buf, prec);
buffer_add_char(buf, char_of_iconv(iconv));
fmt = rest$3;
ign_flag = 0;
break;
case 5:
var
rest$4 = fmt[4],
prec$0 = fmt[3],
pad$2 = fmt[2],
iconv$0 = fmt[1];
bprint_altint_fmt(buf, ign_flag, iconv$0, pad$2, prec$0, 108);
fmt = rest$4;
ign_flag = 0;
break;
case 6:
var
rest$5 = fmt[4],
prec$1 = fmt[3],
pad$3 = fmt[2],
iconv$1 = fmt[1];
bprint_altint_fmt(buf, ign_flag, iconv$1, pad$3, prec$1, 110);
fmt = rest$5;
ign_flag = 0;
break;
case 7:
var
rest$6 = fmt[4],
prec$2 = fmt[3],
pad$4 = fmt[2],
iconv$2 = fmt[1];
bprint_altint_fmt(buf, ign_flag, iconv$2, pad$4, prec$2, 76);
fmt = rest$6;
ign_flag = 0;
break;
case 8:
var rest$7 = fmt[4], prec$3 = fmt[3], pad$5 = fmt[2], fconv = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
bprint_fconv_flag(buf, fconv);
bprint_padding(buf, pad$5);
bprint_precision(buf, prec$3);
buffer_add_char(buf, char_of_fconv(0, fconv));
fmt = rest$7;
ign_flag = 0;
break;
case 9:
var rest$8 = fmt[2], pad$6 = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
bprint_padding(buf, pad$6);
buffer_add_char(buf, 66);
fmt = rest$8;
ign_flag = 0;
break;
case 10:
var rest$9 = fmt[1];
buffer_add_string(buf, "%!");
fmt = rest$9;
break;
case 11:
var rest$10 = fmt[2], str = fmt[1];
bprint_string_literal(buf, str);
fmt = rest$10;
break;
case 12:
var rest$11 = fmt[2], chr = fmt[1];
bprint_char_literal(buf, chr);
fmt = rest$11;
break;
case 13:
var rest$12 = fmt[3], fmtty = fmt[2], pad_opt = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
bprint_pad_opt(buf, pad_opt);
buffer_add_char(buf, 123);
bprint_fmtty(buf, fmtty);
buffer_add_char(buf, 37);
buffer_add_char(buf, 125);
fmt = rest$12;
ign_flag = 0;
break;
case 14:
var rest$13 = fmt[3], fmtty$0 = fmt[2], pad_opt$0 = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
bprint_pad_opt(buf, pad_opt$0);
buffer_add_char(buf, 40);
bprint_fmtty(buf, fmtty$0);
buffer_add_char(buf, 37);
buffer_add_char(buf, 41);
fmt = rest$13;
ign_flag = 0;
break;
case 15:
var rest$14 = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
buffer_add_char(buf, 97);
fmt = rest$14;
ign_flag = 0;
break;
case 16:
var rest$15 = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
buffer_add_char(buf, 116);
fmt = rest$15;
ign_flag = 0;
break;
case 17:
var rest$16 = fmt[2], fmting_lit = fmt[1];
bprint_string_literal(buf, string_of_formatting_lit(fmting_lit));
fmt = rest$16;
break;
case 18:
var rest$17 = fmt[2], fmting_gen = fmt[1];
if(0 === fmting_gen[0]){
var str$0 = fmting_gen[1][2];
buffer_add_string(buf, cst);
buffer_add_string(buf, str$0);
fmt = rest$17;
}
else{
var str$1 = fmting_gen[1][2];
buffer_add_string(buf, cst$0);
buffer_add_string(buf, str$1);
fmt = rest$17;
}
break;
case 19:
var rest$18 = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
buffer_add_char(buf, 114);
fmt = rest$18;
ign_flag = 0;
break;
case 20:
var rest$19 = fmt[3], char_set = fmt[2], width_opt = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
bprint_pad_opt(buf, width_opt);
bprint_char_set(buf, char_set);
fmt = rest$19;
ign_flag = 0;
break;
case 21:
var rest$20 = fmt[2], counter = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
switch(counter){
case 0:
var a = 108; break;
case 1:
var a = 110; break;
default: var a = 78;
}
buffer_add_char(buf, a);
fmt = rest$20;
ign_flag = 0;
break;
case 22:
var rest$21 = fmt[1];
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
bprint_string_literal(buf, "0c");
fmt = rest$21;
ign_flag = 0;
break;
case 23:
var
rest$22 = fmt[2],
ign = fmt[1],
fmt$0 = param_format_of_ignored_format(ign, rest$22)[1];
fmt = fmt$0;
ign_flag = 1;
break;
default:
var rest$23 = fmt[3], arity = fmt[1], b = int_of_custom_arity(arity);
if(b >= 1){
var i = 1;
for(;;){
buffer_add_char(buf, 37);
bprint_ignored_flag(buf, ign_flag);
buffer_add_char(buf, 63);
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
fmt = rest$23;
ign_flag = 0;
}
}
}
fmtiter(fmt, 0);
return buffer_contents(buf);
}
function symm(param){
if(typeof param === "number") return 0;
switch(param[0]){
case 0:
var rest = param[1]; return [0, symm(rest)];
case 1:
var rest$0 = param[1]; return [1, symm(rest$0)];
case 2:
var rest$1 = param[1]; return [2, symm(rest$1)];
case 3:
var rest$2 = param[1]; return [3, symm(rest$2)];
case 4:
var rest$3 = param[1]; return [4, symm(rest$3)];
case 5:
var rest$4 = param[1]; return [5, symm(rest$4)];
case 6:
var rest$5 = param[1]; return [6, symm(rest$5)];
case 7:
var rest$6 = param[1]; return [7, symm(rest$6)];
case 8:
var rest$7 = param[2], ty = param[1]; return [8, ty, symm(rest$7)];
case 9:
var rest$8 = param[3], ty2 = param[2], ty1 = param[1];
return [9, ty2, ty1, symm(rest$8)];
case 10:
var rest$9 = param[1]; return [10, symm(rest$9)];
case 11:
var rest$10 = param[1]; return [11, symm(rest$10)];
case 12:
var rest$11 = param[1]; return [12, symm(rest$11)];
case 13:
var rest$12 = param[1]; return [13, symm(rest$12)];
default: var rest$13 = param[1]; return [14, symm(rest$13)];
}
}
function fmtty_rel_det(param){
if(typeof param === "number")
return [0, , function(param){}, , function(param){}];
switch(param[0]){
case 0:
var
rest = param[1],
match = fmtty_rel_det(rest),
de = match[4],
af = match[2];
return [0, , function(param){af(0);}, , de];
case 1:
var
rest$0 = param[1],
match$0 = fmtty_rel_det(rest$0),
de$0 = match$0[4],
af$0 = match$0[2];
return [0, , function(param){af$0(0);}, , de$0];
case 2:
var
rest$1 = param[1],
match$1 = fmtty_rel_det(rest$1),
de$1 = match$1[4],
af$1 = match$1[2];
return [0, , function(param){af$1(0);}, , de$1];
case 3:
var
rest$2 = param[1],
match$2 = fmtty_rel_det(rest$2),
de$2 = match$2[4],
af$2 = match$2[2];
return [0, , function(param){af$2(0);}, , de$2];
case 4:
var
rest$3 = param[1],
match$3 = fmtty_rel_det(rest$3),
de$3 = match$3[4],
af$3 = match$3[2];
return [0, , function(param){af$3(0);}, , de$3];
case 5:
var
rest$4 = param[1],
match$4 = fmtty_rel_det(rest$4),
de$4 = match$4[4],
af$4 = match$4[2];
return [0, , function(param){af$4(0);}, , de$4];
case 6:
var
rest$5 = param[1],
match$5 = fmtty_rel_det(rest$5),
de$5 = match$5[4],
af$5 = match$5[2];
return [0, , function(param){af$5(0);}, , de$5];
case 7:
var
rest$6 = param[1],
match$6 = fmtty_rel_det(rest$6),
de$6 = match$6[4],
af$6 = match$6[2];
return [0, , function(param){af$6(0);}, , de$6];
case 8:
var
rest$7 = param[2],
match$7 = fmtty_rel_det(rest$7),
de$7 = match$7[4],
af$7 = match$7[2];
return [0, , function(param){af$7(0);}, , de$7];
case 9:
var
rest$8 = param[3],
ty2 = param[2],
ty1 = param[1],
match$8 = fmtty_rel_det(rest$8),
de$8 = match$8[4],
af$8 = match$8[2],
ty = trans(symm(ty1), ty2),
match$9 = fmtty_rel_det(ty),
jd = match$9[4],
ga = match$9[2];
return [0,
,
function(param){ga(0); af$8(0);},
,
function(param){jd(0); de$8(0);}];
case 10:
var
rest$9 = param[1],
match$10 = fmtty_rel_det(rest$9),
de$9 = match$10[4],
af$9 = match$10[2];
return [0, , function(param){af$9(0);}, , de$9];
case 11:
var
rest$10 = param[1],
match$11 = fmtty_rel_det(rest$10),
de$10 = match$11[4],
af$10 = match$11[2];
return [0, , function(param){af$10(0);}, , de$10];
case 12:
var
rest$11 = param[1],
match$12 = fmtty_rel_det(rest$11),
de$11 = match$12[4],
af$11 = match$12[2];
return [0, , function(param){af$11(0);}, , de$11];
case 13:
var
rest$12 = param[1],
match$13 = fmtty_rel_det(rest$12),
de$12 = match$13[4],
af$12 = match$13[2];
return [0, , function(param){af$12(0);}, , function(param){de$12(0);}];
default:
var
rest$13 = param[1],
match$14 = fmtty_rel_det(rest$13),
de$13 = match$14[4],
af$13 = match$14[2];
return [0, , function(param){af$13(0);}, , function(param){de$13(0);}];
}
}
var
cst_camlinternalFormat_ml = "camlinternalFormat.ml",
b = [0, cst_camlinternalFormat_ml, 850, 23],
c = [0, cst_camlinternalFormat_ml, 837, 26],
d = [0, cst_camlinternalFormat_ml, 847, 28],
e = [0, cst_camlinternalFormat_ml, 815, 21],
f = [0, cst_camlinternalFormat_ml, 819, 21],
g = [0, cst_camlinternalFormat_ml, 823, 19],
h = [0, cst_camlinternalFormat_ml, 827, 22],
i = [0, cst_camlinternalFormat_ml, 832, 30],
j = [0, cst_camlinternalFormat_ml, 851, 23],
k = [0, cst_camlinternalFormat_ml, 836, 26],
l = [0, cst_camlinternalFormat_ml, 846, 28],
m = [0, cst_camlinternalFormat_ml, 814, 21],
n = [0, cst_camlinternalFormat_ml, 818, 21],
o = [0, cst_camlinternalFormat_ml, 822, 19],
p = [0, cst_camlinternalFormat_ml, 826, 22],
q = [0, cst_camlinternalFormat_ml, 831, 30];
function trans(ty1, ty2){
a:
{
b:
{
c:
{
d:
{
e:
{
f:
{
g:
{
if(typeof ty1 !== "number"){
switch(ty1[0]){
case 0:
var rest1 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 0:
var rest2 = ty2[1]; return [0, trans(rest1, rest2)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
case 8:
break f;
case 9:
break g;
}
break;
case 1:
var rest1$0 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 1:
var rest2$0 = ty2[1]; return [1, trans(rest1$0, rest2$0)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
case 8:
break f;
case 9:
break g;
}
break;
case 2:
var rest1$1 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 2:
var rest2$1 = ty2[1]; return [2, trans(rest1$1, rest2$1)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
case 8:
break f;
case 9:
break g;
}
break;
case 3:
var rest1$2 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 3:
var rest2$2 = ty2[1]; return [3, trans(rest1$2, rest2$2)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
case 8:
break f;
case 9:
break g;
}
break;
case 4:
var rest1$3 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 4:
var rest2$3 = ty2[1]; return [4, trans(rest1$3, rest2$3)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
case 8:
break f;
case 9:
break g;
}
break;
case 5:
var rest1$4 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 5:
var rest2$4 = ty2[1]; return [5, trans(rest1$4, rest2$4)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
case 8:
break f;
case 9:
break g;
}
break;
case 6:
var rest1$5 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 6:
var rest2$5 = ty2[1]; return [6, trans(rest1$5, rest2$5)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
case 8:
break f;
case 9:
break g;
}
break;
case 7:
var rest1$6 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 7:
var rest2$6 = ty2[1]; return [7, trans(rest1$6, rest2$6)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
case 8:
break f;
case 9:
break g;
}
break;
case 8:
var rest1$7 = ty1[2], ty1$0 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 8:
var
rest2$7 = ty2[2],
ty2$0 = ty2[1],
a = trans(rest1$7, rest2$7);
return [8, trans(ty1$0, ty2$0), a];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
}
throw caml_maybe_attach_backtrace([0, Assert_failure, k], 1);
case 9:
var rest1$8 = ty1[3], ty12 = ty1[2], ty11 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 9:
var
rest2$8 = ty2[3],
ty22 = ty2[2],
ty21 = ty2[1],
ty = trans(symm(ty12), ty21),
match = fmtty_rel_det(ty),
f4 = match[4],
f2 = match[2];
f2(0);
f4(0);
return [9, ty11, ty22, trans(rest1$8, rest2$8)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
case 8:
break f;
}
throw caml_maybe_attach_backtrace([0, Assert_failure, l], 1);
case 10:
var rest1$9 = ty1[1];
if(typeof ty2 !== "number" && 10 === ty2[0]){
var rest2$9 = ty2[1];
return [10, trans(rest1$9, rest2$9)];
}
throw caml_maybe_attach_backtrace([0, Assert_failure, m], 1);
case 11:
var rest1$10 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 11:
var rest2$10 = ty2[1];
return [11, trans(rest1$10, rest2$10)];
case 10:
break a;
}
throw caml_maybe_attach_backtrace([0, Assert_failure, n], 1);
case 12:
var rest1$11 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 12:
var rest2$11 = ty2[1];
return [12, trans(rest1$11, rest2$11)];
case 10:
break a;
case 11:
break b;
}
throw caml_maybe_attach_backtrace([0, Assert_failure, o], 1);
case 13:
var rest1$12 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 13:
var rest2$12 = ty2[1];
return [13, trans(rest1$12, rest2$12)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
}
throw caml_maybe_attach_backtrace([0, Assert_failure, p], 1);
default:
var rest1$13 = ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0]){
case 14:
var rest2$13 = ty2[1];
return [14, trans(rest1$13, rest2$13)];
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
}
throw caml_maybe_attach_backtrace([0, Assert_failure, q], 1);
}
throw caml_maybe_attach_backtrace([0, Assert_failure, j], 1);
}
if(typeof ty2 === "number") return 0;
switch(ty2[0]){
case 10:
break a;
case 11:
break b;
case 12:
break c;
case 13:
break d;
case 14:
break e;
case 8:
break f;
case 9: break;
default:
throw caml_maybe_attach_backtrace([0, Assert_failure, b], 1);
}
}
throw caml_maybe_attach_backtrace([0, Assert_failure, d], 1);
}
throw caml_maybe_attach_backtrace([0, Assert_failure, c], 1);
}
throw caml_maybe_attach_backtrace([0, Assert_failure, i], 1);
}
throw caml_maybe_attach_backtrace([0, Assert_failure, h], 1);
}
throw caml_maybe_attach_backtrace([0, Assert_failure, g], 1);
}
throw caml_maybe_attach_backtrace([0, Assert_failure, f], 1);
}
throw caml_maybe_attach_backtrace([0, Assert_failure, e], 1);
}
function fmtty_of_fmt(fmtty$4){
var fmtty = fmtty$4;
for(;;){
if(typeof fmtty === "number") return 0;
switch(fmtty[0]){
case 4:
var
rest$1 = fmtty[4],
prec = fmtty[3],
pad$0 = fmtty[2],
ty_rest = fmtty_of_fmt(rest$1),
prec_ty = fmtty_of_precision_fmtty(prec, [2, ty_rest]);
return fmtty_of_padding_fmtty(pad$0, prec_ty);
case 5:
var
rest$2 = fmtty[4],
prec$0 = fmtty[3],
pad$1 = fmtty[2],
ty_rest$0 = fmtty_of_fmt(rest$2),
prec_ty$0 = fmtty_of_precision_fmtty(prec$0, [3, ty_rest$0]);
return fmtty_of_padding_fmtty(pad$1, prec_ty$0);
case 6:
var
rest$3 = fmtty[4],
prec$1 = fmtty[3],
pad$2 = fmtty[2],
ty_rest$1 = fmtty_of_fmt(rest$3),
prec_ty$1 = fmtty_of_precision_fmtty(prec$1, [4, ty_rest$1]);
return fmtty_of_padding_fmtty(pad$2, prec_ty$1);
case 7:
var
rest$4 = fmtty[4],
prec$2 = fmtty[3],
pad$3 = fmtty[2],
ty_rest$2 = fmtty_of_fmt(rest$4),
prec_ty$2 = fmtty_of_precision_fmtty(prec$2, [5, ty_rest$2]);
return fmtty_of_padding_fmtty(pad$3, prec_ty$2);
case 8:
var
rest$5 = fmtty[4],
prec$3 = fmtty[3],
pad$4 = fmtty[2],
ty_rest$3 = fmtty_of_fmt(rest$5),
prec_ty$3 = fmtty_of_precision_fmtty(prec$3, [6, ty_rest$3]);
return fmtty_of_padding_fmtty(pad$4, prec_ty$3);
case 9:
var rest$6 = fmtty[2], pad$5 = fmtty[1];
return fmtty_of_padding_fmtty(pad$5, [7, fmtty_of_fmt(rest$6)]);
case 10:
var fmtty$0 = fmtty[1]; fmtty = fmtty$0; break;
case 13:
var rest$7 = fmtty[3], ty = fmtty[2];
return [8, ty, fmtty_of_fmt(rest$7)];
case 14:
var rest$8 = fmtty[3], ty$0 = fmtty[2];
return [9, ty$0, ty$0, fmtty_of_fmt(rest$8)];
case 15:
var rest$9 = fmtty[1]; return [10, fmtty_of_fmt(rest$9)];
case 16:
var rest$10 = fmtty[1]; return [11, fmtty_of_fmt(rest$10)];
case 18:
var
rest$11 = fmtty[2],
formatting_gen = fmtty[1],
b = fmtty_of_fmt(rest$11);
if(0 === formatting_gen[0])
var fmt = formatting_gen[1][1], a = fmtty_of_fmt(fmt);
else
var fmt$0 = formatting_gen[1][1], a = fmtty_of_fmt(fmt$0);
return CamlinternalFormatBasics[1].call(null, a, b);
case 19:
var rest$12 = fmtty[1]; return [13, fmtty_of_fmt(rest$12)];
case 20:
var rest$13 = fmtty[3]; return [1, fmtty_of_fmt(rest$13)];
case 21:
var rest$14 = fmtty[2]; return [2, fmtty_of_fmt(rest$14)];
case 23:
var fmtty$2 = fmtty[2], ign = fmtty[1];
if(typeof ign === "number"){
if(2 === ign) return [14, fmtty_of_fmt(fmtty$2)];
fmtty = fmtty$2;
}
else{
if(9 === ign[0]){
var fmtty$3 = ign[2], c = fmtty_of_fmt(fmtty$2);
return CamlinternalFormatBasics[1].call(null, fmtty$3, c);
}
fmtty = fmtty$2;
}
break;
case 24:
var rest$15 = fmtty[3], arity = fmtty[1];
return fmtty_of_custom(arity, fmtty_of_fmt(rest$15));
case 2:
case 3:
var rest$0 = fmtty[2], pad = fmtty[1];
return fmtty_of_padding_fmtty(pad, [1, fmtty_of_fmt(rest$0)]);
case 0:
case 1:
case 22:
var rest = fmtty[1]; return [0, fmtty_of_fmt(rest)];
default: var fmtty$1 = fmtty[2]; fmtty = fmtty$1;
}
}
}
function fmtty_of_custom(arity, fmtty){
if(! arity) return fmtty;
var arity$0 = arity[1];
return [12, fmtty_of_custom(arity$0, fmtty)];
}
function fmtty_of_padding_fmtty(pad, fmtty){
return typeof pad === "number" ? fmtty : 0 === pad[0] ? fmtty : [2, fmtty];
}
function fmtty_of_precision_fmtty(prec, fmtty){
return typeof prec === "number" ? prec ? [2, fmtty] : fmtty : fmtty;
}
var
Type_mismatch =
[248, "CamlinternalFormat.Type_mismatch", runtime.caml_fresh_oo_id(0)];
function type_padding(pad, fmtty){
if(typeof pad === "number") return [0, 0, fmtty];
if(0 === pad[0]){
var w = pad[2], padty = pad[1];
return [0, [0, padty, w], fmtty];
}
if(typeof fmtty !== "number" && 2 === fmtty[0]){
var rest = fmtty[1], padty$0 = pad[1];
return [0, [1, padty$0], rest];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
}
function type_padprec(pad, prec, fmtty){
var match = type_padding(pad, fmtty);
if(typeof prec !== "number"){
var rest$1 = match[2], pad$2 = match[1], p = prec[1];
return [0, pad$2, [0, p], rest$1];
}
if(! prec){
var rest$0 = match[2], pad$1 = match[1];
return [0, pad$1, 0, rest$0];
}
var match$0 = match[2];
if(typeof match$0 !== "number" && 2 === match$0[0]){
var rest = match$0[1], pad$0 = match[1];
return [0, pad$0, 1, rest];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
}
function type_format(fmt, fmtty){
var a = type_format_gen(fmt, fmtty);
if(typeof a[2] !== "number")
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
var fmt$0 = a[1];
return fmt$0;
}
function type_format_gen(fmt, fmtty0){
if(typeof fmt === "number") return [0, 0, fmtty0];
switch(fmt[0]){
case 0:
if(typeof fmtty0 !== "number" && 0 === fmtty0[0]){
var
fmtty_rest = fmtty0[1],
fmt_rest = fmt[1],
match = type_format_gen(fmt_rest, fmtty_rest),
fmtty = match[2],
fmt$0 = match[1];
return [0, [0, fmt$0], fmtty];
}
break;
case 1:
if(typeof fmtty0 !== "number" && 0 === fmtty0[0]){
var
fmtty_rest$0 = fmtty0[1],
fmt_rest$0 = fmt[1],
match$0 = type_format_gen(fmt_rest$0, fmtty_rest$0),
fmtty$0 = match$0[2],
fmt$1 = match$0[1];
return [0, [1, fmt$1], fmtty$0];
}
break;
case 2:
var
fmt_rest$1 = fmt[2],
pad = fmt[1],
match$1 = type_padding(pad, fmtty0),
pad$0 = match$1[1],
match$2 = match$1[2];
if(typeof match$2 !== "number" && 1 === match$2[0]){
var
fmtty_rest$1 = match$2[1],
match$3 = type_format_gen(fmt_rest$1, fmtty_rest$1),
fmtty$1 = match$3[2],
fmt$2 = match$3[1];
return [0, [2, pad$0, fmt$2], fmtty$1];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
case 3:
var
fmt_rest$2 = fmt[2],
pad$1 = fmt[1],
match$4 = type_padding(pad$1, fmtty0),
pad$2 = match$4[1],
match$5 = match$4[2];
if(typeof match$5 !== "number" && 1 === match$5[0]){
var
fmtty_rest$2 = match$5[1],
match$6 = type_format_gen(fmt_rest$2, fmtty_rest$2),
fmtty$2 = match$6[2],
fmt$3 = match$6[1];
return [0, [3, pad$2, fmt$3], fmtty$2];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
case 4:
var
fmt_rest$3 = fmt[4],
prec = fmt[3],
pad$3 = fmt[2],
iconv = fmt[1],
match$7 = type_padprec(pad$3, prec, fmtty0),
pad$4 = match$7[1],
match$8 = match$7[3];
if(typeof match$8 !== "number" && 2 === match$8[0]){
var
fmtty_rest$3 = match$8[1],
prec$0 = match$7[2],
match$9 = type_format_gen(fmt_rest$3, fmtty_rest$3),
fmtty$3 = match$9[2],
fmt$4 = match$9[1];
return [0, [4, iconv, pad$4, prec$0, fmt$4], fmtty$3];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
case 5:
var
fmt_rest$4 = fmt[4],
prec$1 = fmt[3],
pad$5 = fmt[2],
iconv$0 = fmt[1],
match$10 = type_padprec(pad$5, prec$1, fmtty0),
pad$6 = match$10[1],
match$11 = match$10[3];
if(typeof match$11 !== "number" && 3 === match$11[0]){
var
fmtty_rest$4 = match$11[1],
prec$2 = match$10[2],
match$12 = type_format_gen(fmt_rest$4, fmtty_rest$4),
fmtty$4 = match$12[2],
fmt$5 = match$12[1];
return [0, [5, iconv$0, pad$6, prec$2, fmt$5], fmtty$4];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
case 6:
var
fmt_rest$5 = fmt[4],
prec$3 = fmt[3],
pad$7 = fmt[2],
iconv$1 = fmt[1],
match$13 = type_padprec(pad$7, prec$3, fmtty0),
pad$8 = match$13[1],
match$14 = match$13[3];
if(typeof match$14 !== "number" && 4 === match$14[0]){
var
fmtty_rest$5 = match$14[1],
prec$4 = match$13[2],
match$15 = type_format_gen(fmt_rest$5, fmtty_rest$5),
fmtty$5 = match$15[2],
fmt$6 = match$15[1];
return [0, [6, iconv$1, pad$8, prec$4, fmt$6], fmtty$5];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
case 7:
var
fmt_rest$6 = fmt[4],
prec$5 = fmt[3],
pad$9 = fmt[2],
iconv$2 = fmt[1],
match$16 = type_padprec(pad$9, prec$5, fmtty0),
pad$10 = match$16[1],
match$17 = match$16[3];
if(typeof match$17 !== "number" && 5 === match$17[0]){
var
fmtty_rest$6 = match$17[1],
prec$6 = match$16[2],
match$18 = type_format_gen(fmt_rest$6, fmtty_rest$6),
fmtty$6 = match$18[2],
fmt$7 = match$18[1];
return [0, [7, iconv$2, pad$10, prec$6, fmt$7], fmtty$6];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
case 8:
var
fmt_rest$7 = fmt[4],
prec$7 = fmt[3],
pad$11 = fmt[2],
fconv = fmt[1],
match$19 = type_padprec(pad$11, prec$7, fmtty0),
pad$12 = match$19[1],
match$20 = match$19[3];
if(typeof match$20 !== "number" && 6 === match$20[0]){
var
fmtty_rest$7 = match$20[1],
prec$8 = match$19[2],
match$21 = type_format_gen(fmt_rest$7, fmtty_rest$7),
fmtty$7 = match$21[2],
fmt$8 = match$21[1];
return [0, [8, fconv, pad$12, prec$8, fmt$8], fmtty$7];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
case 9:
var
fmt_rest$8 = fmt[2],
pad$13 = fmt[1],
match$22 = type_padding(pad$13, fmtty0),
pad$14 = match$22[1],
match$23 = match$22[2];
if(typeof match$23 !== "number" && 7 === match$23[0]){
var
fmtty_rest$8 = match$23[1],
match$24 = type_format_gen(fmt_rest$8, fmtty_rest$8),
fmtty$8 = match$24[2],
fmt$9 = match$24[1];
return [0, [9, pad$14, fmt$9], fmtty$8];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
case 10:
var
fmt_rest$9 = fmt[1],
match$25 = type_format_gen(fmt_rest$9, fmtty0),
fmtty$9 = match$25[2],
fmt$10 = match$25[1];
return [0, [10, fmt$10], fmtty$9];
case 11:
var
fmt_rest$10 = fmt[2],
str = fmt[1],
match$26 = type_format_gen(fmt_rest$10, fmtty0),
fmtty$10 = match$26[2],
fmt$11 = match$26[1];
return [0, [11, str, fmt$11], fmtty$10];
case 12:
var
fmt_rest$11 = fmt[2],
chr = fmt[1],
match$27 = type_format_gen(fmt_rest$11, fmtty0),
fmtty$11 = match$27[2],
fmt$12 = match$27[1];
return [0, [12, chr, fmt$12], fmtty$11];
case 13:
if(typeof fmtty0 !== "number" && 8 === fmtty0[0]){
var
fmtty_rest$9 = fmtty0[2],
sub_fmtty = fmtty0[1],
fmt_rest$12 = fmt[3],
sub_fmtty$0 = fmt[2],
pad_opt = fmt[1];
if(caml_notequal([0, sub_fmtty$0], [0, sub_fmtty]))
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
var
match$28 = type_format_gen(fmt_rest$12, fmtty_rest$9),
fmtty$12 = match$28[2],
fmt$13 = match$28[1];
return [0, [13, pad_opt, sub_fmtty, fmt$13], fmtty$12];
}
break;
case 14:
if(typeof fmtty0 !== "number" && 9 === fmtty0[0]){
var
fmtty_rest$10 = fmtty0[3],
sub_fmtty1 = fmtty0[1],
fmt_rest$13 = fmt[3],
sub_fmtty$1 = fmt[2],
pad_opt$0 = fmt[1],
b = [0, CamlinternalFormatBasics[2].call(null, sub_fmtty1)];
if
(caml_notequal
([0, CamlinternalFormatBasics[2].call(null, sub_fmtty$1)], b))
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
var
match$29 =
type_format_gen
(fmt_rest$13,
CamlinternalFormatBasics[2].call(null, fmtty_rest$10)),
fmtty$13 = match$29[2],
fmt$14 = match$29[1];
return [0, [14, pad_opt$0, sub_fmtty1, fmt$14], fmtty$13];
}
break;
case 15:
if(typeof fmtty0 !== "number" && 10 === fmtty0[0]){
var
fmtty_rest$11 = fmtty0[1],
fmt_rest$14 = fmt[1],
match$30 = type_format_gen(fmt_rest$14, fmtty_rest$11),
fmtty$14 = match$30[2],
fmt$15 = match$30[1];
return [0, [15, fmt$15], fmtty$14];
}
break;
case 16:
if(typeof fmtty0 !== "number" && 11 === fmtty0[0]){
var
fmtty_rest$12 = fmtty0[1],
fmt_rest$15 = fmt[1],
match$31 = type_format_gen(fmt_rest$15, fmtty_rest$12),
fmtty$15 = match$31[2],
fmt$16 = match$31[1];
return [0, [16, fmt$16], fmtty$15];
}
break;
case 17:
var
fmt_rest$16 = fmt[2],
formatting_lit = fmt[1],
match$32 = type_format_gen(fmt_rest$16, fmtty0),
fmtty$16 = match$32[2],
fmt$17 = match$32[1];
return [0, [17, formatting_lit, fmt$17], fmtty$16];
case 18:
var fmt_rest$17 = fmt[2], formatting_gen = fmt[1];
if(0 === formatting_gen[0]){
var
match$36 = formatting_gen[1],
str$0 = match$36[2],
fmt1 = match$36[1],
match$37 = type_format_gen(fmt1, fmtty0),
fmtty2 = match$37[2],
fmt2 = match$37[1],
match$38 = type_format_gen(fmt_rest$17, fmtty2),
fmtty3 = match$38[2],
fmt3 = match$38[1];
return [0, [18, [0, [0, fmt2, str$0]], fmt3], fmtty3];
}
var
match$39 = formatting_gen[1],
str$1 = match$39[2],
fmt1$0 = match$39[1],
match$40 = type_format_gen(fmt1$0, fmtty0),
fmtty2$0 = match$40[2],
fmt2$0 = match$40[1],
match$41 = type_format_gen(fmt_rest$17, fmtty2$0),
fmtty3$0 = match$41[2],
fmt3$0 = match$41[1];
return [0, [18, [1, [0, fmt2$0, str$1]], fmt3$0], fmtty3$0];
case 19:
if(typeof fmtty0 !== "number" && 13 === fmtty0[0]){
var
fmtty_rest$13 = fmtty0[1],
fmt_rest$18 = fmt[1],
match$33 = type_format_gen(fmt_rest$18, fmtty_rest$13),
fmtty$17 = match$33[2],
fmt$18 = match$33[1];
return [0, [19, fmt$18], fmtty$17];
}
break;
case 20:
if(typeof fmtty0 !== "number" && 1 === fmtty0[0]){
var
fmtty_rest$14 = fmtty0[1],
fmt_rest$19 = fmt[3],
char_set = fmt[2],
width_opt = fmt[1],
match$34 = type_format_gen(fmt_rest$19, fmtty_rest$14),
fmtty$18 = match$34[2],
fmt$19 = match$34[1];
return [0, [20, width_opt, char_set, fmt$19], fmtty$18];
}
break;
case 21:
if(typeof fmtty0 !== "number" && 2 === fmtty0[0]){
var
fmtty_rest$15 = fmtty0[1],
fmt_rest$20 = fmt[2],
counter = fmt[1],
match$35 = type_format_gen(fmt_rest$20, fmtty_rest$15),
fmtty$19 = match$35[2],
fmt$20 = match$35[1];
return [0, [21, counter, fmt$20], fmtty$19];
}
break;
case 23:
var rest = fmt[2], ign = fmt[1];
if(typeof ign !== "number")
switch(ign[0]){
case 8:
var sub_fmtty$2 = ign[2], pad_opt$1 = ign[1];
return type_ignored_param_one
([8, pad_opt$1, sub_fmtty$2], rest, fmtty0);
case 9:
var
sub_fmtty$3 = ign[2],
pad_opt$2 = ign[1],
a = type_ignored_format_substituti(sub_fmtty$3, rest, fmtty0),
match$43 = a[2],
fmtty$21 = match$43[2],
fmt$22 = match$43[1],
sub_fmtty$4 = a[1];
return [0, [23, [9, pad_opt$2, sub_fmtty$4], fmt$22], fmtty$21];
default: return type_ignored_param_one(ign, rest, fmtty0);
}
if(2 !== ign) return type_ignored_param_one(ign, rest, fmtty0);
if(typeof fmtty0 !== "number" && 14 === fmtty0[0]){
var
fmtty_rest$16 = fmtty0[1],
match$42 = type_format_gen(rest, fmtty_rest$16),
fmtty$20 = match$42[2],
fmt$21 = match$42[1];
return [0, [23, 2, fmt$21], fmtty$20];
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
}
function type_ignored_param_one(ign, fmt, fmtty){
var
match = type_format_gen(fmt, fmtty),
fmtty$0 = match[2],
fmt$0 = match[1];
return [0, [23, ign, fmt$0], fmtty$0];
}
function type_ignored_format_substituti(sub_fmtty, fmt, fmtty){
if(typeof sub_fmtty === "number")
return [0, 0, type_format_gen(fmt, fmtty)];
switch(sub_fmtty[0]){
case 0:
if(typeof fmtty !== "number" && 0 === fmtty[0]){
var
fmtty_rest = fmtty[1],
sub_fmtty_rest = sub_fmtty[1],
match =
type_ignored_format_substituti(sub_fmtty_rest, fmt, fmtty_rest),
fmt$0 = match[2],
sub_fmtty_rest$0 = match[1];
return [0, [0, sub_fmtty_rest$0], fmt$0];
}
break;
case 1:
if(typeof fmtty !== "number" && 1 === fmtty[0]){
var
fmtty_rest$0 = fmtty[1],
sub_fmtty_rest$1 = sub_fmtty[1],
match$0 =
type_ignored_format_substituti(sub_fmtty_rest$1, fmt, fmtty_rest$0),
fmt$1 = match$0[2],
sub_fmtty_rest$2 = match$0[1];
return [0, [1, sub_fmtty_rest$2], fmt$1];
}
break;
case 2:
if(typeof fmtty !== "number" && 2 === fmtty[0]){
var
fmtty_rest$1 = fmtty[1],
sub_fmtty_rest$3 = sub_fmtty[1],
match$1 =
type_ignored_format_substituti(sub_fmtty_rest$3, fmt, fmtty_rest$1),
fmt$2 = match$1[2],
sub_fmtty_rest$4 = match$1[1];
return [0, [2, sub_fmtty_rest$4], fmt$2];
}
break;
case 3:
if(typeof fmtty !== "number" && 3 === fmtty[0]){
var
fmtty_rest$2 = fmtty[1],
sub_fmtty_rest$5 = sub_fmtty[1],
match$2 =
type_ignored_format_substituti(sub_fmtty_rest$5, fmt, fmtty_rest$2),
fmt$3 = match$2[2],
sub_fmtty_rest$6 = match$2[1];
return [0, [3, sub_fmtty_rest$6], fmt$3];
}
break;
case 4:
if(typeof fmtty !== "number" && 4 === fmtty[0]){
var
fmtty_rest$3 = fmtty[1],
sub_fmtty_rest$7 = sub_fmtty[1],
match$3 =
type_ignored_format_substituti(sub_fmtty_rest$7, fmt, fmtty_rest$3),
fmt$4 = match$3[2],
sub_fmtty_rest$8 = match$3[1];
return [0, [4, sub_fmtty_rest$8], fmt$4];
}
break;
case 5:
if(typeof fmtty !== "number" && 5 === fmtty[0]){
var
fmtty_rest$4 = fmtty[1],
sub_fmtty_rest$9 = sub_fmtty[1],
match$4 =
type_ignored_format_substituti(sub_fmtty_rest$9, fmt, fmtty_rest$4),
fmt$5 = match$4[2],
sub_fmtty_rest$10 = match$4[1];
return [0, [5, sub_fmtty_rest$10], fmt$5];
}
break;
case 6:
if(typeof fmtty !== "number" && 6 === fmtty[0]){
var
fmtty_rest$5 = fmtty[1],
sub_fmtty_rest$11 = sub_fmtty[1],
match$5 =
type_ignored_format_substituti
(sub_fmtty_rest$11, fmt, fmtty_rest$5),
fmt$6 = match$5[2],
sub_fmtty_rest$12 = match$5[1];
return [0, [6, sub_fmtty_rest$12], fmt$6];
}
break;
case 7:
if(typeof fmtty !== "number" && 7 === fmtty[0]){
var
fmtty_rest$6 = fmtty[1],
sub_fmtty_rest$13 = sub_fmtty[1],
match$6 =
type_ignored_format_substituti
(sub_fmtty_rest$13, fmt, fmtty_rest$6),
fmt$7 = match$6[2],
sub_fmtty_rest$14 = match$6[1];
return [0, [7, sub_fmtty_rest$14], fmt$7];
}
break;
case 8:
if(typeof fmtty !== "number" && 8 === fmtty[0]){
var
fmtty_rest$7 = fmtty[2],
sub2_fmtty = fmtty[1],
sub_fmtty_rest$15 = sub_fmtty[2],
sub2_fmtty$0 = sub_fmtty[1];
if(caml_notequal([0, sub2_fmtty$0], [0, sub2_fmtty]))
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
var
match$7 =
type_ignored_format_substituti
(sub_fmtty_rest$15, fmt, fmtty_rest$7),
fmt$8 = match$7[2],
sub_fmtty_rest$16 = match$7[1];
return [0, [8, sub2_fmtty, sub_fmtty_rest$16], fmt$8];
}
break;
case 9:
if(typeof fmtty !== "number" && 9 === fmtty[0]){
var
fmtty_rest$8 = fmtty[3],
sub2_fmtty$1 = fmtty[2],
sub1_fmtty = fmtty[1],
sub_fmtty_rest$17 = sub_fmtty[3],
sub2_fmtty$2 = sub_fmtty[2],
sub1_fmtty$0 = sub_fmtty[1],
a = [0, CamlinternalFormatBasics[2].call(null, sub1_fmtty)];
if
(caml_notequal
([0, CamlinternalFormatBasics[2].call(null, sub1_fmtty$0)], a))
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
var b = [0, CamlinternalFormatBasics[2].call(null, sub2_fmtty$1)];
if
(caml_notequal
([0, CamlinternalFormatBasics[2].call(null, sub2_fmtty$2)], b))
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
var
sub_fmtty$0 = trans(symm(sub1_fmtty), sub2_fmtty$1),
match$8 = fmtty_rel_det(sub_fmtty$0),
f4 = match$8[4],
f2 = match$8[2];
f2(0);
f4(0);
var
match$9 =
type_ignored_format_substituti
(CamlinternalFormatBasics[2].call(null, sub_fmtty_rest$17),
fmt,
fmtty_rest$8),
fmt$9 = match$9[2],
sub_fmtty_rest$18 = match$9[1];
return [0,
[9, sub1_fmtty, sub2_fmtty$1, symm(sub_fmtty_rest$18)],
fmt$9];
}
break;
case 10:
if(typeof fmtty !== "number" && 10 === fmtty[0]){
var
fmtty_rest$9 = fmtty[1],
sub_fmtty_rest$19 = sub_fmtty[1],
match$10 =
type_ignored_format_substituti
(sub_fmtty_rest$19, fmt, fmtty_rest$9),
fmt$10 = match$10[2],
sub_fmtty_rest$20 = match$10[1];
return [0, [10, sub_fmtty_rest$20], fmt$10];
}
break;
case 11:
if(typeof fmtty !== "number" && 11 === fmtty[0]){
var
fmtty_rest$10 = fmtty[1],
sub_fmtty_rest$21 = sub_fmtty[1],
match$11 =
type_ignored_format_substituti
(sub_fmtty_rest$21, fmt, fmtty_rest$10),
fmt$11 = match$11[2],
sub_fmtty_rest$22 = match$11[1];
return [0, [11, sub_fmtty_rest$22], fmt$11];
}
break;
case 13:
if(typeof fmtty !== "number" && 13 === fmtty[0]){
var
fmtty_rest$11 = fmtty[1],
sub_fmtty_rest$23 = sub_fmtty[1],
match$12 =
type_ignored_format_substituti
(sub_fmtty_rest$23, fmt, fmtty_rest$11),
fmt$12 = match$12[2],
sub_fmtty_rest$24 = match$12[1];
return [0, [13, sub_fmtty_rest$24], fmt$12];
}
break;
case 14:
if(typeof fmtty !== "number" && 14 === fmtty[0]){
var
fmtty_rest$12 = fmtty[1],
sub_fmtty_rest$25 = sub_fmtty[1],
match$13 =
type_ignored_format_substituti
(sub_fmtty_rest$25, fmt, fmtty_rest$12),
fmt$13 = match$13[2],
sub_fmtty_rest$26 = match$13[1];
return [0, [14, sub_fmtty_rest$26], fmt$13];
}
break;
}
throw caml_maybe_attach_backtrace(Type_mismatch, 1);
}
function recast(fmt, fmtty){
var a = symm(fmtty);
return type_format(fmt, CamlinternalFormatBasics[2].call(null, a));
}
function fix_padding(padty, width, str){
var
len = caml_ml_string_length(str),
padty$0 = 0 <= width ? padty : 0,
width$0 = Stdlib[18].call(null, width);
if(width$0 <= len) return str;
var
a = 2 === padty$0 ? 48 : 32,
res = Stdlib_Bytes[1].call(null, width$0, a);
switch(padty$0){
case 0:
Stdlib_String[6].call(null, str, 0, res, 0, len); break;
case 1:
Stdlib_String[6].call(null, str, 0, res, width$0 - len | 0, len);
break;
default:
a:
if(0 < len){
if
(43 !== caml_string_get(str, 0)
&& 45 !== caml_string_get(str, 0) && 32 !== caml_string_get(str, 0))
break a;
caml_bytes_set(res, 0, caml_string_get(str, 0));
Stdlib_String[6].call
(null, str, 1, res, (width$0 - len | 0) + 1 | 0, len - 1 | 0);
break;
}
a:
if(1 < len && 48 === caml_string_get(str, 0)){
if(120 !== caml_string_get(str, 1) && 88 !== caml_string_get(str, 1))
break a;
caml_bytes_set(res, 1, caml_string_get(str, 1));
Stdlib_String[6].call
(null, str, 2, res, (width$0 - len | 0) + 2 | 0, len - 2 | 0);
break;
}
Stdlib_String[6].call(null, str, 0, res, width$0 - len | 0, len);
}
return Stdlib_Bytes[44].call(null, res);
}
function fix_int_precision(prec, str){
var
prec$0 = Stdlib[18].call(null, prec),
len = caml_ml_string_length(str),
c = caml_string_get(str, 0);
a:
{
b:
{
if(58 > c){
if(32 !== c){
if(43 > c) break a;
switch(c - 43 | 0){
case 5:
if(len >= (prec$0 + 2 | 0)) break b;
if(1 >= len) break b;
if
(120 !== caml_string_get(str, 1) && 88 !== caml_string_get(str, 1))
break b;
var res$1 = Stdlib_Bytes[1].call(null, prec$0 + 2 | 0, 48);
caml_bytes_set(res$1, 1, caml_string_get(str, 1));
Stdlib_String[6].call
(null, str, 2, res$1, (prec$0 - len | 0) + 4 | 0, len - 2 | 0);
return Stdlib_Bytes[44].call(null, res$1);
case 0:
case 2: break;
case 1:
case 3:
case 4:
break a;
default: break b;
}
}
if(len >= (prec$0 + 1 | 0)) break a;
var res$0 = Stdlib_Bytes[1].call(null, prec$0 + 1 | 0, 48);
caml_bytes_set(res$0, 0, c);
Stdlib_String[6].call
(null, str, 1, res$0, (prec$0 - len | 0) + 2 | 0, len - 1 | 0);
return Stdlib_Bytes[44].call(null, res$0);
}
if(71 <= c){if(5 < c - 97 >>> 0) break a;} else if(65 > c) break a;
}
if(len < prec$0){
var res = Stdlib_Bytes[1].call(null, prec$0, 48);
Stdlib_String[6].call(null, str, 0, res, prec$0 - len | 0, len);
return Stdlib_Bytes[44].call(null, res);
}
}
return str;
}
function string_to_caml_string(str){
var
str$0 = Stdlib_String[25].call(null, str),
l = caml_ml_string_length(str$0),
res = Stdlib_Bytes[1].call(null, l + 2 | 0, 34);
caml_blit_string(str$0, 0, res, 1, l);
return Stdlib_Bytes[44].call(null, res);
}
var r = [0, 103];
function format_of_fconv(fconv, prec){
var
prec$0 = Stdlib[18].call(null, prec),
symb = char_of_fconv(r, fconv),
buf = buffer_create(16);
buffer_add_char(buf, 37);
bprint_fconv_flag(buf, fconv);
buffer_add_char(buf, 46);
buffer_add_string(buf, Stdlib_Int[12].call(null, prec$0));
buffer_add_char(buf, symb);
return buffer_contents(buf);
}
function transform_int_alt(iconv, s){
if(13 > iconv) return s;
var b = caml_ml_string_length(s) - 1 | 0, a = 0;
if(b < 0)
var n$2 = a;
else{
var n = a, i$0 = 0;
for(;;){
if(9 < caml_string_unsafe_get(s, i$0) - 48 >>> 0)
var n$1 = n;
else
var n$0 = n + 1 | 0, n$1 = n$0;
var g = i$0 + 1 | 0;
if(b === i$0){var n$2 = n$1; break;}
n = n$1;
i$0 = g;
}
}
var
buf =
caml_create_bytes
(caml_ml_string_length(s) + ((n$2 - 1 | 0) / 3 | 0) | 0),
pos = [0, 0];
function put(c){caml_bytes_set(buf, pos[1], c); pos[1]++;}
var
d = caml_ml_string_length(s) - 1 | 0,
e = ((n$2 - 1 | 0) % 3 | 0) + 1 | 0;
if(d >= 0){
var left = e, i = 0;
for(;;){
var c = caml_string_unsafe_get(s, i);
if(9 < c - 48 >>> 0){
put(c);
var left$2 = left;
}
else{
var left$0 = 0 === left ? (put(95), 3) : left, left$1 = left$0 - 1 | 0;
put(c);
var left$2 = left$1;
}
var f = i + 1 | 0;
if(d === i) break;
left = left$2;
i = f;
}
}
return Stdlib_Bytes[44].call(null, buf);
}
var cst_u = "%u";
function convert_int(iconv, n){
switch(iconv){
case 1:
var a = "%+d"; break;
case 2:
var a = "% d"; break;
case 4:
var a = "%+i"; break;
case 5:
var a = "% i"; break;
case 6:
var a = "%x"; break;
case 7:
var a = "%#x"; break;
case 8:
var a = "%X"; break;
case 9:
var a = "%#X"; break;
case 10:
var a = "%o"; break;
case 11:
var a = "%#o"; break;
case 0:
case 13:
var a = "%d"; break;
case 3:
case 14:
var a = cst_i; break;
default: var a = cst_u;
}
return transform_int_alt(iconv, caml_format_int(a, n));
}
function convert_int32(iconv, n){
switch(iconv){
case 1:
var a = "%+ld"; break;
case 2:
var a = "% ld"; break;
case 4:
var a = "%+li"; break;
case 5:
var a = "% li"; break;
case 6:
var a = "%lx"; break;
case 7:
var a = "%#lx"; break;
case 8:
var a = "%lX"; break;
case 9:
var a = "%#lX"; break;
case 10:
var a = "%lo"; break;
case 11:
var a = "%#lo"; break;
case 0:
case 13:
var a = "%ld"; break;
case 3:
case 14:
var a = cst_li; break;
default: var a = "%lu";
}
return transform_int_alt(iconv, caml_format_int(a, n));
}
function convert_nativeint(iconv, n){
switch(iconv){
case 1:
var a = "%+nd"; break;
case 2:
var a = "% nd"; break;
case 4:
var a = "%+ni"; break;
case 5:
var a = "% ni"; break;
case 6:
var a = "%nx"; break;
case 7:
var a = "%#nx"; break;
case 8:
var a = "%nX"; break;
case 9:
var a = "%#nX"; break;
case 10:
var a = "%no"; break;
case 11:
var a = "%#no"; break;
case 0:
case 13:
var a = "%nd"; break;
case 3:
case 14:
var a = cst_ni; break;
default: var a = "%nu";
}
return transform_int_alt(iconv, caml_format_int(a, n));
}
function convert_int64(iconv, n){
switch(iconv){
case 1:
var a = "%+Ld"; break;
case 2:
var a = "% Ld"; break;
case 4:
var a = "%+Li"; break;
case 5:
var a = "% Li"; break;
case 6:
var a = "%Lx"; break;
case 7:
var a = "%#Lx"; break;
case 8:
var a = "%LX"; break;
case 9:
var a = "%#LX"; break;
case 10:
var a = "%Lo"; break;
case 11:
var a = "%#Lo"; break;
case 0:
case 13:
var a = "%Ld"; break;
case 3:
case 14:
var a = cst_Li; break;
default: var a = "%Lu";
}
return transform_int_alt(iconv, runtime.caml_int64_format(a, n));
}
function convert_float(fconv, prec, x){
function hex(param){
switch(fconv[1]){
case 0:
var sign = 45; break;
case 1:
var sign = 43; break;
default: var sign = 32;
}
return runtime.caml_hexstring_of_float(x, prec, sign);
}
function caml_special_val(str){
var match = runtime.caml_classify_float(x);
return 3 === match
? x < 0. ? "neg_infinity" : "infinity"
: 4 <= match ? "nan" : str;
}
switch(fconv[2]){
case 5:
var
str = caml_format_float(format_of_fconv(fconv, prec), x),
len = caml_ml_string_length(str),
i = 0;
for(;;){
a:
{
if(i !== len){
var a = caml_string_get(str, i) - 46 | 0;
b:
{
if(23 < a >>> 0){
if(55 !== a) break b;
}
else if(21 >= a - 1 >>> 0) break b;
var b = 1;
break a;
}
var i$0 = i + 1 | 0;
i = i$0;
continue;
}
var b = 0;
}
var c = b ? str : Stdlib[28].call(null, str, ".");
return caml_special_val(c);
}
case 6:
return hex(0);
case 7:
var d = hex(0); return Stdlib_String[26].call(null, d);
case 8:
return caml_special_val(hex(0));
default: return caml_format_float(format_of_fconv(fconv, prec), x);
}
}
function string_of_fmtty(fmtty){
var buf = buffer_create(16);
bprint_fmtty(buf, fmtty);
return buffer_contents(buf);
}
var s = [0, cst_camlinternalFormat_ml, 1558, 4];
function make_printf$0(counter, k$2, acc$4, fmt$2){
a:
{
b:
{
c:
{
d:
{
e:
{
f:
{
g:
{
h:
{
i:
{
j:
{
var k = k$2, acc = acc$4, fmt = fmt$2;
k:
for(;;){
if(typeof fmt === "number") return caml_call1(k, acc);
switch(fmt[0]){
case 0:
break a;
case 1:
break b;
case 2:
break c;
case 3:
var rest$2 = fmt[2], pad$0 = fmt[1];
return make_padding
(k, acc, rest$2, pad$0, string_to_caml_string);
case 4:
var
rest$3 = fmt[4],
prec = fmt[3],
pad$1 = fmt[2],
iconv = fmt[1];
return make_int_padding_precision
(k, acc, rest$3, pad$1, prec, convert_int, iconv);
case 5:
var
rest$4 = fmt[4],
prec$0 = fmt[3],
pad$2 = fmt[2],
iconv$0 = fmt[1];
return make_int_padding_precision
(k, acc, rest$4, pad$2, prec$0, convert_int32, iconv$0);
case 6:
var
rest$5 = fmt[4],
prec$1 = fmt[3],
pad$3 = fmt[2],
iconv$1 = fmt[1];
return make_int_padding_precision
(k, acc, rest$5, pad$3, prec$1, convert_nativeint, iconv$1);
case 7:
var
rest$6 = fmt[4],
prec$2 = fmt[3],
pad$4 = fmt[2],
iconv$2 = fmt[1];
return make_int_padding_precision
(k, acc, rest$6, pad$4, prec$2, convert_int64, iconv$2);
case 8:
break d;
case 9:
var rest$8 = fmt[2], pad$6 = fmt[1];
return make_padding(k, acc, rest$8, pad$6, Stdlib[30]);
case 10:
var rest$9 = fmt[1], acc$0 = [7, acc];
acc = acc$0;
fmt = rest$9;
break;
case 11:
var rest$10 = fmt[2], str = fmt[1], acc$1 = [2, acc, str];
acc = acc$1;
fmt = rest$10;
break;
case 12:
var rest$11 = fmt[2], chr = fmt[1], acc$2 = [3, acc, chr];
acc = acc$2;
fmt = rest$11;
break;
case 13:
break e;
case 14:
break f;
case 15:
break g;
case 16:
break h;
case 17:
var
rest$16 = fmt[2],
fmting_lit = fmt[1],
acc$3 = [0, acc, fmting_lit];
acc = acc$3;
fmt = rest$16;
break;
case 18:
var a = fmt[1];
if(0 === a[0]){
var rest$17 = fmt[2], fmt$0 = a[1][1];
let acc$0 = acc, k$1 = k, rest = rest$17;
var
k$0 =
function(kacc){
return make_printf(k$1, [1, acc$0, [0, kacc]], rest);
};
k = k$0;
acc = 0;
fmt = fmt$0;
}
else{
var rest$18 = fmt[2], fmt$1 = a[1][1];
let acc$0 = acc, k$0 = k, rest = rest$18;
var
k$1 =
function(kacc){
return make_printf(k$0, [1, acc$0, [1, kacc]], rest);
};
k = k$1;
acc = 0;
fmt = fmt$1;
}
break;
case 19:
throw caml_maybe_attach_backtrace([0, Assert_failure, s], 1);
case 20:
break i;
case 21:
break j;
case 22:
break k;
case 23:
var rest$22 = fmt[2], ign = fmt[1];
return counter < 50
? make_ignored_param$0
(counter + 1 | 0, k, acc, ign, rest$22)
: caml_trampoline_return
(make_ignored_param$0, [0, k, acc, ign, rest$22]);
default:
var
rest$23 = fmt[3],
f = fmt[2],
arity = fmt[1],
b = caml_call1(f, 0);
return counter < 50
? make_custom$0(counter + 1 | 0, k, acc, rest$23, arity, b)
: caml_trampoline_return
(make_custom$0, [0, k, acc, rest$23, arity, b]);
}
}
var rest$21 = fmt[1];
return function(c){
var new_acc = [5, acc, c];
return make_printf(k, new_acc, rest$21);};
}
var rest$20 = fmt[2];
return function(n){
var new_acc = [4, acc, caml_format_int(cst_u, n)];
return make_printf(k, new_acc, rest$20);};
}
var
rest$19 = fmt[3],
new_acc = [8, acc, "Printf: bad conversion %["];
return function(param){return make_printf(k, new_acc, rest$19);};
}
var rest$15 = fmt[1];
return function(f){return make_printf(k, [6, acc, f], rest$15);};
}
var rest$14 = fmt[1];
return function(f, x){
return make_printf
(k,
[6, acc, function(o){return caml_call2(f, o, x);}],
rest$14);};
}
var rest$13 = fmt[3], fmtty = fmt[2];
return function(param){
var fmt = param[1], a = recast(fmt, fmtty);
return make_printf
(k, acc, CamlinternalFormatBasics[3].call(null, a, rest$13));};
}
var
rest$12 = fmt[3],
sub_fmtty = fmt[2],
ty = string_of_fmtty(sub_fmtty);
return function(str){return make_printf(k, [4, acc, ty], rest$12);};
}
var rest$7 = fmt[4], prec$3 = fmt[3], pad$5 = fmt[2], fconv = fmt[1];
if(typeof pad$5 === "number"){
if(typeof prec$3 === "number")
return prec$3
? function
(p, x){
var str = convert_float(fconv, p, x);
return make_printf(k, [4, acc, str], rest$7);
}
: function
(x){
var
str =
convert_float(fconv, default_float_precision(fconv), x);
return make_printf(k, [4, acc, str], rest$7);
};
var p = prec$3[1];
return function(x){
var str = convert_float(fconv, p, x);
return make_printf(k, [4, acc, str], rest$7);};
}
if(0 === pad$5[0]){
var w = pad$5[2], padty = pad$5[1];
if(typeof prec$3 === "number")
return prec$3
? function
(p, x){
var str = fix_padding(padty, w, convert_float(fconv, p, x));
return make_printf(k, [4, acc, str], rest$7);
}
: function
(x){
var
str =
convert_float(fconv, default_float_precision(fconv), x),
str$0 = fix_padding(padty, w, str);
return make_printf(k, [4, acc, str$0], rest$7);
};
var p$0 = prec$3[1];
return function(x){
var str = fix_padding(padty, w, convert_float(fconv, p$0, x));
return make_printf(k, [4, acc, str], rest$7);};
}
var padty$0 = pad$5[1];
if(typeof prec$3 === "number")
return prec$3
? function
(w, p, x){
var
str = fix_padding(padty$0, w, convert_float(fconv, p, x));
return make_printf(k, [4, acc, str], rest$7);
}
: function
(w, x){
var
str =
convert_float(fconv, default_float_precision(fconv), x),
str$0 = fix_padding(padty$0, w, str);
return make_printf(k, [4, acc, str$0], rest$7);
};
var p$1 = prec$3[1];
return function(w, x){
var str = fix_padding(padty$0, w, convert_float(fconv, p$1, x));
return make_printf(k, [4, acc, str], rest$7);};
}
var rest$1 = fmt[2], pad = fmt[1];
return make_padding(k, acc, rest$1, pad, function(str){return str;});
}
var rest$0 = fmt[1];
return function(c){
var
str = Stdlib_Char[2].call(null, c),
l = caml_ml_string_length(str),
res = Stdlib_Bytes[1].call(null, l + 2 | 0, 39);
caml_blit_string(str, 0, res, 1, l);
var new_acc = [4, acc, Stdlib_Bytes[44].call(null, res)];
return make_printf(k, new_acc, rest$0);};
}
var rest = fmt[1];
return function(c){
var new_acc = [5, acc, c];
return make_printf(k, new_acc, rest);};
}
function make_printf(k, acc, fmt){
return caml_trampoline(make_printf$0(0, k, acc, fmt));
}
var t = [0, cst_camlinternalFormat_ml, 1626, 39];
function make_ignored_param$0(counter, k, acc, ign, fmt){
if(typeof ign === "number"){
if(2 === ign)
throw caml_maybe_attach_backtrace([0, Assert_failure, t], 1);
return counter < 50
? make_invalid_arg(counter + 1 | 0, k, acc, fmt)
: caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]);
}
if(9 !== ign[0])
return counter < 50
? make_invalid_arg(counter + 1 | 0, k, acc, fmt)
: caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]);
var fmtty = ign[2];
return counter < 50
? make_from_fmtty$0(counter + 1 | 0, k, acc, fmtty, fmt)
: caml_trampoline_return
(make_from_fmtty$0, [0, k, acc, fmtty, fmt]);
}
function make_ignored_param(k, acc, ign, fmt){
return caml_trampoline(make_ignored_param$0(0, k, acc, ign, fmt));
}
var
u = [0, cst_camlinternalFormat_ml, 1649, 31],
v = [0, cst_camlinternalFormat_ml, 1650, 31];
function make_from_fmtty$0(counter, k, acc, fmtty, fmt){
if(typeof fmtty === "number")
return counter < 50
? make_invalid_arg(counter + 1 | 0, k, acc, fmt)
: caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]);
switch(fmtty[0]){
case 0:
var rest = fmtty[1];
return function(param){return make_from_fmtty(k, acc, rest, fmt);};
case 1:
var rest$0 = fmtty[1];
return function(param){return make_from_fmtty(k, acc, rest$0, fmt);};
case 2:
var rest$1 = fmtty[1];
return function(param){return make_from_fmtty(k, acc, rest$1, fmt);};
case 3:
var rest$2 = fmtty[1];
return function(param){return make_from_fmtty(k, acc, rest$2, fmt);};
case 4:
var rest$3 = fmtty[1];
return function(param){return make_from_fmtty(k, acc, rest$3, fmt);};
case 5:
var rest$4 = fmtty[1];
return function(param){return make_from_fmtty(k, acc, rest$4, fmt);};
case 6:
var rest$5 = fmtty[1];
return function(param){return make_from_fmtty(k, acc, rest$5, fmt);};
case 7:
var rest$6 = fmtty[1];
return function(param){return make_from_fmtty(k, acc, rest$6, fmt);};
case 8:
var rest$7 = fmtty[2];
return function(param){return make_from_fmtty(k, acc, rest$7, fmt);};
case 9:
var
rest$8 = fmtty[3],
ty2 = fmtty[2],
ty1 = fmtty[1],
ty = trans(symm(ty1), ty2);
return function(param){
return make_from_fmtty
(k,
acc,
CamlinternalFormatBasics[1].call(null, ty, rest$8),
fmt);};
case 10:
var rest$9 = fmtty[1];
return function(a, param){
return make_from_fmtty(k, acc, rest$9, fmt);};
case 11:
var rest$10 = fmtty[1];
return function(param){return make_from_fmtty(k, acc, rest$10, fmt);};
case 12:
var rest$11 = fmtty[1];
return function(param){return make_from_fmtty(k, acc, rest$11, fmt);};
case 13:
throw caml_maybe_attach_backtrace([0, Assert_failure, u], 1);
default: throw caml_maybe_attach_backtrace([0, Assert_failure, v], 1);
}
}
function make_from_fmtty(k, acc, fmtty, fmt){
return caml_trampoline(make_from_fmtty$0(0, k, acc, fmtty, fmt));
}
function make_invalid_arg(counter, k, acc, fmt){
var a = [8, acc, "Printf: bad conversion %_"];
return counter < 50
? make_printf$0(counter + 1 | 0, k, a, fmt)
: caml_trampoline_return(make_printf$0, [0, k, a, fmt]);
}
function make_padding(k, acc, fmt, pad, trans){
if(typeof pad === "number")
return function(x){
var new_acc = [4, acc, caml_call1(trans, x)];
return make_printf(k, new_acc, fmt);};
if(0 === pad[0]){
var width = pad[2], padty = pad[1];
return function(x){
var new_acc = [4, acc, fix_padding(padty, width, caml_call1(trans, x))];
return make_printf(k, new_acc, fmt);};
}
var padty$0 = pad[1];
return function(w, x){
var new_acc = [4, acc, fix_padding(padty$0, w, caml_call1(trans, x))];
return make_printf(k, new_acc, fmt);};
}
function make_int_padding_precision(k, acc, fmt, pad, prec, trans, iconv){
if(typeof pad === "number"){
if(typeof prec === "number")
return prec
? function
(p, x){
var str = fix_int_precision(p, caml_call2(trans, iconv, x));
return make_printf(k, [4, acc, str], fmt);
}
: function
(x){
var str = caml_call2(trans, iconv, x);
return make_printf(k, [4, acc, str], fmt);
};
var p = prec[1];
return function(x){
var str = fix_int_precision(p, caml_call2(trans, iconv, x));
return make_printf(k, [4, acc, str], fmt);};
}
if(0 === pad[0]){
var w = pad[2], padty = pad[1];
if(typeof prec === "number")
return prec
? function
(p, x){
var
str =
fix_padding
(padty,
w,
fix_int_precision(p, caml_call2(trans, iconv, x)));
return make_printf(k, [4, acc, str], fmt);
}
: function
(x){
var str = fix_padding(padty, w, caml_call2(trans, iconv, x));
return make_printf(k, [4, acc, str], fmt);
};
var p$0 = prec[1];
return function(x){
var
str =
fix_padding
(padty, w, fix_int_precision(p$0, caml_call2(trans, iconv, x)));
return make_printf(k, [4, acc, str], fmt);};
}
var padty$0 = pad[1];
if(typeof prec === "number")
return prec
? function
(w, p, x){
var
str =
fix_padding
(padty$0,
w,
fix_int_precision(p, caml_call2(trans, iconv, x)));
return make_printf(k, [4, acc, str], fmt);
}
: function
(w, x){
var str = fix_padding(padty$0, w, caml_call2(trans, iconv, x));
return make_printf(k, [4, acc, str], fmt);
};
var p$1 = prec[1];
return function(w, x){
var
str =
fix_padding
(padty$0, w, fix_int_precision(p$1, caml_call2(trans, iconv, x)));
return make_printf(k, [4, acc, str], fmt);};
}
function make_custom$0(counter, k, acc, rest, arity, f){
if(arity){
var arity$0 = arity[1];
return function(x){
return make_custom(k, acc, rest, arity$0, caml_call1(f, x));};
}
var a = [4, acc, f];
return counter < 50
? make_printf$0(counter + 1 | 0, k, a, rest)
: caml_trampoline_return(make_printf$0, [0, k, a, rest]);
}
function make_custom(k, acc, rest, arity, f){
return caml_trampoline(make_custom$0(0, k, acc, rest, arity, f));
}
var w = [0, cst_camlinternalFormat_ml, 1830, 8];
function make_iprintf$0(counter, k$2, o, fmt$2){
a:
{
b:
{
c:
{
d:
{
e:
{
f:
{
g:
{
h:
{
i:
{
var k = k$2, fmt = fmt$2;
j:
for(;;){
if(typeof fmt === "number") return caml_call1(k, o);
switch(fmt[0]){
case 2:
break b;
case 3:
break c;
case 9:
break e;
case 10:
var rest$10 = fmt[1]; fmt = rest$10; break;
case 14:
break g;
case 15:
break h;
case 18:
var a = fmt[1];
if(0 === a[0]){
var rest$15 = fmt[2], fmt$0 = a[1][1];
let k$1 = k, rest = rest$15;
var
k$0 = function(koc){return make_iprintf(k$1, koc, rest);};
k = k$0;
fmt = fmt$0;
}
else{
var rest$16 = fmt[2], fmt$1 = a[1][1];
let k$0 = k, rest = rest$16;
var
k$1 = function(koc){return make_iprintf(k$0, koc, rest);};
k = k$1;
fmt = fmt$1;
}
break;
case 19:
throw caml_maybe_attach_backtrace([0, Assert_failure, w], 1);
case 21:
break i;
case 23:
break j;
case 24:
var rest$19 = fmt[3], arity = fmt[1];
return counter < 50
? fn_of_custom_arity$0
(counter + 1 | 0, k, o, rest$19, arity)
: caml_trampoline_return
(fn_of_custom_arity$0, [0, k, o, rest$19, arity]);
case 13:
case 20:
break f;
case 11:
case 12:
case 17:
var rest$11 = fmt[2]; fmt = rest$11; break;
case 0:
case 1:
case 16:
case 22:
break a;
default: break d;
}
}
var rest$18 = fmt[2], ign = fmt[1];
return make_ignored_param
(function(param){return caml_call1(k, o);}, 0, ign, rest$18);
}
var rest$17 = fmt[2], x$15 = make_iprintf(k, o, rest$17);
return function(param){return x$15;};
}
var
rest$14 = fmt[1],
x$13 = make_iprintf(k, o, rest$14),
x$14 = function(param){return x$13;};
return function(param){return x$14;};
}
var rest$13 = fmt[3], fmtty = fmt[2];
return function(param){
var fmt = param[1], a = recast(fmt, fmtty);
return make_iprintf
(k, o, CamlinternalFormatBasics[3].call(null, a, rest$13));};
}
var rest$12 = fmt[3], x$12 = make_iprintf(k, o, rest$12);
return function(param){return x$12;};
}
var match$1 = fmt[1];
if(typeof match$1 === "number"){
var rest$7 = fmt[2], x$8 = make_iprintf(k, o, rest$7);
return function(param){return x$8;};
}
if(0 === match$1[0]){
var rest$8 = fmt[2], x$9 = make_iprintf(k, o, rest$8);
return function(param){return x$9;};
}
var
rest$9 = fmt[2],
x$10 = make_iprintf(k, o, rest$9),
x$11 = function(param){return x$10;};
return function(param){return x$11;};
}
var rest$6 = fmt[4], prec = fmt[3], pad = fmt[2];
if(typeof pad === "number"){
if(typeof prec !== "number"){
var x$19 = make_iprintf(k, o, rest$6);
return function(param){return x$19;};
}
if(prec){
var
x$16 = make_iprintf(k, o, rest$6),
x$17 = function(param){return x$16;};
return function(param){return x$17;};
}
var x$18 = make_iprintf(k, o, rest$6);
return function(param){return x$18;};
}
if(0 === pad[0]){
if(typeof prec !== "number"){
var x$23 = make_iprintf(k, o, rest$6);
return function(param){return x$23;};
}
if(prec){
var
x$20 = make_iprintf(k, o, rest$6),
x$21 = function(param){return x$20;};
return function(param){return x$21;};
}
var x$22 = make_iprintf(k, o, rest$6);
return function(param){return x$22;};
}
if(typeof prec !== "number"){
var
x$29 = make_iprintf(k, o, rest$6),
x$30 = function(param){return x$29;};
return function(param){return x$30;};
}
if(prec){
var
x$24 = make_iprintf(k, o, rest$6),
x$25 = function(param){return x$24;},
x$26 = function(param){return x$25;};
return function(param){return x$26;};
}
var
x$27 = make_iprintf(k, o, rest$6),
x$28 = function(param){return x$27;};
return function(param){return x$28;};
}
var match$0 = fmt[1];
if(typeof match$0 === "number"){
var rest$3 = fmt[2], x$4 = make_iprintf(k, o, rest$3);
return function(param){return x$4;};
}
if(0 === match$0[0]){
var rest$4 = fmt[2], x$5 = make_iprintf(k, o, rest$4);
return function(param){return x$5;};
}
var
rest$5 = fmt[2],
x$6 = make_iprintf(k, o, rest$5),
x$7 = function(param){return x$6;};
return function(param){return x$7;};
}
var match = fmt[1];
if(typeof match === "number"){
var rest$0 = fmt[2], x$0 = make_iprintf(k, o, rest$0);
return function(param){return x$0;};
}
if(0 === match[0]){
var rest$1 = fmt[2], x$1 = make_iprintf(k, o, rest$1);
return function(param){return x$1;};
}
var
rest$2 = fmt[2],
x$2 = make_iprintf(k, o, rest$2),
x$3 = function(param){return x$2;};
return function(param){return x$3;};
}
var rest = fmt[1], x = make_iprintf(k, o, rest);
return function(param){return x;};
}
function make_iprintf(k, o, fmt){
return caml_trampoline(make_iprintf$0(0, k, o, fmt));
}
function fn_of_custom_arity$0(counter, k, o, fmt, param){
if(! param)
return counter < 50
? make_iprintf$0(counter + 1 | 0, k, o, fmt)
: caml_trampoline_return(make_iprintf$0, [0, k, o, fmt]);
var arity = param[1], x = fn_of_custom_arity(k, o, fmt, arity);
return function(param){return x;};
}
function fn_of_custom_arity(k, o, fmt, param){
return caml_trampoline(fn_of_custom_arity$0(0, k, o, fmt, param));
}
function output_acc(o, acc$2){
var acc = acc$2;
for(;;){
if(typeof acc === "number") return 0;
switch(acc[0]){
case 0:
var
fmting_lit = acc[2],
p = acc[1],
s = string_of_formatting_lit(fmting_lit);
output_acc(o, p);
return Stdlib[66].call(null, o, s);
case 1:
var match = acc[2], p$0 = acc[1];
if(0 === match[0]){
var acc$0 = match[1];
output_acc(o, p$0);
Stdlib[66].call(null, o, cst);
acc = acc$0;
}
else{
var acc$1 = match[1];
output_acc(o, p$0);
Stdlib[66].call(null, o, cst$0);
acc = acc$1;
}
break;
case 6:
var f = acc[2], p$3 = acc[1];
output_acc(o, p$3);
return caml_call1(f, o);
case 7:
var p$4 = acc[1]; output_acc(o, p$4); return Stdlib[63].call(null, o);
case 8:
var msg = acc[2], p$5 = acc[1];
output_acc(o, p$5);
return Stdlib[1].call(null, msg);
case 2:
case 4:
var s$0 = acc[2], p$1 = acc[1];
output_acc(o, p$1);
return Stdlib[66].call(null, o, s$0);
default:
var c = acc[2], p$2 = acc[1];
output_acc(o, p$2);
return Stdlib[65].call(null, o, c);
}
}
}
function bufput_acc(b, acc$3){
var acc = acc$3;
for(;;){
if(typeof acc === "number") return 0;
switch(acc[0]){
case 0:
var
fmting_lit = acc[2],
p = acc[1],
s = string_of_formatting_lit(fmting_lit);
bufput_acc(b, p);
return Stdlib_Buffer[16].call(null, b, s);
case 1:
var match = acc[2], p$0 = acc[1];
if(0 === match[0]){
var acc$0 = match[1];
bufput_acc(b, p$0);
Stdlib_Buffer[16].call(null, b, cst);
acc = acc$0;
}
else{
var acc$1 = match[1];
bufput_acc(b, p$0);
Stdlib_Buffer[16].call(null, b, cst$0);
acc = acc$1;
}
break;
case 6:
var f = acc[2], p$3 = acc[1];
bufput_acc(b, p$3);
return caml_call1(f, b);
case 7:
var acc$2 = acc[1]; acc = acc$2; break;
case 8:
var msg = acc[2], p$4 = acc[1];
bufput_acc(b, p$4);
return Stdlib[1].call(null, msg);
case 2:
case 4:
var s$0 = acc[2], p$1 = acc[1];
bufput_acc(b, p$1);
return Stdlib_Buffer[16].call(null, b, s$0);
default:
var c = acc[2], p$2 = acc[1];
bufput_acc(b, p$2);
return Stdlib_Buffer[12].call(null, b, c);
}
}
}
function strput_acc(b, acc$3){
var acc = acc$3;
for(;;){
if(typeof acc === "number") return 0;
switch(acc[0]){
case 0:
var
fmting_lit = acc[2],
p = acc[1],
s = string_of_formatting_lit(fmting_lit);
strput_acc(b, p);
return Stdlib_Buffer[16].call(null, b, s);
case 1:
var match = acc[2], p$0 = acc[1];
if(0 === match[0]){
var acc$0 = match[1];
strput_acc(b, p$0);
Stdlib_Buffer[16].call(null, b, cst);
acc = acc$0;
}
else{
var acc$1 = match[1];
strput_acc(b, p$0);
Stdlib_Buffer[16].call(null, b, cst$0);
acc = acc$1;
}
break;
case 6:
var f = acc[2], p$3 = acc[1];
strput_acc(b, p$3);
var a = caml_call1(f, 0);
return Stdlib_Buffer[16].call(null, b, a);
case 7:
var acc$2 = acc[1]; acc = acc$2; break;
case 8:
var msg = acc[2], p$4 = acc[1];
strput_acc(b, p$4);
return Stdlib[1].call(null, msg);
case 2:
case 4:
var s$0 = acc[2], p$1 = acc[1];
strput_acc(b, p$1);
return Stdlib_Buffer[16].call(null, b, s$0);
default:
var c = acc[2], p$2 = acc[1];
strput_acc(b, p$2);
return Stdlib_Buffer[12].call(null, b, c);
}
}
}
function failwith_message(param){
var fmt = param[1], buf = Stdlib_Buffer[1].call(null, 256);
function k(acc){
strput_acc(buf, acc);
var a = Stdlib_Buffer[2].call(null, buf);
return Stdlib[2].call(null, a);
}
return make_printf(k, 0, fmt);
}
var
cst$1 = "",
x = [0, 0, 4],
y =
[0,
[11, "invalid box description ", [3, 0, 0]],
"invalid box description %S"];
function open_box_of_string(str){
if(str === cst$1) return x;
var len = caml_ml_string_length(str);
function invalid_box(param){return caml_call1(failwith_message(y), str);}
function parse_spaces(i$1){
var i = i$1;
for(;;){
if(i === len) return i;
var match = caml_string_get(str, i);
if(9 !== match && 32 !== match) return i;
var i$0 = i + 1 | 0;
i = i$0;
}
}
var wstart = parse_spaces(0), wend = wstart;
for(;;){
if(wend === len) break;
if(25 < caml_string_get(str, wend) - 97 >>> 0) break;
var j = wend + 1 | 0;
wend = j;
}
var
box_name = Stdlib_String[16].call(null, str, wstart, wend - wstart | 0),
nstart = parse_spaces(wend),
nend = nstart;
for(;;){
if(nend === len) break;
var match = caml_string_get(str, nend);
if(48 <= match){if(58 <= match) break;} else if(45 !== match) break;
var j$0 = nend + 1 | 0;
nend = j$0;
}
if(nstart === nend)
var indent = 0;
else
try{
var
a =
runtime.caml_int_of_string
(Stdlib_String[16].call(null, str, nstart, nend - nstart | 0)),
indent = a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Stdlib[7]) throw caml_maybe_attach_backtrace(exn, 0);
var indent = invalid_box(0);
}
var exp_end = parse_spaces(nend);
if(exp_end !== len) invalid_box(0);
a:
{
if(box_name !== cst$1 && box_name !== "b"){
if(box_name === "h"){var box_type = 0; break a;}
if(box_name === "hov"){var box_type = 3; break a;}
if(box_name === "hv"){var box_type = 2; break a;}
if(box_name !== "v"){var box_type = invalid_box(0); break a;}
var box_type = 1;
break a;
}
var box_type = 4;
}
return [0, indent, box_type];
}
function make_padding_fmt_ebb(pad, fmt){
if(typeof pad === "number") return [0, 0, fmt];
if(0 === pad[0]){var w = pad[2], s = pad[1]; return [0, [0, s, w], fmt];}
var s$0 = pad[1];
return [0, [1, s$0], fmt];
}
function make_padprec_fmt_ebb(pad, prec, fmt){
if(typeof prec === "number")
var match = prec ? [0, 1] : [0, 0];
else
var p = prec[1], match = [0, [0, p]];
var prec$0 = match[1];
if(typeof pad === "number") return [0, 0, prec$0, fmt];
if(0 === pad[0]){
var w = pad[2], s = pad[1];
return [0, [0, s, w], prec$0, fmt];
}
var s$0 = pad[1];
return [0, [1, s$0], prec$0, fmt];
}
var
cst$2 = ", ",
cst_at_character_number = ": at character number ",
cst_invalid_format = "invalid format ",
sub_format = [0, 0, cst$1],
formatting_lit = [0, "@;", 1, 0],
z =
[0,
[11,
cst_invalid_format,
[3,
0,
[11, cst_at_character_number, [4, 0, 0, 0, [11, cst$2, [2, 0, 0]]]]]],
"invalid format %S: at character number %d, %s"],
A =
[0,
[11,
cst_invalid_format,
[3,
0,
[11,
cst_at_character_number,
[4, 0, 0, 0, [11, ", '", [0, [11, "' without ", [2, 0, 0]]]]]]]],
"invalid format %S: at character number %d, '%c' without %s"],
B =
[0,
[11,
cst_invalid_format,
[3,
0,
[11,
cst_at_character_number,
[4, 0, 0, 0, [11, cst$2, [2, 0, [11, " expected, read ", [1, 0]]]]]]]],
"invalid format %S: at character number %d, %s expected, read %C"],
C =
[0,
[11,
cst_invalid_format,
[3,
0,
[11,
cst_at_character_number,
[4, 0, 0, 0, [11, ", duplicate flag ", [1, 0]]]]]],
"invalid format %S: at character number %d, duplicate flag %C"],
D = [0, 1, 0],
E = [0, 0],
F = [1, 0],
G = [1, 1],
H = [1, 1],
I = [1, 1],
J =
[0,
[11,
cst_invalid_format,
[3,
0,
[11,
cst_at_character_number,
[4,
0,
0,
0,
[11, ', invalid conversion "', [12, 37, [0, [12, 34, 0]]]]]]]],
'invalid format %S: at character number %d, invalid conversion "%%%c"'],
K = [0, 0],
L = [0, 0],
M =
[0,
[11,
cst_invalid_format,
[3,
0,
[11,
cst_at_character_number,
[4,
0,
0,
0,
[11,
", flag ",
[1,
[11,
" is only allowed after the '",
[12, 37, [11, "', before padding and precision", 0]]]]]]]]],
"invalid format %S: at character number %d, flag %C is only allowed after the '%%', before padding and precision"],
N = [0, [12, 64, 0]],
O = [0, "@ ", 1, 0],
P = [0, "@,", 0, 0],
Q = [2, 60],
R =
[0,
[11,
cst_invalid_format,
[3,
0,
[11,
": '",
[12,
37,
[11,
"' alone is not accepted in character sets, use ",
[12,
37,
[12,
37,
[11, " instead at position ", [4, 0, 0, 0, [12, 46, 0]]]]]]]]]],
"invalid format %S: '%%' alone is not accepted in character sets, use %%%% instead at position %d."],
S =
[0,
[11,
cst_invalid_format,
[3,
0,
[11,
": integer ",
[4, 0, 0, 0, [11, " is greater than the limit ", [4, 0, 0, 0, 0]]]]]],
"invalid format %S: integer %d is greater than the limit %d"],
T = [0, cst_camlinternalFormat_ml, 2837, 11],
U =
[0,
[11,
cst_invalid_format,
[3,
0,
[11,
': unclosed sub-format, expected "',
[12, 37, [0, [11, '" at character number ', [4, 0, 0, 0, 0]]]]]]],
'invalid format %S: unclosed sub-format, expected "%%%c" at character number %d'],
V = [0, cst_camlinternalFormat_ml, 2899, 34],
W = [0, cst_camlinternalFormat_ml, 2935, 28],
X = [0, cst_camlinternalFormat_ml, 2957, 11],
Y =
[0,
[11,
cst_invalid_format,
[3,
0,
[11,
cst_at_character_number,
[4,
0,
0,
0,
[11,
cst$2,
[2,
0,
[11,
" is incompatible with '",
[0, [11, "' in sub-format ", [3, 0, 0]]]]]]]]]],
"invalid format %S: at character number %d, %s is incompatible with '%c' in sub-format %S"];
function fmt_ebb_of_string(legacy_behavior, str){
if(legacy_behavior)
var flag = legacy_behavior[1], legacy_behavior$0 = flag;
else
var legacy_behavior$0 = 1;
function invalid_format_message(str_ind, msg){
return caml_call3(failwith_message(z), str, str_ind, msg);
}
function invalid_format_without(str_ind, c, s){
return caml_call4(failwith_message(A), str, str_ind, c, s);
}
function expected_character(str_ind, expected, read){
return caml_call4(failwith_message(B), str, str_ind, expected, read);
}
var cst_unexpected_end_of_format = "unexpected end of format";
function parse(lit_start, end_ind){
var str_ind = lit_start;
for(;;){
if(str_ind === end_ind) return add_literal(lit_start, str_ind, 0);
var match = caml_string_get(str, str_ind);
if(37 === match) break;
if(64 === match){
var fmt_rest$0 = parse_after_at(str_ind + 1 | 0, end_ind)[1];
return add_literal(lit_start, str_ind, fmt_rest$0);
}
var str_ind$0 = str_ind + 1 | 0;
str_ind = str_ind$0;
}
var str_ind$1 = str_ind + 1 | 0;
if(str_ind$1 === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var
match$0 =
95 === caml_string_get(str, str_ind$1)
? parse_flags(str_ind, str_ind$1 + 1 | 0, end_ind, 1)
: parse_flags(str_ind, str_ind$1, end_ind, 0),
fmt_rest = match$0[1];
return add_literal(lit_start, str_ind, fmt_rest);
}
var cst_0 = "0";
function parse_flags(pct_ind, str_ind, end_ind, ign){
function set_flag(str_ind, flag){
var a = flag[1], b = a ? 1 - legacy_behavior$0 : a;
if(b){
var c = caml_string_get(str, str_ind);
caml_call3(failwith_message(C), str, str_ind, c);
}
flag[1] = 1;
}
var
str_ind$0 = str_ind,
zero = [0, 0],
minus = [0, 0],
plus = [0, 0],
space = [0, 0],
hash = [0, 0];
a:
for(;;){
if(str_ind$0 === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var switcher = caml_string_get(str, str_ind$0) - 32 | 0;
if(16 < switcher >>> 0) break;
switch(switcher){
case 0:
set_flag(str_ind$0, space);
var str_ind$1 = str_ind$0 + 1 | 0;
str_ind$0 = str_ind$1;
break;
case 3:
set_flag(str_ind$0, hash);
var str_ind$2 = str_ind$0 + 1 | 0;
str_ind$0 = str_ind$2;
break;
case 11:
set_flag(str_ind$0, plus);
var str_ind$3 = str_ind$0 + 1 | 0;
str_ind$0 = str_ind$3;
break;
case 13:
set_flag(str_ind$0, minus);
var str_ind$4 = str_ind$0 + 1 | 0;
str_ind$0 = str_ind$4;
break;
case 16:
set_flag(str_ind$0, zero);
var str_ind$5 = str_ind$0 + 1 | 0;
str_ind$0 = str_ind$5;
break;
default: break a;
}
}
var
space$0 = space[1],
hash$0 = hash[1],
plus$0 = plus[1],
minus$0 = minus[1],
zero$0 = zero[1];
if(str_ind$0 === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var
padty =
zero$0
? minus$0
? legacy_behavior$0
? 0
: incompatible_flag(pct_ind, str_ind$0, 45, cst_0)
: 2
: minus$0 ? 0 : 1,
match = caml_string_get(str, str_ind$0);
if(48 <= match){
if(58 > match){
var
match$0 = parse_positive(str_ind$0, end_ind, 0),
width = match$0[2],
new_ind = match$0[1];
return parse_after_padding
(pct_ind,
new_ind,
end_ind,
minus$0,
plus$0,
hash$0,
space$0,
ign,
[0, padty, width]);
}
}
else if(42 === match)
return parse_after_padding
(pct_ind,
str_ind$0 + 1 | 0,
end_ind,
minus$0,
plus$0,
hash$0,
space$0,
ign,
[1, padty]);
switch(padty){
case 0:
if(1 - legacy_behavior$0)
invalid_format_without(str_ind$0 - 1 | 0, 45, "padding");
return parse_after_padding
(pct_ind,
str_ind$0,
end_ind,
minus$0,
plus$0,
hash$0,
space$0,
ign,
0);
case 1:
return parse_after_padding
(pct_ind,
str_ind$0,
end_ind,
minus$0,
plus$0,
hash$0,
space$0,
ign,
0);
default:
return parse_after_padding
(pct_ind,
str_ind$0,
end_ind,
minus$0,
plus$0,
hash$0,
space$0,
ign,
D);
}
}
var cst_precision = "precision";
function parse_after_padding
(pct_ind, str_ind, end_ind, minus, plus, hash, space, ign, pad){
if(str_ind === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var symb = caml_string_get(str, str_ind);
if(46 !== symb)
return parse_conversion
(pct_ind,
str_ind + 1 | 0,
end_ind,
plus,
hash,
space,
ign,
pad,
0,
pad,
symb);
var str_ind$0 = str_ind + 1 | 0;
if(str_ind$0 === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
function parse_literal(minus, str_ind){
var
match = parse_positive(str_ind, end_ind, 0),
prec = match[2],
new_ind = match[1];
return parse_after_precision
(pct_ind,
new_ind,
end_ind,
minus,
plus,
hash,
space,
ign,
pad,
[0, prec]);
}
var symb$0 = caml_string_get(str, str_ind$0);
if(48 <= symb$0){
if(58 > symb$0) return parse_literal(minus, str_ind$0);
}
else if(42 <= symb$0)
switch(symb$0 - 42 | 0){
case 0:
return parse_after_precision
(pct_ind,
str_ind$0 + 1 | 0,
end_ind,
minus,
plus,
hash,
space,
ign,
pad,
1);
case 1:
case 3:
if(legacy_behavior$0){
var
a = str_ind$0 + 1 | 0,
minus$0 = minus || (45 === symb$0 ? 1 : 0);
return parse_literal(minus$0, a);
}
break;
}
return legacy_behavior$0
? parse_after_precision
(pct_ind,
str_ind$0,
end_ind,
minus,
plus,
hash,
space,
ign,
pad,
E)
: invalid_format_without(str_ind$0 - 1 | 0, 46, cst_precision);
}
function parse_after_precision
(pct_ind, str_ind, end_ind, minus, plus, hash, space, ign, pad, prec){
if(str_ind === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
function parse_conv(padprec){
return parse_conversion
(pct_ind,
str_ind + 1 | 0,
end_ind,
plus,
hash,
space,
ign,
pad,
prec,
padprec,
caml_string_get(str, str_ind));
}
if(typeof pad !== "number") return parse_conv(pad);
if(typeof prec === "number" && ! prec) return parse_conv(0);
if(minus){
if(typeof prec === "number") return parse_conv(F);
var n = prec[1];
return parse_conv([0, 0, n]);
}
if(typeof prec === "number") return parse_conv(G);
var n$0 = prec[1];
return parse_conv([0, 1, n$0]);
}
var cst$1 = "' '", cst$0 = "'#'", cst = "'+'";
function parse_conversion
(pct_ind,
str_ind,
end_ind,
plus,
hash,
space,
ign,
pad,
prec,
padprec,
symb){
var plus_used = [0, 0];
function get_plus(param){plus_used[1] = 1; return plus;}
var hash_used = [0, 0];
function get_hash(param){hash_used[1] = 1; return hash;}
var space_used = [0, 0];
function get_space(param){space_used[1] = 1; return space;}
var ign_used = [0, 0];
function get_ign(param){ign_used[1] = 1; return ign;}
var pad_used = [0, 0];
function get_pad(param){pad_used[1] = 1; return pad;}
var prec_used = [0, 0];
function get_prec(param){prec_used[1] = 1; return prec;}
function get_padprec(param){pad_used[1] = 1; return padprec;}
function get_int_pad(param){
var pad = get_pad(0), match = get_prec(0);
if(typeof match === "number" && ! match) return pad;
if(typeof pad === "number") return 0;
if(0 !== pad[0])
return 2 <= pad[1]
? legacy_behavior$0
? H
: incompatible_flag(pct_ind, str_ind, 48, cst_precision)
: pad;
if(2 > pad[1]) return pad;
var n = pad[2];
return legacy_behavior$0
? [0, 1, n]
: incompatible_flag(pct_ind, str_ind, 48, cst_precision);
}
function check_no_0(symb, pad){
if(typeof pad === "number") return pad;
if(0 !== pad[0])
return 2 <= pad[1]
? legacy_behavior$0
? I
: incompatible_flag(pct_ind, str_ind, symb, cst_0)
: pad;
if(2 > pad[1]) return pad;
var width = pad[2];
return legacy_behavior$0
? [0, 1, width]
: incompatible_flag(pct_ind, str_ind, symb, cst_0);
}
var cst$2 = "'*'";
function opt_of_pad(c, pad){
if(typeof pad === "number") return 0;
if(0 === pad[0])
switch(pad[1]){
case 0:
var width = pad[2];
return legacy_behavior$0
? [0, width]
: incompatible_flag(pct_ind, str_ind, c, "'-'");
case 1:
var width$0 = pad[2]; return [0, width$0];
default:
var width$1 = pad[2];
return legacy_behavior$0
? [0, width$1]
: incompatible_flag(pct_ind, str_ind, c, "'0'");
}
return incompatible_flag(pct_ind, str_ind, c, cst$2);
}
function get_pad_opt(c){return opt_of_pad(c, get_pad(0));}
function get_padprec_opt(c){return opt_of_pad(c, get_padprec(0));}
a:
{
if(124 > symb)
switch(symb){
case 33:
var
fmt_rest$5 = parse(str_ind, end_ind)[1],
fmt_result = [0, [10, fmt_rest$5]];
break a;
case 40:
var
sub_end = search_subformat_end(str_ind, end_ind, 41),
fmt_rest$7 = parse(sub_end + 2 | 0, end_ind)[1],
sub_fmt = parse(str_ind, sub_end)[1],
sub_fmtty = fmtty_of_fmt(sub_fmt);
if(get_ign(0)){
var
ignored$2 = [9, get_pad_opt(95), sub_fmtty],
fmt_result = [0, [23, ignored$2, fmt_rest$7]];
break a;
}
var fmt_result = [0, [14, get_pad_opt(40), sub_fmtty, fmt_rest$7]];
break a;
case 44:
var fmt_result = parse(str_ind, end_ind); break a;
case 67:
var fmt_rest$10 = parse(str_ind, end_ind)[1];
if(get_ign(0)){var fmt_result = [0, [23, 1, fmt_rest$10]]; break a;}
var fmt_result = [0, [1, fmt_rest$10]];
break a;
case 78:
var fmt_rest$14 = parse(str_ind, end_ind)[1], counter$0 = 2;
if(get_ign(0)){
var fmt_result = [0, [23, [11, counter$0], fmt_rest$14]];
break a;
}
var fmt_result = [0, [21, counter$0, fmt_rest$14]];
break a;
case 83:
var
pad$6 = check_no_0(symb, get_padprec(0)),
fmt_rest$15 = parse(str_ind, end_ind)[1];
if(get_ign(0)){
var
ignored$6 = [1, get_padprec_opt(95)],
fmt_result = [0, [23, ignored$6, fmt_rest$15]];
break a;
}
var
match$5 = make_padding_fmt_ebb(pad$6, fmt_rest$15),
fmt_rest$16 = match$5[2],
pad$7 = match$5[1],
fmt_result = [0, [3, pad$7, fmt_rest$16]];
break a;
case 91:
var
match$7 = parse_char_set(str_ind, end_ind),
char_set = match$7[2],
next_ind = match$7[1],
fmt_rest$19 = parse(next_ind, end_ind)[1];
if(get_ign(0)){
var
ignored$8 = [10, get_pad_opt(95), char_set],
fmt_result = [0, [23, ignored$8, fmt_rest$19]];
break a;
}
var fmt_result = [0, [20, get_pad_opt(91), char_set, fmt_rest$19]];
break a;
case 97:
var
fmt_rest$20 = parse(str_ind, end_ind)[1],
fmt_result = [0, [15, fmt_rest$20]];
break a;
case 99:
var
char_format =
function(fmt_rest){
return get_ign(0) ? [0, [23, 0, fmt_rest]] : [0, [0, fmt_rest]];
},
fmt_rest$21 = parse(str_ind, end_ind)[1],
match$8 = get_pad_opt(99);
if(! match$8){var fmt_result = char_format(fmt_rest$21); break a;}
var n = match$8[1];
if(0 === n){
if(get_ign(0)){
var fmt_result = [0, [23, 3, fmt_rest$21]];
break a;
}
var fmt_result = [0, [22, fmt_rest$21]];
break a;
}
if(legacy_behavior$0){
var fmt_result = char_format(fmt_rest$21);
break a;
}
var
fmt_result =
invalid_format_message
(str_ind, "non-zero widths are unsupported for %c conversions");
break a;
case 114:
var fmt_rest$22 = parse(str_ind, end_ind)[1];
if(get_ign(0)){var fmt_result = [0, [23, 2, fmt_rest$22]]; break a;}
var fmt_result = [0, [19, fmt_rest$22]];
break a;
case 115:
var
pad$9 = check_no_0(symb, get_padprec(0)),
fmt_rest$23 = parse(str_ind, end_ind)[1];
if(get_ign(0)){
var
ignored$9 = [0, get_padprec_opt(95)],
fmt_result = [0, [23, ignored$9, fmt_rest$23]];
break a;
}
var
match$9 = make_padding_fmt_ebb(pad$9, fmt_rest$23),
fmt_rest$24 = match$9[2],
pad$10 = match$9[1],
fmt_result = [0, [2, pad$10, fmt_rest$24]];
break a;
case 116:
var
fmt_rest$25 = parse(str_ind, end_ind)[1],
fmt_result = [0, [16, fmt_rest$25]];
break a;
case 123:
var
sub_end$0 = search_subformat_end(str_ind, end_ind, 125),
sub_fmt$0 = parse(str_ind, sub_end$0)[1],
fmt_rest$26 = parse(sub_end$0 + 2 | 0, end_ind)[1],
sub_fmtty$0 = fmtty_of_fmt(sub_fmt$0);
if(get_ign(0)){
var
ignored$10 = [8, get_pad_opt(95), sub_fmtty$0],
fmt_result = [0, [23, ignored$10, fmt_rest$26]];
break a;
}
var
fmt_result = [0, [13, get_pad_opt(123), sub_fmtty$0, fmt_rest$26]];
break a;
case 66:
case 98:
var
pad$3 = check_no_0(symb, get_padprec(0)),
fmt_rest$8 = parse(str_ind, end_ind)[1];
if(get_ign(0)){
var
ignored$3 = [7, get_padprec_opt(95)],
fmt_result = [0, [23, ignored$3, fmt_rest$8]];
break a;
}
var
match$3 = make_padding_fmt_ebb(pad$3, fmt_rest$8),
fmt_rest$9 = match$3[2],
pad$4 = match$3[1],
fmt_result = [0, [9, pad$4, fmt_rest$9]];
break a;
case 37:
case 64:
var
fmt_rest$6 = parse(str_ind, end_ind)[1],
fmt_result = [0, [12, symb, fmt_rest$6]];
break a;
case 76:
case 108:
case 110:
if(str_ind !== end_ind){
var symb$0 = caml_string_get(str, str_ind), i = symb$0 - 88 | 0;
b:
{
if(32 >= i >>> 0)
switch(i){
case 0:
case 12:
case 17:
case 23:
case 29:
case 32:
var h = 1; break b;
}
var h = 0;
}
if(h) break;
}
var fmt_rest$13 = parse(str_ind, end_ind)[1];
b:
{
if(108 <= symb){
if(111 > symb)
switch(symb - 108 | 0){
case 0:
var counter = 0; break b;
case 2:
var counter = 1; break b;
}
}
else if(76 === symb){var counter = 2; break b;}
throw caml_maybe_attach_backtrace([0, Assert_failure, V], 1);
}
if(get_ign(0)){
var
ignored$5 = [11, counter],
fmt_result = [0, [23, ignored$5, fmt_rest$13]];
break a;
}
var fmt_result = [0, [21, counter, fmt_rest$13]];
break a;
case 32:
case 35:
case 43:
case 45:
case 95:
var
fmt_result = caml_call3(failwith_message(M), str, pct_ind, symb);
break a;
case 88:
case 100:
case 105:
case 111:
case 117:
case 120:
var
A = get_space(0),
B = get_hash(0),
iconv$2 =
compute_int_conv(pct_ind, str_ind, get_plus(0), B, A, symb),
fmt_rest$17 = parse(str_ind, end_ind)[1];
if(get_ign(0)){
var
ignored$7 = [2, iconv$2, get_pad_opt(95)],
fmt_result = [0, [23, ignored$7, fmt_rest$17]];
break a;
}
var
C = get_prec(0),
match$6 = make_padprec_fmt_ebb(get_int_pad(0), C, fmt_rest$17),
fmt_rest$18 = match$6[3],
prec$4 = match$6[2],
pad$8 = match$6[1],
fmt_result = [0, [4, iconv$2, pad$8, prec$4, fmt_rest$18]];
break a;
case 69:
case 70:
case 71:
case 72:
case 101:
case 102:
case 103:
case 104:
var
space$1 = get_space(0),
hash$1 = get_hash(0),
plus$2 = get_plus(0),
flag =
plus$2
? space$1
? legacy_behavior$0
? 1
: incompatible_flag(pct_ind, str_ind, 32, cst)
: 1
: space$1 ? 2 : 0;
b:
{
if(73 <= symb){
var switcher = symb - 101 | 0;
if(3 >= switcher >>> 0)
switch(switcher){
case 0:
var kind = 1; break b;
case 1:
var kind = 0; break b;
case 2:
var kind = 3; break b;
default: var kind = 6; break b;
}
}
else if(69 <= symb)
switch(symb - 69 | 0){
case 0:
var kind = 2; break b;
case 2:
var kind = 4; break b;
case 3:
var kind = 7; break b;
}
if(hash$1){
if(70 === symb){var kind = 8; break b;}
}
else if(70 === symb){var kind = 5; break b;}
throw caml_maybe_attach_backtrace([0, Assert_failure, X], 1);
}
var
fconv = [0, flag, kind],
fmt_rest$11 = parse(str_ind, end_ind)[1];
if(! get_ign(0)){
var
z = get_prec(0),
match$4 = make_padprec_fmt_ebb(get_pad(0), z, fmt_rest$11),
fmt_rest$12 = match$4[3],
prec$3 = match$4[2],
pad$5 = match$4[1],
fmt_result = [0, [8, fconv, pad$5, prec$3, fmt_rest$12]];
break a;
}
var match = get_prec(0);
if(typeof match === "number")
var g = match ? incompatible_flag(pct_ind, str_ind, 95, cst$2) : 0;
else
var ndec = match[1], g = [0, ndec];
var
ignored$4 = [6, get_pad_opt(95), g],
fmt_result = [0, [23, ignored$4, fmt_rest$11]];
break a;
}
if(108 <= symb){
if(111 > symb)
switch(symb - 108 | 0){
case 0:
var
m = caml_string_get(str, str_ind),
o = get_space(0),
p = get_hash(0),
iconv =
compute_int_conv(pct_ind, str_ind + 1 | 0, get_plus(0), p, o, m),
fmt_rest = parse(str_ind + 1 | 0, end_ind)[1];
if(get_ign(0)){
var
ignored = [3, iconv, get_pad_opt(95)],
fmt_result = [0, [23, ignored, fmt_rest]];
break a;
}
var
q = get_prec(0),
match$0 = make_padprec_fmt_ebb(get_int_pad(0), q, fmt_rest),
fmt_rest$0 = match$0[3],
prec$0 = match$0[2],
pad$0 = match$0[1],
fmt_result = [0, [5, iconv, pad$0, prec$0, fmt_rest$0]];
break a;
case 2:
var
r = caml_string_get(str, str_ind),
s = get_space(0),
t = get_hash(0),
iconv$0 =
compute_int_conv(pct_ind, str_ind + 1 | 0, get_plus(0), t, s, r),
fmt_rest$1 = parse(str_ind + 1 | 0, end_ind)[1];
if(get_ign(0)){
var
ignored$0 = [4, iconv$0, get_pad_opt(95)],
fmt_result = [0, [23, ignored$0, fmt_rest$1]];
break a;
}
var
u = get_prec(0),
match$1 = make_padprec_fmt_ebb(get_int_pad(0), u, fmt_rest$1),
fmt_rest$2 = match$1[3],
prec$1 = match$1[2],
pad$1 = match$1[1],
fmt_result = [0, [6, iconv$0, pad$1, prec$1, fmt_rest$2]];
break a;
}
}
else if(76 === symb){
var
v = caml_string_get(str, str_ind),
w = get_space(0),
x = get_hash(0),
iconv$1 =
compute_int_conv(pct_ind, str_ind + 1 | 0, get_plus(0), x, w, v),
fmt_rest$3 = parse(str_ind + 1 | 0, end_ind)[1];
if(get_ign(0)){
var
ignored$1 = [5, iconv$1, get_pad_opt(95)],
fmt_result = [0, [23, ignored$1, fmt_rest$3]];
break a;
}
var
y = get_prec(0),
match$2 = make_padprec_fmt_ebb(get_int_pad(0), y, fmt_rest$3),
fmt_rest$4 = match$2[3],
prec$2 = match$2[2],
pad$2 = match$2[1],
fmt_result = [0, [7, iconv$1, pad$2, prec$2, fmt_rest$4]];
break a;
}
var
fmt_result =
caml_call3(failwith_message(J), str, str_ind - 1 | 0, symb);
}
if(1 - legacy_behavior$0){
var a = 1 - plus_used[1], plus$0 = a ? plus : a;
if(plus$0) incompatible_flag(pct_ind, str_ind, symb, cst);
var b = 1 - hash_used[1], hash$0 = b ? hash : b;
if(hash$0) incompatible_flag(pct_ind, str_ind, symb, cst$0);
var c = 1 - space_used[1], space$0 = c ? space : c;
if(space$0) incompatible_flag(pct_ind, str_ind, symb, cst$1);
var d = 1 - pad_used[1], j = d ? caml_notequal([0, pad], K) : d;
if(j) incompatible_flag(pct_ind, str_ind, symb, "`padding'");
var e = 1 - prec_used[1], k = e ? caml_notequal([0, prec], L) : e;
if(k){
var l = ign ? 95 : symb;
incompatible_flag(pct_ind, str_ind, l, "`precision'");
}
var plus$1 = ign ? plus : ign;
if(plus$1) incompatible_flag(pct_ind, str_ind, 95, cst);
}
var f = 1 - ign_used[1], ign$0 = f ? ign : f;
a:
if(ign$0){
b:
{
if(38 <= symb){
if(44 !== symb && 64 !== symb) break b;
}
else if(33 !== symb && 37 > symb) break b;
if(legacy_behavior$0) break a;
}
incompatible_flag(pct_ind, str_ind, symb, "'_'");
}
return fmt_result;
}
function parse_after_at(str_ind, end_ind){
if(str_ind === end_ind) return N;
var c = caml_string_get(str, str_ind);
if(65 <= c){
if(94 <= c){
var switcher = c - 123 | 0;
if(2 >= switcher >>> 0)
switch(switcher){
case 0:
return parse_tag(1, str_ind + 1 | 0, end_ind);
case 2:
var fmt_rest$0 = parse(str_ind + 1 | 0, end_ind)[1];
return [0, [17, 1, fmt_rest$0]];
}
}
else if(91 <= c)
switch(c - 91 | 0){
case 0:
return parse_tag(0, str_ind + 1 | 0, end_ind);
case 2:
var fmt_rest$1 = parse(str_ind + 1 | 0, end_ind)[1];
return [0, [17, 0, fmt_rest$1]];
}
}
else{
if(10 === c){
var fmt_rest$2 = parse(str_ind + 1 | 0, end_ind)[1];
return [0, [17, 3, fmt_rest$2]];
}
if(32 <= c)
switch(c - 32 | 0){
case 0:
var fmt_rest$3 = parse(str_ind + 1 | 0, end_ind)[1];
return [0, [17, O, fmt_rest$3]];
case 5:
if
((str_ind + 1 | 0) < end_ind
&& 37 === caml_string_get(str, str_ind + 1 | 0)){
var fmt_rest$4 = parse(str_ind + 2 | 0, end_ind)[1];
return [0, [17, 6, fmt_rest$4]];
}
var fmt_rest$5 = parse(str_ind, end_ind)[1];
return [0, [12, 64, fmt_rest$5]];
case 12:
var fmt_rest$6 = parse(str_ind + 1 | 0, end_ind)[1];
return [0, [17, P, fmt_rest$6]];
case 14:
var fmt_rest$7 = parse(str_ind + 1 | 0, end_ind)[1];
return [0, [17, 4, fmt_rest$7]];
case 27:
var str_ind$0 = str_ind + 1 | 0;
a:
try{
var
b = str_ind$0 === end_ind,
d = b || 60 !== caml_string_get(str, str_ind$0);
if(d) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var
str_ind_1 = parse_spaces(str_ind$0 + 1 | 0, end_ind),
match = caml_string_get(str, str_ind_1);
b:
{
if(48 <= match){
if(58 <= match) break b;
}
else if(45 !== match) break b;
var
match$0 = parse_integer(str_ind_1, end_ind),
width = match$0[2],
str_ind_2 = match$0[1],
str_ind_3 = parse_spaces(str_ind_2, end_ind),
switcher$0 = caml_string_get(str, str_ind_3) - 45 | 0;
if(12 < switcher$0 >>> 0){
if(17 === switcher$0){
var
s =
Stdlib_String[16].call
(null,
str,
str_ind$0 - 2 | 0,
(str_ind_3 - str_ind$0 | 0) + 3 | 0),
e = str_ind_3 + 1 | 0,
formatting_lit$0 = [0, s, width, 0],
next_ind = e;
break a;
}
}
else if(1 < switcher$0 - 1 >>> 0){
var
match$1 = parse_integer(str_ind_3, end_ind),
offset = match$1[2],
str_ind_4 = match$1[1],
str_ind_5 = parse_spaces(str_ind_4, end_ind);
if(62 !== caml_string_get(str, str_ind_5))
throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var
s$0 =
Stdlib_String[16].call
(null,
str,
str_ind$0 - 2 | 0,
(str_ind_5 - str_ind$0 | 0) + 3 | 0),
f = str_ind_5 + 1 | 0,
formatting_lit$0 = [0, s$0, width, offset],
next_ind = f;
break a;
}
throw caml_maybe_attach_backtrace(Stdlib[8], 1);
}
throw caml_maybe_attach_backtrace(Stdlib[8], 1);
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8])
var formatting_lit$0 = formatting_lit, next_ind = str_ind$0;
else{
if(exn[1] !== Stdlib[7])
throw caml_maybe_attach_backtrace(exn, 0);
var formatting_lit$0 = formatting_lit, next_ind = str_ind$0;
}
}
var fmt_rest$10 = parse(next_ind, end_ind)[1];
return [0, [17, formatting_lit$0, fmt_rest$10]];
case 28:
var str_ind$1 = str_ind + 1 | 0;
try{
var
str_ind_1$0 = parse_spaces(str_ind$1, end_ind),
match$4 = caml_string_get(str, str_ind_1$0);
a:
{
b:
{
if(48 <= match$4){
if(58 <= match$4) break b;
}
else if(45 !== match$4) break b;
var
match$5 = parse_integer(str_ind_1$0, end_ind),
size = match$5[2],
str_ind_2$0 = match$5[1],
str_ind_3$0 = parse_spaces(str_ind_2$0, end_ind);
if(62 !== caml_string_get(str, str_ind_3$0))
throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var
s$1 =
Stdlib_String[16].call
(null,
str,
str_ind$1 - 2 | 0,
(str_ind_3$0 - str_ind$1 | 0) + 3 | 0),
a = [0, [0, str_ind_3$0 + 1 | 0, [1, s$1, size]]];
break a;
}
var a = 0;
}
var match$2 = a;
}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 !== Stdlib[8] && exn$0[1] !== Stdlib[7])
throw caml_maybe_attach_backtrace(exn$0, 0);
var match$2 = 0;
}
if(match$2){
var
match$3 = match$2[1],
formatting_lit$1 = match$3[2],
next_ind$0 = match$3[1],
fmt_rest$11 = parse(next_ind$0, end_ind)[1];
return [0, [17, formatting_lit$1, fmt_rest$11]];
}
var fmt_rest$12 = parse(str_ind$1, end_ind)[1];
return [0, [17, Q, fmt_rest$12]];
case 31:
var fmt_rest$8 = parse(str_ind + 1 | 0, end_ind)[1];
return [0, [17, 2, fmt_rest$8]];
case 32:
var fmt_rest$9 = parse(str_ind + 1 | 0, end_ind)[1];
return [0, [17, 5, fmt_rest$9]];
}
}
var fmt_rest = parse(str_ind + 1 | 0, end_ind)[1];
return [0, [17, [2, c], fmt_rest]];
}
function parse_tag(is_open_tag, str_ind, end_ind){
try{
if(str_ind === end_ind) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
if(60 !== caml_string_get(str, str_ind))
throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var ind = Stdlib_String[32].call(null, str, str_ind + 1 | 0, 62);
if(end_ind <= ind) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var
sub_str =
Stdlib_String[16].call
(null, str, str_ind, (ind - str_ind | 0) + 1 | 0),
fmt_rest$0 = parse(ind + 1 | 0, end_ind)[1],
sub_fmt = parse(str_ind, ind + 1 | 0)[1],
sub_format$0 = [0, sub_fmt, sub_str],
formatting$0 = is_open_tag ? [0, sub_format$0] : [1, sub_format$0];
return [0, [18, formatting$0, fmt_rest$0]];
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var
fmt_rest = parse(str_ind, end_ind)[1],
formatting = is_open_tag ? [0, sub_format] : [1, sub_format];
return [0, [18, formatting, fmt_rest]];
}
}
function parse_char_set(str_ind, end_ind){
if(str_ind === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var char_set = create_char_set(0);
function add_range(c$0, c){
if(c >= c$0){
var i = c$0;
for(;;){
add_in_char_set(char_set, Stdlib[29].call(null, i));
var a = i + 1 | 0;
if(c === i) break;
i = a;
}
}
}
function fail_single_percent(str_ind){
return caml_call2(failwith_message(R), str, str_ind);
}
function parse_char_set_content(counter, str_ind$1, end_ind){
var str_ind = str_ind$1;
for(;;){
if(str_ind === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var c = caml_string_get(str, str_ind);
if(45 !== c){
if(93 === c) return str_ind + 1 | 0;
var a = str_ind + 1 | 0;
return counter < 50
? parse_char_set_after_char$0(counter + 1 | 0, a, end_ind, c)
: caml_trampoline_return
(parse_char_set_after_char$0, [0, a, end_ind, c]);
}
add_in_char_set(char_set, 45);
var str_ind$0 = str_ind + 1 | 0;
str_ind = str_ind$0;
}
}
function parse_char_set_after_char$0(counter, str_ind$2, end_ind, c$3){
var str_ind = str_ind$2, c = c$3;
for(;;){
if(str_ind === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var c$0 = caml_string_get(str, str_ind);
a:
{
if(46 <= c$0){
if(64 !== c$0){
if(93 !== c$0) break a;
add_in_char_set(char_set, c);
return str_ind + 1 | 0;
}
}
else if(37 !== c$0){if(45 <= c$0) break; break a;}
if(37 === c){
add_in_char_set(char_set, c$0);
var a = str_ind + 1 | 0;
return counter < 50
? parse_char_set_content(counter + 1 | 0, a, end_ind)
: caml_trampoline_return
(parse_char_set_content, [0, a, end_ind]);
}
}
if(37 === c) fail_single_percent(str_ind);
add_in_char_set(char_set, c);
var str_ind$0 = str_ind + 1 | 0;
str_ind = str_ind$0;
c = c$0;
}
var str_ind$1 = str_ind + 1 | 0;
if(str_ind$1 === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var c$1 = caml_string_get(str, str_ind$1);
if(37 === c$1){
if((str_ind$1 + 1 | 0) === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var c$2 = caml_string_get(str, str_ind$1 + 1 | 0);
if(37 !== c$2 && 64 !== c$2) return fail_single_percent(str_ind$1);
add_range(c, c$2);
var b = str_ind$1 + 2 | 0;
return counter < 50
? parse_char_set_content(counter + 1 | 0, b, end_ind)
: caml_trampoline_return
(parse_char_set_content, [0, b, end_ind]);
}
if(93 === c$1){
add_in_char_set(char_set, c);
add_in_char_set(char_set, 45);
return str_ind$1 + 1 | 0;
}
add_range(c, c$1);
var d = str_ind$1 + 1 | 0;
return counter < 50
? parse_char_set_content(counter + 1 | 0, d, end_ind)
: caml_trampoline_return
(parse_char_set_content, [0, d, end_ind]);
}
function parse_char_set_after_char(str_ind, end_ind, c){
return caml_trampoline
(parse_char_set_after_char$0(0, str_ind, end_ind, c));
}
if(str_ind === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
if(94 === caml_string_get(str, str_ind))
var str_ind$0 = str_ind + 1 | 0, reverse = 1, str_ind$1 = str_ind$0;
else
var reverse = 0, str_ind$1 = str_ind;
if(str_ind$1 === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var
c = caml_string_get(str, str_ind$1),
next_ind = parse_char_set_after_char(str_ind$1 + 1 | 0, end_ind, c),
char_set$0 = freeze_char_set(char_set),
a = reverse ? rev_char_set(char_set$0) : char_set$0;
return [0, next_ind, a];
}
function parse_spaces(str_ind$1, end_ind){
var str_ind = str_ind$1;
for(;;){
if(str_ind === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
if(32 !== caml_string_get(str, str_ind)) return str_ind;
var str_ind$0 = str_ind + 1 | 0;
str_ind = str_ind$0;
}
}
function parse_positive(str_ind$1, end_ind, acc$0){
var str_ind = str_ind$1, acc = acc$0;
for(;;){
if(str_ind === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var c = caml_string_get(str, str_ind);
if(9 < c - 48 >>> 0) return [0, str_ind, acc];
var new_acc = (acc * 10 | 0) + (c - 48 | 0) | 0;
if(Stdlib_Sys[12] < new_acc){
var a = Stdlib_Sys[12];
return caml_call3(failwith_message(S), str, new_acc, a);
}
var str_ind$0 = str_ind + 1 | 0;
str_ind = str_ind$0;
acc = new_acc;
}
}
function parse_integer(str_ind, end_ind){
if(str_ind === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var match = caml_string_get(str, str_ind);
if(48 <= match){
if(58 > match) return parse_positive(str_ind, end_ind, 0);
}
else if(45 === match){
if((str_ind + 1 | 0) === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var c = caml_string_get(str, str_ind + 1 | 0);
if(9 < c - 48 >>> 0)
return expected_character(str_ind + 1 | 0, "digit", c);
var
match$0 = parse_positive(str_ind + 1 | 0, end_ind, 0),
n = match$0[2],
next_ind = match$0[1];
return [0, next_ind, - n | 0];
}
throw caml_maybe_attach_backtrace([0, Assert_failure, T], 1);
}
function add_literal(lit_start, str_ind, fmt){
var size = str_ind - lit_start | 0;
return 0 === size
? [0, fmt]
: 1
=== size
? [0, [12, caml_string_get(str, lit_start), fmt]]
: [0,
[11, Stdlib_String[16].call(null, str, lit_start, size), fmt]];
}
function search_subformat_end(str_ind$7, end_ind, c){
var str_ind = str_ind$7;
for(;;){
if(str_ind === end_ind)
caml_call3(failwith_message(U), str, c, end_ind);
if(37 === caml_string_get(str, str_ind)){
if((str_ind + 1 | 0) === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
if(caml_string_get(str, str_ind + 1 | 0) === c) return str_ind;
var match = caml_string_get(str, str_ind + 1 | 0);
if(95 <= match){
if(123 <= match){
if(126 > match)
switch(match - 123 | 0){
case 0:
var
sub_end = search_subformat_end(str_ind + 2 | 0, end_ind, 125),
str_ind$1 = sub_end + 2 | 0;
str_ind = str_ind$1;
continue;
case 2:
return expected_character(str_ind + 1 | 0, "character ')'", 125);
}
}
else if(96 > match){
if((str_ind + 2 | 0) === end_ind)
invalid_format_message(end_ind, cst_unexpected_end_of_format);
var match$0 = caml_string_get(str, str_ind + 2 | 0);
if(40 === match$0){
var
sub_end$0 = search_subformat_end(str_ind + 3 | 0, end_ind, 41),
str_ind$2 = sub_end$0 + 2 | 0;
str_ind = str_ind$2;
continue;
}
if(123 === match$0){
var
sub_end$1 = search_subformat_end(str_ind + 3 | 0, end_ind, 125),
str_ind$3 = sub_end$1 + 2 | 0;
str_ind = str_ind$3;
continue;
}
var str_ind$4 = str_ind + 3 | 0;
str_ind = str_ind$4;
continue;
}
}
else{
if(40 === match){
var
sub_end$2 = search_subformat_end(str_ind + 2 | 0, end_ind, 41),
str_ind$5 = sub_end$2 + 2 | 0;
str_ind = str_ind$5;
continue;
}
if(41 === match)
return expected_character(str_ind + 1 | 0, "character '}'", 41);
}
var str_ind$0 = str_ind + 2 | 0;
str_ind = str_ind$0;
}
else{var str_ind$6 = str_ind + 1 | 0; str_ind = str_ind$6;}
}
}
function compute_int_conv(pct_ind, str_ind, plus$0, hash$0, space$0, symb){
var plus = plus$0, hash = hash$0, space = space$0;
for(;;){
a:
{
if(plus){
if(! hash){
if(space) break a;
if(100 === symb) return 1;
if(105 === symb) return 4;
break a;
}
}
else{
if(! hash){
if(space){
if(100 === symb) return 2;
if(105 === symb) return 5;
break a;
}
var switcher$1 = symb - 88 | 0;
if(32 < switcher$1 >>> 0) break a;
switch(switcher$1){
case 0:
return 8;
case 12:
return 0;
case 17:
return 3;
case 23:
return 10;
case 29:
return 12;
case 32:
return 6;
default: break a;
}
}
if(! space){
var switcher$0 = symb - 88 | 0;
if(32 >= switcher$0 >>> 0)
switch(switcher$0){
case 0:
return 9;
case 12:
return 13;
case 17:
return 14;
case 23:
return 11;
case 29:
return 15;
case 32:
return 7;
}
}
}
var switcher = symb - 88 | 0;
if(32 >= switcher >>> 0)
switch(switcher){
case 0:
if(legacy_behavior$0) return 9; break;
case 23:
if(legacy_behavior$0) return 11; break;
case 32:
if(legacy_behavior$0) return 7; break;
case 12:
case 17:
case 29:
if(! legacy_behavior$0)
return incompatible_flag(pct_ind, str_ind, symb, cst$0);
hash = 0;
continue;
}
}
if(plus)
if(space){
if(! legacy_behavior$0)
return incompatible_flag(pct_ind, str_ind, 32, cst);
space = 0;
}
else{
if(! legacy_behavior$0)
return incompatible_flag(pct_ind, str_ind, symb, cst);
plus = 0;
}
else{
if(! space)
throw caml_maybe_attach_backtrace([0, Assert_failure, W], 1);
if(! legacy_behavior$0)
return incompatible_flag(pct_ind, str_ind, symb, cst$1);
space = 0;
}
}
}
function incompatible_flag(pct_ind, str_ind, symb, option){
var
subfmt =
Stdlib_String[16].call(null, str, pct_ind, str_ind - pct_ind | 0);
return caml_call5
(failwith_message(Y), str, pct_ind, option, symb, subfmt);
}
return parse(0, caml_ml_string_length(str));
}
var
cst_and = " and ",
cst_bad_input_format_type_mism =
"bad input: format type mismatch between ",
cst_bad_input_format_type_mism$0 =
"bad input: format type mismatch between %S and %S",
Z =
[0,
[11, cst_bad_input_format_type_mism, [3, 0, [11, cst_and, [3, 0, 0]]]],
cst_bad_input_format_type_mism$0];
function format_of_string_fmtty(str, fmtty){
var fmt = fmt_ebb_of_string(0, str)[1];
try{var b = [0, type_format(fmt, fmtty), str]; return b;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Type_mismatch) throw caml_maybe_attach_backtrace(exn, 0);
var a = string_of_fmtty(fmtty);
return caml_call2(failwith_message(Z), str, a);
}
}
var
_ =
[0,
[11, cst_bad_input_format_type_mism, [3, 0, [11, cst_and, [3, 0, 0]]]],
cst_bad_input_format_type_mism$0];
function format_of_string_format(str, param){
var
str$0 = param[2],
fmt = param[1],
fmt$0 = fmt_ebb_of_string(0, str)[1];
try{var a = [0, type_format(fmt$0, fmtty_of_fmt(fmt)), str]; return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Type_mismatch)
return caml_call2(failwith_message(_), str, str$0);
throw caml_maybe_attach_backtrace(exn, 0);
}
}
runtime.caml_register_global
(197,
[0,
is_in_char_set,
rev_char_set,
create_char_set,
add_in_char_set,
freeze_char_set,
param_format_of_ignored_format,
make_printf,
make_iprintf,
output_acc,
bufput_acc,
strput_acc,
type_format,
fmt_ebb_of_string,
format_of_string_fmtty,
format_of_string_format,
char_of_iconv,
string_of_formatting_lit,
string_of_fmtty,
string_of_fmt,
open_box_of_string,
symm,
trans,
recast],
"CamlinternalFormat");
return;
}
(globalThis));
//# 15317 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Printf:[F(2),F(1),F(1),F(1),F(2),F(2),F(2),F(3),F(3),F(2),F(3),F(3),F(2)]
(function
(globalThis){
"use strict";
var runtime = globalThis.jsoo_runtime;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Buffer = global_data.Stdlib__Buffer,
CamlinternalFormat = global_data.CamlinternalFormat,
Stdlib = global_data.Stdlib;
function kfprintf(k, o, param){
var fmt = param[1];
return CamlinternalFormat[7].call
(null,
function(acc){
CamlinternalFormat[9].call(null, o, acc);
return caml_call1(k, o);
},
0,
fmt);
}
function kbprintf(k, b, param){
var fmt = param[1];
return CamlinternalFormat[7].call
(null,
function(acc){
CamlinternalFormat[10].call(null, b, acc);
return caml_call1(k, b);
},
0,
fmt);
}
function ikfprintf(k, oc, param){
var fmt = param[1];
return CamlinternalFormat[8].call(null, k, oc, fmt);
}
function fprintf(oc, fmt){
return kfprintf(function(a){return 0;}, oc, fmt);
}
function bprintf(b, fmt){return kbprintf(function(a){return 0;}, b, fmt);}
function ifprintf(oc, fmt){
return ikfprintf(function(a){return 0;}, oc, fmt);
}
function ibprintf(b, fmt){
return ikfprintf(function(a){return 0;}, b, fmt);
}
function printf(fmt){return fprintf(Stdlib[39], fmt);}
function eprintf(fmt){return fprintf(Stdlib[40], fmt);}
function ksprintf(k, param){
var fmt = param[1];
function k$0(acc){
var buf = Stdlib_Buffer[1].call(null, 64);
CamlinternalFormat[11].call(null, buf, acc);
return caml_call1(k, Stdlib_Buffer[2].call(null, buf));
}
return CamlinternalFormat[7].call(null, k$0, 0, fmt);
}
function sprintf(fmt){return ksprintf(function(s){return s;}, fmt);}
runtime.caml_register_global
(3,
[0,
fprintf,
printf,
eprintf,
sprintf,
bprintf,
ifprintf,
ibprintf,
kfprintf,
ikfprintf,
ksprintf,
kbprintf,
ikfprintf,
ksprintf],
"Stdlib__Printf");
return;
}
(globalThis));
//# 16793 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Printexc:[F(1),F(1),F(2),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1)*,F(1)*,F(2),F(1),F(2),F(1),F(1),F(1),N,F(1)*,F(2),F(1),F(1),F(1),F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound,
caml_get_exception_raw_backtra = runtime.caml_get_exception_raw_backtrace,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_obj_tag = runtime.caml_obj_tag,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call5(f, a0, a1, a2, a3, a4){
return (f.l >= 0 ? f.l : f.l = f.length) === 5
? f(a0, a1, a2, a3, a4)
: runtime.caml_call_gen(f, [a0, a1, a2, a3, a4]);
}
function caml_call7(f, a0, a1, a2, a3, a4, a5, a6){
return (f.l >= 0 ? f.l : f.l = f.length) === 7
? f(a0, a1, a2, a3, a4, a5, a6)
: runtime.caml_call_gen(f, [a0, a1, a2, a3, a4, a5, a6]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Printf = global_data.Stdlib__Printf,
Stdlib_Atomic = global_data.Stdlib__Atomic,
Stdlib = global_data.Stdlib,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_Obj = global_data.Stdlib__Obj,
printers = Stdlib_Atomic[1].call(null, 0),
a = [0, [3, 0, 0], "%S"],
b = [0, [4, 0, 0, 0, 0], "%d"];
function field(x, i){
var f = x[i + 1];
if(! Stdlib_Obj[1].call(null, f))
return caml_call1(Stdlib_Printf[4].call(null, b), f);
var c = Stdlib_Obj[15];
if(caml_obj_tag(f) === c)
return caml_call1(Stdlib_Printf[4].call(null, a), f);
var d = Stdlib_Obj[16];
return caml_obj_tag(f) === d ? Stdlib[35].call(null, f) : "_";
}
var cst = "", c = [0, [11, ", ", [2, 0, [2, 0, 0]]], ", %s%s"];
function other_fields(x, i){
if(x.length - 1 <= i) return cst;
var a = other_fields(x, i + 1 | 0), b = field(x, i);
return caml_call2(Stdlib_Printf[4].call(null, c), b, a);
}
function use_printers(x){
var param = Stdlib_Atomic[3].call(null, printers);
for(;;){
if(! param) return 0;
var tl = param[2], hd = param[1];
try{var val = caml_call1(hd, x);}catch(a){param = tl; continue;}
if(val){var s = val[1]; return [0, s];}
param = tl;
}
}
var
d = [0, [12, 40, [2, 0, [2, 0, [12, 41, 0]]]], "(%s%s)"],
e = [0, [12, 40, [2, 0, [12, 41, 0]]], "(%s)"];
function string_of_extension_constructo(t){
if(0 === caml_obj_tag(t)){
var constructor = t[1][1], match = t.length - 1;
if(2 < match >>> 0)
var
b = other_fields(t, 2),
c = field(t, 1),
a = caml_call2(Stdlib_Printf[4].call(null, d), c, b);
else
switch(match){
case 2:
var
g = field(t, 1),
a = caml_call1(Stdlib_Printf[4].call(null, e), g);
break;
case 0:
var a = cst; break;
default: var a = cst;
}
var match$0 = [0, constructor, [0, a]];
}
else
var match$0 = [0, t[1], 0];
var fields_opt = match$0[2], constructor$0 = match$0[1];
if(! fields_opt) return constructor$0;
var f = fields_opt[1];
return Stdlib[28].call(null, constructor$0, f);
}
var
cst_characters = ", characters ",
locfmt =
[0,
[11,
'File "',
[2,
0,
[11,
'", line ',
[4,
0,
0,
0,
[11,
cst_characters,
[4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, ": ", [2, 0, 0]]]]]]]]]],
'File "%s", line %d, characters %d-%d: %s'];
function to_string_default(x){
if(x === Stdlib[9]) return "Out of memory";
if(x === Stdlib[10]) return "Stack overflow";
if(x[1] === Stdlib[4]){
var match = x[2], char = match[3], line = match[2], file = match[1];
return caml_call5
(Stdlib_Printf[4].call(null, locfmt),
file,
line,
char,
char + 5 | 0,
"Pattern matching failed");
}
if(x[1] === Stdlib[5]){
var
match$0 = x[2],
char$0 = match$0[3],
line$0 = match$0[2],
file$0 = match$0[1];
return caml_call5
(Stdlib_Printf[4].call(null, locfmt),
file$0,
line$0,
char$0,
char$0 + 6 | 0,
"Assertion failed");
}
if(x[1] !== Stdlib[15]) return string_of_extension_constructo(x);
var
match$1 = x[2],
char$1 = match$1[3],
line$1 = match$1[2],
file$1 = match$1[1];
return caml_call5
(Stdlib_Printf[4].call(null, locfmt),
file$1,
line$1,
char$1,
char$1 + 6 | 0,
"Undefined recursive module");
}
function to_string(e){
var match = use_printers(e);
if(! match) return to_string_default(e);
var s = match[1];
return s;
}
var
cst_Uncaught_exception = "Uncaught exception: ",
cst_Uncaught_exception_s = "Uncaught exception: %s\n",
f =
[0,
[11, cst_Uncaught_exception, [2, 0, [12, 10, 0]]],
cst_Uncaught_exception_s];
function print(fct, arg){
try{var b = caml_call1(fct, arg); return b;}
catch(x$0){
var x = caml_wrap_exception(x$0), a = to_string(x);
caml_call1(Stdlib_Printf[3].call(null, f), a);
Stdlib[63].call(null, Stdlib[40]);
throw caml_maybe_attach_backtrace(x, 0);
}
}
var
g =
[0,
[11, cst_Uncaught_exception, [2, 0, [12, 10, 0]]],
cst_Uncaught_exception_s];
function catch$(fct, arg){
try{var b = caml_call1(fct, arg); return b;}
catch(x$0){
var x = caml_wrap_exception(x$0);
Stdlib[63].call(null, Stdlib[39]);
var a = to_string(x);
caml_call1(Stdlib_Printf[3].call(null, g), a);
return Stdlib[99].call(null, 2);
}
}
function raw_backtrace_entries(bt){return bt;}
function convert_raw_backtrace(bt){
return [0, runtime.caml_convert_raw_backtrace(bt)];
}
var
h = [0, [12, 32, [4, 0, 0, 0, 0]], " %d"],
i =
[0,
[2,
0,
[12,
32,
[2,
0,
[11,
' in file "',
[2,
0,
[12,
34,
[2,
0,
[11,
", line",
[2,
0,
[11, cst_characters, [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, 0]]]]]]]]]]]]],
'%s %s in file "%s"%s, line%s, characters %d-%d'],
j = [0, [11, "s ", [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, 0]]]], "s %d-%d"],
k = [0, [2, 0, [11, " unknown location", 0]], "%s unknown location"];
function format_backtrace_slot(pos, slot){
function info(is_raise){
return is_raise
? 0 === pos ? "Raised at" : "Re-raised at"
: 0 === pos ? "Raised by primitive operation at" : "Called from";
}
if(0 !== slot[0]){
if(slot[1]) return 0;
var n = info(0);
return [0, caml_call1(Stdlib_Printf[4].call(null, k), n)];
}
if(slot[3] === slot[6])
var a = slot[3], lines = caml_call1(Stdlib_Printf[4].call(null, h), a);
else
var
l = slot[6],
m = slot[3],
lines = caml_call2(Stdlib_Printf[4].call(null, j), m, l);
var
b = slot[7],
c = slot[4],
d = slot[8] ? " (inlined)" : cst,
e = slot[2],
f = slot[9],
g = info(slot[1]);
return [0,
caml_call7
(Stdlib_Printf[4].call(null, i), g, f, e, d, lines, c, b)];
}
var
cst_s = "%s\n",
cst_Program_not_linked_with_g_ =
"(Program not linked with -g, cannot print stack backtrace)\n",
l = [0, [2, 0, [12, 10, 0]], cst_s],
m =
[0,
[11, cst_Program_not_linked_with_g_, 0],
cst_Program_not_linked_with_g_];
function print_raw_backtrace(outchan, raw_backtrace){
var backtrace = convert_raw_backtrace(raw_backtrace);
if(! backtrace) return Stdlib_Printf[1].call(null, outchan, m);
var a = backtrace[1], b = a.length - 2 | 0;
if(b >= 0){
var i = 0;
for(;;){
var match = format_backtrace_slot(i, caml_check_bound(a, i)[i + 1]);
if(match){
var str = match[1];
caml_call1(Stdlib_Printf[1].call(null, outchan, l), str);
}
var c = i + 1 | 0;
if(b === i) break;
i = c;
}
}
return 0;
}
function print_backtrace(outchan){
return print_raw_backtrace(outchan, caml_get_exception_raw_backtra(0));
}
var n = [0, [2, 0, [12, 10, 0]], cst_s];
function raw_backtrace_to_string(raw_backtrace){
var backtrace = convert_raw_backtrace(raw_backtrace);
if(! backtrace) return cst_Program_not_linked_with_g_;
var
a = backtrace[1],
b = Stdlib_Buffer[1].call(null, 1024),
c = a.length - 2 | 0;
if(c >= 0){
var i = 0;
for(;;){
var match = format_backtrace_slot(i, caml_check_bound(a, i)[i + 1]);
if(match){
var str = match[1];
caml_call1(Stdlib_Printf[5].call(null, b, n), str);
}
var d = i + 1 | 0;
if(c === i) break;
i = d;
}
}
return Stdlib_Buffer[2].call(null, b);
}
function backtrace_slot_is_raise(param){
return 0 === param[0] ? param[1] : param[1];
}
function backtrace_slot_is_inline(param){return 0 === param[0] ? param[8] : 0;
}
function backtrace_slot_location(param){
return 0 === param[0]
? [0,
[0, param[2], param[3], param[4], param[5], param[6], param[7]]]
: 0;
}
function backtrace_slot_defname(param){
if(0 === param[0] && param[9] !== cst) return [0, param[9]];
return 0;
}
function backtrace_slots(raw_backtrace){
var match = convert_raw_backtrace(raw_backtrace);
if(! match) return 0;
var backtrace = match[1], i$1 = backtrace.length - 2 | 0, i = i$1;
for(;;){
if(-1 === i)
var b = 0;
else{
var a = 0 === caml_check_bound(backtrace, i)[i + 1][0] ? 1 : 0;
if(! a){var i$0 = i - 1 | 0; i = i$0; continue;}
var b = a;
}
return b ? [0, backtrace] : 0;
}
}
function backtrace_slots_of_raw_entry(entry){return backtrace_slots([0, entry]);
}
function raw_backtrace_length(bt){return bt.length - 1;}
function get_backtrace(param){
return raw_backtrace_to_string(caml_get_exception_raw_backtra(0));
}
function register_printer(fn){
for(;;){
var
old_printers = Stdlib_Atomic[3].call(null, printers),
new_printers = [0, fn, old_printers],
success =
Stdlib_Atomic[6].call(null, printers, old_printers, new_printers),
a = 1 - success;
if(! a) return a;
}
}
function exn_slot(x){return 0 === caml_obj_tag(x) ? x[1] : x;}
function exn_slot_id(x){var slot = exn_slot(x); return slot[2];}
function exn_slot_name(x){var slot = exn_slot(x); return slot[1];}
var
errors =
runtime.caml_obj_dup
([0,
cst,
"(Cannot print locations:\n bytecode executable program file not found)",
"(Cannot print locations:\n bytecode executable program file appears to be corrupt)",
"(Cannot print locations:\n bytecode executable program file has wrong magic number)",
"(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"]),
cst_Fatal_error_exception = "Fatal error: exception ",
cst_Fatal_error_exception_s = "Fatal error: exception %s\n",
o =
[0,
[11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]],
cst_Fatal_error_exception_s];
function default_uncaught_exception_han(exn, raw_backtrace){
var b = to_string(exn);
caml_call1(Stdlib_Printf[3].call(null, o), b);
print_raw_backtrace(Stdlib[40], raw_backtrace);
var status = runtime.caml_ml_debug_info_status(0);
if(status < 0){
var
a = Stdlib[18].call(null, status),
c = caml_check_bound(errors, a)[a + 1];
Stdlib[53].call(null, c);
}
return Stdlib[63].call(null, Stdlib[40]);
}
var uncaught_exception_handler = [0, default_uncaught_exception_han];
function set_uncaught_exception_handler(fn){
uncaught_exception_handler[1] = fn;
return 0;
}
var
empty_backtrace = [0],
p =
[0,
[11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]],
cst_Fatal_error_exception_s],
q =
[0,
[11,
"Fatal error in uncaught exception handler: exception ",
[2, 0, [12, 10, 0]]],
"Fatal error in uncaught exception handler: exception %s\n"];
function handle_uncaught_exception(exn$1, debugger_in_use){
try{
try{
var
raw_backtrace =
debugger_in_use ? empty_backtrace : caml_get_exception_raw_backtra(0);
try{Stdlib[103].call(null, 0);}catch(exn){}
try{
var
e = caml_call2(uncaught_exception_handler[1], exn$1, raw_backtrace),
a = e;
}
catch(exn){
var
exn$0 = caml_wrap_exception(exn),
raw_backtrace$0 = caml_get_exception_raw_backtra(0),
c = to_string(exn$1);
caml_call1(Stdlib_Printf[3].call(null, p), c);
print_raw_backtrace(Stdlib[40], raw_backtrace);
var d = to_string(exn$0);
caml_call1(Stdlib_Printf[3].call(null, q), d);
print_raw_backtrace(Stdlib[40], raw_backtrace$0);
var a = Stdlib[63].call(null, Stdlib[40]);
}
var b = a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[9]) throw caml_maybe_attach_backtrace(exn, 0);
var
b =
Stdlib[53].call
(null, "Fatal error: out of memory in uncaught exception handler");
}
return b;
}
catch(exn){return 0;}
}
runtime.caml_register_named_value
("Printexc.handle_uncaught_exception", handle_uncaught_exception);
var
Stdlib_Printexc =
[0,
to_string,
to_string_default,
print,
catch$,
print_backtrace,
get_backtrace,
runtime.caml_record_backtrace,
runtime.caml_backtrace_status,
register_printer,
use_printers,
raw_backtrace_entries,
caml_get_exception_raw_backtra,
print_raw_backtrace,
raw_backtrace_to_string,
default_uncaught_exception_han,
set_uncaught_exception_handler,
backtrace_slots,
backtrace_slots_of_raw_entry,
[0,
backtrace_slot_is_raise,
backtrace_slot_is_inline,
backtrace_slot_location,
backtrace_slot_defname,
format_backtrace_slot],
raw_backtrace_length,
runtime.caml_raw_backtrace_slot,
runtime.caml_convert_raw_backtrace_slot,
runtime.caml_raw_backtrace_next_slot,
exn_slot_id,
exn_slot_name,
string_of_extension_constructo];
runtime.caml_register_global(43, Stdlib_Printexc, "Stdlib__Printexc");
return;
}
(globalThis));
//# 17276 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Fun:[F(2)*,F(3),F(3),F(2),F(2),N]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_restore_raw_backtrace = runtime.caml_restore_raw_backtrace,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Printexc = global_data.Stdlib__Printexc,
Stdlib = global_data.Stdlib;
function const$(c, param){return c;}
function compose(f, g, x){return caml_call1(f, caml_call1(g, x));}
function flip(f, x, y){return caml_call2(f, y, x);}
function negate(p, v){return 1 - caml_call1(p, v);}
var
Finally_raised =
[248, "Stdlib.Fun.Finally_raised", runtime.caml_fresh_oo_id(0)];
Stdlib_Printexc[9].call
(null,
function(param){
if(param[1] !== Finally_raised) return 0;
var exn = param[2], a = Stdlib_Printexc[1].call(null, exn);
return [0, Stdlib[28].call(null, "Fun.Finally_raised: ", a)];
});
var dummy = 0;
function protect(finally$, work){
function finally_no_exn(param){
try{caml_call1(finally$, 0); return;}
catch(e$0){
var
e = caml_wrap_exception(e$0),
bt = Stdlib_Printexc[12].call(null, 0),
exn = [0, Finally_raised, e];
caml_restore_raw_backtrace(exn, bt);
throw caml_maybe_attach_backtrace(exn, 0);
}
}
try{var result = caml_call1(work, 0);}
catch(work_exn$0){
var
work_exn = caml_wrap_exception(work_exn$0),
work_bt = Stdlib_Printexc[12].call(null, 0);
finally_no_exn(0);
caml_restore_raw_backtrace(work_exn, work_bt);
throw caml_maybe_attach_backtrace(work_exn, 0);
}
finally_no_exn(0);
return result;
}
runtime.caml_register_global
(4,
[0, const$, compose, flip, negate, protect, Finally_raised],
"Stdlib__Fun");
return;
}
(globalThis));
//# 17540 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__In_channel:[N,F(1),F(1),F(3),F(2),F(2),F(4),F(1),F(1),F(1),F(1),F(1),F(2),F(1),F(1),F(4),F(4),F(4),F(4),F(3),N,N,N,F(2),F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_ba_dim_1 = runtime.caml_ba_dim_1,
caml_create_bytes = runtime.caml_create_bytes,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_bytes_length = runtime.caml_ml_bytes_length,
caml_ml_input_bigarray = runtime.caml_ml_input_bigarray,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Bytes = global_data.Stdlib__Bytes,
Stdlib_Sys = global_data.Stdlib__Sys,
Stdlib_Fun = global_data.Stdlib__Fun,
stdin = Stdlib[38],
open_bin = Stdlib[80],
open_text = Stdlib[79],
open_gen = Stdlib[81];
function with_open(openfun, s, f){
var ic = caml_call1(openfun, s);
return Stdlib_Fun[5].call
(null,
function(param){return Stdlib[94].call(null, ic);},
function(param){return caml_call1(f, ic);});
}
function with_open_bin(s, f){return with_open(Stdlib[80], s, f);}
function with_open_text(s, f){return with_open(Stdlib[79], s, f);}
function with_open_gen(flags, perm, s, f){
var a = Stdlib[81];
return with_open(function(b){return a(flags, perm, b);}, s, f);
}
var
seek = Stdlib[96][4],
pos = Stdlib[96][5],
length = Stdlib[96][6],
close = Stdlib[93],
close_noerr = Stdlib[94];
function input_char(ic){
try{var c = Stdlib[82].call(null, ic);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[12]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
return [0, c];
}
function input_byte(ic){
try{var n = Stdlib[87].call(null, ic);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[12]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
return [0, n];
}
function input_line(ic){
try{var s = Stdlib[83].call(null, ic);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[12]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
return [0, s];
}
var input = Stdlib[84];
function input_bigarray(ic, buf, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ba_dim_1(buf) - len | 0) >= ofs)
return caml_ml_input_bigarray(ic, buf, ofs, len);
return Stdlib[1].call(null, "input_bigarray");
}
var a = [0, 0];
function really_input(ic, buf, pos, len){
try{Stdlib[85].call(null, ic, buf, pos, len); return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[12]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
var b = [0, 0];
function really_input_bigarray(ic, buf, ofs$1, len$1){
if(0 <= ofs$1 && 0 <= len$1 && (caml_ba_dim_1(buf) - len$1 | 0) >= ofs$1){
var ofs = ofs$1, len = len$1;
for(;;){
if(0 >= len) return b;
var r = caml_ml_input_bigarray(ic, buf, ofs, len);
if(0 === r) return 0;
var len$0 = len - r | 0, ofs$0 = ofs + r | 0;
ofs = ofs$0;
len = len$0;
}
}
return Stdlib[1].call(null, "really_input_bigarray");
}
function really_input_string(ic, len){
try{var s = Stdlib[86].call(null, ic, len);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[12]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
return [0, s];
}
function read_upto(ic, buf, ofs, len){
var ofs$0 = ofs, len$0 = len;
for(;;){
if(0 !== len$0){
var r = Stdlib[84].call(null, ic, buf, ofs$0, len$0);
if(0 !== r){
var len$1 = len$0 - r | 0, ofs$1 = ofs$0 + r | 0;
ofs$0 = ofs$1;
len$0 = len$1;
continue;
}
}
return ofs$0 - ofs | 0;
}
}
function ensure(buf, ofs, n){
var len = caml_ml_bytes_length(buf);
if((ofs + n | 0) <= len) return buf;
var new_len$0 = len;
for(;;){
if(new_len$0 >= (ofs + n | 0)) break;
new_len$0 = (2 * new_len$0 | 0) + 1 | 0;
}
var
new_len =
new_len$0 <= Stdlib_Sys[12]
? new_len$0
: ofs
< Stdlib_Sys[12]
? Stdlib_Sys[12]
: Stdlib
[2].call
(null,
"In_channel.input_all: channel content is larger than maximum string length"),
new_buf = caml_create_bytes(new_len);
Stdlib_Bytes[11].call(null, buf, 0, new_buf, 0, ofs);
return new_buf;
}
function input_all(ic){
try{
var
a = Stdlib[91].call(null, ic),
b = Stdlib[92].call(null, ic) - a | 0,
initial_size = b;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Stdlib[11]) throw caml_maybe_attach_backtrace(exn, 0);
var initial_size = -1;
}
var
chunk_size = 65536,
initial_size$0 = 0 <= initial_size ? initial_size : chunk_size,
initial_size$1 =
initial_size$0 <= Stdlib_Sys[12] ? initial_size$0 : Stdlib_Sys[12],
buf = caml_create_bytes(initial_size$1),
nread = read_upto(ic, buf, 0, initial_size$1);
if(nread < initial_size$1)
return Stdlib_Bytes[8].call(null, buf, 0, nread);
try{var c = Stdlib[82].call(null, ic);}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 === Stdlib[12]) return Stdlib_Bytes[44].call(null, buf);
throw caml_maybe_attach_backtrace(exn$0, 0);
}
var buf$2 = ensure(buf, nread, 65537);
runtime.caml_bytes_set(buf$2, nread, c);
var ofs$1 = nread + 1 | 0, buf$0 = buf$2, ofs = ofs$1;
for(;;){
var
buf$1 = ensure(buf$0, ofs, chunk_size),
rem = caml_ml_bytes_length(buf$1) - ofs | 0,
r = read_upto(ic, buf$1, ofs, rem);
if(r < rem) return Stdlib_Bytes[8].call(null, buf$1, 0, ofs + r | 0);
var ofs$0 = ofs + rem | 0;
buf$0 = buf$1;
ofs = ofs$0;
}
}
function input_lines(ic){
try{var line = Stdlib[83].call(null, ic);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[12]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
var block = [0, line, 24029], dst = block, offset = 1;
for(;;){
try{var line$0 = Stdlib[83].call(null, ic);}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 !== Stdlib[12]) throw caml_maybe_attach_backtrace(exn$0, 0);
dst[offset + 1] = 0;
return block;
}
var dst$0 = [0, line$0, 24029];
dst[offset + 1] = dst$0;
dst = dst$0;
offset = 1;
}
}
function fold_lines(f, accu$1, ic){
var accu = accu$1;
for(;;){
try{var line = Stdlib[83].call(null, ic);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[12]) return accu;
throw caml_maybe_attach_backtrace(exn, 0);
}
var accu$0 = caml_call2(f, accu, line);
accu = accu$0;
}
}
var
set_binary_mode = Stdlib[95],
Stdlib_In_channel =
[0,
stdin,
open_bin,
open_text,
open_gen,
with_open_bin,
with_open_text,
with_open_gen,
close,
close_noerr,
input_char,
input_byte,
input_line,
really_input_string,
input_all,
input_lines,
input,
input_bigarray,
really_input,
really_input_bigarray,
fold_lines,
seek,
pos,
length,
set_binary_mode,
runtime.caml_ml_is_binary_mode,
runtime.caml_sys_isatty];
runtime.caml_register_global(9, Stdlib_In_channel, "Stdlib__In_channel");
return;
}
(globalThis));
//# 17897 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Digest:[F(2)*,F(2)*,F(1),F(1),F(3),F(3),F(2),F(1),F(2),F(1),F(1),F(1),F(1),N,N,N,N]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_blake2_final = runtime.caml_blake2_final,
caml_blake2_string = runtime.caml_blake2_string,
caml_blake2_update = runtime.caml_blake2_update,
caml_bytes_unsafe_set = runtime.caml_bytes_unsafe_set,
caml_create_bytes = runtime.caml_create_bytes,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_md5_chan = runtime.caml_md5_chan,
caml_md5_string = runtime.caml_md5_string,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_string_get = runtime.caml_string_get,
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_In_channel = global_data.Stdlib__In_channel,
Stdlib_Bytes = global_data.Stdlib__Bytes,
Stdlib_Int = global_data.Stdlib__Int,
Stdlib_String = global_data.Stdlib__String,
Stdlib_Char = global_data.Stdlib__Char;
function hex_of_string(d){
function char_hex(n){
var a = 10 <= n ? (97 + n | 0) - 10 | 0 : 48 + n | 0;
return Stdlib_Char[1].call(null, a);
}
var
len = caml_ml_string_length(d),
result = caml_create_bytes(len * 2 | 0),
a = len - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
var x = caml_string_get(d, i);
caml_bytes_unsafe_set(result, i * 2 | 0, char_hex(x >>> 4 | 0));
caml_bytes_unsafe_set(result, (i * 2 | 0) + 1 | 0, char_hex(x & 15));
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return Stdlib_Bytes[44].call(null, result);
}
var cst_Digest_of_hex = "Digest.of_hex";
function string_of_hex(s){
function digit(c){
if(65 <= c){
if(97 <= c){
if(103 > c) return (c - 97 | 0) + 10 | 0;
}
else if(71 > c) return (c - 65 | 0) + 10 | 0;
}
else if(9 >= c - 48 >>> 0) return c - 48 | 0;
return Stdlib[1].call(null, cst_Digest_of_hex);
}
return Stdlib_String[2].call
(null,
caml_ml_string_length(s) / 2 | 0,
function(i){
var
i$0 = 2 * i | 0,
a = digit(caml_string_get(s, i$0 + 1 | 0)),
b = (digit(caml_string_get(s, i$0)) << 4) + a | 0;
return Stdlib_Char[1].call(null, b);
});
}
var
cst_Digest_substring = "Digest.substring",
cst_Digest_to_hex = "Digest.to_hex";
function BLAKE2(X){
var a = X[1] < 1, b = a || 64 < X[1];
if(b) Stdlib[1].call(null, "Digest.BLAKE2: wrong hash size");
var
hash_length = X[1],
compare = Stdlib_String[10],
equal = Stdlib_String[9],
cst = "";
function string(str){
return caml_blake2_string
(hash_length, cst, str, 0, caml_ml_string_length(str));
}
function bytes(b){return string(Stdlib_Bytes[44].call(null, b));}
function substring(str, ofs, len){
var a = ofs < 0;
if(a)
var b = a;
else
var c = len < 0, b = c || (caml_ml_string_length(str) - len | 0) < ofs;
if(b) Stdlib[1].call(null, cst_Digest_substring);
return caml_blake2_string(hash_length, cst, str, ofs, len);
}
function subbytes(b, ofs, len){
return substring(Stdlib_Bytes[44].call(null, b), ofs, len);
}
function channel(ic, toread){
var
buf = caml_create_bytes(4096),
ctx = runtime.caml_blake2_create(hash_length, cst),
buf_size = 4096;
if(0 <= toread){
var toread$0 = toread;
for(;;){
if(0 === toread$0) return caml_blake2_final(ctx, hash_length);
var
a = Stdlib_Int[10].call(null, buf_size, toread$0),
n = Stdlib_In_channel[16].call(null, ic, buf, 0, a);
if(0 === n) throw caml_maybe_attach_backtrace(Stdlib[12], 1);
caml_blake2_update(ctx, Stdlib_Bytes[44].call(null, buf), 0, n);
var toread$1 = toread$0 - n | 0;
toread$0 = toread$1;
}
}
else
for(;;){
var n$0 = Stdlib_In_channel[16].call(null, ic, buf, 0, buf_size);
if(0 === n$0) return caml_blake2_final(ctx, hash_length);
caml_blake2_update(ctx, Stdlib_Bytes[44].call(null, buf), 0, n$0);
}
}
function file(filename){
return Stdlib_In_channel[5].call
(null, filename, function(ic){return channel(ic, -1);});
}
function output(chan, digest){return Stdlib[66].call(null, chan, digest);}
function input(chan){return Stdlib[86].call(null, chan, hash_length);}
function to_hex(d){
if(caml_ml_string_length(d) !== hash_length)
Stdlib[1].call(null, cst_Digest_to_hex);
return hex_of_string(d);
}
function of_hex(s){
if(caml_ml_string_length(s) !== (hash_length * 2 | 0))
Stdlib[1].call(null, cst_Digest_of_hex);
return string_of_hex(s);
}
return [0,
hash_length,
compare,
equal,
string,
bytes,
substring,
subbytes,
channel,
file,
output,
input,
to_hex,
of_hex];
}
var
BLAKE128 = BLAKE2([0, 16]),
BLAKE256 = BLAKE2([0, 32]),
BLAKE512 = BLAKE2([0, 64]),
compare = Stdlib_String[10],
equal = Stdlib_String[9];
function string(str){
return caml_md5_string(str, 0, caml_ml_string_length(str));
}
function bytes(b){return string(Stdlib_Bytes[44].call(null, b));}
function substring(str, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ml_string_length(str) - len | 0) >= ofs)
return caml_md5_string(str, ofs, len);
return Stdlib[1].call(null, cst_Digest_substring);
}
function subbytes(b, ofs, len){
return substring(Stdlib_Bytes[44].call(null, b), ofs, len);
}
function file(filename){
return Stdlib_In_channel[5].call
(null, filename, function(ic){return caml_md5_chan(ic, -1);});
}
function output(chan, digest){return Stdlib[66].call(null, chan, digest);}
function input(chan){return Stdlib[86].call(null, chan, 16);}
function to_hex(d){
if(16 !== caml_ml_string_length(d))
Stdlib[1].call(null, cst_Digest_to_hex);
return hex_of_string(d);
}
function of_hex(s){
if(32 !== caml_ml_string_length(s))
Stdlib[1].call(null, "Digest.from_hex");
return string_of_hex(s);
}
runtime.caml_register_global
(17,
[0,
compare,
equal,
string,
bytes,
substring,
subbytes,
caml_md5_chan,
file,
output,
input,
to_hex,
of_hex,
of_hex,
BLAKE128,
BLAKE256,
BLAKE512,
[0,
16,
compare,
equal,
string,
bytes,
substring,
subbytes,
caml_md5_chan,
file,
output,
input,
to_hex,
of_hex]],
"Stdlib__Digest");
return;
}
(globalThis));
//# 18123 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Bigarray:[N,N,N,N,N,N,N,N,N,N,N,N,N,N,F(1)*,N,N,N,N,N,N,N,F(1),F(1),F(1),F(1),F(2),F(1),F(2),F(3),F(4)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_ba_change_layout = runtime.caml_ba_change_layout,
caml_ba_create = runtime.caml_ba_create,
caml_ba_dim_1 = runtime.caml_ba_dim_1,
caml_ba_dim_2 = runtime.caml_ba_dim_2,
caml_ba_kind = runtime.caml_ba_kind,
caml_ba_num_dims = runtime.caml_ba_num_dims,
caml_ba_reshape = runtime.caml_ba_reshape,
caml_ba_set_1 = runtime.caml_ba_set_1,
caml_ba_set_2 = runtime.caml_ba_set_2,
caml_ba_set_3 = runtime.caml_ba_set_3,
caml_ba_set_generic = runtime.caml_ba_set_generic,
caml_ba_slice = runtime.caml_ba_slice,
caml_check_bound = runtime.caml_check_bound,
caml_make_vect = runtime.caml_make_vect,
caml_mul = runtime.caml_mul;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
dummy = 0,
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Array = global_data.Stdlib__Array,
Stdlib_Sys = global_data.Stdlib__Sys;
function kind_size_in_bytes(param){
switch(param){
case 11:
return 16;
case 0:
case 6:
return 4;
case 8:
case 9:
return Stdlib_Sys[9] / 8 | 0;
case 1:
case 7:
case 10:
return 8;
case 2:
case 3:
case 12:
return 1;
default: return 2;
}
}
function cloop(arr, idx, f, col, max){
if(col === idx.length - 1){
caml_ba_set_generic(arr, idx, caml_call1(f, idx));
return;
}
var a = caml_check_bound(max, col)[col + 1] - 1 | 0;
if(a >= 0){
var j = 0;
for(;;){
caml_check_bound(idx, col)[col + 1] = j;
cloop(arr, idx, f, col + 1 | 0, max);
var b = j + 1 | 0;
if(a === j) break;
j = b;
}
}
}
function floop(arr, idx, f, col, max){
if(0 > col){caml_ba_set_generic(arr, idx, caml_call1(f, idx)); return;}
var a = caml_check_bound(max, col)[col + 1];
if(a >= 1){
var j = 1;
for(;;){
caml_check_bound(idx, col)[col + 1] = j;
floop(arr, idx, f, col - 1 | 0, max);
var b = j + 1 | 0;
if(a === j) break;
j = b;
}
}
}
function init(kind, layout, dims, f){
var arr = caml_ba_create(kind, layout, dims), dlen = dims.length - 1;
return layout
? (floop
(arr, caml_make_vect(dlen, 1), f, dlen - 1 | 0, dims),
arr)
: (cloop(arr, caml_make_vect(dlen, 0), f, 0, dims), arr);
}
function dims(a){
var n = caml_ba_num_dims(a), d = caml_make_vect(n, 0), b = n - 1 | 0;
if(b >= 0){
var i = 0;
for(;;){
var c = runtime.caml_ba_dim(a, i);
caml_check_bound(d, i)[i + 1] = c;
var e = i + 1 | 0;
if(b === i) break;
i = e;
}
}
return d;
}
function size_in_bytes(arr){
var a = dims(arr), b = Stdlib_Array[18].call(null, caml_mul, 1, a);
return caml_mul(kind_size_in_bytes(caml_ba_kind(arr)), b);
}
function create(kind, layout){return caml_ba_create(kind, layout, [0]);}
function get(arr){return runtime.caml_ba_get_generic(arr, [0]);}
function set(arr){
var a = [0];
return function(b){return caml_ba_set_generic(arr, a, b);};
}
function size_in_bytes$0(arr){
return kind_size_in_bytes(caml_ba_kind(arr));
}
function of_value(kind, layout, v){
var a = create(kind, layout);
set(a)(v);
return a;
}
function create$0(kind, layout, dim){
return caml_ba_create(kind, layout, [0, dim]);
}
function size_in_bytes$1(arr){
var a = caml_ba_dim_1(arr);
return caml_mul(kind_size_in_bytes(caml_ba_kind(arr)), a);
}
function slice(a, n){
return runtime.caml_ba_layout(a)
? caml_ba_slice(a, [0, n])
: caml_ba_slice(a, [0, n]);
}
function init$0(kind, layout, dim, f){
var arr = create$0(kind, layout, dim);
if(layout){
if(dim >= 1){
var i$0 = 1;
for(;;){
caml_ba_set_1(arr, i$0, caml_call1(f, i$0));
var c = i$0 + 1 | 0;
if(dim === i$0) break;
i$0 = c;
}
}
return arr;
}
var a = dim - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
caml_ba_set_1(arr, i, caml_call1(f, i));
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return arr;
}
function of_array(kind, layout, data){
var
ba = create$0(kind, layout, data.length - 1),
ofs = layout ? 1 : 0,
a = data.length - 2 | 0;
if(a >= 0){
var i = 0;
for(;;){
caml_ba_set_1(ba, i + ofs | 0, caml_check_bound(data, i)[i + 1]);
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return ba;
}
function create$1(kind, layout, dim1, dim2){
return caml_ba_create(kind, layout, [0, dim1, dim2]);
}
function size_in_bytes$2(arr){
var a = caml_ba_dim_2(arr), b = caml_ba_dim_1(arr);
return caml_mul(caml_mul(kind_size_in_bytes(caml_ba_kind(arr)), b), a);
}
function slice_left(a, n){return caml_ba_slice(a, [0, n]);}
function slice_right(a, n){return caml_ba_slice(a, [0, n]);}
function init$1(kind, layout, dim1, dim2, f){
var arr = create$1(kind, layout, dim1, dim2);
if(layout){
if(dim2 >= 1){
var j$0 = 1;
for(;;){
if(dim1 >= 1){
var i$0 = 1;
for(;;){
caml_ba_set_2(arr, i$0, j$0, caml_call2(f, i$0, j$0));
var g = i$0 + 1 | 0;
if(dim1 === i$0) break;
i$0 = g;
}
}
var e = j$0 + 1 | 0;
if(dim2 === j$0) break;
j$0 = e;
}
}
return arr;
}
var a = dim1 - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
var b = dim2 - 1 | 0;
if(b >= 0){
var j = 0;
for(;;){
caml_ba_set_2(arr, i, j, caml_call2(f, i, j));
var d = j + 1 | 0;
if(b === j) break;
j = d;
}
}
var c = i + 1 | 0;
if(a === i) break;
i = c;
}
}
return arr;
}
function of_array$0(kind, layout, data){
var
dim1 = data.length - 1,
dim2 = 0 === dim1 ? 0 : caml_check_bound(data, 0)[1].length - 1,
ba = create$1(kind, layout, dim1, dim2),
ofs = layout ? 1 : 0,
a = dim1 - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
var row = caml_check_bound(data, i)[i + 1];
if(row.length - 1 !== dim2)
Stdlib[1].call(null, "Bigarray.Array2.of_array: non-rectangular data");
var b = dim2 - 1 | 0;
if(b >= 0){
var j = 0;
for(;;){
caml_ba_set_2
(ba, i + ofs | 0, j + ofs | 0, caml_check_bound(row, j)[j + 1]);
var d = j + 1 | 0;
if(b === j) break;
j = d;
}
}
var c = i + 1 | 0;
if(a === i) break;
i = c;
}
}
return ba;
}
function create$2(kind, layout, dim1, dim2, dim3){
return caml_ba_create(kind, layout, [0, dim1, dim2, dim3]);
}
function size_in_bytes$3(arr){
var
a = runtime.caml_ba_dim_3(arr),
b = caml_ba_dim_2(arr),
c = caml_ba_dim_1(arr);
return caml_mul
(caml_mul(caml_mul(kind_size_in_bytes(caml_ba_kind(arr)), c), b),
a);
}
function slice_left_1(a, n, m){return caml_ba_slice(a, [0, n, m]);}
function slice_right_1(a, n, m){return caml_ba_slice(a, [0, n, m]);}
function slice_left_2(a, n){return caml_ba_slice(a, [0, n]);}
function slice_right_2(a, n){return caml_ba_slice(a, [0, n]);}
function init$2(kind, layout, dim1, dim2, dim3, f){
var arr = create$2(kind, layout, dim1, dim2, dim3);
if(layout){
if(dim3 >= 1){
var k$0 = 1;
for(;;){
if(dim2 >= 1){
var j$0 = 1;
for(;;){
if(dim1 >= 1){
var i$0 = 1;
for(;;){
caml_ba_set_3(arr, i$0, j$0, k$0, caml_call3(f, i$0, j$0, k$0));
var m = i$0 + 1 | 0;
if(dim1 === i$0) break;
i$0 = m;
}
}
var l = j$0 + 1 | 0;
if(dim2 === j$0) break;
j$0 = l;
}
}
var h = k$0 + 1 | 0;
if(dim3 === k$0) break;
k$0 = h;
}
}
return arr;
}
var a = dim1 - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
var b = dim2 - 1 | 0;
if(b >= 0){
var j = 0;
for(;;){
var c = dim3 - 1 | 0;
if(c >= 0){
var k = 0;
for(;;){
caml_ba_set_3(arr, i, j, k, caml_call3(f, i, j, k));
var g = k + 1 | 0;
if(c === k) break;
k = g;
}
}
var e = j + 1 | 0;
if(b === j) break;
j = e;
}
}
var d = i + 1 | 0;
if(a === i) break;
i = d;
}
}
return arr;
}
function of_array$1(kind, layout, data){
var
dim1 = data.length - 1,
dim2 = 0 === dim1 ? 0 : caml_check_bound(data, 0)[1].length - 1,
dim3 =
0 === dim2
? 0
: caml_check_bound(caml_check_bound(data, 0)[1], 0)[1].length - 1,
ba = create$2(kind, layout, dim1, dim2, dim3),
ofs = layout ? 1 : 0,
a = dim1 - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
var
row = caml_check_bound(data, i)[i + 1],
cst_Bigarray_Array3_of_array_n =
"Bigarray.Array3.of_array: non-cubic data";
if(row.length - 1 !== dim2)
Stdlib[1].call(null, cst_Bigarray_Array3_of_array_n);
var b = dim2 - 1 | 0;
if(b >= 0){
var j = 0;
for(;;){
var col = caml_check_bound(row, j)[j + 1];
if(col.length - 1 !== dim3)
Stdlib[1].call(null, cst_Bigarray_Array3_of_array_n);
var c = dim3 - 1 | 0;
if(c >= 0){
var k = 0;
for(;;){
caml_ba_set_3
(ba,
i + ofs | 0,
j + ofs | 0,
k + ofs | 0,
caml_check_bound(col, k)[k + 1]);
var f = k + 1 | 0;
if(c === k) break;
k = f;
}
}
var e = j + 1 | 0;
if(b === j) break;
j = e;
}
}
var d = i + 1 | 0;
if(a === i) break;
i = d;
}
}
return ba;
}
function array0_of_genarray(a){
return 0 === caml_ba_num_dims(a)
? a
: Stdlib[1].call(null, "Bigarray.array0_of_genarray");
}
function array1_of_genarray(a){
return 1 === caml_ba_num_dims(a)
? a
: Stdlib[1].call(null, "Bigarray.array1_of_genarray");
}
function array2_of_genarray(a){
return 2 === caml_ba_num_dims(a)
? a
: Stdlib[1].call(null, "Bigarray.array2_of_genarray");
}
function array3_of_genarray(a){
return 3 === caml_ba_num_dims(a)
? a
: Stdlib[1].call(null, "Bigarray.array3_of_genarray");
}
function reshape_0(a){return caml_ba_reshape(a, [0]);}
function reshape_1(a, dim1){return caml_ba_reshape(a, [0, dim1]);}
function reshape_2(a, dim1, dim2){
return caml_ba_reshape(a, [0, dim1, dim2]);
}
function reshape_3(a, dim1, dim2, dim3){
return caml_ba_reshape(a, [0, dim1, dim2, dim3]);
}
runtime.caml_register_global
(10,
[0,
13,
0,
1,
10,
11,
2,
3,
4,
5,
8,
6,
7,
9,
12,
kind_size_in_bytes,
0,
1,
[0, init, dims, size_in_bytes],
[0,
create,
of_value,
caml_ba_change_layout,
size_in_bytes$0,
get,
set,
of_value],
[0,
create$0,
init$0,
caml_ba_change_layout,
size_in_bytes$1,
slice,
of_array],
[0,
create$1,
init$1,
caml_ba_change_layout,
size_in_bytes$2,
slice_left,
slice_right,
of_array$0],
[0,
create$2,
init$2,
caml_ba_change_layout,
size_in_bytes$3,
slice_left_1,
slice_right_1,
slice_left_2,
slice_right_2,
of_array$1],
array0_of_genarray,
array1_of_genarray,
array2_of_genarray,
array3_of_genarray,
caml_ba_reshape,
reshape_0,
reshape_1,
reshape_2,
reshape_3],
"Stdlib__Bigarray");
return;
}
(globalThis));
//# 18622 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Random:[F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(1),F(1),F(1),F(1),N,F(1),F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_ba_blit = runtime.caml_ba_blit,
caml_ba_set_1 = runtime.caml_ba_set_1,
caml_bytes_set = runtime.caml_bytes_set,
caml_create_bytes = runtime.caml_create_bytes,
caml_greaterthan = runtime.caml_greaterthan,
caml_int64_add = runtime.caml_int64_add,
caml_int64_create_lo_mi_hi = runtime.caml_int64_create_lo_mi_hi,
caml_int64_of_int32 = runtime.caml_int64_of_int32,
caml_int64_shift_right_unsigne = runtime.caml_int64_shift_right_unsigned,
caml_int64_sub = runtime.caml_int64_sub,
caml_int64_to_int32 = runtime.caml_int64_to_int32,
caml_lessequal = runtime.caml_lessequal,
caml_lessthan = runtime.caml_lessthan,
caml_lxm_next = runtime.caml_lxm_next,
caml_mod = runtime.caml_mod,
caml_notequal = runtime.caml_notequal,
caml_sys_random_seed = runtime.caml_sys_random_seed;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Domain = global_data.Stdlib__Domain,
Stdlib_Sys = global_data.Stdlib__Sys,
Stdlib_Int32 = global_data.Stdlib__Int32,
Stdlib_Int64 = global_data.Stdlib__Int64,
Stdlib = global_data.Stdlib,
Stdlib_Bytes = global_data.Stdlib__Bytes,
Stdlib_Digest = global_data.Stdlib__Digest,
Stdlib_String = global_data.Stdlib__String,
Stdlib_Bigarray = global_data.Stdlib__Bigarray,
Stdlib_Nativeint = global_data.Stdlib__Nativeint,
a = caml_int64_create_lo_mi_hi(1, 0, 0),
b = caml_int64_create_lo_mi_hi(0, 0, 0),
c = caml_int64_create_lo_mi_hi(0, 0, 0),
d = caml_int64_create_lo_mi_hi(2, 0, 0),
e = caml_int64_create_lo_mi_hi(1, 0, 0);
function create(param){return caml_call3(Stdlib_Bigarray[20][1], 7, 0, 4);}
function set(s, i1, i2, i3, i4){
caml_ba_set_1(s, 0, runtime.caml_int64_or(i1, a));
caml_ba_set_1(s, 1, i2);
var i3$0 = caml_notequal(i3, b) ? i3 : e;
caml_ba_set_1(s, 2, i3$0);
var i4$0 = caml_notequal(i4, c) ? i4 : d;
return caml_ba_set_1(s, 3, i4$0);
}
function mk(i1, i2, i3, i4){
var s = create(0);
set(s, i1, i2, i3, i4);
return s;
}
var serialization_prefix = "lxm1:";
function to_binary_string(s){
var buf = caml_create_bytes(37);
Stdlib_Bytes[12].call(null, serialization_prefix, 0, buf, 0, 5);
var i = 0;
for(;;){
var a = runtime.caml_ba_get_1(s, i);
Stdlib_Bytes[86].call(null, buf, 5 + (i * 8 | 0) | 0, a);
var b = i + 1 | 0;
if(3 === i) return Stdlib_Bytes[44].call(null, buf);
i = b;
}
}
function of_binary_string(buf){
var
a = runtime.caml_ml_string_length(buf) !== 37,
b = a || 1 - Stdlib_String[11].call(null, serialization_prefix, buf);
if(b){
var
c =
Stdlib[28].call
(null,
"Random.State.of_binary_string: expected a format compatible with OCaml ",
Stdlib_Sys[46]);
Stdlib[2].call(null, c);
}
var
i1 = Stdlib_String[64].call(null, buf, 5),
i2 = Stdlib_String[64].call(null, buf, 13),
i3 = Stdlib_String[64].call(null, buf, 21),
i4 = Stdlib_String[64].call(null, buf, 29);
return mk(i1, i2, i3, i4);
}
function copy(src){
var dst = create(0);
caml_ba_blit(src, dst);
return dst;
}
function reinit(s, seed){
var
n = seed.length - 1,
b = caml_create_bytes((n * 8 | 0) + 1 | 0),
a = n - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
var f = caml_int64_of_int32(runtime.caml_check_bound(seed, i)[i + 1]);
Stdlib_Bytes[86].call(null, b, i * 8 | 0, f);
var g = i + 1 | 0;
if(a === i) break;
i = g;
}
}
caml_bytes_set(b, n * 8 | 0, 1);
var d1 = Stdlib_Digest[4].call(null, b);
caml_bytes_set(b, n * 8 | 0, 2);
var
d2 = Stdlib_Digest[4].call(null, b),
c = Stdlib_String[64].call(null, d2, 8),
d = Stdlib_String[64].call(null, d2, 0),
e = Stdlib_String[64].call(null, d1, 8);
return set(s, Stdlib_String[64].call(null, d1, 0), e, d, c);
}
function make(seed){var s = create(0); reinit(s, seed); return s;}
function make_self_init(param){return make(caml_sys_random_seed(0));}
function bits(s){
return caml_int64_to_int32(caml_lxm_next(s)) & 1073741823;
}
function int_aux(s, n, mask){
for(;;){
var r = caml_int64_to_int32(caml_lxm_next(s)) & mask, v = caml_mod(r, n);
if(((mask - n | 0) + 1 | 0) >= (r - v | 0)) return v;
}
}
var max_int31 = 1073741823;
function int(s, bound){
if(1073741823 >= bound && 0 < bound) return int_aux(s, bound, max_int31);
return Stdlib[1].call(null, "Random.int");
}
var max_int32 = 2147483647;
function full_int(s, bound){
if(0 >= bound) return Stdlib[1].call(null, "Random.full_int");
var
a =
bound <= 1073741823
? max_int31
: bound <= 2147483647 ? max_int32 : Stdlib[19];
return int_aux(s, bound, a);
}
function int_in_range_aux(s, min, max, mask, nbits){
var span = (max - min | 0) + 1 | 0;
if(span <= mask && 0 < span) return min + int_aux(s, span, mask) | 0;
for(;;){
var
drop = Stdlib_Sys[10] - nbits | 0,
r = caml_int64_to_int32(caml_lxm_next(s)) << drop >> drop;
if(r >= min && max >= r) return r;
}
}
function int_in_range(s, min, max){
if(max < min) Stdlib[1].call(null, "Random.int_in_range");
if(-1073741824 <= min && max <= 1073741823)
return int_in_range_aux(s, min, max, max_int31, 31);
if(-2147483648 <= min && max <= 2147483647)
return int_in_range_aux(s, min, max, max_int32, 32);
return int_in_range_aux(s, min, max, Stdlib[19], Stdlib_Sys[10]);
}
function bits32(s){return caml_int64_to_int32(caml_lxm_next(s));}
function int32aux(s, n){
for(;;){
var r = bits32(s) >>> 1 | 0, v = caml_mod(r, n);
if(! caml_greaterthan(r - v | 0, (Stdlib_Int32[9] - n | 0) + 1 | 0))
return v;
}
}
function int32(s, bound){
return caml_lessequal(bound, 0)
? Stdlib[1].call(null, "Random.int32")
: int32aux(s, bound);
}
function int32_in_range(s, min, max){
if(caml_greaterthan(min, max))
return Stdlib[1].call(null, "Random.int32_in_range");
var span = Stdlib_Int32[6].call(null, max - min | 0);
if(! caml_lessequal(span, Stdlib_Int32[1]))
return min + int32aux(s, span) | 0;
for(;;){
var r = caml_int64_to_int32(caml_lxm_next(s));
if(! caml_lessthan(r, min) && ! caml_greaterthan(r, max)) return r;
}
}
var
f = caml_int64_create_lo_mi_hi(1, 0, 0),
g = caml_int64_create_lo_mi_hi(0, 0, 0);
function int64aux(s, n){
for(;;){
var
r = caml_int64_shift_right_unsigne(caml_lxm_next(s), 1),
v = runtime.caml_int64_mod(r, n);
if
(!
caml_greaterthan
(caml_int64_sub(r, v),
caml_int64_add(caml_int64_sub(Stdlib_Int64[9], n), f)))
return v;
}
}
function int64(s, bound){
return caml_lessequal(bound, g)
? Stdlib[1].call(null, "Random.int64")
: int64aux(s, bound);
}
function int64_in_range(s, min, max){
if(caml_greaterthan(min, max))
return Stdlib[1].call(null, "Random.int64_in_range");
var span = Stdlib_Int64[6].call(null, caml_int64_sub(max, min));
if(! caml_lessequal(span, Stdlib_Int64[1]))
return caml_int64_add(min, int64aux(s, span));
for(;;){
var r = caml_lxm_next(s);
if(! caml_lessthan(r, min) && ! caml_greaterthan(r, max)) return r;
}
}
var
j = caml_int64_create_lo_mi_hi(14371852, 15349651, 22696),
k = caml_int64_create_lo_mi_hi(12230193, 11438743, 35013),
l = caml_int64_create_lo_mi_hi(1424933, 15549263, 2083),
m = caml_int64_create_lo_mi_hi(9492471, 4696708, 43520),
h = caml_int64_create_lo_mi_hi(0, 0, 0),
i = caml_int64_create_lo_mi_hi(0, 0, 0),
nativebits =
32 === Stdlib_Nativeint[9]
? function(s){return bits32(s);}
: function(s){return caml_int64_to_int32(caml_lxm_next(s));},
nativeint =
32 === Stdlib_Nativeint[9]
? function(s, bound){return int32(s, bound);}
: function
(s, bound){
return caml_int64_to_int32(int64(s, caml_int64_of_int32(bound)));
},
nativeint_in_range =
32 === Stdlib_Nativeint[9]
? function(s, min, max){return int32_in_range(s, min, max);}
: function
(s, min, max){
return caml_int64_to_int32
(int64_in_range
(s, caml_int64_of_int32(min), caml_int64_of_int32(max)));
};
function float(s, bound){
for(;;){
var b = caml_lxm_next(s), n = caml_int64_shift_right_unsigne(b, 11);
if(caml_notequal(n, h))
return runtime.caml_int64_to_float(n) * 1.1102230246251565e-16 * bound;
}
}
function bool(s){return caml_lessthan(caml_lxm_next(s), i);}
function split(s){
var
i1 = caml_lxm_next(s),
i2 = caml_lxm_next(s),
i3 = caml_lxm_next(s),
i4 = caml_lxm_next(s);
return mk(i1, i2, i3, i4);
}
function mk_default(param){return mk(m, l, k, j);}
var random_key = caml_call2(Stdlib_Domain[10][1], [0, split], mk_default);
function bits$0(param){
return bits(caml_call1(Stdlib_Domain[10][2], random_key));
}
function int$0(bound){
return int(caml_call1(Stdlib_Domain[10][2], random_key), bound);
}
function full_int$0(bound){
return full_int(caml_call1(Stdlib_Domain[10][2], random_key), bound);
}
function int_in_range$0(min, max){
return int_in_range
(caml_call1(Stdlib_Domain[10][2], random_key), min, max);
}
function int32$0(bound){
return int32(caml_call1(Stdlib_Domain[10][2], random_key), bound);
}
function int32_in_range$0(min, max){
return int32_in_range
(caml_call1(Stdlib_Domain[10][2], random_key), min, max);
}
function nativeint$0(bound){
return nativeint(caml_call1(Stdlib_Domain[10][2], random_key), bound);
}
function nativeint_in_range$0(min, max){
return nativeint_in_range
(caml_call1(Stdlib_Domain[10][2], random_key), min, max);
}
function int64$0(bound){
return int64(caml_call1(Stdlib_Domain[10][2], random_key), bound);
}
function int64_in_range$0(min, max){
return int64_in_range
(caml_call1(Stdlib_Domain[10][2], random_key), min, max);
}
function float$0(scale){
return float(caml_call1(Stdlib_Domain[10][2], random_key), scale);
}
function bool$0(param){
return bool(caml_call1(Stdlib_Domain[10][2], random_key));
}
function bits32$0(param){
return bits32(caml_call1(Stdlib_Domain[10][2], random_key));
}
function bits64(param){
var s = caml_call1(Stdlib_Domain[10][2], random_key);
return caml_lxm_next(s);
}
function nativebits$0(param){
return nativebits(caml_call1(Stdlib_Domain[10][2], random_key));
}
function full_init(seed){
return reinit(caml_call1(Stdlib_Domain[10][2], random_key), seed);
}
function init(seed){return full_init([0, seed]);}
function self_init(param){return full_init(caml_sys_random_seed(0));}
function split$0(param){
return split(caml_call1(Stdlib_Domain[10][2], random_key));
}
function get_state(param){
return copy(caml_call1(Stdlib_Domain[10][2], random_key));
}
function set_state(src){
var dst = caml_call1(Stdlib_Domain[10][2], random_key);
return caml_ba_blit(src, dst);
}
runtime.caml_register_global
(35,
[0,
init,
full_init,
self_init,
bits$0,
int$0,
full_int$0,
int_in_range$0,
int32$0,
int32_in_range$0,
nativeint$0,
nativeint_in_range$0,
int64$0,
int64_in_range$0,
float$0,
bool$0,
bits32$0,
bits64,
nativebits$0,
[0,
make,
make_self_init,
copy,
bits,
int,
full_int,
int_in_range,
int32,
int32_in_range,
nativeint,
nativeint_in_range,
int64,
int64_in_range,
float,
bool,
bits32,
caml_lxm_next,
nativebits,
split,
to_binary_string,
of_binary_string],
get_state,
set_state,
split$0],
"Stdlib__Random");
return;
}
(globalThis));
//# 19017 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Hashtbl:[F(2),F(1),F(1),F(1),F(3),F(2),F(2),F(2),F(2),F(2),F(3),F(2),F(2),F(3),F(1)*,F(1),F(1),F(2),F(1),F(1)*->F(1),F(1)*->F(1),F(1)*->F(1),F(2),F(2),F(1),F(1)*,F(1)*,F(1)*,F(2)*,F(3)*,F(4)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound,
caml_compare = runtime.caml_compare,
caml_hash = runtime.caml_hash,
caml_make_vect = runtime.caml_make_vect,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_sys_getenv = runtime.caml_sys_getenv,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Sys = global_data.Stdlib__Sys,
Stdlib = global_data.Stdlib,
Stdlib_Atomic = global_data.Stdlib__Atomic,
Stdlib_Domain = global_data.Stdlib__Domain,
Stdlib_Random = global_data.Stdlib__Random,
Stdlib_Seq = global_data.Stdlib__Seq,
Stdlib_Int = global_data.Stdlib__Int,
Stdlib_Array = global_data.Stdlib__Array;
global_data.Assert_failure;
var Stdlib_String = global_data.Stdlib__String;
function ongoing_traversal(h){
var a = h.length - 1 < 4 ? 1 : 0, b = a || (h[4] < 0 ? 1 : 0);
return b;
}
function flip_ongoing_traversal(h){h[4] = - h[4] | 0; return 0;}
try{var c = caml_sys_getenv("OCAMLRUNPARAM"), params = c;}
catch(exn$1){
var exn = caml_wrap_exception(exn$1);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
try{var b = caml_sys_getenv("CAMLRUNPARAM"), params = b;}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn$0, 0);
var params = "";
}
}
var
randomized_default = Stdlib_String[15].call(null, params, 82),
randomized = Stdlib_Atomic[1].call(null, randomized_default);
function randomize(param){
return Stdlib_Atomic[4].call(null, randomized, 1);
}
function is_randomized(param){
return Stdlib_Atomic[3].call(null, randomized);
}
var prng_key = caml_call2(Stdlib_Domain[10][1], 0, Stdlib_Random[19][2]);
function power_2_above(x$1, n){
var x = x$1;
for(;;){
if(n <= x) return x;
if(Stdlib_Sys[13] < (x * 2 | 0)) return x;
var x$0 = x * 2 | 0;
x = x$0;
}
}
function create(opt, initial_size){
var
random = opt ? opt[1] : Stdlib_Atomic[3].call(null, randomized),
s = power_2_above(16, initial_size);
if(random)
var
a = caml_call1(Stdlib_Domain[10][2], prng_key),
seed = caml_call1(Stdlib_Random[19][4], a);
else
var seed = 0;
return [0, 0, caml_make_vect(s, 0), seed, s];
}
function clear(h){
var a = 0 < h[1] ? 1 : 0;
return a
? (h
[1]
= 0,
Stdlib_Array[8].call(null, h[2], 0, h[2].length - 1, 0))
: a;
}
function reset(h){
var len = h[2].length - 1;
if(4 <= h.length - 1 && len !== Stdlib[18].call(null, h[4])){
h[1] = 0;
h[2] = caml_make_vect(Stdlib[18].call(null, h[4]), 0);
return 0;
}
return clear(h);
}
function copy_bucketlist(param){
if(! param) return 0;
var
key = param[1],
data = param[2],
next = param[3],
prec$1 = [0, key, data, next],
prec = prec$1,
param$0 = next;
for(;;){
if(! param$0) return prec$1;
var
key$0 = param$0[1],
data$0 = param$0[2],
next$0 = param$0[3],
prec$0 = [0, key$0, data$0, next$0];
prec[3] = prec$0;
prec = prec$0;
param$0 = next$0;
}
}
function copy(h){
var
a = h[4],
b = h[3],
c = Stdlib_Array[14].call(null, copy_bucketlist, h[2]);
return [0, h[1], c, b, a];
}
function length(h){return h[1];}
function insert_all_buckets(indexfun, inplace, odata, ndata){
var
nsize = ndata.length - 1,
ndata_tail = caml_make_vect(nsize, 0),
a = odata.length - 2 | 0;
if(a >= 0){
var i$0 = 0;
a:
for(;;){
var cell$1 = caml_check_bound(odata, i$0)[i$0 + 1], cell = cell$1;
for(;;){
if(! cell){var e = i$0 + 1 | 0; if(a === i$0) break a; i$0 = e; break;}
var
key = cell[1],
data = cell[2],
next = cell[3],
cell$0 = inplace ? cell : [0, key, data, 0],
nidx = caml_call1(indexfun, key),
match = caml_check_bound(ndata_tail, nidx)[nidx + 1];
if(match)
match[3] = cell$0;
else
caml_check_bound(ndata, nidx)[nidx + 1] = cell$0;
caml_check_bound(ndata_tail, nidx)[nidx + 1] = cell$0;
cell = next;
}
}
}
if(inplace){
var b = nsize - 1 | 0;
if(b >= 0){
var i = 0;
for(;;){
var match$0 = caml_check_bound(ndata_tail, i)[i + 1];
if(match$0) match$0[3] = 0;
var d = i + 1 | 0;
if(b === i) break;
i = d;
}
}
var c = 0;
}
else
var c = inplace;
return c;
}
function resize(indexfun, h){
var
odata = h[2],
osize = odata.length - 1,
nsize = osize * 2 | 0,
a = nsize < Stdlib_Sys[13] ? 1 : 0;
if(! a) return a;
var ndata = caml_make_vect(nsize, 0), inplace = 1 - ongoing_traversal(h);
h[2] = ndata;
return insert_all_buckets(caml_call1(indexfun, h), inplace, odata, ndata);
}
function iter(f, h){
var old_trav = ongoing_traversal(h);
if(1 - old_trav) flip_ongoing_traversal(h);
try{
var d = h[2], a = d.length - 2 | 0;
if(a >= 0){
var i = 0;
a:
for(;;){
var param = caml_check_bound(d, i)[i + 1];
for(;;){
if(! param){var e = i + 1 | 0; if(a === i) break a; i = e; break;}
var key = param[1], data = param[2], next = param[3];
caml_call2(f, key, data);
param = next;
}
}
}
var b = 1 - old_trav, c = b ? flip_ongoing_traversal(h) : b;
return c;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(old_trav) throw caml_maybe_attach_backtrace(exn, 0);
flip_ongoing_traversal(h);
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function filter_map_inplace(f, h){
var d = h[2], old_trav = ongoing_traversal(h);
if(1 - old_trav) flip_ongoing_traversal(h);
try{
var a = d.length - 2 | 0;
if(a >= 0){
var i = 0;
a:
for(;;){
var slot$0 = caml_check_bound(h[2], i)[i + 1], prec = 0, slot = slot$0;
for(;;){
if(! slot){
if(prec) prec[3] = 0; else caml_check_bound(h[2], i)[i + 1] = 0;
var e = i + 1 | 0;
if(a === i) break a;
i = e;
break;
}
var
key = slot[1],
data = slot[2],
next = slot[3],
match = caml_call2(f, key, data);
if(match){
var data$0 = match[1];
if(prec)
prec[3] = slot;
else
caml_check_bound(h[2], i)[i + 1] = slot;
slot[2] = data$0;
prec = slot;
slot = next;
}
else{h[1] = h[1] - 1 | 0; slot = next;}
}
}
}
var b = 1 - old_trav, c = b ? flip_ongoing_traversal(h) : b;
return c;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(old_trav) throw caml_maybe_attach_backtrace(exn, 0);
flip_ongoing_traversal(h);
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function fold(f, h, init){
var old_trav = ongoing_traversal(h);
if(1 - old_trav) flip_ongoing_traversal(h);
try{
var d = h[2], a = d.length - 2 | 0;
if(a < 0)
var accu$2 = init;
else{
var accu$1 = init, i = 0;
a:
for(;;){
var b$0 = caml_check_bound(d, i)[i + 1], b = b$0, accu = accu$1;
for(;;){
if(! b){
var c = i + 1 | 0;
if(a !== i){accu$1 = accu; i = c; break;}
var accu$2 = accu;
break a;
}
var
key = b[1],
data = b[2],
next = b[3],
accu$0 = caml_call3(f, key, data, accu);
b = next;
accu = accu$0;
}
}
}
if(1 - old_trav) flip_ongoing_traversal(h);
return accu$2;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(old_trav) throw caml_maybe_attach_backtrace(exn, 0);
flip_ongoing_traversal(h);
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function bucket_length(accu$1, param$0){
var accu = accu$1, param = param$0;
for(;;){
if(! param) return accu;
var next = param[3], accu$0 = accu + 1 | 0;
accu = accu$0;
param = next;
}
}
function stats(h){
var
mbl =
Stdlib_Array[18].call
(null,
function(m, b){
var a = bucket_length(0, b);
return Stdlib_Int[11].call(null, m, a);
},
0,
h[2]),
histo = caml_make_vect(mbl + 1 | 0, 0);
Stdlib_Array[12].call
(null,
function(b){
var l = bucket_length(0, b);
histo[l + 1] = caml_check_bound(histo, l)[l + 1] + 1 | 0;
return 0;
},
h[2]);
return [0, h[1], h[2].length - 1, mbl, histo];
}
function to_seq(tbl){
var tbl_data = tbl[2];
function aux(i$1, buck$1, param){
var i = i$1, buck = buck$1;
for(;;){
if(buck) break;
if(i === tbl_data.length - 1) return 0;
var buck$0 = caml_check_bound(tbl_data, i)[i + 1], i$0 = i + 1 | 0;
i = i$0;
buck = buck$0;
}
var key = buck[1], data = buck[2], next = buck[3];
return [0, [0, key, data], function(a){return aux(i, next, a);}];
}
return function(a){return aux(0, 0, a);};
}
function to_seq_keys(m){
var a = to_seq(m);
function b(a){return a[1];}
var c = Stdlib_Seq[29];
return function(d){return c(b, a, d);};
}
function to_seq_values(m){
var a = to_seq(m);
function b(a){return a[2];}
var c = Stdlib_Seq[29];
return function(d){return c(b, a, d);};
}
function MakeSeeded(H){
function key_index(h, key){
var a = h[2].length - 2 | 0;
return caml_call2(H[2], h[3], key) & a;
}
function add(h, key, data){
var
i = key_index(h, key),
bucket = [0, key, data, caml_check_bound(h[2], i)[i + 1]];
caml_check_bound(h[2], i)[i + 1] = bucket;
h[1] = h[1] + 1 | 0;
var a = h[2].length - 1 << 1 < h[1] ? 1 : 0;
return a ? resize(key_index, h) : a;
}
function remove(h, key){
var
i = key_index(h, key),
prec$1 = caml_check_bound(h[2], i)[i + 1],
prec$0 = 0,
prec = prec$1;
for(;;){
if(! prec) return 0;
var k = prec[1], next = prec[3];
if(caml_call2(H[1], k, key)){
h[1] = h[1] - 1 | 0;
return prec$0
? (prec$0[3] = next, 0)
: (caml_check_bound(h[2], i)[i + 1] = next, 0);
}
prec$0 = prec;
prec = next;
}
}
function find(h, key){
var a = key_index(h, key), match = caml_check_bound(h[2], a)[a + 1];
if(! match) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var k1 = match[1], d1 = match[2], next1 = match[3];
if(caml_call2(H[1], key, k1)) return d1;
if(! next1) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var k2 = next1[1], d2 = next1[2], next2 = next1[3];
if(caml_call2(H[1], key, k2)) return d2;
if(! next2) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var k3 = next2[1], d3 = next2[2], next3 = next2[3];
if(caml_call2(H[1], key, k3)) return d3;
var param = next3;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var k = param[1], data = param[2], next = param[3];
if(caml_call2(H[1], key, k)) return data;
param = next;
}
}
function find_opt(h, key){
var a = key_index(h, key), match = caml_check_bound(h[2], a)[a + 1];
if(! match) return 0;
var k1 = match[1], d1 = match[2], next1 = match[3];
if(caml_call2(H[1], key, k1)) return [0, d1];
if(! next1) return 0;
var k2 = next1[1], d2 = next1[2], next2 = next1[3];
if(caml_call2(H[1], key, k2)) return [0, d2];
if(! next2) return 0;
var k3 = next2[1], d3 = next2[2], next3 = next2[3];
if(caml_call2(H[1], key, k3)) return [0, d3];
var param = next3;
for(;;){
if(! param) return 0;
var k = param[1], data = param[2], next = param[3];
if(caml_call2(H[1], key, k)) return [0, data];
param = next;
}
}
function find_all(h, key){
var a = key_index(h, key), param = caml_check_bound(h[2], a)[a + 1];
for(;;){
if(! param) return 0;
var k = param[1], d = param[2], next = param[3];
if(caml_call2(H[1], k, key)) break;
param = next;
}
var block = [0, d, 24029], dst = block, offset = 1, param$0 = next;
for(;;){
if(! param$0){dst[offset + 1] = 0; return block;}
var k$0 = param$0[1], d$0 = param$0[2], next$0 = param$0[3];
if(caml_call2(H[1], k$0, key)){
var dst$0 = [0, d$0, 24029];
dst[offset + 1] = dst$0;
dst = dst$0;
offset = 1;
param$0 = next$0;
}
else
param$0 = next$0;
}
}
function replace(h, key, data){
var
i = key_index(h, key),
l = caml_check_bound(h[2], i)[i + 1],
param = l;
for(;;){
if(param){
var k = param[1], next = param[3];
if(! caml_call2(H[1], k, key)){param = next; continue;}
param[1] = key;
param[2] = data;
var a = 0;
}
else
var a = 1;
if(a){
caml_check_bound(h[2], i)[i + 1] = [0, key, data, l];
h[1] = h[1] + 1 | 0;
var b = h[2].length - 1 << 1 < h[1] ? 1 : 0;
if(b) return resize(key_index, h);
var c = b;
}
else
var c = a;
return c;
}
}
function mem(h, key){
var b = key_index(h, key), param = caml_check_bound(h[2], b)[b + 1];
for(;;){
if(! param) return 0;
var k = param[1], next = param[3], a = caml_call2(H[1], k, key);
if(a) return a;
param = next;
}
}
function add_seq(tbl, i){
return Stdlib_Seq[4].call
(null,
function(param){
var v = param[2], k = param[1];
return add(tbl, k, v);
},
i);
}
function replace_seq(tbl, i){
return Stdlib_Seq[4].call
(null,
function(param){
var v = param[2], k = param[1];
return replace(tbl, k, v);
},
i);
}
function of_seq(i){
var tbl = create(0, 16);
replace_seq(tbl, i);
return tbl;
}
return [0,
create,
clear,
reset,
copy,
add,
remove,
find,
find_opt,
find_all,
replace,
mem,
iter,
filter_map_inplace,
fold,
length,
stats,
to_seq,
to_seq_keys,
to_seq_values,
add_seq,
replace_seq,
of_seq];
}
var a = [0, 0];
function Make(H){
var equal = H[1];
function seeded_hash(seed, x){return caml_call1(H[2], x);}
var
include = MakeSeeded([0, equal, seeded_hash]),
b = include[1],
clear = include[2],
reset = include[3],
copy = include[4],
add = include[5],
remove = include[6],
find = include[7],
find_opt = include[8],
find_all = include[9],
replace = include[10],
mem = include[11],
iter = include[12],
filter_map_inplace = include[13],
fold = include[14],
length = include[15],
stats = include[16],
to_seq = include[17],
to_seq_keys = include[18],
to_seq_values = include[19],
add_seq = include[20],
replace_seq = include[21];
function create(sz){return caml_call2(b, a, sz);}
function of_seq(i){
var tbl = caml_call2(b, a, 16);
caml_call2(replace_seq, tbl, i);
return tbl;
}
return [0,
create,
clear,
reset,
copy,
add,
remove,
find,
find_opt,
find_all,
replace,
mem,
iter,
filter_map_inplace,
fold,
length,
stats,
to_seq,
to_seq_keys,
to_seq_values,
add_seq,
replace_seq,
of_seq];
}
function hash(x){return caml_hash(10, 100, 0, x);}
function hash_param(n1, n2, x){return caml_hash(n1, n2, 0, x);}
function seeded_hash(seed, x){return caml_hash(10, 100, seed, x);}
function key_index(h, key){
return 4 <= h.length - 1
? caml_hash(10, 100, h[3], key) & (h[2].length - 2 | 0)
: Stdlib[1].call(null, "Hashtbl: unsupported hash table format");
}
function add(h, key, data){
var
i = key_index(h, key),
bucket = [0, key, data, caml_check_bound(h[2], i)[i + 1]];
caml_check_bound(h[2], i)[i + 1] = bucket;
h[1] = h[1] + 1 | 0;
var a = h[2].length - 1 << 1 < h[1] ? 1 : 0;
return a ? resize(key_index, h) : a;
}
function remove(h, key){
var
i = key_index(h, key),
prec$1 = caml_check_bound(h[2], i)[i + 1],
prec$0 = 0,
prec = prec$1;
for(;;){
if(! prec) return 0;
var k = prec[1], next = prec[3];
if(0 === caml_compare(k, key)){
h[1] = h[1] - 1 | 0;
return prec$0
? (prec$0[3] = next, 0)
: (caml_check_bound(h[2], i)[i + 1] = next, 0);
}
prec$0 = prec;
prec = next;
}
}
function find(h, key){
var a = key_index(h, key), match = caml_check_bound(h[2], a)[a + 1];
if(! match) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var k1 = match[1], d1 = match[2], next1 = match[3];
if(0 === caml_compare(key, k1)) return d1;
if(! next1) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var k2 = next1[1], d2 = next1[2], next2 = next1[3];
if(0 === caml_compare(key, k2)) return d2;
if(! next2) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var k3 = next2[1], d3 = next2[2], next3 = next2[3];
if(0 === caml_compare(key, k3)) return d3;
var param = next3;
for(;;){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var k = param[1], data = param[2], next = param[3];
if(0 === caml_compare(key, k)) return data;
param = next;
}
}
function find_opt(h, key){
var a = key_index(h, key), match = caml_check_bound(h[2], a)[a + 1];
if(! match) return 0;
var k1 = match[1], d1 = match[2], next1 = match[3];
if(0 === caml_compare(key, k1)) return [0, d1];
if(! next1) return 0;
var k2 = next1[1], d2 = next1[2], next2 = next1[3];
if(0 === caml_compare(key, k2)) return [0, d2];
if(! next2) return 0;
var k3 = next2[1], d3 = next2[2], next3 = next2[3];
if(0 === caml_compare(key, k3)) return [0, d3];
var param = next3;
for(;;){
if(! param) return 0;
var k = param[1], data = param[2], next = param[3];
if(0 === caml_compare(key, k)) return [0, data];
param = next;
}
}
function find_all(h, key){
var a = key_index(h, key), param = caml_check_bound(h[2], a)[a + 1];
for(;;){
if(! param) return 0;
var k = param[1], data = param[2], next = param[3];
if(0 === caml_compare(k, key)) break;
param = next;
}
var block = [0, data, 24029], dst = block, offset = 1, param$0 = next;
for(;;){
if(! param$0){dst[offset + 1] = 0; return block;}
var k$0 = param$0[1], data$0 = param$0[2], next$0 = param$0[3];
if(0 === caml_compare(k$0, key)){
var dst$0 = [0, data$0, 24029];
dst[offset + 1] = dst$0;
dst = dst$0;
offset = 1;
param$0 = next$0;
}
else
param$0 = next$0;
}
}
function replace(h, key, data){
var
i = key_index(h, key),
l = caml_check_bound(h[2], i)[i + 1],
param = l;
for(;;){
if(param){
var k = param[1], next = param[3];
if(0 !== caml_compare(k, key)){param = next; continue;}
param[1] = key;
param[2] = data;
var a = 0;
}
else
var a = 1;
if(a){
caml_check_bound(h[2], i)[i + 1] = [0, key, data, l];
h[1] = h[1] + 1 | 0;
var b = h[2].length - 1 << 1 < h[1] ? 1 : 0;
if(b) return resize(key_index, h);
var c = b;
}
else
var c = a;
return c;
}
}
function mem(h, key){
var b = key_index(h, key), param = caml_check_bound(h[2], b)[b + 1];
for(;;){
if(! param) return 0;
var
k = param[1],
next = param[3],
a = 0 === caml_compare(k, key) ? 1 : 0;
if(a) return a;
param = next;
}
}
function add_seq(tbl, i){
return Stdlib_Seq[4].call
(null,
function(param){
var v = param[2], k = param[1];
return add(tbl, k, v);
},
i);
}
function replace_seq(tbl, i){
return Stdlib_Seq[4].call
(null,
function(param){
var v = param[2], k = param[1];
return replace(tbl, k, v);
},
i);
}
function of_seq(i){
var tbl = create(0, 16);
replace_seq(tbl, i);
return tbl;
}
function rebuild(opt, h){
var
random = opt ? opt[1] : Stdlib_Atomic[3].call(null, randomized),
s = power_2_above(16, h[2].length - 1);
if(random)
var
a = caml_call1(Stdlib_Domain[10][2], prng_key),
seed = caml_call1(Stdlib_Random[19][4], a);
else
var seed = 4 <= h.length - 1 ? h[3] : 0;
var
b = 4 <= h.length - 1 ? h[4] : s,
h$0 = [0, h[1], caml_make_vect(s, 0), seed, b];
insert_all_buckets
(function(a){return key_index(h$0, a);}, 0, h[2], h$0[2]);
return h$0;
}
runtime.caml_register_global
(16,
[0,
create,
clear,
reset,
copy,
add,
find,
find_opt,
find_all,
mem,
remove,
replace,
iter,
filter_map_inplace,
fold,
length,
randomize,
is_randomized,
rebuild,
stats,
to_seq,
to_seq_keys,
to_seq_values,
add_seq,
replace_seq,
of_seq,
Make,
MakeSeeded,
hash,
seeded_hash,
hash_param,
caml_hash],
"Stdlib__Hashtbl");
return;
}
(globalThis));
//# 20272 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Format:[F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(3),F(2),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2)*,F(2),F(1),F(2),F(1),F(3),F(2),F(3),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),N,F(2),F(1),F(2)*,F(1),F(2),F(1),F(2)*,F(1),F(1)*,F(3),F(2),F(3),F(2),F(2),F(1),F(2)*,F(1),F(2),F(1),F(2)*,F(1),F(2)*,F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(3),F(2),F(2),F(1),F(2)*,F(1),N,F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2)*,F(1),F(2)*,F(1),F(2),F(1),F(3),F(2),F(2)*,F(1),F(2),F(1),F(2)*,F(1),F(2),F(1),F(2)*,F(1),F(1),F(1),N,F(1),N,F(1),F(1),N,F(1),N,F(1),F(1),F(2),F(2),F(1),F(1)*,F(1),F(1),F(1),F(2),F(1),F(5),F(4),F(4),F(4),F(2),F(4),F(4),F(4),F(1)*->F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(3),F(2),F(3),F(2),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
dummy = 0,
global_data = runtime.caml_get_global_data(),
Stdlib_Queue = global_data.Stdlib__Queue,
CamlinternalFormat = global_data.CamlinternalFormat,
Stdlib = global_data.Stdlib,
Stdlib_String = global_data.Stdlib__String,
Stdlib_Domain = global_data.Stdlib__Domain,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_Seq = global_data.Stdlib__Seq,
Stdlib_Array = global_data.Stdlib__Array,
Stdlib_List = global_data.Stdlib__List,
Stdlib_Stack = global_data.Stdlib__Stack,
Stdlib_Int = global_data.Stdlib__Int,
Stdlib_Bytes = global_data.Stdlib__Bytes;
function id(x){return x;}
var
String_tag =
[248, "Stdlib.Format.String_tag", runtime.caml_fresh_oo_id(0)];
function pp_enqueue(state, token){
state[13] = state[13] + token[3] | 0;
return Stdlib_Queue[3].call(null, token, state[28]);
}
function pp_output_string(state, s){
return caml_call3(state[17], s, 0, caml_ml_string_length(s));
}
function pp_output_newline(state){return caml_call1(state[19], 0);}
function format_pp_text(state, size, text){
state[9] = state[9] - size | 0;
pp_output_string(state, text);
state[11] = 0;
}
var cst$0 = "";
function format_string(state, s){
var a = s !== cst$0 ? 1 : 0;
return a ? format_pp_text(state, caml_ml_string_length(s), s) : a;
}
function break_new_line(state, param, width){
var after = param[3], offset = param[2], before = param[1];
format_string(state, before);
pp_output_newline(state);
state[11] = 1;
var
indent = (state[6] - width | 0) + offset | 0,
real_indent = Stdlib_Int[10].call(null, state[8], indent);
state[10] = real_indent;
state[9] = state[6] - state[10] | 0;
var n = state[10];
caml_call1(state[21], n);
return format_string(state, after);
}
function break_same_line(state, param){
var after = param[3], width = param[2], before = param[1];
format_string(state, before);
state[9] = state[9] - width | 0;
caml_call1(state[20], width);
return format_string(state, after);
}
var a = [0, cst$0, 0, cst$0];
function format_pp_token(state, size$0, param){
if(typeof param === "number")
switch(param){
case 0:
var match$3 = Stdlib_Stack[8].call(null, state[3]);
if(! match$3) return;
var
tabs = match$3[1][1],
add_tab =
function(n, ls){
if(! ls) return [0, n, 0];
var l = ls[2], x = ls[1];
return runtime.caml_lessthan(n, x)
? [0, n, ls]
: [0, x, add_tab(n, l)];
};
tabs[1] = add_tab(state[6] - state[9] | 0, tabs[1]);
return;
case 1:
Stdlib_Stack[5].call(null, state[2]); return;
case 2:
Stdlib_Stack[5].call(null, state[3]); return;
case 3:
var match$4 = Stdlib_Stack[8].call(null, state[2]);
if(! match$4) return pp_output_newline(state);
var width$0 = match$4[1][2];
return break_new_line(state, a, width$0);
case 4:
var b = state[10] !== (state[6] - state[9] | 0) ? 1 : 0;
if(! b) return b;
var match$1 = Stdlib_Queue[6].call(null, state[28]);
if(! match$1) return;
var match$2 = match$1[1], size = match$2[1], length = match$2[3];
state[12] = state[12] - length | 0;
state[9] = state[9] + size | 0;
return;
default:
var match$5 = Stdlib_Stack[5].call(null, state[5]);
if(! match$5) return;
var tag_name = match$5[1], marker = caml_call1(state[25], tag_name);
return pp_output_string(state, marker);
}
switch(param[0]){
case 0:
var s = param[1]; return format_pp_text(state, size$0, s);
case 1:
var
breaks = param[2],
fits = param[1],
off = breaks[2],
before = breaks[1],
match$6 = Stdlib_Stack[8].call(null, state[2]);
if(! match$6) return;
var
match$7 = match$6[1],
width$1 = match$7[2],
box_type$0 = match$7[1];
switch(box_type$0){
case 3:
return state[9] < (size$0 + caml_ml_string_length(before) | 0)
? break_new_line(state, breaks, width$1)
: break_same_line(state, fits);
case 4:
return state[11]
? break_same_line(state, fits)
: state
[9]
< (size$0 + caml_ml_string_length(before) | 0)
? break_new_line(state, breaks, width$1)
: ((state
[6]
- width$1
| 0)
+ off
| 0)
< state[10]
? break_new_line(state, breaks, width$1)
: break_same_line(state, fits);
case 0:
case 5:
return break_same_line(state, fits);
default: return break_new_line(state, breaks, width$1);
}
case 2:
var
off$0 = param[2],
n = param[1],
insertion_point = state[6] - state[9] | 0,
match$8 = Stdlib_Stack[8].call(null, state[3]);
if(! match$8) return;
var tabs$0 = match$8[1][1], match$9 = tabs$0[1];
if(match$9){
var first = match$9[1], param$0 = tabs$0[1];
for(;;){
if(! param$0){var tab = first; break;}
var tail = param$0[2], head = param$0[1];
if(insertion_point <= head){var tab = head; break;}
param$0 = tail;
}
}
else
var tab = insertion_point;
var offset = tab - insertion_point | 0;
return 0 <= offset
? break_same_line(state, [0, cst$0, offset + n | 0, cst$0])
: break_new_line
(state, [0, cst$0, tab + off$0 | 0, cst$0], state[6]);
case 3:
var
ty = param[2],
off$1 = param[1],
insertion_point$0 = state[6] - state[9] | 0;
if(state[8] < insertion_point$0){
var match = Stdlib_Stack[8].call(null, state[2]);
if(match){
var match$0 = match[1], width = match$0[2], box_type = match$0[1];
if(state[9] < width && 3 >= box_type - 1 >>> 0)
break_new_line(state, a, width);
}
else
pp_output_newline(state);
}
var
width$2 = state[9] - off$1 | 0,
box_type$1 = 1 === ty ? 1 : state[9] < size$0 ? ty : 5;
return Stdlib_Stack[3].call(null, [0, box_type$1, width$2], state[2]);
case 4:
var tbox = param[1]; return Stdlib_Stack[3].call(null, tbox, state[3]);
default:
var
tag_name$0 = param[1],
marker$0 = caml_call1(state[24], tag_name$0);
pp_output_string(state, marker$0);
return Stdlib_Stack[3].call(null, tag_name$0, state[5]);
}
}
var pp_infinity = 1000000010;
function advance_left(state){
for(;;){
var match = Stdlib_Queue[9].call(null, state[28]);
if(! match) return 0;
var
match$0 = match[1],
size = match$0[1],
length = match$0[3],
token = match$0[2],
pending_count = state[13] - state[12] | 0,
b = 0 <= size ? 1 : 0,
a = b || (state[9] <= pending_count ? 1 : 0);
if(! a) return a;
Stdlib_Queue[5].call(null, state[28]);
var size$0 = 0 <= size ? size : pp_infinity;
format_pp_token(state, size$0, token);
state[12] = length + state[12] | 0;
}
}
function enqueue_advance(state, tok){
pp_enqueue(state, tok);
return advance_left(state);
}
function enqueue_string_as(state, size, s){
return enqueue_advance(state, [0, size, [0, s], size]);
}
var unknown = -1, b = [0, cst$0];
function initialize_scan_stack(stack){
Stdlib_Stack[9].call(null, stack);
return Stdlib_Stack[3].call(null, [0, -1, [0, unknown, b, 0]], stack);
}
function set_size(state, ty){
var match = Stdlib_Stack[8].call(null, state[1]);
if(! match) return;
var
match$0 = match[1],
queue_elem = match$0[2],
left_total = match$0[1],
size = queue_elem[1];
if(left_total < state[12]) return initialize_scan_stack(state[1]);
var match$1 = queue_elem[2];
if(typeof match$1 !== "number")
switch(match$1[0]){
case 3:
if(1 - ty){
var x$0 = state[13] + size | 0;
queue_elem[1] = x$0;
Stdlib_Stack[5].call(null, state[1]);
}
return;
case 1:
case 2:
if(ty){
var x = state[13] + size | 0;
queue_elem[1] = x;
Stdlib_Stack[5].call(null, state[1]);
}
return;
}
}
function scan_push(state, b, token){
pp_enqueue(state, token);
if(b) set_size(state, 1);
var elem = [0, state[13], token];
return Stdlib_Stack[3].call(null, elem, state[1]);
}
function pp_open_box_gen(state, indent, br_ty){
state[14] = state[14] + 1 | 0;
if(state[14] < state[15]){
var size = - state[13] | 0, elem = [0, size, [3, indent, br_ty], 0];
return scan_push(state, 0, elem);
}
var a = state[14] === state[15] ? 1 : 0;
if(! a) return a;
var s = state[16], x = caml_ml_string_length(s);
return enqueue_string_as(state, x, s);
}
var zero = 0;
function pp_close_box(state, param){
var a = 1 < state[14] ? 1 : 0;
if(a){
if(state[14] < state[15]){
pp_enqueue(state, [0, zero, 1, 0]);
set_size(state, 1);
set_size(state, 0);
}
state[14] = state[14] - 1 | 0;
var b = 0;
}
else
var b = a;
return b;
}
function pp_open_stag(state, tag_name){
if(state[22]){
Stdlib_Stack[3].call(null, tag_name, state[4]);
caml_call1(state[26], tag_name);
}
var a = state[23];
if(! a) return a;
var token = [5, tag_name];
return pp_enqueue(state, [0, zero, token, 0]);
}
function pp_close_stag(state, param){
if(state[23]) pp_enqueue(state, [0, zero, 5, 0]);
var a = state[22];
if(a){
var match = Stdlib_Stack[5].call(null, state[4]);
if(match){
var tag_name = match[1];
return caml_call1(state[27], tag_name);
}
var b = 0;
}
else
var b = a;
return b;
}
function pp_set_print_tags(state, b){state[22] = b; return 0;}
function pp_set_mark_tags(state, b){state[23] = b; return 0;}
function pp_get_print_tags(state, param){return state[22];}
function pp_get_mark_tags(state, param){return state[23];}
function pp_set_tags(state, b){
pp_set_print_tags(state, b);
return pp_set_mark_tags(state, b);
}
function pp_get_formatter_stag_function(state, param){
return [0, state[24], state[25], state[26], state[27]];
}
function pp_set_formatter_stag_function(state, param){
var pct = param[4], pot = param[3], mct = param[2], mot = param[1];
state[24] = mot;
state[25] = mct;
state[26] = pot;
state[27] = pct;
return 0;
}
function pp_rinit(state){
state[12] = 1;
state[13] = 1;
Stdlib_Queue[11].call(null, state[28]);
initialize_scan_stack(state[1]);
Stdlib_Stack[9].call(null, state[2]);
Stdlib_Stack[9].call(null, state[3]);
Stdlib_Stack[9].call(null, state[4]);
Stdlib_Stack[9].call(null, state[5]);
state[10] = 0;
state[14] = 0;
state[9] = state[6];
return pp_open_box_gen(state, 0, 3);
}
function pp_flush_queue(state, end_with_newline){
Stdlib_Stack[13].call
(null, function(param){return pp_close_stag(state, 0);}, state[4]);
for(;;){
if(1 >= state[14]){
state[13] = pp_infinity;
advance_left(state);
if(end_with_newline) pp_output_newline(state);
return pp_rinit(state);
}
pp_close_box(state, 0);
}
}
function pp_print_as_size(state, size, s){
var a = state[14] < state[15] ? 1 : 0;
return a ? enqueue_string_as(state, size, s) : a;
}
function pp_print_as(state, isize, s){
return pp_print_as_size(state, isize, s);
}
function pp_print_string(state, s){
var isize = caml_ml_string_length(s);
return pp_print_as_size(state, isize, s);
}
function pp_print_bytes(state, s){
var
s$0 = Stdlib_Bytes[6].call(null, s),
isize = runtime.caml_ml_bytes_length(s);
return pp_print_as_size(state, isize, s$0);
}
function pp_print_int(state, i){
return pp_print_string(state, Stdlib_Int[12].call(null, i));
}
function pp_print_float(state, f){
return pp_print_string(state, Stdlib[35].call(null, f));
}
function pp_print_bool(state, b){
return pp_print_string(state, Stdlib[30].call(null, b));
}
function pp_print_char(state, c){
var s = Stdlib_String[1].call(null, 1, c);
return pp_print_as_size(state, 1, s);
}
function pp_print_nothing(state, param){return 0;}
function pp_open_hbox(state, param){return pp_open_box_gen(state, 0, 0);}
function pp_open_vbox(state, indent){
return pp_open_box_gen(state, indent, 1);
}
function pp_open_hvbox(state, indent){
return pp_open_box_gen(state, indent, 2);
}
function pp_open_hovbox(state, indent){
return pp_open_box_gen(state, indent, 3);
}
function pp_open_box(state, indent){
return pp_open_box_gen(state, indent, 4);
}
function pp_print_newline(state, param){
pp_flush_queue(state, 1);
return caml_call1(state[18], 0);
}
function pp_print_flush(state, param){
pp_flush_queue(state, 0);
return caml_call1(state[18], 0);
}
function pp_force_newline(state, param){
var a = state[14] < state[15] ? 1 : 0;
return a ? enqueue_advance(state, [0, zero, 3, 0]) : a;
}
function pp_print_if_newline(state, param){
var a = state[14] < state[15] ? 1 : 0;
return a ? enqueue_advance(state, [0, zero, 4, 0]) : a;
}
function pp_print_custom_break(state, fits, breaks){
var
after = fits[3],
width = fits[2],
before = fits[1],
a = state[14] < state[15] ? 1 : 0;
if(! a) return a;
var
size = - state[13] | 0,
token = [1, fits, breaks],
length =
(caml_ml_string_length(before) + width | 0)
+ caml_ml_string_length(after)
| 0;
return scan_push(state, 1, [0, size, token, length]);
}
function pp_print_break(state, width, offset){
return pp_print_custom_break
(state, [0, cst$0, width, cst$0], [0, cst$0, offset, cst$0]);
}
function pp_print_space(state, param){return pp_print_break(state, 1, 0);}
function pp_print_cut(state, param){return pp_print_break(state, 0, 0);}
function pp_open_tbox(state, param){
state[14] = state[14] + 1 | 0;
var a = state[14] < state[15] ? 1 : 0;
if(! a) return a;
return enqueue_advance(state, [0, zero, [4, [0, [0, 0]]], 0]);
}
function pp_close_tbox(state, param){
var b = 1 < state[14] ? 1 : 0;
if(b){
var c = state[14] < state[15] ? 1 : 0;
if(c){
enqueue_advance(state, [0, zero, 2, 0]);
state[14] = state[14] - 1 | 0;
var a = 0;
}
else
var a = c;
}
else
var a = b;
return a;
}
function pp_print_tbreak(state, width, offset){
var a = state[14] < state[15] ? 1 : 0;
if(! a) return a;
var size = - state[13] | 0, elem = [0, size, [2, width, offset], width];
return scan_push(state, 1, elem);
}
function pp_print_tab(state, param){return pp_print_tbreak(state, 0, 0);}
function pp_set_tab(state, param){
var a = state[14] < state[15] ? 1 : 0;
if(! a) return a;
return enqueue_advance(state, [0, zero, 0, 0]);
}
function pp_set_max_boxes(state, n){
var a = 1 < n ? 1 : 0, b = a ? (state[15] = n, 0) : a;
return b;
}
function pp_get_max_boxes(state, param){return state[15];}
function pp_over_max_boxes(state, param){return state[14] === state[15] ? 1 : 0;
}
function pp_set_ellipsis_text(state, s){state[16] = s; return 0;}
function pp_get_ellipsis_text(state, param){return state[16];}
function pp_limit(n){return n < 1000000010 ? n : 1000000009;}
function pp_set_max_indent(state, n$0){
var b = 1 < n$0 ? 1 : 0;
if(! b) return b;
var n$1 = state[6] - n$0 | 0, a = 1 <= n$1 ? 1 : 0;
if(! a) return a;
var n = pp_limit(n$1);
state[7] = n;
state[8] = state[6] - state[7] | 0;
return pp_rinit(state);
}
function pp_get_max_indent(state, param){return state[8];}
function pp_set_margin(state, n){
var a = 1 <= n ? 1 : 0;
if(! a) return a;
var n$0 = pp_limit(n);
state[6] = n$0;
if(state[8] <= state[6])
var new_max_indent = state[8];
else
var
b = Stdlib_Int[11].call(null, state[6] - state[7] | 0, state[6] / 2 | 0),
new_max_indent = Stdlib_Int[11].call(null, b, 1);
return pp_set_max_indent(state, new_max_indent);
}
var
c = [1, "margin <= max_indent"],
d = [1, "margin >= pp_infinity"],
e = [0, 0],
f = [1, "max_indent < 2"];
function validate_geometry(param){
var margin = param[2], max_indent = param[1];
return 2 <= max_indent
? margin <= max_indent ? c : 1000000010 <= margin ? d : e
: f;
}
function check_geometry(geometry){
return 0 === validate_geometry(geometry)[0] ? 1 : 0;
}
function pp_get_margin(state, param){return state[6];}
function pp_set_full_geometry(state, param){
var margin = param[2], max_indent = param[1];
pp_set_margin(state, margin);
pp_set_max_indent(state, max_indent);
return 0;
}
function pp_set_geometry(state, max_indent, margin){
var
geometry = [0, max_indent, margin],
match = validate_geometry(geometry);
if(0 === match[0]) return pp_set_full_geometry(state, geometry);
var
msg = match[1],
a = Stdlib[28].call(null, "Format.pp_set_geometry: ", msg);
throw caml_maybe_attach_backtrace([0, Stdlib[6], a], 1);
}
function pp_safe_set_geometry(state, max_indent, margin){
var geometry = [0, max_indent, margin];
return 0 === validate_geometry(geometry)[0]
? pp_set_full_geometry(state, geometry)
: 0;
}
function pp_get_geometry(state, param){return [0, state[8], state[6]];}
function pp_update_geometry(state, update){
var geometry = pp_get_geometry(state, 0);
return pp_set_full_geometry(state, caml_call1(update, geometry));
}
function pp_set_formatter_out_functions(state, param){
var j = param[5], i = param[4], h = param[3], g = param[2], f = param[1];
state[17] = f;
state[18] = g;
state[19] = h;
state[20] = i;
state[21] = j;
return 0;
}
function pp_get_formatter_out_functions(state, param){
return [0, state[17], state[18], state[19], state[20], state[21]];
}
function pp_set_formatter_output_functi(state, f, g){state[17] = f; state[18] = g; return 0;
}
function pp_get_formatter_output_functi(state, param){return [0, state[17], state[18]];
}
function display_newline(state, param){
return caml_call3(state[17], "\n", 0, 1);
}
var blank_line = Stdlib_String[1].call(null, 80, 32);
function display_blanks(state, n$1){
var n = n$1;
for(;;){
var a = 0 < n ? 1 : 0;
if(! a) return a;
if(80 >= n) return caml_call3(state[17], blank_line, 0, n);
caml_call3(state[17], blank_line, 0, 80);
var n$0 = n - 80 | 0;
n = n$0;
}
}
function pp_set_formatter_out_channel(state, oc){
var a = Stdlib[69];
state[17] = function(b, c, d){return a(oc, b, c, d);};
state[18] = function(param){return Stdlib[63].call(null, oc);};
state[19] = function(a){return display_newline(state, a);};
state[20] = function(a){return display_blanks(state, a);};
state[21] = function(a){return display_blanks(state, a);};
return 0;
}
var cst = ">";
function default_pp_mark_open_tag(param){
if(param[1] !== String_tag) return cst$0;
var s = param[2], a = Stdlib[28].call(null, s, cst);
return Stdlib[28].call(null, "<", a);
}
function default_pp_mark_close_tag(param){
if(param[1] !== String_tag) return cst$0;
var s = param[2], a = Stdlib[28].call(null, s, cst);
return Stdlib[28].call(null, "<\/", a);
}
function default_pp_print_open_tag(a){return 0;}
function default_pp_print_close_tag(a){return 0;}
var g = [3, 0, 3];
function pp_make_formatter(f, g$0, h, i, j){
var
pp_queue = Stdlib_Queue[2].call(null, 0),
sys_tok = [0, unknown, g, 0];
Stdlib_Queue[3].call(null, sys_tok, pp_queue);
var scan_stack = Stdlib_Stack[2].call(null, 0);
initialize_scan_stack(scan_stack);
Stdlib_Stack[3].call(null, [0, 1, sys_tok], scan_stack);
var
a = Stdlib[19],
b = Stdlib_Stack[2].call(null, 0),
c = Stdlib_Stack[2].call(null, 0),
d = Stdlib_Stack[2].call(null, 0),
pp_margin = 78;
return [0,
scan_stack,
Stdlib_Stack[2].call(null, 0),
d,
c,
b,
pp_margin,
10,
68,
pp_margin,
0,
1,
1,
1,
1,
a,
".",
f,
g$0,
h,
i,
j,
0,
0,
default_pp_mark_open_tag,
default_pp_mark_close_tag,
default_pp_print_open_tag,
default_pp_print_close_tag,
pp_queue];
}
function formatter_of_out_functions(out_funs){
return pp_make_formatter
(out_funs[1], out_funs[2], out_funs[3], out_funs[4], out_funs[5]);
}
function make_formatter(output, flush){
var
ppf =
pp_make_formatter
(output,
flush,
function(a){return 0;},
function(a){return 0;},
function(a){return 0;});
ppf[19] = function(a){return display_newline(ppf, a);};
ppf[20] = function(a){return display_blanks(ppf, a);};
ppf[21] = function(a){return display_blanks(ppf, a);};
return ppf;
}
function formatter_of_out_channel(oc){
var a = Stdlib[69];
return make_formatter
(function(b, c, d){return a(oc, b, c, d);},
function(param){return Stdlib[63].call(null, oc);});
}
function formatter_of_buffer(b){
var a = Stdlib_Buffer[18];
return make_formatter
(function(c, d, e){return a(b, c, d, e);}, function(a){return 0;});
}
var pp_buffer_size = 512;
function pp_make_buffer(param){
return Stdlib_Buffer[1].call(null, pp_buffer_size);
}
var
stdbuf = pp_make_buffer(0),
std_formatter = formatter_of_out_channel(Stdlib[39]),
err_formatter = formatter_of_out_channel(Stdlib[40]),
str_formatter = formatter_of_buffer(stdbuf),
stdbuf_key = caml_call2(Stdlib_Domain[10][1], 0, pp_make_buffer);
caml_call2(Stdlib_Domain[10][3], stdbuf_key, stdbuf);
var
str_formatter_key =
caml_call2
(Stdlib_Domain[10][1],
0,
function(param){
return formatter_of_buffer
(caml_call1(Stdlib_Domain[10][2], stdbuf_key));
});
caml_call2(Stdlib_Domain[10][3], str_formatter_key, str_formatter);
function buffered_out_string(key, str, ofs, len){
var a = caml_call1(Stdlib_Domain[10][2], key);
return Stdlib_Buffer[18].call(null, a, str, ofs, len);
}
function buffered_out_flush(oc, key, param){
var
buf = caml_call1(Stdlib_Domain[10][2], key),
len = Stdlib_Buffer[7].call(null, buf),
str = Stdlib_Buffer[2].call(null, buf);
Stdlib[69].call(null, oc, str, 0, len);
Stdlib[63].call(null, oc);
return Stdlib_Buffer[8].call(null, buf);
}
var
std_buf_key =
caml_call2
(Stdlib_Domain[10][1],
0,
function(param){return Stdlib_Buffer[1].call(null, pp_buffer_size);}),
err_buf_key =
caml_call2
(Stdlib_Domain[10][1],
0,
function(param){return Stdlib_Buffer[1].call(null, pp_buffer_size);}),
std_formatter_key =
caml_call2
(Stdlib_Domain[10][1],
0,
function(param){
var
a = Stdlib[39],
ppf =
pp_make_formatter
(function(a, b, c){
return buffered_out_string(std_buf_key, a, b, c);
},
function(b){return buffered_out_flush(a, std_buf_key, b);},
function(a){return 0;},
function(a){return 0;},
function(a){return 0;});
ppf[19] = function(a){return display_newline(ppf, a);};
ppf[20] = function(a){return display_blanks(ppf, a);};
ppf[21] = function(a){return display_blanks(ppf, a);};
Stdlib_Domain[6].call
(null, function(a){return pp_print_flush(ppf, a);});
return ppf;
});
caml_call2(Stdlib_Domain[10][3], std_formatter_key, std_formatter);
var
err_formatter_key =
caml_call2
(Stdlib_Domain[10][1],
0,
function(param){
var
a = Stdlib[40],
ppf =
pp_make_formatter
(function(a, b, c){
return buffered_out_string(err_buf_key, a, b, c);
},
function(b){return buffered_out_flush(a, err_buf_key, b);},
function(a){return 0;},
function(a){return 0;},
function(a){return 0;});
ppf[19] = function(a){return display_newline(ppf, a);};
ppf[20] = function(a){return display_blanks(ppf, a);};
ppf[21] = function(a){return display_blanks(ppf, a);};
Stdlib_Domain[6].call
(null, function(a){return pp_print_flush(ppf, a);});
return ppf;
});
caml_call2(Stdlib_Domain[10][3], err_formatter_key, err_formatter);
function get_std_formatter(param){
return caml_call1(Stdlib_Domain[10][2], std_formatter_key);
}
function get_err_formatter(param){
return caml_call1(Stdlib_Domain[10][2], err_formatter_key);
}
function get_str_formatter(param){
return caml_call1(Stdlib_Domain[10][2], str_formatter_key);
}
function get_stdbuf(param){
return caml_call1(Stdlib_Domain[10][2], stdbuf_key);
}
function flush_buffer_formatter(buf, ppf){
pp_flush_queue(ppf, 0);
var s = Stdlib_Buffer[2].call(null, buf);
Stdlib_Buffer[9].call(null, buf);
return s;
}
function flush_str_formatter(param){
var
stdbuf = caml_call1(Stdlib_Domain[10][2], stdbuf_key),
str_formatter = caml_call1(Stdlib_Domain[10][2], str_formatter_key);
return flush_buffer_formatter(stdbuf, str_formatter);
}
function make_synchronized_formatter(output, flush){
return caml_call2
(Stdlib_Domain[10][1],
0,
function(param){
var
buf = Stdlib_Buffer[1].call(null, pp_buffer_size),
a = Stdlib_Buffer[18];
function output$0(b, c, d){return a(buf, b, c, d);}
function flush$0(param){
var a = Stdlib_Buffer[7].call(null, buf);
caml_call3(output, Stdlib_Buffer[2].call(null, buf), 0, a);
Stdlib_Buffer[8].call(null, buf);
return caml_call1(flush, 0);
}
return make_formatter(output$0, flush$0);
});
}
function synchronized_formatter_of_out_(oc){
var a = Stdlib[69];
return make_synchronized_formatter
(function(b, c, d){return a(oc, b, c, d);},
function(param){return Stdlib[63].call(null, oc);});
}
function make_symbolic_output_buffer(param){return [0, 0];}
function clear_symbolic_output_buffer(sob){sob[1] = 0; return 0;}
function get_symbolic_output_buffer(sob){
return Stdlib_List[10].call(null, sob[1]);
}
function flush_symbolic_output_buffer(sob){
var items = get_symbolic_output_buffer(sob);
clear_symbolic_output_buffer(sob);
return items;
}
function add_symbolic_output_item(sob, item){sob[1] = [0, item, sob[1]]; return 0;
}
function formatter_of_symbolic_output_b(sob){
function f(s, i, n){
return add_symbolic_output_item
(sob, [0, Stdlib_String[16].call(null, s, i, n)]);
}
function g(param){return add_symbolic_output_item(sob, 0);}
function h(param){return add_symbolic_output_item(sob, 1);}
function i(n){return add_symbolic_output_item(sob, [1, n]);}
function j(n){return add_symbolic_output_item(sob, [2, n]);}
return pp_make_formatter(f, g, h, i, j);
}
function open_hbox(v){
return pp_open_hbox
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function open_vbox(v){
return pp_open_vbox
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function open_hvbox(v){
return pp_open_hvbox
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function open_hovbox(v){
return pp_open_hovbox
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function open_box(v){
return pp_open_box(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function close_box(v){
return pp_close_box
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function open_stag(v){
return pp_open_stag
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function close_stag(v){
return pp_close_stag
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_as(isize, w){
var state = caml_call1(Stdlib_Domain[10][2], std_formatter_key);
return pp_print_as_size(state, isize, w);
}
function print_string(v){
return pp_print_string
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_bytes(v){
return pp_print_bytes
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_int(v){
return pp_print_int
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_float(v){
return pp_print_float
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_char(v){
return pp_print_char
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_bool(v){
return pp_print_bool
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_break(v, w){
return pp_print_break
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v, w);
}
function print_cut(v){
return pp_print_cut
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_space(v){
return pp_print_space
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function force_newline(v){
return pp_force_newline
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_flush(v){
return pp_print_flush
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_newline(v){
return pp_print_newline
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_if_newline(v){
return pp_print_if_newline
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function open_tbox(v){
return pp_open_tbox
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function close_tbox(v){
return pp_close_tbox
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_tbreak(v, w){
return pp_print_tbreak
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v, w);
}
function set_tab(v){
return pp_set_tab(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function print_tab(v){
return pp_print_tab
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function set_margin(v){
return pp_set_margin
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function get_margin(v){
var state = caml_call1(Stdlib_Domain[10][2], std_formatter_key);
return state[6];
}
function set_max_indent(v){
return pp_set_max_indent
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function get_max_indent(v){
var state = caml_call1(Stdlib_Domain[10][2], std_formatter_key);
return state[8];
}
function set_geometry(max_indent, margin){
return pp_set_geometry
(caml_call1(Stdlib_Domain[10][2], std_formatter_key),
max_indent,
margin);
}
function safe_set_geometry(max_indent, margin){
return pp_safe_set_geometry
(caml_call1(Stdlib_Domain[10][2], std_formatter_key),
max_indent,
margin);
}
function get_geometry(v){
return pp_get_geometry
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function update_geometry(v){
return pp_update_geometry
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function set_max_boxes(v){
return pp_set_max_boxes
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function get_max_boxes(v){
var state = caml_call1(Stdlib_Domain[10][2], std_formatter_key);
return state[15];
}
function over_max_boxes(v){
return pp_over_max_boxes
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function set_ellipsis_text(v){
return pp_set_ellipsis_text
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function get_ellipsis_text(v){
var state = caml_call1(Stdlib_Domain[10][2], std_formatter_key);
return state[16];
}
function set_formatter_out_channel(v){
return pp_set_formatter_out_channel
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function set_formatter_out_functions(v){
return pp_set_formatter_out_functions
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function get_formatter_out_functions(v){
return pp_get_formatter_out_functions
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function set_formatter_output_functions(v, w){
return pp_set_formatter_output_functi
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v, w);
}
function get_formatter_output_functions(v){
return pp_get_formatter_output_functi
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function set_formatter_stag_functions(v){
return pp_set_formatter_stag_function
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function get_formatter_stag_functions(v){
return pp_get_formatter_stag_function
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function set_print_tags(v){
return pp_set_print_tags
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function get_print_tags(v){
var state = caml_call1(Stdlib_Domain[10][2], std_formatter_key);
return state[22];
}
function set_mark_tags(v){
return pp_set_mark_tags
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function get_mark_tags(v){
var state = caml_call1(Stdlib_Domain[10][2], std_formatter_key);
return state[23];
}
function set_tags(v){
return pp_set_tags(caml_call1(Stdlib_Domain[10][2], std_formatter_key), v);
}
function pp_print_iter(opt, iter, pp_v, ppf, v){
var pp_sep = opt ? opt[1] : pp_print_cut, is_first = [0, 1];
function pp_v$0(v){
if(is_first[1]) is_first[1] = 0; else caml_call2(pp_sep, ppf, 0);
return caml_call2(pp_v, ppf, v);
}
return caml_call2(iter, pp_v$0, v);
}
function pp_print_list(opt, pp_v, ppf, v){
var pp_sep = opt ? opt[1] : pp_print_cut;
return pp_print_iter([0, pp_sep], Stdlib_List[18], pp_v, ppf, v);
}
function pp_print_array(opt, pp_v, ppf, v){
var pp_sep = opt ? opt[1] : pp_print_cut;
return pp_print_iter([0, pp_sep], Stdlib_Array[12], pp_v, ppf, v);
}
function pp_print_seq(opt, pp_v, ppf, seq){
var pp_sep = opt ? opt[1] : pp_print_cut;
return pp_print_iter([0, pp_sep], Stdlib_Seq[4], pp_v, ppf, seq);
}
function pp_print_text(ppf, s){
var len = caml_ml_string_length(s), left = [0, 0], right = [0, 0];
function flush(param){
pp_print_string
(ppf, Stdlib_String[16].call(null, s, left[1], right[1] - left[1] | 0));
right[1]++;
left[1] = right[1];
return 0;
}
for(;;){
if(right[1] === len){
var a = left[1] !== len ? 1 : 0;
return a ? flush(0) : a;
}
var match = runtime.caml_string_get(s, right[1]);
if(10 === match){
flush(0);
pp_force_newline(ppf, 0);
}
else if(32 === match){flush(0); pp_print_space(ppf, 0);} else right[1]++;
}
}
function pp_print_option(opt, pp_v, ppf, param){
var none = opt ? opt[1] : function(a, param){return 0;};
if(! param) return caml_call2(none, ppf, 0);
var v = param[1];
return caml_call2(pp_v, ppf, v);
}
function pp_print_result(ok, error, ppf, param){
if(0 === param[0]){var v = param[1]; return caml_call2(ok, ppf, v);}
var e = param[1];
return caml_call2(error, ppf, e);
}
function pp_print_either(left, right, ppf, param){
if(0 === param[0]){var l = param[1]; return caml_call2(left, ppf, l);}
var r = param[1];
return caml_call2(right, ppf, r);
}
function compute_tag(output, tag_acc){
var buf = Stdlib_Buffer[1].call(null, 16), ppf = formatter_of_buffer(buf);
caml_call2(output, ppf, tag_acc);
pp_print_flush(ppf, 0);
var len = Stdlib_Buffer[7].call(null, buf);
return 2 <= len
? Stdlib_Buffer[4].call(null, buf, 1, len - 2 | 0)
: Stdlib_Buffer[2].call(null, buf);
}
function output_formatting_lit(ppf, fmting_lit){
if(typeof fmting_lit === "number")
switch(fmting_lit){
case 0:
return pp_close_box(ppf, 0);
case 1:
return pp_close_stag(ppf, 0);
case 2:
return pp_print_flush(ppf, 0);
case 3:
return pp_force_newline(ppf, 0);
case 4:
return pp_print_newline(ppf, 0);
case 5:
return pp_print_char(ppf, 64);
default: return pp_print_char(ppf, 37);
}
switch(fmting_lit[0]){
case 0:
var offset = fmting_lit[3], width = fmting_lit[2];
return pp_print_break(ppf, width, offset);
case 1:
return 0;
default:
var c = fmting_lit[1];
pp_print_char(ppf, 64);
return pp_print_char(ppf, c);
}
}
function output_acc(ppf, acc){
if(typeof acc === "number") return 0;
a:
{
b:
{
c:
{
switch(acc[0]){
case 0:
var f = acc[2], p = acc[1];
output_acc(ppf, p);
return output_formatting_lit(ppf, f);
case 1:
var match = acc[2], p$0 = acc[1];
if(0 === match[0]){
var acc$0 = match[1];
output_acc(ppf, p$0);
return pp_open_stag
(ppf, [0, String_tag, compute_tag(output_acc, acc$0)]);
}
var acc$1 = match[1];
output_acc(ppf, p$0);
var
k = compute_tag(output_acc, acc$1),
match$0 = CamlinternalFormat[20].call(null, k),
bty = match$0[2],
indent = match$0[1];
return pp_open_box_gen(ppf, indent, bty);
case 2:
var a = acc[1];
if(typeof a !== "number" && 0 === a[0]){
var g = a[2];
if(typeof g !== "number" && 1 === g[0]){
var s$0 = acc[2], size = g[2], p$2 = a[1];
break a;
}
}
var s = acc[2], p$1 = a;
break b;
case 3:
var b = acc[1];
if(typeof b !== "number" && 0 === b[0]){
var h = b[2];
if(typeof h !== "number" && 1 === h[0]){
var c$0 = acc[2], size$0 = h[2], p$4 = b[1];
break c;
}
}
var c = acc[2], p$3 = b;
break;
case 4:
var d = acc[1];
if(typeof d !== "number" && 0 === d[0]){
var i = d[2];
if(typeof i !== "number" && 1 === i[0]){
var s$0 = acc[2], size = i[2], p$2 = d[1];
break a;
}
}
var s = acc[2], p$1 = d;
break b;
case 5:
var e = acc[1];
if(typeof e !== "number" && 0 === e[0]){
var j = e[2];
if(typeof j !== "number" && 1 === j[0]){
var c$0 = acc[2], size$0 = j[2], p$4 = e[1];
break c;
}
}
var c = acc[2], p$3 = e;
break;
case 6:
var f$0 = acc[2], p$5 = acc[1];
output_acc(ppf, p$5);
return caml_call1(f$0, ppf);
case 7:
var p$6 = acc[1];
output_acc(ppf, p$6);
return pp_print_flush(ppf, 0);
default:
var msg = acc[2], p$7 = acc[1];
output_acc(ppf, p$7);
return Stdlib[1].call(null, msg);
}
output_acc(ppf, p$3);
return pp_print_char(ppf, c);
}
output_acc(ppf, p$4);
return pp_print_as_size
(ppf, size$0, Stdlib_String[1].call(null, 1, c$0));
}
output_acc(ppf, p$1);
return pp_print_string(ppf, s);
}
output_acc(ppf, p$2);
return pp_print_as_size(ppf, size, s$0);
}
function strput_acc(ppf, acc){
if(typeof acc === "number") return 0;
a:
{
b:
{
c:
{
switch(acc[0]){
case 0:
var f = acc[2], p = acc[1];
strput_acc(ppf, p);
return output_formatting_lit(ppf, f);
case 1:
var match = acc[2], p$0 = acc[1];
if(0 === match[0]){
var acc$0 = match[1];
strput_acc(ppf, p$0);
return pp_open_stag
(ppf, [0, String_tag, compute_tag(strput_acc, acc$0)]);
}
var acc$1 = match[1];
strput_acc(ppf, p$0);
var
k = compute_tag(strput_acc, acc$1),
match$0 = CamlinternalFormat[20].call(null, k),
bty = match$0[2],
indent = match$0[1];
return pp_open_box_gen(ppf, indent, bty);
case 2:
var a = acc[1];
if(typeof a !== "number" && 0 === a[0]){
var g = a[2];
if(typeof g !== "number" && 1 === g[0]){
var s$0 = acc[2], size = g[2], p$2 = a[1];
break a;
}
}
var s = acc[2], p$1 = a;
break b;
case 3:
var b = acc[1];
if(typeof b !== "number" && 0 === b[0]){
var h = b[2];
if(typeof h !== "number" && 1 === h[0]){
var c$0 = acc[2], size$0 = h[2], p$4 = b[1];
break c;
}
}
var c = acc[2], p$3 = b;
break;
case 4:
var d = acc[1];
if(typeof d !== "number" && 0 === d[0]){
var i = d[2];
if(typeof i !== "number" && 1 === i[0]){
var s$0 = acc[2], size = i[2], p$2 = d[1];
break a;
}
}
var s = acc[2], p$1 = d;
break b;
case 5:
var e = acc[1];
if(typeof e !== "number" && 0 === e[0]){
var j = e[2];
if(typeof j !== "number" && 1 === j[0]){
var c$0 = acc[2], size$0 = j[2], p$4 = e[1];
break c;
}
}
var c = acc[2], p$3 = e;
break;
case 6:
var p$5 = acc[1];
if(typeof p$5 !== "number" && 0 === p$5[0]){
var match$1 = p$5[2];
if(typeof match$1 !== "number" && 1 === match$1[0]){
var f$1 = acc[2], size$1 = match$1[2], p$6 = p$5[1];
strput_acc(ppf, p$6);
return pp_print_as_size(ppf, size$1, caml_call1(f$1, 0));
}
}
var f$0 = acc[2];
strput_acc(ppf, p$5);
return pp_print_string(ppf, caml_call1(f$0, 0));
case 7:
var p$7 = acc[1];
strput_acc(ppf, p$7);
return pp_print_flush(ppf, 0);
default:
var msg = acc[2], p$8 = acc[1];
strput_acc(ppf, p$8);
return Stdlib[1].call(null, msg);
}
strput_acc(ppf, p$3);
return pp_print_char(ppf, c);
}
strput_acc(ppf, p$4);
return pp_print_as_size
(ppf, size$0, Stdlib_String[1].call(null, 1, c$0));
}
strput_acc(ppf, p$1);
return pp_print_string(ppf, s);
}
strput_acc(ppf, p$2);
return pp_print_as_size(ppf, size, s$0);
}
function kfprintf(k, ppf, param){
var fmt = param[1];
return CamlinternalFormat[7].call
(null,
function(acc){output_acc(ppf, acc); return caml_call1(k, ppf);},
0,
fmt);
}
function ikfprintf(k, ppf, param){
var fmt = param[1];
return CamlinternalFormat[8].call(null, k, ppf, fmt);
}
function ifprintf(ppf, param){
var fmt = param[1];
return CamlinternalFormat[8].call(null, function(a){return 0;}, 0, fmt);
}
function fprintf(ppf){
function a(a){return 0;}
return function(b){return kfprintf(a, ppf, b);};
}
function printf(param){
var fmt = param[1];
return CamlinternalFormat[7].call
(null,
function(acc){
return output_acc
(caml_call1(Stdlib_Domain[10][2], std_formatter_key), acc);
},
0,
fmt);
}
function eprintf(param){
var fmt = param[1];
return CamlinternalFormat[7].call
(null,
function(acc){
return output_acc
(caml_call1(Stdlib_Domain[10][2], err_formatter_key), acc);
},
0,
fmt);
}
function kdprintf(k, param){
var fmt = param[1];
return CamlinternalFormat[7].call
(null,
function(acc){
return caml_call1
(k, function(ppf){return output_acc(ppf, acc);});
},
0,
fmt);
}
function dprintf(fmt){return kdprintf(function(i){return i;}, fmt);}
function ksprintf(k, param){
var fmt = param[1], b = pp_make_buffer(0), ppf = formatter_of_buffer(b);
function k$0(acc){
strput_acc(ppf, acc);
return caml_call1(k, flush_buffer_formatter(b, ppf));
}
return CamlinternalFormat[7].call(null, k$0, 0, fmt);
}
function sprintf(fmt){return ksprintf(id, fmt);}
function kasprintf(k, param){
var fmt = param[1], b = pp_make_buffer(0), ppf = formatter_of_buffer(b);
function k$0(acc){
output_acc(ppf, acc);
return caml_call1(k, flush_buffer_formatter(b, ppf));
}
return CamlinternalFormat[7].call(null, k$0, 0, fmt);
}
function asprintf(fmt){return kasprintf(id, fmt);}
function flush_standard_formatters(param){
pp_print_flush(caml_call1(Stdlib_Domain[10][2], std_formatter_key), 0);
return pp_print_flush
(caml_call1(Stdlib_Domain[10][2], err_formatter_key), 0);
}
Stdlib[100].call(null, flush_standard_formatters);
Stdlib_Domain[5].call
(null,
function(param){
flush_standard_formatters(0);
var
fs = pp_get_formatter_out_functions(std_formatter, 0),
a = Stdlib[39];
pp_set_formatter_out_functions
(std_formatter,
[0,
function(a, b, c){return buffered_out_string(std_buf_key, a, b, c);},
function(b){return buffered_out_flush(a, std_buf_key, b);},
fs[3],
fs[4],
fs[5]]);
var
fs$0 = pp_get_formatter_out_functions(err_formatter, 0),
b = Stdlib[40];
return pp_set_formatter_out_functions
(err_formatter,
[0,
function(a, b, c){
return buffered_out_string(err_buf_key, a, b, c);
},
function(a){return buffered_out_flush(b, err_buf_key, a);},
fs$0[3],
fs$0[4],
fs$0[5]]);
});
runtime.caml_register_global
(38,
[0,
pp_open_box,
open_box,
pp_close_box,
close_box,
pp_open_hbox,
open_hbox,
pp_open_vbox,
open_vbox,
pp_open_hvbox,
open_hvbox,
pp_open_hovbox,
open_hovbox,
pp_print_string,
print_string,
pp_print_bytes,
print_bytes,
pp_print_as,
print_as,
pp_print_int,
print_int,
pp_print_float,
print_float,
pp_print_char,
print_char,
pp_print_bool,
print_bool,
pp_print_nothing,
pp_print_space,
print_space,
pp_print_cut,
print_cut,
pp_print_break,
print_break,
pp_print_custom_break,
pp_force_newline,
force_newline,
pp_print_if_newline,
print_if_newline,
pp_print_flush,
print_flush,
pp_print_newline,
print_newline,
pp_infinity,
pp_set_margin,
set_margin,
pp_get_margin,
get_margin,
pp_set_max_indent,
set_max_indent,
pp_get_max_indent,
get_max_indent,
check_geometry,
pp_set_geometry,
set_geometry,
pp_safe_set_geometry,
safe_set_geometry,
pp_update_geometry,
update_geometry,
pp_get_geometry,
get_geometry,
pp_set_max_boxes,
set_max_boxes,
pp_get_max_boxes,
get_max_boxes,
pp_over_max_boxes,
over_max_boxes,
pp_open_tbox,
open_tbox,
pp_close_tbox,
close_tbox,
pp_set_tab,
set_tab,
pp_print_tab,
print_tab,
pp_print_tbreak,
print_tbreak,
pp_set_ellipsis_text,
set_ellipsis_text,
pp_get_ellipsis_text,
get_ellipsis_text,
String_tag,
pp_open_stag,
open_stag,
pp_close_stag,
close_stag,
pp_set_tags,
set_tags,
pp_set_print_tags,
set_print_tags,
pp_set_mark_tags,
set_mark_tags,
pp_get_print_tags,
get_print_tags,
pp_get_mark_tags,
get_mark_tags,
pp_set_formatter_out_channel,
set_formatter_out_channel,
pp_set_formatter_output_functi,
set_formatter_output_functions,
pp_get_formatter_output_functi,
get_formatter_output_functions,
pp_set_formatter_out_functions,
set_formatter_out_functions,
pp_get_formatter_out_functions,
get_formatter_out_functions,
pp_set_formatter_stag_function,
set_formatter_stag_functions,
pp_get_formatter_stag_function,
get_formatter_stag_functions,
formatter_of_out_channel,
synchronized_formatter_of_out_,
std_formatter,
get_std_formatter,
err_formatter,
get_err_formatter,
formatter_of_buffer,
stdbuf,
get_stdbuf,
str_formatter,
get_str_formatter,
flush_str_formatter,
make_formatter,
make_synchronized_formatter,
formatter_of_out_functions,
make_symbolic_output_buffer,
clear_symbolic_output_buffer,
get_symbolic_output_buffer,
flush_symbolic_output_buffer,
add_symbolic_output_item,
formatter_of_symbolic_output_b,
pp_print_iter,
pp_print_list,
pp_print_array,
pp_print_seq,
pp_print_text,
pp_print_option,
pp_print_result,
pp_print_either,
fprintf,
printf,
eprintf,
sprintf,
asprintf,
dprintf,
ifprintf,
kfprintf,
kdprintf,
ikfprintf,
ksprintf,
kasprintf],
"Stdlib__Format");
return;
}
(globalThis));
//# 23582 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Callback:[F(2),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_register_named_value = runtime.caml_register_named_value,
Stdlib_Obj = runtime.caml_get_global_data().Stdlib__Obj;
function register_exception(name, exn){
var
a = Stdlib_Obj[10],
slot = runtime.caml_obj_tag(exn) === a ? exn : exn[1];
return caml_register_named_value(name, slot);
}
runtime.caml_register_global
(1,
[0, caml_register_named_value, register_exception],
"Stdlib__Callback");
return;
}
(globalThis));
//# 25380 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__Filename:[N,N,N,F(2),F(1),F(1),F(2),F(2),F(2),F(1),F(1),F(1),F(1),F(1),N,F(3),F(5),F(4),F(1),F(1),F(1),F(5)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_equal = runtime.caml_equal,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_string_get = runtime.caml_string_get,
caml_sys_getenv = runtime.caml_sys_getenv,
caml_trampoline = runtime.caml_trampoline,
caml_trampoline_return = runtime.caml_trampoline_return,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Domain = global_data.Stdlib__Domain,
Stdlib_Random = global_data.Stdlib__Random,
Stdlib_Printf = global_data.Stdlib__Printf,
Stdlib_String = global_data.Stdlib__String,
Stdlib_List = global_data.Stdlib__List,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_Sys = global_data.Stdlib__Sys,
cst = "";
function generic_basename(is_dir_sep, current_dir_name, name){
if(name === cst) return current_dir_name;
var n$3 = caml_ml_string_length(name) - 1 | 0, n = n$3;
for(;;){
if(0 > n) return Stdlib_String[16].call(null, name, 0, 1);
if(! caml_call2(is_dir_sep, name, n)) break;
var n$0 = n - 1 | 0;
n = n$0;
}
var p = n + 1 | 0, n$1 = n;
for(;;){
if(0 > n$1) return Stdlib_String[16].call(null, name, 0, p);
if(caml_call2(is_dir_sep, name, n$1))
return Stdlib_String[16].call
(null, name, n$1 + 1 | 0, (p - n$1 | 0) - 1 | 0);
var n$2 = n$1 - 1 | 0;
n$1 = n$2;
}
}
function generic_dirname(is_dir_sep, current_dir_name, name){
if(name === cst) return current_dir_name;
var n$5 = caml_ml_string_length(name) - 1 | 0, n = n$5;
for(;;){
if(0 > n) return Stdlib_String[16].call(null, name, 0, 1);
if(! caml_call2(is_dir_sep, name, n)){var n$1 = n; break;}
var n$0 = n - 1 | 0;
n = n$0;
}
for(;;){
if(0 > n$1) return current_dir_name;
if(caml_call2(is_dir_sep, name, n$1)){var n$3 = n$1; break;}
var n$2 = n$1 - 1 | 0;
n$1 = n$2;
}
for(;;){
if(0 > n$3) return Stdlib_String[16].call(null, name, 0, 1);
if(! caml_call2(is_dir_sep, name, n$3))
return Stdlib_String[16].call(null, name, 0, n$3 + 1 | 0);
var n$4 = n$3 - 1 | 0;
n$3 = n$4;
}
}
function is_dir_sep(s, i){return 47 === caml_string_get(s, i) ? 1 : 0;}
function is_relative(n){
var
a = caml_ml_string_length(n) < 1 ? 1 : 0,
b = a || (47 !== caml_string_get(n, 0) ? 1 : 0);
return b;
}
var cst$8 = "../", cst$7 = "./";
function is_implicit(n){
var b = is_relative(n);
if(b){
var
d = caml_ml_string_length(n) < 2 ? 1 : 0,
c = d || (Stdlib_String[16].call(null, n, 0, 2) !== cst$7 ? 1 : 0);
if(c)
var
e = caml_ml_string_length(n) < 3 ? 1 : 0,
a = e || (Stdlib_String[16].call(null, n, 0, 3) !== cst$8 ? 1 : 0);
else
var a = c;
}
else
var a = b;
return a;
}
function check_suffix(name, suff){
return Stdlib_String[12].call(null, suff, name);
}
function chop_suffix_opt(suffix, filename){
var
len_s = caml_ml_string_length(suffix),
len_f = caml_ml_string_length(filename);
if(len_s > len_f) return 0;
var r = Stdlib_String[16].call(null, filename, len_f - len_s | 0, len_s);
return r === suffix
? [0,
Stdlib_String[16].call(null, filename, 0, len_f - len_s | 0)]
: 0;
}
var dummy = 0;
try{var g = caml_sys_getenv("TMPDIR"), temp_dir_name = g;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var temp_dir_name = "/tmp";
}
function quote(s){
var
l = caml_ml_string_length(s),
b = Stdlib_Buffer[1].call(null, l + 20 | 0);
Stdlib_Buffer[12].call(null, b, 39);
var a = l - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
if(39 === caml_string_get(s, i))
Stdlib_Buffer[16].call(null, b, "'\\''");
else{var d = caml_string_get(s, i); Stdlib_Buffer[12].call(null, b, d);}
var c = i + 1 | 0;
if(a === i) break;
i = c;
}
}
Stdlib_Buffer[12].call(null, b, 39);
return Stdlib_Buffer[2].call(null, b);
}
var
cst$3 = " ",
cst_2 = " 2>",
cst_2_1 = " 2>&1",
cst$2 = " <",
cst$1 = " >";
function quote_command(cmd, stdin, stdout, stderr, args){
if(stderr){
var f = stderr[1];
if(caml_equal(stderr, stdout))
var a = cst_2_1;
else
var k = quote(f), a = Stdlib[28].call(null, cst_2, k);
}
else
var a = cst;
if(stdout)
var f$0 = stdout[1], d = quote(f$0), b = Stdlib[28].call(null, cst$1, d);
else
var b = cst;
var e = Stdlib[28].call(null, b, a);
if(stdin)
var f$1 = stdin[1], g = quote(f$1), c = Stdlib[28].call(null, cst$2, g);
else
var c = cst;
var
h = Stdlib[28].call(null, c, e),
i = Stdlib_List[20].call(null, quote, [0, cmd, args]),
j = Stdlib_String[7].call(null, cst$3, i);
return Stdlib[28].call(null, j, h);
}
var cst$4 = ".", current_dir_name = cst$4;
function basename(a){
return generic_basename(is_dir_sep, current_dir_name, a);
}
function dirname(a){
return generic_dirname(is_dir_sep, current_dir_name, a);
}
var
cst$5 = "..",
cst$6 = "/",
cst_dev_null = "/dev/null",
Unix =
[0,
cst_dev_null,
current_dir_name,
cst$5,
cst$6,
is_dir_sep,
is_relative,
is_implicit,
check_suffix,
chop_suffix_opt,
temp_dir_name,
quote,
quote_command,
basename,
dirname];
function is_dir_sep$0(s, i){
var c = caml_string_get(s, i), a = 47 === c ? 1 : 0;
if(a)
var b = a;
else
var d = 92 === c ? 1 : 0, b = d || (58 === c ? 1 : 0);
return b;
}
function is_relative$0(n){
var
d = caml_ml_string_length(n) < 1 ? 1 : 0,
b = d || (47 !== caml_string_get(n, 0) ? 1 : 0);
if(b){
var
e = caml_ml_string_length(n) < 1 ? 1 : 0,
c = e || (92 !== caml_string_get(n, 0) ? 1 : 0);
if(c)
var
f = caml_ml_string_length(n) < 2 ? 1 : 0,
a = f || (58 !== caml_string_get(n, 1) ? 1 : 0);
else
var a = c;
}
else
var a = b;
return a;
}
function is_implicit$0(n){
var b = is_relative$0(n);
if(b){
var
f = caml_ml_string_length(n) < 2 ? 1 : 0,
c = f || (Stdlib_String[16].call(null, n, 0, 2) !== cst$7 ? 1 : 0);
if(c){
var
g = caml_ml_string_length(n) < 2 ? 1 : 0,
d = g || (Stdlib_String[16].call(null, n, 0, 2) !== ".\\" ? 1 : 0);
if(d){
var
h = caml_ml_string_length(n) < 3 ? 1 : 0,
e = h || (Stdlib_String[16].call(null, n, 0, 3) !== cst$8 ? 1 : 0);
if(e)
var
i = caml_ml_string_length(n) < 3 ? 1 : 0,
a = i || (Stdlib_String[16].call(null, n, 0, 3) !== "..\\" ? 1 : 0);
else
var a = e;
}
else
var a = d;
}
else
var a = c;
}
else
var a = b;
return a;
}
function check_suffix$0(name, suff){
var
a = caml_ml_string_length(suff) <= caml_ml_string_length(name) ? 1 : 0;
if(a)
var
s =
Stdlib_String[16].call
(null,
name,
caml_ml_string_length(name) - caml_ml_string_length(suff) | 0,
caml_ml_string_length(suff)),
c = Stdlib_String[27].call(null, suff),
b = Stdlib_String[27].call(null, s) === c ? 1 : 0;
else
var b = a;
return b;
}
function chop_suffix_opt$0(suffix, filename){
var
len_s = caml_ml_string_length(suffix),
len_f = caml_ml_string_length(filename);
if(len_s > len_f) return 0;
var
r = Stdlib_String[16].call(null, filename, len_f - len_s | 0, len_s),
a = Stdlib_String[27].call(null, suffix);
return Stdlib_String[27].call(null, r) === a
? [0,
Stdlib_String[16].call(null, filename, 0, len_f - len_s | 0)]
: 0;
}
try{var f = caml_sys_getenv("TEMP"), temp_dir_name$0 = f;}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn$0, 0);
var temp_dir_name$0 = cst$4;
}
function quote$0(s){
var
l = caml_ml_string_length(s),
b = Stdlib_Buffer[1].call(null, l + 20 | 0);
Stdlib_Buffer[12].call(null, b, 34);
function loop$0(counter, i$1){
var i = i$1;
for(;;){
if(i === l) return Stdlib_Buffer[12].call(null, b, 34);
var c = caml_string_get(s, i);
if(34 === c){
var a = 0;
return counter < 50
? loop_bs(counter + 1 | 0, a, i)
: caml_trampoline_return(loop_bs, [0, a, i]);
}
if(92 === c){
var d = 0;
return counter < 50
? loop_bs(counter + 1 | 0, d, i)
: caml_trampoline_return(loop_bs, [0, d, i]);
}
Stdlib_Buffer[12].call(null, b, c);
var i$0 = i + 1 | 0;
i = i$0;
}
}
function loop(i){return caml_trampoline(loop$0(0, i));}
function loop_bs(counter, n$1, i$1){
var n = n$1, i = i$1;
for(;;){
if(i === l){Stdlib_Buffer[12].call(null, b, 34); return add_bs(n);}
var match = caml_string_get(s, i);
if(34 === match){
add_bs((2 * n | 0) + 1 | 0);
Stdlib_Buffer[12].call(null, b, 34);
var a = i + 1 | 0;
return counter < 50
? loop$0(counter + 1 | 0, a)
: caml_trampoline_return(loop$0, [0, a]);
}
if(92 !== match){
add_bs(n);
return counter < 50
? loop$0(counter + 1 | 0, i)
: caml_trampoline_return(loop$0, [0, i]);
}
var i$0 = i + 1 | 0, n$0 = n + 1 | 0;
n = n$0;
i = i$0;
}
}
function add_bs(n){
if(n >= 1){
var j = 1;
for(;;){
Stdlib_Buffer[12].call(null, b, 92);
var a = j + 1 | 0;
if(n === j) break;
j = a;
}
}
}
loop(0);
return Stdlib_Buffer[2].call(null, b);
}
var cst$0 = '"', a = [0, cst$0, 0];
function quote_cmd_filename(f){
if
(!
Stdlib_String[23].call
(null,
function(param){if(34 !== param && 37 !== param) return 0; return 1;},
f))
return Stdlib_String[15].call(null, f, 32)
? Stdlib_String[7].call(null, cst, [0, cst$0, [0, f, a]])
: f;
var
b = Stdlib[28].call(null, "Filename.quote_command: bad file name ", f);
return Stdlib[2].call(null, b);
}
var b = [0, cst$0, 0];
function quote_command$0(cmd, stdin, stdout, stderr, args){
if(stderr){
var f = stderr[1];
if(caml_equal(stderr, stdout))
var a = cst_2_1;
else
var m = quote_cmd_filename(f), a = Stdlib[28].call(null, cst_2, m);
}
else
var a = cst;
var e = [0, a, b];
if(stdout)
var
f$0 = stdout[1],
g = quote_cmd_filename(f$0),
c = Stdlib[28].call(null, cst$1, g);
else
var c = cst;
var h = [0, c, e];
if(stdin)
var
f$1 = stdin[1],
i = quote_cmd_filename(f$1),
d = Stdlib[28].call(null, cst$2, i);
else
var d = cst;
var
j = Stdlib_List[20].call(null, quote$0, args),
s = Stdlib_String[7].call(null, cst$3, j),
b$0 = Stdlib_Buffer[1].call(null, caml_ml_string_length(s) + 20 | 0);
Stdlib_String[30].call
(null,
function(c){
a:
{
if(62 <= c){
var a = c - 63 | 0;
if(60 < a >>> 0){if(62 <= a) break a;} else if(31 !== a) break a;
}
else
if(42 <= c){
if(60 !== c) break a;
}
else{
if(33 > c) break a;
switch(c - 33 | 0){case 2:case 3:case 6: break a;
}
}
Stdlib_Buffer[12].call(null, b$0, 94);
return Stdlib_Buffer[12].call(null, b$0, c);
}
return Stdlib_Buffer[12].call(null, b$0, c);
},
s);
var
k = [0, cst$3, [0, Stdlib_Buffer[2].call(null, b$0), [0, d, h]]],
l = [0, cst$0, [0, quote_cmd_filename(cmd), k]];
return Stdlib_String[7].call(null, cst, l);
}
function drive_and_path(s){
var b = 2 <= caml_ml_string_length(s);
if(b){
var param = caml_string_get(s, 0);
a:
{
b:
{
if(91 <= param){
if(25 < param - 97 >>> 0) break b;
}
else if(65 > param) break b;
var a = 1;
break a;
}
var a = 0;
}
var c = a ? 58 === caml_string_get(s, 1) : a;
}
else
var c = b;
if(! c) return [0, cst, s];
var
d = Stdlib_String[16].call(null, s, 2, caml_ml_string_length(s) - 2 | 0);
return [0, Stdlib_String[16].call(null, s, 0, 2), d];
}
var current_dir_name$0 = cst$4;
function dirname$0(s){
var
match = drive_and_path(s),
path = match[2],
drive = match[1],
dir = generic_dirname(is_dir_sep$0, current_dir_name$0, path);
return Stdlib[28].call(null, drive, dir);
}
function basename$0(s){
var path = drive_and_path(s)[2];
return generic_basename(is_dir_sep$0, current_dir_name$0, path);
}
var
Win32 =
[0,
"NUL",
current_dir_name$0,
cst$5,
"\\",
is_dir_sep$0,
is_relative$0,
is_implicit$0,
check_suffix$0,
chop_suffix_opt$0,
temp_dir_name$0,
quote$0,
quote_command$0,
basename$0,
dirname$0],
current_dir_name$1 = cst$4;
function basename$1(a){
return generic_basename(is_dir_sep$0, current_dir_name$1, a);
}
function dirname$1(a){
return generic_dirname(is_dir_sep$0, current_dir_name$1, a);
}
var
Cygwin =
[0,
cst_dev_null,
current_dir_name$1,
cst$5,
cst$6,
is_dir_sep$0,
is_relative$0,
is_implicit$0,
check_suffix$0,
chop_suffix_opt$0,
temp_dir_name,
quote,
quote_command,
basename$1,
dirname$1],
match = Stdlib_Sys[4],
Sysdeps = match !== "Cygwin" ? match !== "Win32" ? Unix : Win32 : Cygwin,
null$ = Sysdeps[1],
current_dir_name$2 = Sysdeps[2],
parent_dir_name = Sysdeps[3],
dir_sep = Sysdeps[4],
is_dir_sep$1 = Sysdeps[5],
is_relative$1 = Sysdeps[6],
is_implicit$1 = Sysdeps[7],
check_suffix$1 = Sysdeps[8],
chop_suffix_opt$1 = Sysdeps[9],
temp_dir_name$1 = Sysdeps[10],
quote$1 = Sysdeps[11],
quote_command$1 = Sysdeps[12],
basename$2 = Sysdeps[13],
dirname$2 = Sysdeps[14];
function concat(dirname, filename){
var l = caml_ml_string_length(dirname);
if(0 !== l && ! is_dir_sep$1(dirname, l - 1 | 0)){
var a = Stdlib[28].call(null, dir_sep, filename);
return Stdlib[28].call(null, dirname, a);
}
return Stdlib[28].call(null, dirname, filename);
}
function chop_suffix(name, suff){
return check_suffix$1(name, suff)
? Stdlib_String
[16].call
(null,
name,
0,
caml_ml_string_length(name) - caml_ml_string_length(suff) | 0)
: Stdlib[1].call(null, "Filename.chop_suffix");
}
function extension_len(name){
var i$3 = caml_ml_string_length(name) - 1 | 0, i0 = i$3;
for(;;){
if(0 <= i0 && ! is_dir_sep$1(name, i0)){
if(46 === caml_string_get(name, i0)) break;
var i$2 = i0 - 1 | 0;
i0 = i$2;
continue;
}
return 0;
}
var i$1 = i0 - 1 | 0, i = i$1;
for(;;){
if(0 <= i && ! is_dir_sep$1(name, i)){
if(46 !== caml_string_get(name, i))
return caml_ml_string_length(name) - i0 | 0;
var i$0 = i - 1 | 0;
i = i$0;
continue;
}
return 0;
}
}
function extension(name){
var l = extension_len(name);
return 0 === l
? cst
: Stdlib_String
[16].call
(null, name, caml_ml_string_length(name) - l | 0, l);
}
function chop_extension(name){
var l = extension_len(name);
return 0 === l
? Stdlib[1].call(null, "Filename.chop_extension")
: Stdlib_String
[16].call
(null, name, 0, caml_ml_string_length(name) - l | 0);
}
function remove_extension(name){
var l = extension_len(name);
return 0 === l
? name
: Stdlib_String
[16].call
(null, name, 0, caml_ml_string_length(name) - l | 0);
}
var
prng_key = caml_call2(Stdlib_Domain[10][1], 0, Stdlib_Random[19][2]),
c = [0, [2, 0, [4, 6, [0, 2, 6], 0, [2, 0, 0]]], "%s%06x%s"];
function temp_file_name(temp_dir, prefix, suffix){
var
random_state = caml_call1(Stdlib_Domain[10][2], prng_key),
rnd = caml_call1(Stdlib_Random[19][4], random_state) & 16777215;
return concat
(temp_dir,
caml_call3(Stdlib_Printf[4].call(null, c), prefix, rnd, suffix));
}
var
current_temp_dir_name =
caml_call2
(Stdlib_Domain[10][1],
[0, function(a){return a;}],
function(param){return temp_dir_name$1;});
function set_temp_dir_name(s){
return caml_call2(Stdlib_Domain[10][3], current_temp_dir_name, s);
}
function get_temp_dir_name(param){
return caml_call1(Stdlib_Domain[10][2], current_temp_dir_name);
}
var d = [0, 1, [0, 3, [0, 5, 0]]];
function temp_file(opt, prefix, suffix){
var
temp_dir =
opt ? opt[1] : caml_call1(Stdlib_Domain[10][2], current_temp_dir_name),
counter = 0;
for(;;){
var name = temp_file_name(temp_dir, prefix, suffix);
try{
runtime.caml_sys_close(runtime.caml_sys_open(name, d, 384));
return name;
}
catch(e$0){
var e = caml_wrap_exception(e$0);
if(e[1] !== Stdlib[11]) throw caml_maybe_attach_backtrace(e, 0);
if(20 <= counter) throw caml_maybe_attach_backtrace(e, 0);
var counter$0 = counter + 1 | 0;
counter = counter$0;
}
}
}
var e = [0, 7, 0];
function open_temp_file(b, a, opt, prefix, suffix){
var
mode = b ? b[1] : e,
perms = a ? a[1] : 384,
temp_dir =
opt ? opt[1] : caml_call1(Stdlib_Domain[10][2], current_temp_dir_name),
counter = 0;
for(;;){
var name = temp_file_name(temp_dir, prefix, suffix);
try{
var
c =
[0,
name,
Stdlib[62].call(null, [0, 1, [0, 3, [0, 5, mode]]], perms, name)];
return c;
}
catch(e){
var e$0 = caml_wrap_exception(e);
if(e$0[1] !== Stdlib[11]) throw caml_maybe_attach_backtrace(e$0, 0);
if(20 <= counter) throw caml_maybe_attach_backtrace(e$0, 0);
var counter$0 = counter + 1 | 0;
counter = counter$0;
}
}
}
function temp_dir(a, opt, prefix, suffix){
var
temp_dir =
a ? a[1] : caml_call1(Stdlib_Domain[10][2], current_temp_dir_name),
perms = opt ? opt[1] : 448,
counter = 0;
for(;;){
var name = temp_file_name(temp_dir, prefix, suffix);
try{runtime.caml_sys_mkdir(name, perms); return name;}
catch(e$0){
var e = caml_wrap_exception(e$0);
if(e[1] !== Stdlib[11]) throw caml_maybe_attach_backtrace(e, 0);
if(20 <= counter) throw caml_maybe_attach_backtrace(e, 0);
var counter$0 = counter + 1 | 0;
counter = counter$0;
}
}
}
runtime.caml_register_global
(66,
[0,
current_dir_name$2,
parent_dir_name,
dir_sep,
concat,
is_relative$1,
is_implicit$1,
check_suffix$1,
chop_suffix,
chop_suffix_opt$1,
extension,
remove_extension,
chop_extension,
basename$2,
dirname$2,
null$,
temp_file,
open_temp_file,
temp_dir,
get_temp_dir_name,
set_temp_dir_name,
quote$1,
quote_command$1],
"Stdlib__Filename");
return;
}
(globalThis));
//# 26283 "../.js/default/stdlib/stdlib.cma.js"
//# shape: Stdlib__ListLabels:[F(1),F(2),F(2),F(1)*,F(2)*,F(1),F(1),F(2),F(2),F(1),F(2),F(2),F(2),F(1),F(1),F(3),F(3),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(3),F(3),F(3),F(3),F(3),F(3),F(4),F(4),F(2),F(2),F(3),F(3),F(2),F(2),F(2),F(2),F(1)*->F(1),F(2),F(1)*->F(1),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(1),F(2),F(2),F(2),F(2),F(2),F(3),F(1)*->F(1)*,F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
Stdlib_List = runtime.caml_get_global_data().Stdlib__List,
length = Stdlib_List[1],
compare_lengths = Stdlib_List[2],
compare_length_with = Stdlib_List[3],
is_empty = Stdlib_List[4],
cons = Stdlib_List[5],
hd = Stdlib_List[6],
tl = Stdlib_List[7],
nth = Stdlib_List[8],
nth_opt = Stdlib_List[9],
rev = Stdlib_List[10],
init = Stdlib_List[11],
append = Stdlib_List[12],
rev_append = Stdlib_List[13],
concat = Stdlib_List[14],
flatten = Stdlib_List[15],
equal = Stdlib_List[16],
compare = Stdlib_List[17],
iter = Stdlib_List[18],
iteri = Stdlib_List[19],
map = Stdlib_List[20],
mapi = Stdlib_List[21],
rev_map = Stdlib_List[22],
filter_map = Stdlib_List[23],
concat_map = Stdlib_List[24],
fold_left_map = Stdlib_List[25],
fold_left = Stdlib_List[26],
fold_right = Stdlib_List[27],
iter2 = Stdlib_List[28],
map2 = Stdlib_List[29],
rev_map2 = Stdlib_List[30],
fold_left2 = Stdlib_List[31],
fold_right2 = Stdlib_List[32],
for_all = Stdlib_List[33],
exists = Stdlib_List[34],
for_all2 = Stdlib_List[35],
exists2 = Stdlib_List[36],
mem = Stdlib_List[37],
memq = Stdlib_List[38],
find = Stdlib_List[39],
find_opt = Stdlib_List[40],
find_index = Stdlib_List[41],
find_map = Stdlib_List[42],
find_mapi = Stdlib_List[43],
filter = Stdlib_List[44],
find_all = Stdlib_List[45],
filteri = Stdlib_List[46],
partition = Stdlib_List[47],
partition_map = Stdlib_List[48],
assoc = Stdlib_List[49],
assoc_opt = Stdlib_List[50],
assq = Stdlib_List[51],
assq_opt = Stdlib_List[52],
mem_assoc = Stdlib_List[53],
mem_assq = Stdlib_List[54],
remove_assoc = Stdlib_List[55],
remove_assq = Stdlib_List[56],
split = Stdlib_List[57],
combine = Stdlib_List[58],
sort = Stdlib_List[59],
stable_sort = Stdlib_List[60],
fast_sort = Stdlib_List[61],
sort_uniq = Stdlib_List[62],
merge = Stdlib_List[63],
to_seq = Stdlib_List[64],
of_seq = Stdlib_List[65];
runtime.caml_register_global
(1,
[0,
length,
compare_lengths,
compare_length_with,
is_empty,
cons,
hd,
tl,
nth,
nth_opt,
rev,
init,
append,
rev_append,
concat,
flatten,
equal,
compare,
iter,
iteri,
map,
mapi,
rev_map,
filter_map,
concat_map,
fold_left_map,
fold_left,
fold_right,
iter2,
map2,
rev_map2,
fold_left2,
fold_right2,
for_all,
exists,
for_all2,
exists2,
mem,
memq,
find,
find_opt,
find_index,
find_map,
find_mapi,
filter,
find_all,
filteri,
partition,
partition_map,
assoc,
assoc_opt,
assq,
assq_opt,
mem_assoc,
mem_assq,
remove_assoc,
remove_assq,
split,
combine,
sort,
stable_sort,
fast_sort,
sort_uniq,
merge,
to_seq,
of_seq],
"Stdlib__ListLabels");
return;
}
(globalThis));
//# 16 "../.js/default/re/re.cma.js"
//# shape: Re__Fmt:[F(4),F(2),F(2),F(3),F(2),F(2),F(2),F(4),F(5),F(4),F(2),F(4),F(3),F(2),F(2)]
(function
(globalThis){
"use strict";
var runtime = globalThis.jsoo_runtime;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Format = global_data.Stdlib__Format,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_Bytes = global_data.Stdlib__Bytes,
Stdlib_Array = global_data.Stdlib__Array,
pp_print_string = Stdlib_Format[13],
pp_print_int = Stdlib_Format[19],
pp_print_space = Stdlib_Format[28],
pp_print_list = Stdlib_Format[132],
fprintf = Stdlib_Format[139];
function array(pp_sep, f, fmt, arr){
return pp_print_list(pp_sep, f, fmt, Stdlib_Array[10].call(null, arr));
}
var
cst_3 = "<3>",
cst = "@ ",
a =
[0,
[18,
[1, [0, [11, cst_3, 0], cst_3]],
[12, 40, [2, 0, [17, [0, cst, 1, 0], [15, [12, 41, [17, 0, 0]]]]]]],
"@[<3>(%s@ %a)@]"];
function sexp(fmt, s, pp, x){return caml_call3(fprintf(fmt)(a), s, pp, x);}
var cst_S = "%S", b = [0, [3, 0, 0], cst_S];
function bytes(fmt, t){
var a = Stdlib_Bytes[6].call(null, t);
return caml_call1(Stdlib_Format[139].call(null, fmt)(b), a);
}
function pair(pp1, pp2, fmt, param){
var v2 = param[2], v1 = param[1];
caml_call2(pp1, fmt, v1);
pp_print_space(fmt, 0);
return caml_call2(pp2, fmt, v2);
}
function triple(pp1, pp2, pp3, fmt, param){
var v3 = param[3], v2 = param[2], v1 = param[1];
caml_call2(pp1, fmt, v1);
pp_print_space(fmt, 0);
caml_call2(pp2, fmt, v2);
pp_print_space(fmt, 0);
return caml_call2(pp3, fmt, v3);
}
var c = [0, [15, 0], "%a"];
function opt(f, fmt, x){
if(! x) return pp_print_string(fmt, "<None>");
var x$0 = x[1];
return caml_call2(fprintf(fmt)(c), f, x$0);
}
var d = [0, [17, [0, cst, 1, 0], [4, 0, 0, 0, 0]], "@ %d"];
function optint(fmt, param){
if(! param) return 0;
var i = param[1];
return caml_call1(fprintf(fmt)(d), i);
}
var e = [0, [0, 0], "%c"];
function char(fmt, c){
return caml_call1(Stdlib_Format[139].call(null, fmt)(e), c);
}
var bool = Stdlib_Format[25];
function lit(s, fmt, param){return pp_print_string(fmt, s);}
function to_to_string(pp, x){
var
b = Stdlib_Buffer[1].call(null, 16),
fmt = Stdlib_Format[116].call(null, b);
caml_call2(pp, fmt, x);
return Stdlib_Buffer[2].call(null, b);
}
var f = [0, [3, 0, 0], cst_S];
function quoted_string(fmt, s){
return caml_call1(Stdlib_Format[139].call(null, fmt)(f), s);
}
runtime.caml_register_global
(11,
[0,
sexp,
pp_print_string,
optint,
opt,
char,
bool,
pp_print_int,
pair,
triple,
pp_print_list,
bytes,
array,
lit,
to_to_string,
quoted_string],
"Re__Fmt");
return;
}
(globalThis));
//# 133 "../.js/default/re/re.cma.js"
//# shape: Re__Bit_vector:[F(1)*,F(3),F(1),F(2),F(1),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_bytes_unsafe_get = runtime.caml_bytes_unsafe_get;
function caml_call4(f, a0, a1, a2, a3){
return (f.l >= 0 ? f.l : f.l = f.length) === 4
? f(a0, a1, a2, a3)
: runtime.caml_call_gen(f, [a0, a1, a2, a3]);
}
var
global_data = runtime.caml_get_global_data(),
Re_Fmt = global_data.Re__Fmt,
Stdlib_Format = global_data.Stdlib__Format,
Stdlib_Bytes = global_data.Stdlib__Bytes,
Stdlib = global_data.Stdlib,
Stdlib_Char = global_data.Stdlib__Char;
function length(t){return t[1];}
function set(v, n, b){
var a = n < 0, d = a || v[1] <= n;
if(d) Stdlib[1].call(null, "Bit_vector.set");
var
i = n >>> 3 | 0,
s = v[2],
c = caml_bytes_unsafe_get(s, i),
mask = 1 << (n & 7),
x = b ? c | mask : c & Stdlib[21].call(null, mask),
s$0 = v[2];
runtime.caml_bytes_unsafe_set(s$0, i, Stdlib_Char[1].call(null, x));
return 0;
}
function get(v, n){
var a = n < 0, b = a || v[1] <= n;
if(b) Stdlib[1].call(null, "Bit_vector.get");
var i = n >>> 3 | 0, s = v[2];
return 0 < (caml_bytes_unsafe_get(s, i) & 1 << (n & 7)) ? 1 : 0;
}
function reset_zero(t){
return Stdlib_Bytes[10].call
(null, t[2], 0, runtime.caml_ml_bytes_length(t[2]), 0);
}
function create_zero(len){
var
r = len & 7,
q = len >>> 3 | 0,
len$0 = 0 === r ? q : q + 1 | 0,
bits = Stdlib_Bytes[1].call(null, len$0, 0);
return [0, len, bits];
}
var a = [0, [15, [17, 4, [15, [17, 4, 0]]]], "%a@.%a@."];
function pp(fmt, param){
var bits = param[2], len = param[1];
function len$0(fmt, param){
return Re_Fmt[1].call(null, fmt, "len", Re_Fmt[7], len);
}
function bits$0(fmt, param){
return Re_Fmt[1].call(null, fmt, "bits", Re_Fmt[11], bits);
}
return caml_call4
(Stdlib_Format[139].call(null, fmt)(a), len$0, 0, bits$0, 0);
}
runtime.caml_register_global
(10, [0, length, set, create_zero, get, reset_zero, pp], "Re__Bit_vector");
return;
}
(globalThis));
//# 203 "../.js/default/re/re.cma.js"
//# shape: Re__Dyn:[F(2)*,F(1)*,F(1)*,F(2)*,F(1)*,F(1)*,F(1)*,F(3),F(2)]
(function
(globalThis){
"use strict";
var runtime = globalThis.jsoo_runtime;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function variant(x, y){return [5, x, y];}
function list(x){return [4, x];}
function int(x){return [0, x];}
function pair(x, y){return [1, [0, x, [0, y, 0]]];}
function record(fields){return [6, fields];}
function enum$(x){return [2, x];}
function string(s){return [3, s];}
function result(ok, err, param){
if(0 === param[0]){
var s = param[1], y = [0, caml_call1(ok, s), 0];
return [5, "Ok", y];
}
var e = param[1], y$0 = [0, caml_call1(err, e), 0];
return [5, "Error", y$0];
}
function option(f, param){
if(! param) return [2, "None"];
var s = param[1], y = [0, caml_call1(f, s), 0];
return [5, "Some", y];
}
runtime.caml_register_global
(4,
[0, variant, list, int, pair, record, enum$, string, result, option],
"Re__Dyn");
return;
}
(globalThis));
//# 243 "../.js/default/re/re.cma.js"
//# shape: Re__Category:[F(2)*,F(1)*,N,N,N,N,N,N,N,F(1)*,F(2)*,F(2)*,F(2)*,F(2),F(1)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
global_data = runtime.caml_get_global_data(),
Stdlib_Format = global_data.Stdlib__Format,
Re_Dyn = global_data.Re__Dyn;
function equal(x, y){return x === y ? 1 : 0;}
var compare = runtime.caml_int_compare;
function to_int(x){return x;}
var pp = Stdlib_Format[19];
function intersect(x, y){return 0 !== (x & y) ? 1 : 0;}
function symbol(x, y){return x | y;}
var to_dyn = Re_Dyn[3], letter = 2, not_letter = 4;
function from_char(param){
a:
{
if(170 <= param)
if(187 <= param){
var a = param - 192 | 0;
if(54 < a >>> 0){if(56 > a) break a;} else if(23 === a) break a;
}
else{var c = param - 171 | 0; if(14 >= c >>> 0 && 10 !== c) break a;}
else if(65 <= param){
var b = param - 91 | 0;
if(5 < b >>> 0){if(32 <= b) break a;} else if(4 !== b) break a;
}
else{
if(48 > param){if(10 === param) return 12; break a;}
if(58 <= param) break a;
}
return letter;
}
return not_letter;
}
runtime.caml_register_global
(2,
[0,
symbol,
from_char,
-1,
1,
letter,
not_letter,
8,
16,
32,
to_int,
equal,
compare,
intersect,
pp,
to_dyn],
"Re__Category");
return;
}
(globalThis));
//# 305 "../.js/default/re/re.cma.js"
//# shape: Re__Dense_map:[F(2)->F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
Stdlib_Array = runtime.caml_get_global_data().Stdlib__Array;
function make(size, f){
var cache = Stdlib_Array[1].call(null, size, f);
return function(i){return runtime.caml_check_bound(cache, i)[i + 1];};
}
runtime.caml_register_global(1, [0, make], "Re__Dense_map");
return;
}
(globalThis));
//# 323 "../.js/default/re/re.cma.js"
//# shape: Re__Import:[[F(2),F(2)],[F(2)*],F(2)*,N,F(2)*,F(2)*,F(2)*,F(2)*,F(2)*,[N,N,N,F(1)*,N,N,F(1)*,F(2)*,F(2)*,F(2)*,F(2)*,F(1)*,F(2)*,F(1)*]]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
global_data = runtime.caml_get_global_data();
global_data.Stdlib__Hashtbl;
var
Stdlib_Int = global_data.Stdlib__Int,
equal = runtime.caml_equal,
compare = runtime.caml_compare;
function equal$0(b, a){return b === a ? 1 : 0;}
var symbol = Stdlib_Int[8];
function symbol$0(x, y){return x < y ? 1 : 0;}
function symbol$1(x, y){return y < x ? 1 : 0;}
var
min = Stdlib_Int[10],
max = Stdlib_Int[11],
compare$0 = Stdlib_Int[9],
zero = Stdlib_Int[1],
one = Stdlib_Int[2],
minus_one = Stdlib_Int[3],
abs = Stdlib_Int[4],
max_int = Stdlib_Int[5],
min_int = Stdlib_Int[6],
lognot = Stdlib_Int[7],
equal$1 = Stdlib_Int[8],
compare$1 = Stdlib_Int[9],
min$0 = Stdlib_Int[10],
max$0 = Stdlib_Int[11],
to_string = Stdlib_Int[12],
seeded_hash = Stdlib_Int[13],
hash = Stdlib_Int[14];
runtime.caml_register_global
(3,
[0,
[0, equal, compare],
[0, equal$0],
symbol,
[0, 874682015, 0],
symbol$0,
symbol$1,
min,
max,
compare$0,
[0,
zero,
one,
minus_one,
abs,
max_int,
min_int,
lognot,
equal$1,
compare$1,
min$0,
max$0,
to_string,
seeded_hash,
hash]],
"Re__Import");
return;
}
(globalThis));
//# 391 "../.js/default/re/re.cma.js"
//# shape: Re__Cset:[F(2)*,F(1)*,F(1)*,F(1),F(1)*,N,F(2),F(2),F(2),F(1),F(1),F(2),F(2),N,N,F(2),F(2),F(1),N,N,N,N,N,N,F(2),F(1),N,N,N,N,N,N,N,N,N,N,N,N,F(1)*->F(1),F(1)*,F(3),F(1),F(2),N,N,F(1),F(1)*,F(3),F(1),F(2),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Re_Import = global_data.Re__Import,
Stdlib = global_data.Stdlib,
Assert_failure = global_data.Assert_failure,
Stdlib_ListLabels = global_data.Stdlib__ListLabels,
Re_Dyn = global_data.Re__Dyn,
Re_Fmt = global_data.Re__Fmt,
Stdlib_Format = global_data.Stdlib__Format,
Stdlib_Char = global_data.Stdlib__Char,
Re_Dense_map = global_data.Re__Dense_map,
Stdlib_Map = global_data.Stdlib__Map,
equal_c = Re_Import[10][8];
function to_int(x){return x;}
function of_int(x){return x;}
function to_char(t){return Stdlib_Char[1].call(null, t);}
function of_char(c){return c;}
function compare_pair(a, param){
var
y = param[2],
x = param[1],
y$0 = a[2],
x$0 = a[1],
x$1 = Re_Import[10][9].call(null, x$0, x);
return 0 === x$1 ? Re_Import[10][9].call(null, y$0, y) : x$1;
}
function equal_pair(b, param){
var
y = param[2],
x = param[1],
y$0 = b[2],
x$0 = b[1],
a = Re_Import[10][8].call(null, x$0, x);
return a ? Re_Import[10][8].call(null, y$0, y) : a;
}
function equal(x, y){
return Stdlib_ListLabels[16].call(null, equal_pair, x, y);
}
function compare(x, y){
return Stdlib_ListLabels[17].call(null, compare_pair, x, y);
}
function union(l$3, l$4){
var l$0 = l$3, l = l$4;
for(;;){
if(! l) return l$0;
if(! l$0) return l;
var
r = l[2],
a = l[1],
c2 = a[2],
c1 = a[1],
r$0 = l$0[2],
match = l$0[1],
c2$0 = match[2],
c1$0 = match[1];
if(Re_Import[5].call(null, c2$0 + 1 | 0, c1))
return [0, [0, c1$0, c2$0], union(r$0, l)];
if(Re_Import[5].call(null, c2 + 1 | 0, c1$0))
return [0, [0, c1, c2], union(l$0, r)];
if(Re_Import[5].call(null, c2$0, c2)){
var l$1 = [0, [0, Re_Import[7].call(null, c1$0, c1), c2], r];
l$0 = r$0;
l = l$1;
}
else{
var l$2 = [0, [0, Re_Import[7].call(null, c1$0, c1), c2$0], r$0];
l$0 = l$2;
l = r;
}
}
}
function inter(l$1, l$2){
var l$0 = l$1, l = l$2;
for(;;){
if(! l) return 0;
if(! l$0) return 0;
var
r = l[2],
a = l[1],
c2 = a[2],
c1 = a[1],
r$0 = l$0[2],
match = l$0[1],
c2$0 = match[2],
c1$0 = match[1];
if(Re_Import[5].call(null, c2$0, c1))
l$0 = r$0;
else{
if(! Re_Import[5].call(null, c2, c1$0)){
if(Re_Import[5].call(null, c2$0, c2)){
var b = inter(r$0, l);
return [0, [0, Re_Import[8].call(null, c1$0, c1), c2$0], b];
}
var c = inter(l$0, r);
return [0, [0, Re_Import[8].call(null, c1$0, c1), c2], c];
}
l = r;
}
}
}
function diff(l$1, l$2){
var l$0 = l$1, l = l$2;
for(;;){
if(! l) return l$0;
if(! l$0) return 0;
var
r = l[2],
a = l[1],
c2 = a[2],
c1 = a[1],
r$0 = l$0[2],
match = l$0[1],
c2$0 = match[2],
c1$0 = match[1];
if(Re_Import[5].call(null, c2$0, c1))
return [0, [0, c1$0, c2$0], diff(r$0, l)];
if(Re_Import[5].call(null, c2, c1$0))
l = r;
else{
var
r$1 =
Re_Import[5].call(null, c2, c2$0)
? [0, [0, c2 + 1 | 0, c2$0], r$0]
: r$0;
if(Re_Import[5].call(null, c1$0, c1))
return [0, [0, c1$0, c1 - 1 | 0], diff(r$1, r)];
l$0 = r$1;
l = r;
}
}
}
function single(c){return [0, [0, c, c], 0];}
var single$0 = Re_Dense_map[1].call(null, 257, single);
function csingle(i){return caml_call1(single$0, i);}
function add(c, l){return union(caml_call1(single$0, c), l);}
function offset(o, l){
if(! l) return 0;
var r = l[2], match = l[1], c2 = match[2], c1 = match[1];
return [0, [0, c1 + o | 0, c2 + o | 0], offset(o, r)];
}
var empty = 0;
function union_all(ts){
return Stdlib_ListLabels[26].call(null, union, empty, ts);
}
var cany = [0, [0, 0, 255], 0];
function intersect_all(ts){
return Stdlib_ListLabels[26].call(null, inter, cany, ts);
}
function mem(c, s$0){
var s = s$0;
for(;;){
if(! s) return 0;
var rem = s[2], match = s[1], c2 = match[2], c1 = match[1];
if(c <= c2) return c1 <= c ? 1 : 0;
s = rem;
}
}
function hash_rec(param){
if(! param) return 0;
var r = param[2], match = param[1], j = match[2], i = match[1];
return (i + (13 * j | 0) | 0) + (257 * hash_rec(r) | 0) | 0;
}
function hash(l){return hash_rec(l) & 1073741823;}
var
a = [0, [4, 0, 0, 0, 0], "%d"],
b = [0, [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, 0]]], "%d-%d"];
function print_one(ch, param){
var c2 = param[2], c1 = param[1];
return Re_Import[10][8].call(null, c1, c2)
? caml_call1(Stdlib_Format[139].call(null, ch)(a), c1)
: caml_call2(Stdlib_Format[139].call(null, ch)(b), c1, c2);
}
function pp(ts){
var
a = Re_Fmt[13],
b = [0, function(b, c){return a(", ", b, c);}],
c = Re_Fmt[10];
return function(a){return c(b, print_one, ts, a);};
}
function to_dyn(t){
if(t && ! t[2]){
var match = t[1], y = match[2], x = match[1];
if(Re_Import[10][8].call(null, x, y)) return Re_Dyn[3].call(null, x);
}
var
a =
Stdlib_ListLabels[20].call
(null,
function(param){
var
y = param[2],
x = param[1],
a = Re_Dyn[3].call(null, y),
b = Re_Dyn[3].call(null, x);
return Re_Dyn[4].call(null, b, a);
},
t);
return Re_Dyn[2].call(null, a);
}
function iter(t$0, f){
var t = t$0;
for(;;){
if(! t) return 0;
var xs = t[2], match = t[1], y = match[2], x = match[1];
caml_call2(f, x, y);
t = xs;
}
}
function one_char(param){
if(param && ! param[2]){
var match = param[1], j = match[2], i = match[1];
if(Re_Import[10][8].call(null, i, j)) return [0, i];
}
return 0;
}
function compare$0(a, param){
var
v = param[2],
j = param[1],
u = a[2],
i = a[1],
c = Re_Import[10][9].call(null, i, j);
return 0 === c ? compare(u, v) : c;
}
var CSetMap = Stdlib_Map[1].call(null, [0, compare$0]);
function fold_right(t, init, f){
return Stdlib_ListLabels[27].call
(null,
function(param, acc){
var y = param[2], x = param[1];
return caml_call3(f, x, y, acc);
},
t,
init);
}
function is_empty(param){return param ? 0 : 1;}
var c = [0, "lib/cset.ml", 182, 9];
function prepend(s$0, x$0, l){
var s = s$0;
for(;;){
if(! s) return l;
if(! l) return 0;
var b = l[1], a = b[1];
if(a && ! a[2]){
var
x = b[2],
e = a[1],
d = e[2],
d$0 = e[1],
r = s[2],
match = s[1],
c$0 = match[2],
c$1 = match[1];
if(! Re_Import[5].call(null, c$0, d$0)) break;
s = r;
continue;
}
throw caml_maybe_attach_backtrace([0, Assert_failure, c], 1);
}
var r$0 = l[2];
if(c$1 > d$0)
return Re_Import[6].call(null, c$1, d)
? [0, [0, [0, [0, d$0, d], 0], x], prepend(s, x$0, r$0)]
: [0,
[0, [0, [0, d$0, c$1 - 1 | 0], 0], x],
prepend(s, x$0, [0, [0, [0, [0, c$1, d], 0], x], r$0])];
if(Re_Import[5].call(null, c$0, d)){
var f = prepend(r, x$0, [0, [0, [0, [0, c$0 + 1 | 0, d], 0], x], r$0]);
return [0, [0, [0, [0, d$0, c$0], 0], Stdlib[37].call(null, x$0, x)], f];
}
var g = prepend(s, x$0, r$0);
return [0, [0, [0, [0, d$0, d], 0], Stdlib[37].call(null, x$0, x)], g];
}
function pick(param){
if(! param) return Stdlib[1].call(null, "Re_cset.pick");
var x = param[1][1];
return x;
}
function cseq(c$0, c){
return runtime.caml_lessequal(c$0, c)
? [0, [0, c$0, c], 0]
: [0, [0, c, c$0], 0];
}
var
d = [0, cseq(216, 222), 0],
e = [0, cseq(192, 214), d],
upper = union_all([0, cseq(65, 90), e]),
clower = offset(32, upper),
cdigit = cseq(48, 57),
ascii = cseq(0, 127);
function cadd(c, s){return add(c, s);}
var
space = add(32, cseq(9, 13)),
f = [0, cseq(65, 70), 0],
xdigit = union_all([0, cdigit, [0, cseq(97, 102), f]]),
g = union(clower, upper),
calpha =
Stdlib_ListLabels[27].call
(null, cadd, [0, 170, [0, 181, [0, 186, [0, 223, [0, 255, 0]]]]], g),
calnum = union(calpha, cdigit);
function case_insens(s){
var a = [0, offset(-32, inter(s, clower)), 0];
return union_all([0, s, [0, offset(32, inter(s, upper)), a]]);
}
var
cword = add(95, calnum),
notnl = diff(cany, caml_call1(single$0, 10)),
nl = caml_call1(single$0, 10);
function set(str){
var a = runtime.caml_ml_string_length(str) - 1 | 0;
if(a < 0)
var s$0 = empty;
else{
var s = empty, i = 0;
for(;;){
var
i$0 = runtime.caml_string_get(str, i),
b = union(caml_call1(single$0, i$0), s),
c = i + 1 | 0;
if(a === i){var s$0 = b; break;}
s = b;
i = c;
}
}
return s$0;
}
var
blank = set("\t "),
h = [0, cseq(248, 255), 0],
i = [0, cseq(223, 246), h],
j = [0, caml_call1(single$0, 181), i],
lower = union_all([0, cseq(97, 122), j]),
k = [0, caml_call1(single$0, 186), 0],
alpha =
union_all([0, lower, [0, upper, [0, caml_call1(single$0, 170), k]]]),
alnum = union_all([0, alpha, [0, cdigit, 0]]),
wordc = union_all([0, alnum, [0, caml_call1(single$0, 95), 0]]),
l = [0, cseq(127, 159), 0],
cntrl = union_all([0, cseq(0, 31), l]),
m = [0, cseq(160, 255), 0],
graph = union_all([0, cseq(33, 126), m]),
n = [0, cseq(160, 255), 0],
print = union_all([0, cseq(32, 126), n]),
o = [0, caml_call1(single$0, 247), 0],
p = [0, caml_call1(single$0, 215), o],
q = [0, cseq(187, 191), p],
r = [0, cseq(182, 185), q],
s = [0, cseq(171, 180), r],
t = [0, cseq(160, 169), s],
u = [0, cseq(123, 126), t],
v = [0, cseq(91, 96), u],
w = [0, cseq(58, 64), v],
punct = union_all([0, cseq(33, 47), w]);
runtime.caml_register_global
(18,
[0,
equal_c,
to_int,
of_int,
to_char,
of_char,
-1,
equal,
iter,
union,
union_all,
intersect_all,
inter,
diff,
empty,
single$0,
add,
mem,
case_insens,
cdigit,
calpha,
cword,
notnl,
ascii,
nl,
cseq,
set,
blank,
space,
xdigit,
lower,
upper,
alpha,
alnum,
wordc,
cntrl,
graph,
print,
punct,
pp,
one_char,
fold_right,
hash,
compare,
CSetMap,
cany,
csingle,
is_empty,
prepend,
pick,
offset,
to_dyn],
"Re__Cset");
return;
}
(globalThis));
//# 827 "../.js/default/re/re.cma.js"
//# shape: Re__Hash_set:[F(1)*,F(1),F(2),F(2),F(1),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_bytes_length = runtime.caml_ml_bytes_length;
function caml_call4(f, a0, a1, a2, a3){
return (f.l >= 0 ? f.l : f.l = f.length) === 4
? f(a0, a1, a2, a3)
: runtime.caml_call_gen(f, [a0, a1, a2, a3]);
}
var
global_data = runtime.caml_get_global_data(),
Re_Fmt = global_data.Re__Fmt,
Re_Import = global_data.Re__Import,
Stdlib_ListLabels = global_data.Stdlib__ListLabels,
Stdlib_Array = global_data.Stdlib__Array,
Stdlib_Format = global_data.Stdlib__Format,
Stdlib_Option = global_data.Stdlib__Option,
Stdlib_Bytes = global_data.Stdlib__Bytes,
Assert_failure = global_data.Assert_failure;
function length(t){return caml_ml_bytes_length(t) / 8 | 0;}
function unsafe_get(t, i){
return runtime.caml_int64_to_int32
(Stdlib_Bytes[70].call(null, t, i * 8 | 0));
}
function unsafe_set(t, i, x){
return Stdlib_Bytes[84].call
(null, t, i * 8 | 0, runtime.caml_int64_of_int32(x));
}
function make_absent(len){
return Stdlib_Bytes[1].call(null, len * 8 | 0, 255);
}
function init(t$0){
if(Stdlib_Option[10].call(null, t$0[1])){
var t = runtime.caml_create_bytes(0), a = length(t) - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
unsafe_set(t, i, -1);
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
t$0[1] = Stdlib_Option[2].call(null, [0, t, 0]);
}
return Stdlib_Option[4].call(null, t$0[1]);
}
var x = make_absent(1), b = unsafe_get(x, 0), absent = -1;
if(! Re_Import[3].call(null, b, absent))
throw caml_maybe_attach_backtrace
([0, Assert_failure, [0, "lib/hash_set.ml", 60, 2]], 1);
function create(param){return [0, 0];}
function index_of_offset(slots, index, i){
var i$0 = index + i[1] | 0;
return slots <= i$0 ? i$0 - slots | 0 : i$0;
}
function clear(t){
var match = t[1];
if(! match) return 0;
var t$0 = match[1];
t$0[2] = 0;
var t$1 = t$0[1];
return Stdlib_Bytes[10].call(null, t$1, 0, caml_ml_bytes_length(t$1), 255);
}
function a(t, x){
var
hash = Re_Import[10][14].call(null, x),
slots = length(t[1]),
index = hash & (slots - 1 | 0),
inserting = 1,
i = [0, 0];
for(;;){
if(! inserting){t[2] = t[2] + 1 | 0; return 0;}
var idx = index_of_offset(slots, index, i), elem = unsafe_get(t[1], idx);
if(Re_Import[3].call(null, elem, absent)){unsafe_set(t[1], idx, x); inserting = 0;
}
else
i[1]++;
}
}
function add(t, x){
var
t$0 = init(t),
slots = length(t$0[1]),
c = Re_Import[3].call(null, slots, 0);
if(c)
var b = c;
else{
var d = Re_Import[6].call(null, t$0[2], 0);
if(d)
var
f = runtime.caml_div(slots, t$0[2]),
b = Re_Import[5].call(null, f, 2);
else
var b = d;
}
if(b){
var
old_table = t$0[1],
slots$0 = length(old_table),
g = Re_Import[3].call(null, slots$0, 0) ? 1 : slots$0 << 1,
table = make_absent(g);
t$0[1] = table;
var e = slots$0 - 1 | 0;
if(e >= 0){
var i = 0;
for(;;){
var elem = unsafe_get(old_table, i);
if(elem !== -1) a(t$0, elem);
var h = i + 1 | 0;
if(e === i) break;
i = h;
}
}
}
return a(t$0, x);
}
function is_empty(t){
var t$0 = t[1];
if(Stdlib_Option[10].call(null, t$0)) return 1;
var t$1 = Stdlib_Option[4].call(null, t$0);
return Re_Import[3].call(null, t$1[2], 0);
}
function mem(t, x){
var t$0 = t[1];
if(! Stdlib_Option[10].call(null, t$0)){
var a = Stdlib_Option[4].call(null, t$0)[2];
if(! Re_Import[3].call(null, a, 0)){
var
t$1 = Stdlib_Option[4].call(null, t$0),
hash = Re_Import[10][14].call(null, x),
slots = length(t$1[1]),
index = hash & (slots - 1 | 0),
found = 0,
i = [0, 0];
for(;;){
if(! found && Re_Import[5].call(null, i[1], slots)){
var
idx = index_of_offset(slots, index, i),
elem = unsafe_get(t$1[1], idx);
if(Re_Import[10][8].call(null, elem, x)){found = 1; continue;}
if(Re_Import[10][8].call(null, elem, absent)){i[1] = slots; continue;}
i[1]++;
continue;
}
return found;
}
}
}
return 0;
}
var c = [0, [15, [17, 4, [15, [17, 4, 0]]]], "%a@.%a@."];
function pp(fmt, t){
var
match = init(t),
table = match[1],
size = match[2],
a = length(table) - 1 | 0,
init$0 = 0;
if(a < 0)
var init$2 = init$0;
else{
var init$1 = init$0, i = 0;
for(;;){
var
i$0 = unsafe_get(table, i),
b = Re_Import[3].call(null, i$0, absent) ? init$1 : [0, i$0, init$1],
d = i + 1 | 0;
if(a === i){var init$2 = b; break;}
init$1 = b;
i = d;
}
}
var
e = Stdlib_ListLabels[10].call(null, init$2),
table$0 = Stdlib_Array[11].call(null, e);
function table$1(fmt, param){
var a = Re_Fmt[7], b = Re_Fmt[12];
return Re_Fmt[1].call
(null,
fmt,
"table",
function(c, d){return b(0, a, c, d);},
table$0);
}
function size$0(fmt, param){
return Re_Fmt[1].call(null, fmt, "size", Re_Fmt[7], size);
}
return caml_call4
(Stdlib_Format[139].call(null, fmt)(c), table$1, 0, size$0, 0);
}
runtime.caml_register_global
(12, [0, create, is_empty, add, mem, clear, pp], "Re__Hash_set");
return;
}
(globalThis));
//# 1030 "../.js/default/re/re.cma.js"
//# shape: Re__Mark_infos:[F(1),F(2),F(2),F(2),[F(1)*,F(1)*],F(2),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound;
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Re_Import = global_data.Re__Import,
Stdlib_ListLabels = global_data.Stdlib__ListLabels;
function make(marks){
var
len =
1
+
Stdlib_ListLabels[26].call
(null,
function(ma, param){
var i = param[1];
return Re_Import[8].call(null, ma, i);
},
-1,
marks)
| 0,
t = runtime.caml_make_vect(len, -1);
function set(param){
var v = param[2], i = param[1];
caml_check_bound(t, i)[i + 1] = v;
return 0;
}
Stdlib_ListLabels[18].call(null, set, marks);
return t;
}
function test(t, i){
if(t.length - 1 <= (2 * i | 0)) return 0;
var a = 2 * i | 0;
return -1 !== caml_check_bound(t, a)[a + 1] ? 1 : 0;
}
function is_present(t){return 0 <= t ? 1 : 0;}
function get_no_check(t){return t;}
function start_offset(t, i){
var start_i = 2 * i | 0;
return t.length - 1 <= (start_i + 1 | 0)
? -1
: caml_check_bound(t, start_i)[start_i + 1];
}
function stop_offset(t, i){
var stop_i = (2 * i | 0) + 1 | 0;
return t.length - 1 <= stop_i
? -1
: caml_check_bound(t, stop_i)[stop_i + 1];
}
function offset(t, i){
var start_i = 2 * i | 0, stop_i = start_i + 1 | 0;
if(t.length - 1 <= stop_i) return 0;
var start = caml_check_bound(t, start_i)[start_i + 1];
if(Re_Import[3].call(null, start, -1)) return 0;
var stop = caml_check_bound(t, stop_i)[stop_i + 1];
return [0, [0, start, stop]];
}
function iteri(t, f){
var a = ((t.length - 1) / 2 | 0) - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
var idx = 2 * i | 0, start = caml_check_bound(t, idx)[idx + 1];
if(-1 !== start){
var b = idx + 1 | 0, stop = caml_check_bound(t, b)[b + 1];
caml_call3(f, i, start, stop);
}
var c = i + 1 | 0;
if(a === i) break;
i = c;
}
}
return 0;
}
runtime.caml_register_global
(2,
[0,
make,
offset,
test,
iteri,
[0, is_present, get_no_check],
start_offset,
stop_offset],
"Re__Mark_infos");
return;
}
(globalThis));
//# 1130 "../.js/default/re/re.cma.js"
//# shape: Re__Pmark:[F(2)*,F(2)*,F(1),F(2),F(1)*,N]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
global_data = runtime.caml_get_global_data();
global_data.Stdlib__List;
var
Stdlib_Atomic = global_data.Stdlib__Atomic,
Stdlib_Format = global_data.Stdlib__Format,
Stdlib_Set = global_data.Stdlib__Set,
Re_Dyn = global_data.Re__Dyn;
function equal(x, y){return x === y ? 1 : 0;}
var compare = runtime.caml_int_compare, r = Stdlib_Atomic[1].call(null, 1);
function gen(param){return Stdlib_Atomic[7].call(null, r, 1);}
var
pp = Stdlib_Format[19],
Set = Stdlib_Set[1].call(null, [0, compare]),
empty = Set[1],
add = Set[2],
singleton = Set[3],
remove = Set[4],
union = Set[5],
inter = Set[6],
disjoint = Set[7],
diff = Set[8],
cardinal = Set[9],
elements = Set[10],
min_elt = Set[11],
min_elt_opt = Set[12],
max_elt = Set[13],
max_elt_opt = Set[14],
choose = Set[15],
choose_opt = Set[16],
find = Set[17],
find_opt = Set[18],
find_first = Set[19],
find_first_opt = Set[20],
find_last = Set[21],
find_last_opt = Set[22],
iter = Set[23],
fold = Set[24],
map = Set[25],
filter = Set[26],
filter_map = Set[27],
partition = Set[28],
split = Set[29],
is_empty = Set[30],
mem = Set[31],
equal$0 = Set[32],
compare$0 = Set[33],
subset = Set[34],
for_all = Set[35],
exists = Set[36],
to_list = Set[37],
of_list = Set[38],
to_seq_from = Set[39],
to_seq = Set[40],
to_rev_seq = Set[41],
add_seq = Set[42],
of_seq = Set[43],
to_dyn = Re_Dyn[3];
runtime.caml_register_global
(5,
[0,
equal,
compare,
gen,
pp,
to_dyn,
[0,
empty,
add,
singleton,
remove,
union,
inter,
disjoint,
diff,
cardinal,
elements,
min_elt,
min_elt_opt,
max_elt,
max_elt_opt,
choose,
choose_opt,
find,
find_opt,
find_first,
find_first_opt,
find_last,
find_last_opt,
iter,
fold,
map,
filter,
filter_map,
partition,
split,
is_empty,
mem,
equal$0,
compare$0,
subset,
for_all,
exists,
of_list,
to_seq_from,
to_seq,
to_rev_seq,
add_seq,
of_seq,
to_list]],
"Re__Pmark");
return;
}
(globalThis));
//# 1252 "../.js/default/re/re.cma.js"
//# shape: Re__Automata:[N,N,N,F(1)*,F(2),N,F(2),F(1),F(2),F(4),F(1),F(4),F(2),F(2),F(3),F(2),F(2),F(2),N,[],N,N,F(4)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_trampoline = runtime.caml_trampoline,
caml_trampoline_return = runtime.caml_trampoline_return,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call4(f, a0, a1, a2, a3){
return (f.l >= 0 ? f.l : f.l = f.length) === 4
? f(a0, a1, a2, a3)
: runtime.caml_call_gen(f, [a0, a1, a2, a3]);
}
function caml_call6(f, a0, a1, a2, a3, a4, a5){
return (f.l >= 0 ? f.l : f.l = f.length) === 6
? f(a0, a1, a2, a3, a4, a5)
: runtime.caml_call_gen(f, [a0, a1, a2, a3, a4, a5]);
}
var
global_data = runtime.caml_get_global_data(),
Re_Cset = global_data.Re__Cset,
Re_Category = global_data.Re__Category,
Stdlib_ListLabels = global_data.Stdlib__ListLabels,
Re_Import = global_data.Re__Import,
Re_Bit_vector = global_data.Re__Bit_vector,
Stdlib_Atomic = global_data.Stdlib__Atomic,
Stdlib_Mutex = global_data.Stdlib__Mutex,
Re_Dyn = global_data.Re__Dyn,
Stdlib_Format = global_data.Stdlib__Format,
Re_Fmt = global_data.Re__Fmt,
Re_Mark_infos = global_data.Re__Mark_infos,
Assert_failure = global_data.Assert_failure,
Stdlib = global_data.Stdlib,
Re_Pmark = global_data.Re__Pmark,
Stdlib_Hashtbl = global_data.Stdlib__Hashtbl,
Re_Hash_set = global_data.Re__Hash_set;
function hash_combine(h, accu){return (accu * 65599 | 0) + h | 0;}
var equal = Re_Import[10][8], pp = Re_Fmt[7];
function create(param){return [0, 0];}
var b = Re_Hash_set[3], c = Re_Hash_set[4];
function to_string(param){
return -730718166 === param
? "long"
: 332064784 <= param ? "first" : "short";
}
function to_dyn(t){var a = to_string(t); return Re_Dyn[6].call(null, a);}
var equal$0 = Re_Import[1][1];
function pp$0(ch, k){
var a = to_string(k);
return Stdlib_Format[13].call(null, ch, a);
}
function to_string$0(param){
return 620821490 <= param ? "Non_greedy" : "Greedy";
}
function to_dyn$0(t){
var a = to_string$0(t);
return Re_Dyn[6].call(null, a);
}
function pp$1(fmt, t){
var a = to_string$0(t);
return Stdlib_Format[13].call(null, fmt, a);
}
var
equal$1 = Re_Import[10][8],
compare = Re_Import[10][9],
pp$2 = Stdlib_Format[19],
to_dyn$1 = Re_Dyn[3];
function prev(x){return x - 1 | 0;}
function next(x){return x + 1 | 0;}
function next2(x){return x + 2 | 0;}
function group_count(x){return x / 2 | 0;}
var to_dyn$2 = Re_Dyn[3];
function to_int(x){return x;}
var pp$3 = Stdlib_Format[19], equal$2 = Re_Import[10][8];
function wrap_sem(sem$0, sem, v){
var name = to_string(sem);
if(sem$0){var sem$1 = sem$0[1]; if(equal$0(sem$1, sem)) return v;}
if(4 !== v[0]) return Re_Dyn[1].call(null, name, [0, v, 0]);
var v$0 = v[1];
return Re_Dyn[1].call(null, name, v$0);
}
function d(sem, param){
if(typeof param === "number") return 0;
switch(param[0]){
case 0:
var cs = param[1]; return [0, [0, cs], 0];
case 2:
var y = param[3], x = param[2], sem$0 = param[1];
if(! equal$0(sem, sem$0)) throw Stdlib[8];
var a = d(sem, y[2]);
return [0, x[2], a];
default: throw Stdlib[8];
}
}
var i = [2, "Eps"];
function dyn_of_def(sem){
return function(param){
if(typeof param === "number") return i;
switch(param[0]){
case 0:
var cset = param[1]; return Re_Cset[51].call(null, cset);
case 1:
var
alt = param[1],
a =
Stdlib_ListLabels[20].call
(null, function(a){return to_dyn$3(sem, a);}, alt);
return Re_Dyn[1].call(null, "Alt", a);
case 2:
var
y = param[3],
x = param[2],
sem$0 = param[1],
b = [0, sem$0],
to_dyn = function(a){return to_dyn$3(b, a);},
t = y[2];
a:
{
try{var s = d(sem$0, t);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var match = 0;
break a;
}
var match = [0, s];
}
var cst_Seq = "Seq";
if(match)
var
y$0 = match[1],
e = dyn_of_def(sem),
f = Stdlib_ListLabels[20].call(null, e, y$0),
g = [0, to_dyn(x), f],
x$0 = Re_Dyn[1].call(null, cst_Seq, g);
else
var
h = [0, to_dyn(y), 0],
j = [0, to_dyn(x), h],
x$0 = Re_Dyn[1].call(null, cst_Seq, j);
return wrap_sem(sem, sem$0, x$0);
case 3:
var
t$0 = param[3],
sem$1 = param[2],
k = [0, to_dyn$3([0, sem$1], t$0), 0];
return wrap_sem(sem, sem$1, Re_Dyn[1].call(null, "Rep", k));
case 4:
var m = param[1], l = [0, to_dyn$1(m), 0];
return Re_Dyn[1].call(null, "Mark", l);
case 5:
var
y$1 = param[2],
x$1 = param[1],
n = [0, to_dyn$1(y$1), 0],
o = [0, to_dyn$1(x$1), n];
return Re_Dyn[1].call(null, "Erase", o);
case 6:
var c = param[1], p = [0, Re_Category[15].call(null, c), 0];
return Re_Dyn[1].call(null, "Before", p);
case 7:
var c$0 = param[1], q = [0, Re_Category[15].call(null, c$0), 0];
return Re_Dyn[1].call(null, "After", q);
default:
var m$0 = param[1], r = [0, Re_Pmark[5].call(null, m$0), 0];
return Re_Dyn[1].call(null, "Pmark", r);
}};
}
function to_dyn$3(sem, param){
var def = param[2];
return dyn_of_def(sem)(def);
}
function pp_with_sem(sem, ch, e){
var match = e[2];
if(typeof match === "number") return Re_Fmt[2].call(null, ch, "eps");
switch(match[0]){
case 0:
var l = match[1];
return Re_Fmt[1].call(null, ch, "cst", Re_Cset[39], l);
case 1:
var
l$0 = match[1],
a = function(a, b){return pp_with_sem(sem, a, b);},
d = Re_Fmt[10];
return Re_Fmt[1].call
(null, ch, "alt", function(b, c){return d(0, a, b, c);}, l$0);
case 2:
var
e$0 = match[3],
e$1 = match[2],
k = match[1],
f = function(a, b){return pp_with_sem(sem, a, b);},
g = function(a, b){return pp_with_sem(sem, a, b);},
h = Re_Fmt[9];
return Re_Fmt[1].call
(null,
ch,
"seq",
function(a, b){return h(pp$0, g, f, a, b);},
[0, k, e$1, e$0]);
case 3:
var
e$2 = match[3],
k$0 = match[2],
j = [0, k$0],
m = function(a, b){return pp_with_sem(j, a, b);},
n = Re_Fmt[8];
return Re_Fmt[1].call
(null,
ch,
"rep",
function(a, b){return n(pp$0, m, a, b);},
[0, k$0, e$2]);
case 4:
var i = match[1]; return Re_Fmt[1].call(null, ch, "mark", pp$2, i);
case 5:
var e$3 = match[2], b = match[1], o = Re_Fmt[8];
return Re_Fmt[1].call
(null,
ch,
"erase",
function(a, b){return o(pp$2, pp$2, a, b);},
[0, b, e$3]);
case 6:
var c = match[1];
return Re_Fmt[1].call(null, ch, "before", Re_Category[14], c);
case 7:
var c$0 = match[1];
return Re_Fmt[1].call(null, ch, "after", Re_Category[14], c$0);
default:
var i$0 = match[1];
return Re_Fmt[1].call(null, ch, "pmark", Re_Pmark[4], i$0);
}
}
function pp$4(a, b){return pp_with_sem(0, a, b);}
function mk(ids, def){ids[1]++; return [0, ids[1], def];}
var a = [1, 0];
function empty(ids){return mk(ids, a);}
function cst(ids, s){
return Re_Cset[47].call(null, s) ? mk(ids, a) : mk(ids, [0, s]);
}
function eps(ids){return mk(ids, 0);}
function rep(ids, kind, sem, x){return mk(ids, [3, kind, sem, x]);}
function mark(ids, m){return mk(ids, [4, m]);}
function pmark(ids, i){return mk(ids, [8, i]);}
function erase(ids, m$0, m){return mk(ids, [5, m$0, m]);}
function before(ids, c){return mk(ids, [6, c]);}
function after(ids, c){return mk(ids, [7, c]);}
function alt(ids, l){
if(! l) return mk(ids, a);
if(l[2]) return mk(ids, [1, l]);
var c = l[1];
return c;
}
function seq(ids, kind, x, y){
var a = x[2], match = y[2];
if(typeof a !== "number" && 1 === a[0] && ! a[1]) return x;
if(typeof match !== "number" && 1 === match[0] && ! match[1]) return y;
if(typeof a === "number") return y;
if(typeof match === "number" && equal$0(kind, 332064784)) return x;
return mk(ids, [2, kind, x, y]);
}
function is_eps(expr){return typeof expr[2] === "number" ? 1 : 0;}
function rename(ids, x){
var match = x[2];
if(typeof match !== "number")
switch(match[0]){
case 1:
var l = match[1];
return mk
(ids,
[1,
Stdlib_ListLabels[20].call
(null, function(a){return rename(ids, a);}, l)]);
case 2:
var z = match[3], y = match[2], k = match[1], a = rename(ids, z);
return mk(ids, [2, k, rename(ids, y), a]);
case 3:
var y$0 = match[3], k$0 = match[2], g = match[1];
return mk(ids, [3, g, k$0, rename(ids, y$0)]);
}
return mk(ids, x[2]);
}
var cst_marks = "marks";
function to_dyn$4(param){
var
pmarks = param[2],
marks = param[1],
a = caml_call1(Re_Pmark[6][43], pmarks),
e = Stdlib_ListLabels[20].call(null, Re_Pmark[5], a),
b = [0, [0, "pmarks", Re_Dyn[2].call(null, e)], 0],
c =
Stdlib_ListLabels[20].call
(null,
function(param){
var
idx = param[2],
m = param[1],
a = to_dyn$2(idx),
b = to_dyn$1(m);
return Re_Dyn[4].call(null, b, a);
},
marks),
d = [0, [0, cst_marks, Re_Dyn[2].call(null, c)], b];
return Re_Dyn[5].call(null, d);
}
function equal$3(param, t){
var
pmarks = param[2],
marks = param[1],
a =
Stdlib_ListLabels[16].call
(null,
function(b, param){
var
y = param[2],
x = param[1],
y$0 = b[2],
x$0 = b[1],
a = equal$1(x$0, x);
return a ? equal$2(y$0, y) : a;
},
marks,
t[1]);
return a ? caml_call2(Re_Pmark[6][32], pmarks, t[2]) : a;
}
var empty$0 = [0, 0, Re_Pmark[6][1]];
function f(acc, param){
var i = param[2], a = param[1];
return hash_combine(a, hash_combine(i, acc));
}
function hash(m, accu){
var
init = hash_combine(Stdlib_Hashtbl[28].call(null, m[2]), accu),
l = m[1];
return Stdlib_ListLabels[26].call(null, f, init, l);
}
var unknown = -1;
function marks_set_idx(idx, marks){
if(! marks) return 0;
var rem = marks[2], match = marks[1], idx$0 = match[2], a = match[1];
return equal$2(idx$0, unknown)
? [0, [0, a, idx], marks_set_idx(idx, rem)]
: marks;
}
function marks_set_idx$0(marks, idx){
var a = marks[2];
return [0, marks_set_idx(idx, marks[1]), a];
}
var
cst_2 = "<2>",
cst$0 = "@ ",
j = [0, [15, [12, 45, [15, 0]]], "%a-%a"],
k =
[0,
[18,
[1, [0, [11, cst_2, 0], cst_2]],
[11, cst_marks, [17, [0, cst$0, 1, 0], [15, [17, 0, 0]]]]],
"@[<2>marks@ %a@]"],
l =
[0,
[18,
[1, [0, [11, cst_2, 0], cst_2]],
[11, "pmarks ", [15, [17, 0, 0]]]],
"@[<2>pmarks %a@]"];
function pp$5(fmt, param){
var pmarks = param[2], marks = param[1];
Stdlib_Format[1].call(null, fmt, 1);
if(marks){
var
a =
function(fmt, param){
var i = param[2], a = param[1];
return caml_call4
(Stdlib_Format[139].call(null, fmt)(j), pp$2, a, pp$3, i);
},
b = Stdlib_Format[132];
caml_call2
(Stdlib_Format[139].call(null, fmt)(k),
function(c, d){return b(0, a, c, d);},
marks);
}
var pmarks$0 = caml_call1(Re_Pmark[6][43], pmarks);
if(pmarks$0){
var c = Re_Pmark[4], d = Stdlib_Format[132];
caml_call2
(Stdlib_Format[139].call(null, fmt)(l),
function(a, b){return d(0, c, a, b);},
pmarks$0);
}
return Stdlib_Format[3].call(null, fmt, 0);
}
function equal_list(l1, l2){
return Stdlib_ListLabels[16].call(null, equal$4, l1, l2);
}
function equal$4(x, y){
switch(x[0]){
case 0:
var e1 = x[3], l1 = x[2];
if(0 === y[0]){
var e2 = y[3], l2 = y[2], a = equal(e1[1], e2[1]);
return a ? equal_list(l1, l2) : a;
}
break;
case 1:
var e1$0 = x[2], marks1 = x[1];
if(1 === y[0]){
var e2$0 = y[2], marks2 = y[1], b = equal(e1$0[1], e2$0[1]);
return b ? equal$3(marks1, marks2) : b;
}
break;
default:
var marks1$0 = x[1];
if(2 === y[0]){
var marks2$0 = y[1];
return equal$3(marks1$0, marks2$0);
}
}
return 0;
}
var letrec_function_context = [];
function hash_list(l, init){
return Stdlib_ListLabels[26].call
(null, letrec_function_context[1], init, l);
}
function f$0(accu, x$1){
switch(x$1[0]){
case 0:
var e = x$1[3], l = x$1[2], a = hash_list(l, accu), x = e[1];
return hash_combine(388635598, hash_combine(x, a));
case 1:
var e$0 = x$1[2], marks = x$1[1], b = hash(marks, accu), x$0 = e$0[1];
return hash_combine(726404471, hash_combine(x$0, b));
default:
var marks$0 = x$1[1];
return hash_combine(471882453, hash(marks$0, accu));
}
}
var g = Re_Hash_set[5], h = Re_Hash_set[1];
runtime.caml_update_dummy(letrec_function_context, [0, f$0]);
function e(sem, t){
var
a =
Stdlib_ListLabels[20].call
(null,
function(param){
switch(param[0]){
case 0:
var
y = param[3],
x = param[2],
sem$0 = param[1],
a = [0, to_dyn$3([0, sem$0], y), 0],
b = [0, e([0, sem$0], x), a];
return wrap_sem(sem, sem$0, Re_Dyn[1].call(null, "TSeq", b));
case 1:
var
e$0 = param[2],
marks = param[1],
base = [0, to_dyn$3(sem, e$0), 0],
e$1 =
equal$3(empty$0, marks) ? base : [0, to_dyn$4(marks), base];
return Re_Dyn[1].call(null, "TExp", e$1);
default:
var m = param[1], c = [0, to_dyn$4(m), 0];
return Re_Dyn[1].call(null, "TMarks", c);
}
},
t);
return Re_Dyn[2].call(null, a);
}
function tseq(kind, x, y, rem){
a:
if(x){
var a = x[1];
if(1 === a[0] && typeof a[2][2] === "number" && ! x[2]){var marks = a[1], b = [0, [1, marks, y], 0]; break a;}
var b = [0, [0, kind, x, y], 0];
}
else
var b = 0;
return Stdlib[37].call(null, b, rem);
}
function fold_right(t, init, f){
if(! t) return init;
var xs = t[2], x = t[1];
return caml_call2(f, x, fold_right(xs, init, f));
}
function iter_marks(t, f){
return Stdlib_ListLabels[18].call
(null,
function(e){
if(0 === e[0]){var l = e[2]; return iter_marks(l, f);}
var marks = e[1];
return caml_call1(f, marks);
},
t);
}
var
cst_TExp = "(TExp",
m =
[0,
[18,
[1, [0, [11, cst_2, 0], cst_2]],
[11, "(TSeq", [17, [0, cst$0, 1, 0], [15, [17, [0, cst$0, 1, 0], 0]]]]],
"@[<2>(TSeq@ %a@ "],
n = [0, [17, [0, cst$0, 1, 0], [15, [12, 41, [17, 0, 0]]]], "@ %a)@]"],
o =
[0,
[18,
[1, [0, [11, cst_2, 0], cst_2]],
[11,
cst_TExp,
[17,
[0, cst$0, 1, 0],
[15,
[17,
[0, cst$0, 1, 0],
[12,
40,
[15,
[12, 41, [17, [0, cst$0, 1, 0], [11, "(eps))", [17, 0, 0]]]]]]]]]]],
"@[<2>(TExp@ %a@ (%a)@ (eps))@]"],
p =
[0,
[18,
[1, [0, [11, cst_2, 0], cst_2]],
[11,
cst_TExp,
[17,
[0, cst$0, 1, 0],
[15,
[17,
[0, cst$0, 1, 0],
[12,
40,
[15,
[12, 41, [17, [0, cst$0, 1, 0], [15, [12, 41, [17, 0, 0]]]]]]]]]]]],
"@[<2>(TExp@ %a@ (%a)@ %a)@]"],
q =
[0,
[18,
[1, [0, [11, cst_2, 0], cst_2]],
[11, "(TMatch", [17, [0, cst$0, 1, 0], [15, [12, 41, [17, 0, 0]]]]]],
"@[<2>(TMatch@ %a)@]"];
function print_state_rec(ch, e, y){
switch(e[0]){
case 0:
var x = e[3], l = e[2], sem = e[1];
caml_call2(Stdlib_Format[139].call(null, ch)(m), pp$0, sem);
print_state_lst(ch, l, x);
return caml_call2(Stdlib_Format[139].call(null, ch)(n), pp$4, x);
case 1:
var marks = e[1];
if(typeof e[2][2] === "number"){
var a = y[1];
return caml_call4
(Stdlib_Format[139].call(null, ch)(o), pp, a, pp$5, marks);
}
var x$0 = e[2], b = x$0[1];
return caml_call6
(Stdlib_Format[139].call(null, ch)(p),
pp,
b,
pp$5,
marks,
pp$4,
x$0);
default:
var marks$0 = e[1];
return caml_call2(Stdlib_Format[139].call(null, ch)(q), pp$5, marks$0);
}
}
var
cst$1 = "()",
r = [0, [17, [0, cst$0, 1, 0], [11, "| ", 0]], "@ | "],
s = [0, [11, cst$1, 0], cst$1];
function print_state_lst(ch, l, y){
if(! l) return Stdlib_Format[139].call(null, ch)(s);
var rem = l[2], e = l[1];
print_state_rec(ch, e, y);
return Stdlib_ListLabels[18].call
(null,
function(e){
Stdlib_Format[139].call(null, ch)(r);
return print_state_rec(ch, e, y);
},
rem);
}
var zero = 0;
function pp$6(ch, t){return print_state_lst(ch, [0, t, 0], [0, zero, 0]);}
function first_match(param$0){
var param = param$0;
for(;;){
if(! param) return 0;
var match = param[1];
if(2 === match[0]){var marks = match[1]; return [0, marks];}
var r = param[2];
param = r;
}
}
function remove_matches(t){
return Stdlib_ListLabels[44].call
(null, function(param){return 2 === param[0] ? 0 : 1;}, t);
}
function set_idx(idx, xs){
return Stdlib_ListLabels[20].call
(null,
function(param){
switch(param[0]){
case 0:
var x = param[3], l = param[2], kind = param[1];
return [0, kind, set_idx(idx, l), x];
case 1:
var x$0 = param[2], marks = param[1];
return [1, marks_set_idx$0(marks, idx), x$0];
default:
var marks$0 = param[1];
return [2, marks_set_idx$0(marks$0, idx)];
}
},
xs);
}
function add_match(t, marks){return [0, [2, marks], t];}
function loop(seen, l$2, y){
var l = l$2;
for(;;){
if(! l) return 0;
var x = l[1];
switch(x[0]){
case 0:
var
r = l[2],
x$0 = x[3],
l$0 = x[2],
kind = x[1],
l$1 = loop(seen, l$0, x$0),
r$0 = loop(seen, r, y);
return tseq(kind, l$1, x$0, r$0);
case 1:
if(typeof x[2][2] === "number"){
var r$1 = l[2];
if(! c(seen, y[1])){
b(seen, y[1]);
return [0, x, loop(seen, r$1, y)];
}
l = r$1;
}
else{
var r$2 = l[2], x$1 = x[2];
if(! c(seen, x$1[1])){
b(seen, x$1[1]);
return [0, x, loop(seen, r$2, y)];
}
l = r$2;
}
break;
default: return [0, x, 0];
}
}
}
var u = [0, [12, 91, [15, [12, 93, 0]]], "[%a]"];
function pp$7(fmt, t){
var
t$0 = t[3],
a = Re_Fmt[13],
b = [0, function(b, c){return a("; ", b, c);}],
c = Stdlib_Format[132];
return caml_call2
(Stdlib_Format[139].call(null, fmt)(u),
function(a, d){return c(b, pp$6, a, d);},
t$0);
}
function idx(t){return t[1];}
function to_dyn$5(t){var t$0 = t[3]; return e(0, t$0);}
var empty$1 = 0, dummy = [0, unknown, Re_Category[3], empty$1, 0, -1];
function mk$0(idx, cat, desc){
return [0,
idx,
cat,
desc,
0,
hash_list
(desc,
hash_combine
(idx, hash_combine(Re_Category[10].call(null, cat), 0)))
& 1073741823];
}
function create$0(cat, expr){
return mk$0(0, cat, [0, [1, empty$0, expr], 0]);
}
function equal$5(param, t){
var
desc = param[3],
category = param[2],
idx = param[1],
hash = param[5],
b = Re_Import[10][8].call(null, hash, t[5]);
if(b){
var c = equal$2(idx, t[1]);
if(c){
var d = Re_Category[11].call(null, category, t[2]);
if(d) return equal_list(desc, t[3]);
var a = d;
}
else
var a = c;
}
else
var a = b;
return a;
}
function status_no_mutex(s){
var match$0 = s[4];
if(match$0){var s$0 = match$0[1]; return s$0;}
var param = s[3];
if(param){
var match = param[1];
if(2 === match[0])
var
m = match[1],
a = m[2],
st = [0, Re_Mark_infos[1].call(null, m[1]), a];
else
var st = 1;
}
else
var st = 0;
s[4] = [0, st];
return st;
}
function status(m, s){
var match = s[4];
if(match){var s$0 = match[1]; return s$0;}
Stdlib_Mutex[2].call(null, m);
var st = status_no_mutex(s);
Stdlib_Mutex[4].call(null, m);
return st;
}
function hash$0(t){return t[5];}
var Table = Stdlib_Hashtbl[26].call(null, [0, equal$5, hash$0]);
function create$1(param){
var a = Stdlib_Atomic[1].call(null, 0), b = h(0);
return [0, Re_Bit_vector[3].call(null, 1), b, a];
}
function index_count(w){return Stdlib_Atomic[3].call(null, w[3]);}
var eps_expr = [0, zero, 0];
function delta_expr$0(counter, ctx, marks, x, rem){
var c = ctx[1], match = x[2];
if(typeof match === "number") return add_match(rem, marks);
switch(match[0]){
case 0:
var s = match[1];
return Re_Cset[17].call(null, c, s)
? [0, [1, marks, eps_expr], rem]
: rem;
case 1:
var l = match[1];
return Stdlib_ListLabels[27].call
(null,
function(a, b){return delta_expr(ctx, marks, a, b);},
l,
rem);
case 2:
var
z = match[3],
y = match[2],
kind = match[1],
y$0 = delta_expr(ctx, marks, y, empty$1);
return counter < 50
? delta_seq$0(counter + 1 | 0, ctx, kind, y$0, z, rem)
: caml_trampoline_return
(delta_seq$0, [0, ctx, kind, y$0, z, rem]);
case 3:
var
y$1 = match[3],
kind$0 = match[2],
rep_kind = match[1],
y$2 = delta_expr(ctx, marks, y$1, empty$1),
match$0 = first_match(y$2);
if(match$0)
var
marks$0 = match$0[1],
marks$1 = marks$0,
y$3 = remove_matches(y$2);
else
var marks$1 = marks, y$3 = y$2;
return 620821490 <= rep_kind
? add_match(tseq(kind$0, y$3, x, rem), marks)
: tseq(kind$0, y$3, x, add_match(rem, marks$1));
case 4:
var i = match[1], b = marks[2];
return add_match
(rem,
[0,
[0,
[0, i, unknown],
Stdlib_ListLabels[56].call(null, i, marks[1])],
b]);
case 5:
var
stop_inclusive = match[2],
start_inclusive = match[1],
a = marks[2];
return add_match
(rem,
[0,
Stdlib_ListLabels[44].call
(null,
function(param){
var
i = param[1],
a = Re_Import[5].call(null, i, start_inclusive);
return a ? a : Re_Import[6].call(null, i, stop_inclusive);
},
marks[1]),
a]);
case 6:
var cat = match[1];
return Re_Category[13].call(null, ctx[3], cat)
? add_match(rem, marks)
: rem;
case 7:
var cat$0 = match[1];
return Re_Category[13].call(null, ctx[2], cat$0)
? add_match(rem, marks)
: rem;
default:
var i$0 = match[1], d = caml_call2(Re_Pmark[6][2], i$0, marks[2]);
return add_match(rem, [0, marks[1], d]);
}
}
function delta_expr(ctx, marks, x, rem){
return caml_trampoline(delta_expr$0(0, ctx, marks, x, rem));
}
var t = [0, "lib/automata.ml", 528, 14];
function delta_seq$0(counter, ctx, kind, y$1, z, rem){
var match = first_match(y$1);
if(! match) return tseq(kind, y$1, z, rem);
var marks = match[1];
if(-730718166 === kind){
var b = delta_expr(ctx, marks, z, rem);
return tseq(kind, remove_matches(y$1), z, b);
}
if(332064784 > kind){
var a = tseq(kind, remove_matches(y$1), z, rem);
return counter < 50
? delta_expr$0(counter + 1 | 0, ctx, marks, z, a)
: caml_trampoline_return(delta_expr$0, [0, ctx, marks, z, a]);
}
var l = 0, param = y$1;
for(;;){
if(! param) throw caml_maybe_attach_backtrace([0, Assert_failure, t], 1);
var x = param[1];
if(2 === x[0]){
var
r$0 = param[2],
y = remove_matches(r$0),
y$0 = Stdlib_ListLabels[10].call(null, l);
return tseq
(kind, y$0, z, delta_expr(ctx, marks, z, tseq(kind, y, z, rem)));
}
var r = param[2], l$0 = [0, x, l];
l = l$0;
param = r;
}
}
function delta_seq(ctx, kind, y, z, rem){
return caml_trampoline(delta_seq$0(0, ctx, kind, y, z, rem));
}
function delta_desc(ctx, marks, l, rem){
return fold_right
(l,
rem,
function(expr, acc){
switch(expr[0]){
case 0:
var
z = expr[3],
y = expr[2],
kind = expr[1],
y$0 = delta_desc(ctx, marks, y, empty$1);
return delta_seq(ctx, kind, y$0, z, acc);
case 1:
var e = expr[2], marks$0 = expr[1];
return delta_expr(ctx, marks$0, e, acc);
default: return [0, expr, acc];
}
});
}
function delta(tbl_ref, next_cat, char, st){
var
prev_cat = st[2],
ctx = [0, char, prev_cat, next_cat],
l = delta_desc(ctx, empty$0, st[3], empty$1),
seen = tbl_ref[2];
g(seen);
var expr = loop(seen, l, eps_expr);
Re_Bit_vector[5].call(null, tbl_ref[1]);
var tbl = tbl_ref[1];
iter_marks
(expr,
function(marks){
return Stdlib_ListLabels[18].call
(null,
function(param){
var i = param[2], a = 0 <= i ? 1 : 0;
return a ? Re_Bit_vector[2].call(null, tbl, i, 1) : a;
},
marks[1]);
});
var
len = Re_Bit_vector[1].call(null, tbl_ref[1]),
tbl$0 = tbl_ref[1],
idx = 0;
for(;;){
if
(!
Re_Import[3].call(null, idx, len)
&& Re_Bit_vector[4].call(null, tbl$0, idx)){
var idx$0 = idx + 1 | 0;
idx = idx$0;
continue;
}
if(Re_Import[3].call(null, idx, len)){
tbl_ref[1] = Re_Bit_vector[3].call(null, 2 * len | 0);
Stdlib_Atomic[4].call(null, tbl_ref[3], 2 * len | 0);
}
var expr$0 = set_idx(idx, expr);
return mk$0(idx, next_cat, expr$0);
}
}
runtime.caml_register_global
(60,
[0,
[0, compare, 0, prev, next, next2, group_count],
[0, to_dyn, pp$0],
[0, to_dyn$0, pp$1],
is_eps,
pp$4,
[0, create],
cst,
empty,
alt,
seq,
eps,
rep,
mark,
pmark,
erase,
before,
after,
rename,
[0, to_int],
[0],
[0,
pp$7,
dummy,
create$0,
idx,
status_no_mutex,
status,
to_dyn$5,
Table],
[0, create$1, index_count],
delta],
"Re__Automata");
return;
}
(globalThis));
//# 2236 "../.js/default/re/re.cma.js"
//# shape: Re__Color_map:[[F(2),F(1)*],[F(2),F(2)*,F(2)],F(1),F(1),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_bytes_set = runtime.caml_bytes_set,
caml_create_bytes = runtime.caml_create_bytes,
caml_string_get = runtime.caml_string_get,
global_data = runtime.caml_get_global_data(),
Re_Cset = global_data.Re__Cset,
Stdlib_Char = global_data.Stdlib__Char,
Stdlib_Bytes = global_data.Stdlib__Bytes;
function repr(t, color){
return caml_string_get(t, Re_Cset[2].call(null, color));
}
var length = runtime.caml_ml_string_length;
function get_char(t, c){
return caml_string_get(t, Re_Cset[2].call(null, c));
}
function get(t, c){
return Re_Cset[5].call(null, runtime.caml_string_unsafe_get(t, c));
}
function translate_colors(cm, cset){
return Re_Cset[41].call
(null,
cset,
Re_Cset[14],
function(i, j, l){
var
start = get_char(cm, i),
stop = get_char(cm, j),
a = Re_Cset[25].call(null, start, stop);
return Re_Cset[9].call(null, a, l);
});
}
function make(param){return Stdlib_Bytes[1].call(null, 257, 0);}
function flatten(cm){
var c = caml_create_bytes(256), color_repr = caml_create_bytes(256);
caml_bytes_set(c, 0, 0);
caml_bytes_set(color_repr, 0, 0);
var v = 0, i = 1;
for(;;){
if(0 !== runtime.caml_bytes_get(cm, i))
var v$0 = v + 1 | 0, v$1 = v$0;
else
var v$1 = v;
caml_bytes_set(c, i, Stdlib_Char[1].call(null, v$1));
caml_bytes_set(color_repr, v$1, Stdlib_Char[1].call(null, i));
var b = i + 1 | 0;
if(255 === i){
var a = Stdlib_Bytes[8].call(null, color_repr, 0, v$1 + 1 | 0);
return [0, Stdlib_Bytes[44].call(null, c), a];
}
v = v$1;
i = b;
}
}
function split(t, set){
return Re_Cset[8].call
(null,
set,
function(i, j){
caml_bytes_set(t, Re_Cset[2].call(null, i), 1);
return caml_bytes_set(t, Re_Cset[2].call(null, j) + 1 | 0, 1);
});
}
runtime.caml_register_global
(3,
[0,
[0, repr, length],
[0, get_char, get, translate_colors],
make,
flatten,
split],
"Re__Color_map");
return;
}
(globalThis));
//# 2318 "../.js/default/re/re.cma.js"
//# shape: Re__Ast:[N,F(2),F(1),F(2),F(1),F(2),N,F(1)*,F(1)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call5(f, a0, a1, a2, a3, a4){
return (f.l >= 0 ? f.l : f.l = f.length) === 5
? f(a0, a1, a2, a3, a4)
: runtime.caml_call_gen(f, [a0, a1, a2, a3, a4]);
}
var
global_data = runtime.caml_get_global_data(),
Re_Cset = global_data.Re__Cset,
Re_Dyn = global_data.Re__Dyn,
Stdlib_ListLabels = global_data.Stdlib__ListLabels,
Re_Pmark = global_data.Re__Pmark,
Re_Automata = global_data.Re__Automata,
Re_Fmt = global_data.Re__Fmt,
Stdlib_Format = global_data.Stdlib__Format,
Re_Import = global_data.Re__Import,
Stdlib_Option = global_data.Stdlib__Option,
Stdlib = global_data.Stdlib,
Re_Color_map = global_data.Re__Color_map,
Stdlib_String = global_data.Stdlib__String,
Assert_failure = global_data.Assert_failure,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_Char = global_data.Stdlib__Char,
Re_Dense_map = global_data.Re__Dense_map,
cst_Alternative = "Alternative",
cst_Case = "Case",
cst_No_case = "No_case";
function dyn_of_ast(f){
return function(param){
switch(param[0]){
case 0:
var xs = param[1], b = Stdlib_ListLabels[20].call(null, f, xs);
return Re_Dyn[1].call(null, cst_Alternative, b);
case 1:
var a = param[1], c = [0, caml_call1(f, a), 0];
return Re_Dyn[1].call(null, cst_No_case, c);
default:
var a$0 = param[1], d = [0, caml_call1(f, a$0), 0];
return Re_Dyn[1].call(null, cst_Case, d);
}};
}
function pp_ast(f, fmt, ast){
function var$(s, re){return Re_Fmt[1].call(null, fmt, s, f, re);}
switch(ast[0]){
case 0:
var alt = ast[1], a = Re_Fmt[10];
return Re_Fmt[1].call
(null,
fmt,
cst_Alternative,
function(b, c){return a(0, f, b, c);},
alt);
case 1:
var c = ast[1]; return var$(cst_No_case, c);
default: var c$0 = ast[1]; return var$(cst_Case, c$0);
}
}
var
cst_Complement = "Complement",
cst_Difference = "Difference",
cst_Intersection = "Intersection";
function dyn_of_cset(param){
switch(param[0]){
case 0:
var cset = param[1], a = [0, Re_Cset[51].call(null, cset), 0];
return Re_Dyn[1].call(null, "Cset", a);
case 1:
var
xs = param[1],
b = Stdlib_ListLabels[20].call(null, dyn_of_cset, xs);
return Re_Dyn[1].call(null, cst_Intersection, b);
case 2:
var
xs$0 = param[1],
d = Stdlib_ListLabels[20].call(null, dyn_of_cset, xs$0);
return Re_Dyn[1].call(null, cst_Complement, d);
case 3:
var
y = param[2],
x = param[1],
e = [0, dyn_of_cset(y), 0],
f = [0, dyn_of_cset(x), e];
return Re_Dyn[1].call(null, cst_Difference, f);
default:
var c = param[1], g = [0, dyn_of_ast(dyn_of_cset)(c), 0];
return Re_Dyn[1].call(null, "Cast", g);
}
}
var
cst_Beg_of_line = "Beg_of_line",
cst_Beg_of_str = "Beg_of_str",
cst_Beg_of_word = "Beg_of_word",
cst_End_of_line = "End_of_line",
cst_End_of_str = "End_of_str",
cst_End_of_word = "End_of_word",
cst_Group = "Group",
cst_Last_end_of_line = "Last_end_of_line",
cst_Nest = "Nest",
cst_No_group = "No_group",
cst_Not_bound = "Not_bound",
cst_Pmark = "Pmark",
cst_Repeat = "Repeat",
cst_Sem = "Sem",
cst_Sem_greedy = "Sem_greedy",
cst_Sequence = "Sequence",
cst_Set = "Set",
cst_Start = "Start",
cst_Stop = "Stop";
function dyn_of_gen(f){
return function(param){
if(typeof param === "number")
switch(param){
case 0:
return Re_Dyn[6].call(null, cst_Beg_of_line);
case 1:
return Re_Dyn[6].call(null, cst_End_of_line);
case 2:
return Re_Dyn[6].call(null, cst_Beg_of_word);
case 3:
return Re_Dyn[6].call(null, cst_End_of_word);
case 4:
return Re_Dyn[6].call(null, cst_Not_bound);
case 5:
return Re_Dyn[6].call(null, cst_Beg_of_str);
case 6:
return Re_Dyn[6].call(null, cst_End_of_str);
case 7:
return Re_Dyn[6].call(null, cst_Last_end_of_line);
case 8:
return Re_Dyn[6].call(null, cst_Start);
default: return Re_Dyn[6].call(null, cst_Stop);
}
switch(param[0]){
case 0:
var a = param[1], b = [0, caml_call1(f, a), 0];
return Re_Dyn[1].call(null, cst_Set, b);
case 1:
var ast = param[1], c = [0, dyn_of_ast(dyn_of_gen(f))(ast), 0];
return Re_Dyn[1].call(null, "Ast", c);
case 2:
var
xs = param[1],
d = dyn_of_gen(f),
e = Stdlib_ListLabels[20].call(null, d, xs);
return Re_Dyn[1].call(null, cst_Sequence, e);
case 3:
var max = param[3], min = param[2], gen = param[1];
if(max)
var x = max[1], base = [0, Re_Dyn[3].call(null, x), 0];
else
var base = 0;
var
g = [0, Re_Dyn[3].call(null, min), base],
h = [0, dyn_of_gen(f)(gen), g];
return Re_Dyn[1].call(null, cst_Repeat, h);
case 4:
var t = param[2], name = param[1], args = [0, dyn_of_gen(f)(t), 0];
if(name)
var
name$0 = name[1],
args$0 = [0, Re_Dyn[7].call(null, name$0), args];
else
var args$0 = args;
return Re_Dyn[1].call(null, cst_Group, args$0);
case 5:
var x$0 = param[1], i = [0, dyn_of_gen(f)(x$0), 0];
return Re_Dyn[1].call(null, cst_No_group, i);
case 6:
var x$1 = param[1], j = [0, dyn_of_gen(f)(x$1), 0];
return Re_Dyn[1].call(null, cst_Nest, j);
case 7:
var
t$0 = param[2],
pmark = param[1],
k = [0, dyn_of_gen(f)(t$0), 0],
l = [0, Re_Pmark[5].call(null, pmark), k];
return Re_Dyn[1].call(null, cst_Pmark, l);
case 8:
var
t$1 = param[2],
sem = param[1],
m = [0, dyn_of_gen(f)(t$1), 0],
n = [0, caml_call1(Re_Automata[2][1], sem), m];
return Re_Dyn[1].call(null, cst_Sem, n);
default:
var
t$2 = param[2],
rep = param[1],
o = [0, dyn_of_gen(f)(t$2), 0],
p = [0, caml_call1(Re_Automata[3][1], rep), o];
return Re_Dyn[1].call(null, cst_Sem_greedy, p);
}};
}
var
a = [0, [15, [17, [0, "@ ", 1, 0], [4, 0, 0, 0, [15, 0]]]], "%a@ %d%a"];
function pp_gen(pp_cset, fmt, t){
function pp(a, b){return pp_gen(pp_cset, a, b);}
function var$(s, re){return Re_Fmt[1].call(null, fmt, s, pp, re);}
if(typeof t === "number")
switch(t){
case 0:
return Re_Fmt[2].call(null, fmt, cst_Beg_of_line);
case 1:
return Re_Fmt[2].call(null, fmt, cst_End_of_line);
case 2:
return Re_Fmt[2].call(null, fmt, cst_Beg_of_word);
case 3:
return Re_Fmt[2].call(null, fmt, cst_End_of_word);
case 4:
return Re_Fmt[2].call(null, fmt, cst_Not_bound);
case 5:
return Re_Fmt[2].call(null, fmt, cst_Beg_of_str);
case 6:
return Re_Fmt[2].call(null, fmt, cst_End_of_str);
case 7:
return Re_Fmt[2].call(null, fmt, cst_Last_end_of_line);
case 8:
return Re_Fmt[2].call(null, fmt, cst_Start);
default: return Re_Fmt[2].call(null, fmt, cst_Stop);
}
switch(t[0]){
case 0:
var cset = t[1]; return caml_call2(pp_cset, fmt, cset);
case 1:
var a$0 = t[1]; return pp_ast(pp, fmt, a$0);
case 2:
var rel = t[1], b = Re_Fmt[10];
return Re_Fmt[1].call
(null,
fmt,
cst_Sequence,
function(a, c){return b(0, pp, a, c);},
rel);
case 3:
var
stop = t[3],
start = t[2],
re = t[1],
pp$0 =
function(fmt, param){
var b = Re_Fmt[3];
return caml_call5
(Stdlib_Format[139].call(null, fmt)(a),
pp,
re,
start,
b,
stop);
};
return Re_Fmt[1].call(null, fmt, cst_Repeat, pp$0, 0);
case 4:
var match = t[1];
if(match){
var c = t[2], n = match[1], d = Re_Fmt[2], e = Re_Fmt[8];
return Re_Fmt[1].call
(null,
fmt,
"Named_group",
function(a, b){return e(d, pp, a, b);},
[0, n, c]);
}
var c$0 = t[2];
return var$(cst_Group, c$0);
case 5:
var c$1 = t[1]; return var$(cst_No_group, c$1);
case 6:
var c$2 = t[1]; return var$(cst_Nest, c$2);
case 7:
var r = t[2], m = t[1], f = Re_Pmark[4], g = Re_Fmt[8];
return Re_Fmt[1].call
(null,
fmt,
cst_Pmark,
function(a, b){return g(f, pp, a, b);},
[0, m, r]);
case 8:
var a$1 = t[2], sem = t[1], h = Re_Automata[2][2], i = Re_Fmt[8];
return Re_Fmt[1].call
(null,
fmt,
cst_Sem,
function(a, b){return i(h, pp, a, b);},
[0, sem, a$1]);
default:
var re$0 = t[2], k = t[1], j = Re_Automata[3][2], l = Re_Fmt[8];
return Re_Fmt[1].call
(null,
fmt,
cst_Sem_greedy,
function(a, b){return l(j, pp, a, b);},
[0, k, re$0]);
}
}
function pp_cset(fmt, cset){
function seq(s, rel){
var a = Re_Fmt[10];
return Re_Fmt[1].call
(null, fmt, s, function(b, c){return a(0, pp_cset, b, c);}, rel);
}
switch(cset[0]){
case 0:
var s = cset[1];
return Re_Fmt[1].call(null, fmt, cst_Set, Re_Cset[39], s);
case 1:
var c = cset[1]; return seq(cst_Intersection, c);
case 2:
var c$0 = cset[1]; return seq(cst_Complement, c$0);
case 3:
var b = cset[2], a = cset[1], d = Re_Fmt[8];
return Re_Fmt[1].call
(null,
fmt,
cst_Difference,
function(a, b){return d(pp_cset, pp_cset, a, b);},
[0, a, b]);
default: var s$0 = cset[1]; return pp_ast(pp_cset, fmt, s$0);
}
}
function equal(cset, x1$4, x2$4){
a:
{
b:
{
c:
{
var x1 = x1$4, x2 = x2$4;
d:
for(;;){
if(typeof x1 === "number") break b;
switch(x1[0]){
case 0:
if(typeof x2 === "number") break a;
if(0 !== x2[0]) break a;
var s2 = x2[1], s1 = x1[1];
return caml_call2(cset, s1, s2);
case 1:
break c;
case 2:
break d;
case 3:
if(typeof x2 === "number") break a;
if(3 !== x2[0]) break a;
var
j2 = x2[3],
i2 = x2[2],
x2$0 = x2[1],
j1 = x1[3],
i1 = x1[2],
x1$0 = x1[1],
c = Re_Import[10][8].call(null, i1, i2);
if(c){
var d = Stdlib_Option[12].call(null, Re_Import[10][8], j1, j2);
if(d){x1 = x1$0; x2 = x2$0; break;}
var e = d;
}
else
var e = c;
return e;
case 4:
if(typeof x2 === "number") break a;
if(4 === x2[0]) return 0;
break a;
case 6:
if(typeof x2 === "number") break a;
if(6 !== x2[0]) break a;
var x2$1 = x2[1], x1$1 = x1[1];
x1 = x1$1;
x2 = x2$1;
break;
case 7:
if(typeof x2 === "number") break a;
if(7 !== x2[0]) break a;
var
r2 = x2[2],
m2 = x2[1],
r1 = x1[2],
m1 = x1[1],
f = Re_Pmark[1].call(null, m1, m2);
if(! f) return f;
x1 = r1;
x2 = r2;
break;
case 8:
if(typeof x2 === "number") break a;
if(8 !== x2[0]) break a;
var
x2$2 = x2[2],
sem = x2[1],
x1$2 = x1[2],
sem$0 = x1[1],
g = Re_Import[1][1].call(null, sem$0, sem);
if(! g) return g;
x1 = x1$2;
x2 = x2$2;
break;
case 9:
if(typeof x2 === "number") break a;
if(9 !== x2[0]) break a;
var
x2$3 = x2[2],
rep = x2[1],
x1$3 = x1[2],
rep$0 = x1[1],
h = Re_Import[1][1].call(null, rep$0, rep);
if(! h) return h;
x1 = x1$3;
x2 = x2$3;
break;
default: break a;
}
}
if(typeof x2 === "number") break a;
if(2 !== x2[0]) break a;
var l2 = x2[1], l1 = x1[1];
return Stdlib_ListLabels[16].call
(null, function(a, b){return equal(cset, a, b);}, l1, l2);
}
if(typeof x2 === "number") break a;
if(1 !== x2[0]) break a;
var
y = x2[1],
x = x1[1],
eq = function(a, b){return equal(cset, a, b);},
b = y[1],
a = x[1];
return Stdlib_ListLabels[16].call(null, eq, a, b);
}
switch(x1){
case 0:
if(typeof x2 !== "number" || x2) break a; break;
case 1:
if(typeof x2 !== "number" || 1 !== x2) break a; break;
case 2:
if(typeof x2 !== "number" || 2 !== x2) break a; break;
case 3:
if(typeof x2 !== "number" || 3 !== x2) break a; break;
case 4:
if(typeof x2 !== "number" || 4 !== x2) break a; break;
case 5:
if(typeof x2 !== "number" || 5 !== x2) break a; break;
case 6:
if(typeof x2 !== "number" || 6 !== x2) break a; break;
case 7:
if(typeof x2 !== "number" || 7 !== x2) break a; break;
case 8:
if(typeof x2 !== "number" || 8 !== x2) break a; break;
default: if(typeof x2 !== "number" || 9 > x2) break a;
}
return 1;
}
return 0;
}
var to_dyn = dyn_of_gen(dyn_of_cset);
function pp(a, b){return pp_gen(pp_cset, a, b);}
function cset(cset){return [0, [0, cset]];}
function handle_case_cset(ign_case$0, param$0){
a:
{
b:
{
var ign_case = ign_case$0, param = param$0;
c:
for(;;)
switch(param[0]){
case 0:
var s = param[1]; return ign_case ? Re_Cset[18].call(null, s) : s;
case 1:
break a;
case 2:
break b;
case 3:
var
r = param[2],
r$0 = param[1],
e = handle_case_cset(ign_case, r),
f = Re_Cset[13].call(null, Re_Cset[45], e),
g = handle_case_cset(ign_case, r$0);
return Re_Cset[12].call(null, g, f);
default:
var match = param[1];
switch(match[0]){
case 0:
break c;
case 1:
var a = match[1]; ign_case = 1; param = a; break;
default: var a$0 = match[1]; ign_case = 0; param = a$0;
}
}
var
l$1 = match[1],
h =
Stdlib_ListLabels[20].call
(null, function(a){return handle_case_cset(ign_case, a);}, l$1);
return Re_Cset[10].call(null, h);
}
var
l$0 = param[1],
c =
Stdlib_ListLabels[20].call
(null, function(a){return handle_case_cset(ign_case, a);}, l$0),
d = Re_Cset[10].call(null, c);
return Re_Cset[13].call(null, Re_Cset[45], d);
}
var
l = param[1],
b =
Stdlib_ListLabels[20].call
(null, function(a){return handle_case_cset(ign_case, a);}, l);
return Re_Cset[11].call(null, b);
}
function handle_case(ign_case$0, r$9){
a:
{
var ign_case = ign_case$0, r = r$9;
b:
for(;;){
if(typeof r === "number") return r;
switch(r[0]){
case 0:
var s = r[1]; return [0, handle_case_cset(ign_case, s)];
case 1:
var match = r[1];
switch(match[0]){
case 0:
break a;
case 1:
var r$0 = match[1]; ign_case = 1; r = r$0; break;
default: var r$1 = match[1]; ign_case = 0; r = r$1;
}
break;
case 2:
break b;
case 3:
var j = r[3], i = r[2], r$2 = r[1];
return [3, handle_case(ign_case, r$2), i, j];
case 4:
var r$3 = r[2], n = r[1]; return [4, n, handle_case(ign_case, r$3)];
case 5:
var r$4 = r[1]; return [5, handle_case(ign_case, r$4)];
case 6:
var r$5 = r[1]; return [6, handle_case(ign_case, r$5)];
case 7:
var r$6 = r[2], i$0 = r[1];
return [7, i$0, handle_case(ign_case, r$6)];
case 8:
var r$7 = r[2], k = r[1]; return [8, k, handle_case(ign_case, r$7)];
default:
var r$8 = r[2], k$0 = r[1];
return [9, k$0, handle_case(ign_case, r$8)];
}
}
var l$1 = r[1];
return [2,
Stdlib_ListLabels[20].call
(null, function(a){return handle_case(ign_case, a);}, l$1)];
}
var
l = match[1],
l$0 =
Stdlib_ListLabels[20].call
(null, function(a){return handle_case(ign_case, a);}, l);
return [1, [0, l$0]];
}
function seq(l){if(l && ! l[2]){var r = l[1]; return r;} return [2, l];}
var
f =
Re_Dense_map[1].call
(null,
256,
function(i){
var a = Stdlib_Char[1].call(null, i);
return cset(Re_Cset[46].call(null, a));
});
function char(c){return caml_call1(f, c);}
var any = cset(Re_Cset[45]);
function str(s){
var b = caml_ml_string_length(s) - 1 | 0, a = 0;
if(b < 0)
var l$0 = a;
else{
var l = a, i = b;
for(;;){
var
c = runtime.caml_string_get(s, i),
d = [0, caml_call1(f, c), l],
e = i - 1 | 0;
if(0 === i){var l$0 = d; break;}
l = d;
i = e;
}
}
return seq(l$0);
}
function as_set_elems(elems){
try{
var
e =
Stdlib_ListLabels[20].call
(null,
function(param){
if(typeof param !== "number" && 0 === param[0]){var e = param[1]; return e;}
throw Stdlib[3];
},
elems);
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[3]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
return [0, e];
}
var empty = [1, [0, 0]];
function alt(elems){
if(! elems) return empty;
if(! elems[2]){var x = elems[1]; return x;}
var match = as_set_elems(elems);
if(! match) return [1, [0, elems]];
var elems$0 = match[1];
return [0, [4, [0, elems$0]]];
}
var epsilon = seq(0);
function repn(r, i, j){
var cst_Re_repn = "Re.repn";
if(Re_Import[5].call(null, i, 0)) Stdlib[1].call(null, cst_Re_repn);
if(j){
var j$0 = j[1];
if(Re_Import[5].call(null, j$0, i))
return Stdlib[1].call(null, cst_Re_repn);
if(0 === j$0){
if(0 === i) return epsilon;
}
else if(1 === j$0 && 1 === i) return r;
}
return [3, r, i, j];
}
function rep(r){return repn(r, 0, 0);}
function rep1(r){return repn(r, 1, 0);}
var b = [0, 1];
function opt(r){return repn(r, 0, b);}
var bow = 2, eow = 3;
function word(r){return seq([0, bow, [0, r, [0, eow, 0]]]);}
var bos = 5, eos = 6;
function whole_string(r){return seq([0, bos, [0, r, [0, eos, 0]]]);}
function make_set(f, t){
if(typeof t !== "number" && 0 === t[0]){
var x = t[1];
return [0, [4, caml_call1(f[1], x)]];
}
return [1, caml_call1(f[1], t)];
}
function longest(t){
if(typeof t !== "number" && 0 === t[0]) return t;
return [8, -730718166, t];
}
function shortest(t){
if(typeof t !== "number" && 0 === t[0]) return t;
return [8, -1034406550, t];
}
function first(t){
if(typeof t !== "number" && 0 === t[0]) return t;
return [8, 332064784, t];
}
function greedy(t){
if(typeof t !== "number" && 0 === t[0]) return t;
return [9, -904640576, t];
}
function non_greedy(t){
if(typeof t !== "number" && 0 === t[0]) return t;
return [9, 620821490, t];
}
function group(name, r){return [4, name, r];}
function no_group(t){
if(typeof t !== "number" && 0 === t[0]) return t;
return [5, t];
}
function nest(r){return [6, r];}
function set(str){return cset(Re_Cset[26].call(null, str));}
function mark(r){
var i = Re_Pmark[3].call(null, 0);
return [0, i, [7, i, r]];
}
function as_set_or_error(name, elems){
var match = as_set_elems(elems);
if(! match) return Stdlib[1].call(null, name);
var s = match[1];
return s;
}
function inter(elems){return [0, [1, as_set_or_error("Re.inter", elems)]];}
function compl(elems){return [0, [2, as_set_or_error("Re.compl", elems)]];}
function diff(r$0, r){
if
(typeof r$0 !== "number"
&& 0 === r$0[0] && typeof r !== "number" && 0 === r[0]){
var r$1 = r[1], r$2 = r$0[1];
return [0, [3, r$2, r$1]];
}
return Stdlib[1].call(null, "Re.diff");
}
var f$0 = [0, function(r){return [2, r];}];
function case$(t){return make_set(f$0, t);}
var f$1 = [0, function(r){return [1, r];}];
function no_case(t){return make_set(f$1, t);}
var c = [0, "lib/ast.ml", 363, 32];
function witness(t){
function witness(t$0){
var t = t$0;
a:
for(;;){
var cst = "";
if(typeof t === "number") return cst;
switch(t[0]){
case 0:
var
c$0 = t[1],
a = Re_Cset[49].call(null, c$0),
d = Re_Cset[4].call(null, a);
return Stdlib_String[1].call(null, 1, d);
case 1:
var match = t[1][1];
if(! match)
throw caml_maybe_attach_backtrace([0, Assert_failure, c], 1);
var x = match[1];
t = x;
break;
case 2:
var xs = t[1], e = Stdlib_ListLabels[20].call(null, witness, xs);
return Stdlib_String[7].call(null, cst, e);
case 3:
break a;
case 5:
var r$0 = t[1]; t = r$0; break;
case 6:
t = t[1]; break;
default: t = t[2];
}
}
var
from = t[2],
r = t[1],
w = witness(r),
b =
Stdlib_Buffer[1].call
(null, runtime.caml_mul(caml_ml_string_length(w), from));
if(from >= 1){
var i = 1;
for(;;){
Stdlib_Buffer[16].call(null, b, w);
var f = i + 1 | 0;
if(from === i) break;
i = f;
}
}
return Stdlib_Buffer[2].call(null, b);
}
return witness(handle_case(0, t));
}
function merge_sequences(param$0){
a:
{
var param = param$0;
b:
for(;;){
if(! param) return 0;
var x = param[1];
if(typeof x === "number") break a;
switch(x[0]){
case 1:
var match = x[1];
if(0 !== match[0]) break a;
var r$0 = param[2], l = match[1];
param = Stdlib[37].call(null, l, r$0);
break;
case 2:
break b;
default: break a;
}
}
var match$0 = x[1];
if(match$0){
var
r$1 = param[2],
y = match$0[2],
x$0 = match$0[1],
r$2 = merge_sequences(r$1);
if(r$2){
var a = r$2[1];
if(typeof a !== "number" && 2 === a[0]){
var match$1 = a[1];
if(match$1){
var r$3 = r$2[2], y$0 = match$1[2], x$1 = match$1[1];
if(equal(Re_Cset[7], x$0, x$1)){
var b = [0, seq(y$0), 0];
return [0, [2, [0, x$0, [0, [1, [0, [0, seq(y), b]]], 0]]], r$3];
}
}
}
}
return [0, [2, [0, x$0, y]], r$2];
}
}
var r = param[2];
return [0, x, merge_sequences(r)];
}
function colorize(color_map, regexp){
var lnl = [0, 0];
function colorize(regexp$2){
var regexp = regexp$2;
for(;;){
if(typeof regexp === "number")
switch(regexp){
case 7:
lnl[1] = 1; return 0;
case 0:
case 1:
return Re_Color_map[5].call(null, color_map, Re_Cset[24]);
case 2:
case 3:
case 4:
return Re_Color_map[5].call(null, color_map, Re_Cset[21]);
default: return 0;
}
switch(regexp[0]){
case 0:
var s = regexp[1]; return Re_Color_map[5].call(null, color_map, s);
case 1:
var l = regexp[1][1];
return Stdlib_ListLabels[18].call(null, colorize, l);
case 2:
var l$0 = regexp[1];
return Stdlib_ListLabels[18].call(null, colorize, l$0);
case 3:
var regexp$0 = regexp[1]; regexp = regexp$0; break;
case 4:
case 7:
regexp = regexp[2]; break;
case 5:
case 6:
regexp = regexp[1]; break;
default: var regexp$1 = regexp[2]; regexp = regexp$1;
}
}
}
colorize(regexp);
return lnl[1];
}
function anchored(param$0){
var param = param$0;
for(;;){
if(typeof param === "number")
switch(param){case 5:case 8: return 1;}
else
switch(param[0]){
case 1:
var a = param[1];
if(0 === a[0]){
var als = a[1];
return Stdlib_ListLabels[33].call(null, anchored, als);
}
var r = a[1];
param = r;
continue;
case 2:
var l = param[1];
return Stdlib_ListLabels[34].call(null, anchored, l);
case 3:
var i = param[2], r$0 = param[1], b = Re_Import[6].call(null, i, 0);
if(! b) return b;
param = r$0;
continue;
case 0: break;
case 5:
case 6:
param = param[1]; continue;
default: param = param[2]; continue;
}
return 0;
}
}
function t_of_cset(x){return [0, x];}
runtime.caml_register_global
(81,
[0,
to_dyn,
pp,
merge_sequences,
handle_case,
anchored,
colorize,
[0,
empty,
epsilon,
str,
no_case,
case$,
diff,
compl,
repn,
inter,
char,
any,
set,
mark,
nest,
no_group,
whole_string,
7,
longest,
greedy,
non_greedy,
9,
4,
group,
word,
first,
bos,
bow,
eow,
eos,
0,
8,
1,
opt,
rep,
rep1,
alt,
shortest,
seq,
pp,
witness],
cset,
t_of_cset],
"Re__Ast");
return;
}
(globalThis));
//# 3381 "../.js/default/re/re.cma.js"
//# shape: Re__Group:[F(5)*,F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(1),F(1),F(2),F(1)*,F(1)*,F(2),N,F(2),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound,
caml_make_vect = runtime.caml_make_vect,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace;
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Format = global_data.Stdlib__Format,
Stdlib_Array = global_data.Stdlib__Array,
Re_Fmt = global_data.Re__Fmt,
Stdlib_String = global_data.Stdlib__String,
Re_Mark_infos = global_data.Re__Mark_infos,
Stdlib_Option = global_data.Stdlib__Option,
Stdlib = global_data.Stdlib;
function create(s, gcount, gpos, marks, pmarks){return [0, s, marks, pmarks, gpos, gcount];
}
function is_present(t){return 0 <= t ? 1 : 0;}
function get_no_check(t){return t;}
var absent = -1;
function start_offset(t, i){
var i$0 = Re_Mark_infos[6].call(null, t[2], i);
if(! Re_Mark_infos[5][1].call(null, i$0)) return absent;
var a = Re_Mark_infos[5][2].call(null, i$0);
return caml_check_bound(t[4], a)[a + 1];
}
function stop_offset(t, i){
var i$0 = Re_Mark_infos[7].call(null, t[2], i);
if(! Re_Mark_infos[5][1].call(null, i$0)) return absent;
var a = Re_Mark_infos[5][2].call(null, i$0);
return caml_check_bound(t[4], a)[a + 1];
}
function offset_opt(t, i){
var a = Re_Mark_infos[2].call(null, t[2], i);
return Stdlib_Option[7].call
(null,
function(param){
var
stop = param[2],
start = param[1],
a = caml_check_bound(t[4], stop)[stop + 1];
return [0, caml_check_bound(t[4], start)[start + 1], a];
},
a);
}
function or_not_found(param){
if(! param) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var s = param[1];
return s;
}
function offset(t, i){return or_not_found(offset_opt(t, i));}
function pmarks(t){return t[3];}
function get(t, i){
var a = offset_opt(t, i);
return or_not_found
(Stdlib_Option[7].call
(null,
function(param){
var p2 = param[2], p1 = param[1];
return Stdlib_String[16].call(null, t[1], p1, p2 - p1 | 0);
},
a));
}
function start_opt(subs, i){
var a = offset_opt(subs, i);
return Stdlib_Option[7].call(null, function(a){return a[1];}, a);
}
function start(subs, i){return or_not_found(start_opt(subs, i));}
function stop_opt(subs, i){
var a = offset_opt(subs, i);
return Stdlib_Option[7].call(null, function(a){return a[2];}, a);
}
function stop(subs, i){return or_not_found(stop_opt(subs, i));}
function test(t, i){return Re_Mark_infos[3].call(null, t[2], i);}
function get_opt(t, i){return test(t, i) ? [0, get(t, i)] : 0;}
var dummy_offset = [0, -1, -1];
function all_offset(t){
var res = caml_make_vect(t[5], dummy_offset);
Re_Mark_infos[4].call
(null,
t[2],
function(i, start, stop){
var
p1 = caml_check_bound(t[4], start)[start + 1],
p2 = caml_check_bound(t[4], stop)[stop + 1];
caml_check_bound(res, i)[i + 1] = [0, p1, p2];
return 0;
});
return res;
}
var cst = "";
function all(t){
var res = caml_make_vect(t[5], cst);
Re_Mark_infos[4].call
(null,
t[2],
function(i, start, stop){
var
p1 = caml_check_bound(t[4], start)[start + 1],
p2 = caml_check_bound(t[4], stop)[stop + 1],
a = Stdlib_String[16].call(null, t[1], p1, p2 - p1 | 0);
caml_check_bound(res, i)[i + 1] = a;
return 0;
});
return res;
}
var
a =
[0,
[18,
[1, [0, 0, cst]],
[12,
40,
[2,
0,
[11,
" (",
[4, 0, 0, 0, [12, 32, [4, 0, 0, 0, [11, "))", [17, 0, 0]]]]]]]]],
"@[(%s (%d %d))@]"];
function pp(fmt, t){
var
offsets = all_offset(t),
strs = all(t),
b =
Stdlib_Array[1].call
(null,
strs.length - 1,
function(i){
var a = caml_check_bound(offsets, i)[i + 1];
return [0, caml_check_bound(strs, i)[i + 1], a];
}),
matches = Stdlib_Array[10].call(null, b);
function pp_match(fmt, param){
var match = param[2], stop = match[2], start = match[1], str = param[1];
return caml_call3
(Stdlib_Format[139].call(null, fmt)(a), str, start, stop);
}
var c = Re_Fmt[10];
return Re_Fmt[1].call
(null,
fmt,
"Group",
function(a, b){return c(0, pp_match, a, b);},
matches);
}
function nb_groups(t){return t[5];}
runtime.caml_register_global
(11,
[0,
create,
get,
get_opt,
offset,
offset_opt,
start,
start_opt,
stop,
stop_opt,
all,
all_offset,
test,
pmarks,
nb_groups,
pp,
[0, is_present, get_no_check],
start_offset,
stop_offset],
"Re__Group");
return;
}
(globalThis));
//# 3563 "../.js/default/re/re.cma.js"
//# shape: Re__Slice:[N]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
global_data = runtime.caml_get_global_data(),
Re_Import = global_data.Re__Import,
Stdlib_ListLabels = global_data.Stdlib__ListLabels,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Assert_failure = global_data.Assert_failure,
cst_lib_slice_ml = "lib/slice.ml",
a = [0, cst_lib_slice_ml, 22, 20],
b = [0, cst_lib_slice_ml, 39, 18];
function get_substring(slices, remains, stop){
a:
{
if(Re_Import[3].call(null, stop, remains)) return "";
var slices$0 = slices, remains$0 = remains;
for(;;){
if(Re_Import[3].call(null, remains$0, 0)){var slices$2 = slices$0; break a;}
if(! slices$0)
throw caml_maybe_attach_backtrace([0, Assert_failure, a], 1);
var
slices$1 = slices$0[2],
slice = slices$0[1],
len = slice[3],
pos = slice[2],
remains$1 = remains$0 - len | 0;
if(0 > remains$1) break;
slices$0 = slices$1;
remains$0 = remains$1;
}
var
pos$0 = pos + remains$0 | 0,
len$0 = len - remains$0 | 0,
slices$2 = [0, [0, slice[1], pos$0, len$0], slices$1];
}
var
buf = Stdlib_Buffer[1].call(null, stop - remains | 0),
remains$4 = stop - remains | 0,
slices$3 = slices$2,
remains$2 = remains$4;
for(;;){
if(Re_Import[6].call(null, remains$2, 0)){
if(! slices$3)
throw caml_maybe_attach_backtrace([0, Assert_failure, b], 1);
var
slices$4 = slices$3[2],
match = slices$3[1],
len$1 = match[3],
pos$1 = match[2],
s = match[1],
remains$3 = remains$2 - len$1 | 0;
if(Re_Import[6].call(null, remains$3, 0)){
Stdlib_Buffer[18].call(null, buf, s, pos$1, len$1);
slices$3 = slices$4;
remains$2 = remains$3;
continue;
}
Stdlib_Buffer[18].call(null, buf, s, pos$1, remains$2);
}
return Stdlib_Buffer[2].call(null, buf);
}
}
function drop_rev(t$1, remains$1){
if(Re_Import[3].call(null, remains$1, 0)) return t$1;
var
t$2 = Stdlib_ListLabels[10].call(null, t$1),
t = t$2,
remains = remains$1;
for(;;){
if(Re_Import[3].call(null, remains, 0))
var a = t;
else if(t){
var t$0 = t[2], slice = t[1], len = slice[3], pos = slice[2];
if(len <= remains){
var remains$0 = remains - len | 0;
t = t$0;
remains = remains$0;
continue;
}
var
delta = len - remains | 0,
a = [0, [0, slice[1], pos + delta | 0, len - delta | 0], t$0];
}
else
var a = 0;
return Stdlib_ListLabels[10].call(null, a);
}
}
runtime.caml_register_global
(7, [0, [0, get_substring, drop_rev]], "Re__Slice");
return;
}
(globalThis));
//# 3663 "../.js/default/re/re.cma.js"
//# shape: Re__Compile:[N,F(6),F(6),F(4),F(1),F(1)*,F(1)*,F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound,
caml_make_vect = runtime.caml_make_vect,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_string_get = runtime.caml_string_get,
caml_string_unsafe_get = runtime.caml_string_unsafe_get,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
dummy = 0,
global_data = runtime.caml_get_global_data(),
Re_Import = global_data.Re__Import,
Stdlib_Mutex = global_data.Stdlib__Mutex,
Re_Color_map = global_data.Re__Color_map,
Re_Cset = global_data.Re__Cset,
Stdlib_Char = global_data.Stdlib__Char,
Re_Automata = global_data.Re__Automata,
Re_Category = global_data.Re__Category,
Re_Ast = global_data.Re__Ast,
Stdlib_ListLabels = global_data.Stdlib__ListLabels,
Stdlib = global_data.Stdlib,
Re_Group = global_data.Re__Group,
Re_Slice = global_data.Re__Slice,
Re_Mark_infos = global_data.Re__Mark_infos,
Stdlib_Option = global_data.Stdlib__Option,
Re_Pmark = global_data.Re__Pmark,
Stdlib_Array = global_data.Stdlib__Array;
function break_idx(t){return (t + 5 | 0) * -1 | 0;}
function get_info(param){return param[1];}
function follow_transition(param, color){
return param[(1 + Re_Cset[2].call(null, color) | 0) + 1];
}
function set_transition(param, color, st){
var a = 1 + Re_Cset[2].call(null, color) | 0;
caml_check_bound(param, a)[a + 1] = st;
}
var unknown = -2;
function is_unknown_transition(st, color){
var
st$0 = follow_transition(st, color),
info = get_info(st$0),
x = info[1];
return Re_Import[3].call(null, x, unknown);
}
var info = [0, unknown, 0, Re_Automata[21][2]];
function pp_re(ch, re){return Re_Automata[5].call(null, ch, re[1]);}
function group_count(re){return re[10];}
function group_names(re){return re[9];}
function unsafe_set(t, idx, pos){t[1][idx + 1] = pos;}
function set(t, idx, pos$0){
if(t[2] <= idx)
for(;;){
t[2] = 2 * t[2] | 0;
if(t[2] > idx){
var pos = t[1];
t[1] = caml_make_vect(t[2], 0);
Stdlib_Array[9].call(null, pos, 0, t[1], 0, pos.length - 1);
break;
}
}
return unsafe_set(t, idx, pos$0);
}
function first(t){return caml_check_bound(t[1], 0)[1];}
var empty = [0, [0], 0];
function make(groups, re){
if(! groups) return empty;
var length = caml_call1(Re_Automata[22][2], re[7]) + 1 | 0;
return [0, caml_make_vect(length, 0), length];
}
function category(re, color){
if(Re_Cset[1].call(null, color, Re_Cset[6])) return Re_Category[4];
if(Re_Cset[1].call(null, color, re[6])){
var
a = Re_Category[6],
b = Re_Category[1].call(null, Re_Category[8], Re_Category[7]);
return Re_Category[1].call(null, b, a);
}
var c = Re_Color_map[1][1].call(null, re[4], color);
return Re_Category[2].call(null, c);
}
var unknown_state = [0, info];
function find_state(re, desc){
try{var b = caml_call2(Re_Automata[21][8][7], re[8], desc); return b;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var match = caml_call1(Re_Automata[21][5], desc);
a:
{
if(typeof match === "number" && match){var break_state = 0; break a;}
var break_state = 1;
}
var
idx = caml_call1(Re_Automata[21][4], desc),
a =
break_state
? -5 - caml_call1(Re_Automata[19][1], idx) | 0
: caml_call1(Re_Automata[19][1], idx),
state = [0, a, 0, desc];
if(break_state)
var st$0 = [0, state];
else{
var ncol = re[5], st = caml_make_vect(ncol + 1 | 0, unknown_state);
caml_check_bound(st, 0)[1] = state;
var st$0 = st;
}
caml_call3(Re_Automata[21][8][5], re[8], desc, st$0);
return st$0;
}
}
function delta(re, cat, color, st){
return Re_Automata[23].call(null, re[7], cat, color, st[3]);
}
function validate(re, s, pos, st){
var
a = caml_string_get(s, pos),
color = Re_Color_map[2][2].call(null, re[3], a);
Stdlib_Mutex[2].call(null, re[11]);
if(is_unknown_transition(st, color)){
var
cat = category(re, color),
desc = delta(re, cat, color, get_info(st)),
st$0 = find_state(re, desc);
set_transition(st, color, st$0);
}
return Stdlib_Mutex[4].call(null, re[11]);
}
function next(colors, st, s, pos){
return follow_transition
(st,
Re_Color_map[2][2].call
(null, colors, caml_string_unsafe_get(s, pos)));
}
function loop_no_mark(re, colors, s, pos$1, last, st0$1, st$0){
var pos = pos$1, st0 = st0$1, st = st$0;
for(;;){
if(! Re_Import[5].call(null, pos, last)) return st;
var st0$0 = next(colors, st, s, pos), idx = get_info(st0$0)[1];
if(0 <= idx){
var pos$0 = pos + 1 | 0;
pos = pos$0;
st0 = st0$0;
st = st0$0;
}
else{if(idx <= -3) return st0$0; validate(re, s, pos, st0); st = st0;}
}
}
function final(re, st, cat){
try{var c = Stdlib_ListLabels[51].call(null, cat, st[2]); return c;}
catch(exn$1){
var exn = caml_wrap_exception(exn$1);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
Stdlib_Mutex[2].call(null, re[11]);
try{var b = Stdlib_ListLabels[51].call(null, cat, st[2]), res$0 = b;}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn$0, 0);
var
st$0 = delta(re, cat, Re_Cset[6], st),
a = caml_call1(Re_Automata[21][5], st$0),
res = [0, caml_call1(Re_Automata[21][4], st$0), a];
st[2] = [0, [0, cat, res], st[2]];
var res$0 = res;
}
Stdlib_Mutex[4].call(null, re[11]);
return res$0;
}
}
function find_initial_state(re, cat){
try{var b = Stdlib_ListLabels[51].call(null, cat, re[2]); return b;}
catch(exn$1){
var exn = caml_wrap_exception(exn$1);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
Stdlib_Mutex[2].call(null, re[11]);
try{var a = Stdlib_ListLabels[51].call(null, cat, re[2]), res = a;}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn$0, 0);
var st = find_state(re, caml_call2(Re_Automata[21][3], cat, re[1]));
re[2] = [0, [0, cat, st], re[2]];
var res = st;
}
Stdlib_Mutex[4].call(null, re[11]);
return res;
}
}
function get_color(re, s, pos){
if(Re_Import[5].call(null, pos, 0)) return Re_Cset[6];
var slen = caml_ml_string_length(s);
if(slen <= pos) return Re_Cset[6];
if
(Re_Import[3].call(null, pos, slen - 1 | 0)
&&
!
Re_Cset[1].call(null, re[6], Re_Cset[6])
&& Stdlib_Char[6].call(null, caml_string_unsafe_get(s, pos), 10))
return re[6];
return Re_Color_map[2][2].call
(null, re[3], caml_string_unsafe_get(s, pos));
}
function scan_str(re, positions, s, initial_state, last, pos$2, groups){
if
(Re_Import[3].call(null, last, caml_ml_string_length(s))
&&
!
Re_Cset[1].call(null, re[6], Re_Cset[6])
&& Re_Import[6].call(null, last, pos$2)){
var a = caml_string_get(s, last - 1 | 0);
if(Stdlib_Char[6].call(null, a, 10)){
var
last$0 = last - 1 | 0,
st$2 = scan_str(re, positions, s, initial_state, last$0, pos$2, groups),
x$0 = get_info(st$2)[1];
if(x$0 <= -3) return st$2;
for(;;){
var
st$0 = follow_transition(st$2, re[6]),
info = get_info(st$0),
t = info[1];
if(0 <= t){
if(groups){var t$0 = info[1]; set(positions, t$0, last$0);}
return st$0;
}
var x = info[1];
if(x <= -3){
if(groups) set(positions, break_idx(info[1]), last$0);
return st$0;
}
var color = re[6];
Stdlib_Mutex[2].call(null, re[11]);
if(is_unknown_transition(st$2, color)){
var
cat = category(re, color),
real_c = Re_Color_map[2][2].call(null, re[3], 10),
desc = delta(re, cat, real_c, get_info(st$2)),
st$1 = find_state(re, desc);
set_transition(st$2, color, st$1);
}
Stdlib_Mutex[4].call(null, re[11]);
}
}
}
if(! groups)
return loop_no_mark
(re, re[3], s, pos$2, last, initial_state, initial_state);
var colors = re[3], pos = pos$2, st0 = initial_state, st = initial_state;
for(;;){
if(! Re_Import[5].call(null, pos, last)) return st;
var st0$0 = next(colors, st, s, pos), idx = get_info(st0$0)[1];
if(0 <= idx)
if(Re_Import[5].call(null, idx, positions[2])){
unsafe_set(positions, idx, pos);
var pos$0 = pos + 1 | 0;
pos = pos$0;
st0 = st0$0;
st = st0$0;
}
else{
set(positions, idx, pos);
var pos$1 = pos + 1 | 0;
pos = pos$1;
st0 = st0$0;
st = st0$0;
}
else{
if(idx <= -3){set(positions, break_idx(idx), pos); return st0$0;}
validate(re, s, pos, st0);
st = st0;
}
}
}
function final_boundary_check
(re, positions, last, slen, s, state_info, groups){
var
a =
Re_Import[3].call(null, last, slen)
? Re_Category[4]
: category(re, get_color(re, s, last)),
final_cat = Re_Category[1].call(null, Re_Category[9], a),
match = final(re, state_info, final_cat),
res = match[2],
idx = match[1];
if(groups && typeof res !== "number")
set(positions, caml_call1(Re_Automata[19][1], idx), last);
return res;
}
function make_match_str(re, positions, len, groups, partial, s, pos){
var
slen = caml_ml_string_length(s),
last = Re_Import[3].call(null, len, -1) ? slen : pos + len | 0,
a =
Re_Import[3].call(null, pos, 0)
? Re_Category[4]
: category(re, get_color(re, s, pos - 1 | 0)),
initial_cat = Re_Category[1].call(null, Re_Category[9], a),
initial_state = find_initial_state(re, initial_cat),
st = scan_str(re, positions, s, initial_state, last, pos, groups),
state_info = get_info(st),
x = state_info[1];
a:
if(x > -3){
if(partial && ! groups) break a;
if(partial && groups){
var status = caml_call2(Re_Automata[21][6], re[11], state_info[3]);
if(typeof status === "number" && status){
var
status$0 =
final_boundary_check
(re, positions, last, slen, s, state_info, groups);
return typeof status$0 === "number" ? 1 : status$0;
}
return status;
}
return final_boundary_check
(re, positions, last, slen, s, state_info, groups);
}
return caml_call2(Re_Automata[21][6], re[11], state_info[3]);
}
function create(re){
var
category = Re_Category[1].call(null, Re_Category[9], Re_Category[4]),
state = find_initial_state(re, category);
return [0, state, re];
}
function feed(t, s, pos, len){
var
last = pos + len | 0,
state = loop_no_mark(t[2], t[2][3], s, pos, last, t[1], t[1]),
info = get_info(state),
x = info[1];
if(x <= -3){
var match = caml_call2(Re_Automata[21][6], t[2][11], info[3]);
a:
{if(typeof match === "number" && ! match){var a = 1; break a;} var a = 0;
}
if(a) return 0;
}
return [0, [0, state, t[2]]];
}
function finalize(t, s, pos, len){
var
last = pos + len | 0,
state = scan_str(t[2], empty, s, t[1], last, pos, 0),
info = get_info(state),
final_cat = Re_Category[1].call(null, Re_Category[9], Re_Category[4]);
return typeof final(t[2], info, final_cat)[2] === "number" ? 0 : 1;
}
function no_match_starts_before(t){return t[5];}
function create$0(t){return [0, t, make(1, t[2]), 0, 0, 0];}
function test_mark(t, mark){
return caml_call2(Re_Pmark[6][31], mark, t[1]);
}
function get(t, i){
var a = Re_Mark_infos[2].call(null, t[3], i);
return Stdlib_Option[7].call
(null,
function(param){
var
stop = param[2],
start = param[1],
a = t[5],
start$0 = caml_check_bound(t[4], start)[start + 1] - a | 0,
b = t[5],
stop$0 = caml_check_bound(t[4], stop)[stop + 1] - b | 0;
return caml_call3(Re_Slice[1][1], t[2], start$0, stop$0);
},
a);
}
function loop(re, abs_pos, colors, positions, s, pos$2, last, st0$1, st$0){
var pos = pos$2, st0 = st0$1, st = st$0;
for(;;){
if(! Re_Import[5].call(null, pos, last)) return st;
var st0$0 = next(colors, st, s, pos), idx = get_info(st0$0)[1];
if(0 <= idx)
if(Re_Import[5].call(null, idx, positions[2])){
unsafe_set(positions, idx, abs_pos + pos | 0);
var pos$0 = pos + 1 | 0;
pos = pos$0;
st0 = st0$0;
st = st0$0;
}
else{
set(positions, idx, abs_pos + pos | 0);
var pos$1 = pos + 1 | 0;
pos = pos$1;
st0 = st0$0;
st = st0$0;
}
else{
if(idx <= -3){
set(positions, break_idx(idx), abs_pos + pos | 0);
return st0$0;
}
validate(re, s, pos, st0);
st = st0;
}
}
}
function feed$0(tt, s, pos, len){
var
abs_pos = tt[4],
slices = tt[3],
positions = tt[2],
t = tt[1],
last = pos + len | 0,
state = loop(t[2], abs_pos, t[2][3], positions, s, pos, last, t[1], t[1]),
info = get_info(state),
x = info[1];
if(x <= -3){
var match = caml_call2(Re_Automata[21][6], t[2][11], info[3]);
a:
{if(typeof match === "number" && ! match){var a = 1; break a;} var a = 0;
}
if(a) return 0;
}
var
t$0 = [0, state, t[2]],
slices$0 = [0, [0, s, pos, len], slices],
first_match_pos = first(positions),
slices$1 =
caml_call2(Re_Slice[1][2], slices$0, first_match_pos - tt[5] | 0),
abs_pos$0 = abs_pos + len | 0;
return [0, [0, t$0, tt[2], slices$1, abs_pos$0, first_match_pos]];
}
function finalize$0(tt, s, pos, len){
var
abs_pos = tt[4],
slices = tt[3],
positions = tt[2],
t = tt[1],
last = pos + len | 0,
state = loop(t[2], abs_pos, t[2][3], positions, s, pos, last, t[1], t[1]),
info = get_info(state),
s$0 = caml_call2(Re_Automata[21][6], t[2][11], info[3]);
if(typeof s$0 === "number" && s$0)
var
final_cat = Re_Category[1].call(null, Re_Category[9], Re_Category[4]),
match = final(t[2], info, final_cat),
res = match[2],
idx = match[1],
match$0 =
typeof res === "number"
? res
: (set
(positions,
caml_call1(Re_Automata[19][1], idx),
abs_pos + last | 0),
res);
else
var match$0 = s$0;
if(typeof match$0 === "number") return 0;
var
pmarks = match$0[2],
marks = match$0[1],
first_match_position = first(positions),
slices$0 = [0, [0, s, pos, len], slices],
slices$1 =
caml_call2(Re_Slice[1][2], slices$0, first_match_position - tt[5] | 0),
slices$2 = Stdlib_ListLabels[10].call(null, slices$1),
positions$0 = positions[1];
return [0,
[0, pmarks, slices$2, marks, positions$0, first_match_position]];
}
function match_str_no_bounds(groups, partial, re, s, pos, len){
var
positions = make(groups, re),
match = make_match_str(re, positions, len, groups, partial, s, pos);
if(typeof match !== "number"){
var pmarks = match[2], marks = match[1];
return [0,
Re_Group[1].call(null, s, re[10], positions[1], marks, pmarks)];
}
if(! match) return 0;
var no_match_starts_before = groups ? first(positions) : 0;
return [1, no_match_starts_before];
}
var cst_Re_exec_out_of_bounds = "Re.exec: out of bounds";
function match_str_p(re, s, pos, len){
var a = Re_Import[5].call(null, pos, 0);
if(a)
var b = a;
else
var
c = Re_Import[5].call(null, len, -1),
b =
c || Re_Import[6].call(null, pos + len | 0, caml_ml_string_length(s));
if(b) Stdlib[1].call(null, cst_Re_exec_out_of_bounds);
return typeof make_match_str(re, empty, len, 0, 0, s, pos) === "number"
? 0
: 1;
}
function match_str(groups, partial, re, s, pos, len){
var a = Re_Import[5].call(null, pos, 0);
if(a)
var b = a;
else
var
c = Re_Import[5].call(null, len, -1),
b =
c || Re_Import[6].call(null, pos + len | 0, caml_ml_string_length(s));
if(b) Stdlib[1].call(null, cst_Re_exec_out_of_bounds);
return match_str_no_bounds(groups, partial, re, s, pos, len);
}
function enforce_kind(ids, kind$0, kind, cr){
if(typeof kind$0 === "number" && 332064784 === kind$0){
if(typeof kind === "number" && 332064784 === kind) return cr;
var a = Re_Automata[11].call(null, ids);
return Re_Automata[10].call(null, ids, kind, cr, a);
}
return cr;
}
function translate(ctx$2, ast$3){
a:
{
b:
{
c:
{
d:
{
e:
{
var ctx = ctx$2, ast = ast$3;
f:
for(;;){
var
colors = ctx[8],
cache = ctx[7],
names = ctx[6],
pos = ctx[5],
greedy = ctx[4],
ign_group = ctx[3],
kind = ctx[2],
ids = ctx[1];
if(typeof ast === "number") break a;
switch(ast[0]){
case 0:
break b;
case 1:
break c;
case 2:
var l$1 = ast[1]; return [0, trans_seq(ctx, l$1), kind];
case 3:
break d;
case 4:
var ast$0 = ast[2], n$2 = ast[1];
if(! ign_group) break e;
ast = ast$0;
break;
case 5:
var
ast$1 = ast[1],
ctx$0 =
[0, ctx[1], ctx[2], 1, ctx[4], ctx[5], ctx[6], ctx[7], ctx[8]];
ctx = ctx$0;
ast = ast$1;
break;
case 6:
break f;
case 7:
var
r$2 = ast[2],
i$1 = ast[1],
match$4 = translate(ctx, r$2),
kind$4 = match$4[2],
cr$3 = match$4[1],
M = Re_Automata[14].call(null, ids, i$1);
return [0,
Re_Automata[10].call(null, ids, 332064784, M, cr$3),
kind$4];
case 8:
var
r$3 = ast[2],
kind$5 = ast[1],
match$5 =
translate
([0,
ctx[1],
kind$5,
ctx[3],
ctx[4],
ctx[5],
ctx[6],
ctx[7],
ctx[8]],
r$3),
kind$6 = match$5[2],
cr$4 = match$5[1];
return [0, enforce_kind(ids, kind$5, kind$6, cr$4), kind$5];
default:
var
ast$2 = ast[2],
greedy$0 = ast[1],
ctx$1 =
[0,
ctx[1],
ctx[2],
ctx[3],
greedy$0,
ctx[5],
ctx[6],
ctx[7],
ctx[8]];
ctx = ctx$1;
ast = ast$2;
}
}
var
r$1 = ast[1],
b = pos[1],
match$3 = translate(ctx, r$1),
kind$3 = match$3[2],
cr$2 = match$3[1],
e = caml_call1(Re_Automata[1][3], pos[1]),
K = caml_call2(Re_Automata[1][1], e, b);
if(Re_Import[3].call(null, K, -1)) return [0, cr$2, kind$3];
var L = Re_Automata[15].call(null, ids, b, e);
return [0,
Re_Automata[10].call(null, ids, 332064784, L, cr$2),
kind$3];
}
var p = pos[1];
if(n$2){
var name = n$2[1], F = names[1];
names[1] = [0, [0, name, caml_call1(Re_Automata[1][6], p)], F];
}
pos[1] = caml_call1(Re_Automata[1][5], pos[1]);
var
match$2 = translate(ctx, ast$0),
kind$2 = match$2[2],
cr$1 = match$2[1],
G = caml_call1(Re_Automata[1][4], p),
H = Re_Automata[13].call(null, ids, G),
I = Re_Automata[10].call(null, ids, 332064784, cr$1, H),
J = Re_Automata[13].call(null, ids, p);
return [0, Re_Automata[10].call(null, ids, 332064784, J, I), kind$2];
}
var
j = ast[3],
i$0 = ast[2],
r$0 = ast[1],
match$1 = translate(ctx, r$0),
kind$1 = match$1[2],
cr$0 = match$1[1];
if(j){
var
j$0 = j[1],
f =
620821490 <= greedy
? function
(rem){
var
a = Re_Automata[18].call(null, ids, cr$0),
b = [0, Re_Automata[10].call(null, ids, kind$1, a, rem), 0],
c = [0, Re_Automata[11].call(null, ids), b];
return Re_Automata[9].call(null, ids, c);
}
: function
(rem){
var
a = [0, Re_Automata[11].call(null, ids), 0],
b = Re_Automata[18].call(null, ids, cr$0),
c = [0, Re_Automata[10].call(null, ids, kind$1, b, rem), a];
return Re_Automata[9].call(null, ids, c);
},
v$2 = Re_Automata[11].call(null, ids),
n$1 = j$0 - i$0 | 0,
n = n$1,
v = v$2;
for(;;){
if(Re_Import[10][8].call(null, n, 0)){var rem = v, n$4 = i$0; break;}
var v$0 = f(v), n$0 = n - 1 | 0;
n = n$0;
v = v$0;
}
}
else
var
rem = Re_Automata[12].call(null, ids, greedy, kind$1, cr$0),
n$4 = i$0;
for(;;){
if(Re_Import[10][8].call(null, n$4, 0)) return [0, rem, kind];
var
E = Re_Automata[18].call(null, ids, cr$0),
v$3 = Re_Automata[10].call(null, ids, kind$1, E, rem),
n$3 = n$4 - 1 | 0;
rem = v$3;
n$4 = n$3;
}
}
var l$0 = ast[1][1], merged_sequences = Re_Ast[3].call(null, l$0);
if(merged_sequences && ! merged_sequences[2]){
var
r = merged_sequences[1],
match$0 = translate(ctx, r),
kind$0 = match$0[2],
cr = match$0[1];
return [0, enforce_kind(ids, kind, kind$0, cr), kind];
}
var
D =
Stdlib_ListLabels[20].call
(null,
function(r){
var match = translate(ctx, r), kind$0 = match[2], cr = match[1];
return enforce_kind(ids, kind, kind$0, cr);
},
merged_sequences);
return [0, Re_Automata[9].call(null, ids, D), kind];
}
var s = ast[1], match = Re_Cset[40].call(null, s);
if(match)
var
i = match[1],
c = Re_Color_map[2][1].call(null, colors, i),
a = Re_Cset[46].call(null, c);
else{
var v$1 = [0, Re_Cset[42].call(null, s), s];
try{var d = caml_call2(Re_Cset[44][17], v$1, cache[1]), a = d;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var l = Re_Color_map[2][3].call(null, colors, s);
cache[1] = caml_call3(Re_Cset[44][2], v$1, l, cache[1]);
var a = l;
}
}
return [0, Re_Automata[7].call(null, ids, a), kind];
}
switch(ast){
case 0:
var g = Re_Category[1].call(null, Re_Category[4], Re_Category[7]);
return [0, Re_Automata[17].call(null, ids, g), kind];
case 1:
var h = Re_Category[1].call(null, Re_Category[4], Re_Category[7]);
return [0, Re_Automata[16].call(null, ids, h), kind];
case 2:
var
k = Re_Automata[16].call(null, ids, Re_Category[5]),
m = Re_Category[1].call(null, Re_Category[4], Re_Category[6]),
o = Re_Automata[17].call(null, ids, m);
return [0, Re_Automata[10].call(null, ids, 332064784, o, k), kind];
case 3:
var
q = Re_Category[1].call(null, Re_Category[4], Re_Category[6]),
t = Re_Automata[16].call(null, ids, q),
u = Re_Automata[17].call(null, ids, Re_Category[5]);
return [0, Re_Automata[10].call(null, ids, 332064784, u, t), kind];
case 4:
var
cat = Re_Category[1].call(null, Re_Category[4], Re_Category[6]),
w = Re_Automata[16].call(null, ids, cat),
x = Re_Automata[17].call(null, ids, cat),
y = [0, Re_Automata[10].call(null, ids, 332064784, x, w), 0],
z = Re_Automata[16].call(null, ids, Re_Category[5]),
A = Re_Automata[17].call(null, ids, Re_Category[5]),
B = [0, Re_Automata[10].call(null, ids, 332064784, A, z), y];
return [0, Re_Automata[9].call(null, ids, B), kind];
case 5:
return [0, Re_Automata[17].call(null, ids, Re_Category[4]), kind];
case 6:
return [0, Re_Automata[16].call(null, ids, Re_Category[4]), kind];
case 7:
var C = Re_Category[1].call(null, Re_Category[4], Re_Category[8]);
return [0, Re_Automata[16].call(null, ids, C), kind];
case 8:
return [0, Re_Automata[17].call(null, ids, Re_Category[9]), kind];
default:
return [0, Re_Automata[16].call(null, ids, Re_Category[9]), kind];
}
}
function trans_seq(ctx, param){
var kind = ctx[2], ids = ctx[1];
if(! param) return Re_Automata[11].call(null, ids);
var r = param[1];
if(param[2]){
var
rem = param[2],
match = translate(ctx, r),
kind$0 = match[2],
cr = match[1],
cr$0 = trans_seq(ctx, rem);
return Re_Automata[4].call(null, cr$0)
? cr
: Re_Automata
[4].call
(null, cr)
? cr$0
: Re_Automata[10].call(null, ids, kind$0, cr, cr$0);
}
var match$0 = translate(ctx, r), kind$1 = match$0[2], cr$1 = match$0[1];
return enforce_kind(ids, kind, kind$1, cr$1);
}
function compile(r$0){
if(Re_Ast[5].call(null, r$0))
var regexp$0 = caml_call2(Re_Ast[7][23], 0, r$0);
else
var
e = [0, caml_call2(Re_Ast[7][23], 0, r$0), 0],
f = caml_call1(Re_Ast[7][34], Re_Ast[7][11]),
g = [0, caml_call1(Re_Ast[7][37], f), e],
regexp$0 = caml_call1(Re_Ast[7][38], g);
var
regexp = Re_Ast[4].call(null, 0, regexp$0),
color_map = Re_Color_map[3].call(null, 0),
need_lnl = Re_Ast[6].call(null, color_map, regexp),
match = Re_Color_map[4].call(null, color_map),
color_repr = match[2],
colors = match[1],
ncolor = Re_Color_map[1][2].call(null, color_repr),
lnl = need_lnl ? Re_Cset[3].call(null, ncolor) : Re_Cset[6],
ncolor$0 = need_lnl ? ncolor + 1 | 0 : ncolor,
c = [0, Re_Cset[44][1]],
d = [0, Re_Automata[1][2]],
ctx =
[0,
caml_call1(Re_Automata[6][1], 0),
332064784,
0,
-904640576,
d,
[0, 0],
c,
colors],
match$0 = translate(ctx, regexp),
kind = match$0[2],
r = match$0[1],
initial = enforce_kind(ctx[1], 332064784, kind, r),
group_count = caml_call1(Re_Automata[1][6], ctx[5][1]),
group_names = Stdlib_ListLabels[10].call(null, ctx[6][1]),
a = Stdlib_Mutex[1].call(null, 0),
b = caml_call1(Re_Automata[21][8][1], 97);
return [0,
initial,
0,
colors,
color_repr,
ncolor$0,
lnl,
caml_call1(Re_Automata[22][1], 0),
b,
group_names,
group_count,
a];
}
runtime.caml_register_global
(18,
[0,
[0,
create,
feed,
finalize,
[0,
[0, get, test_mark],
create$0,
feed$0,
finalize$0,
no_match_starts_before]],
match_str_no_bounds,
match_str,
match_str_p,
compile,
group_count,
group_names,
pp_re],
"Re__Compile");
return;
}
(globalThis));
//# 4555 "../.js/default/re/re.cma.js"
//# shape: Re__Search:[F(4)->F(1),F(4)->F(1),F(4)->F(1),F(4)->F(1),F(4)->F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
var
global_data = runtime.caml_get_global_data(),
Assert_failure = global_data.Assert_failure,
Re_Compile = global_data.Re__Compile,
Stdlib_String = global_data.Stdlib__String,
Re_Group = global_data.Re__Group,
Stdlib = global_data.Stdlib,
Stdlib_Seq = global_data.Stdlib__Seq;
function all(opt, len, re, s){
var pos = opt ? opt[1] : 0, cst_Re_all = "Re.all";
if(pos < 0) Stdlib[1].call(null, cst_Re_all);
if(len){
var
l = len[1],
a = l < 0,
b = a || caml_ml_string_length(s) < (pos + l | 0);
if(b) Stdlib[1].call(null, cst_Re_all);
var limit = pos + l | 0;
}
else
var limit = caml_ml_string_length(s);
function aux(pos$2, on_match$0, param){
var pos = pos$2, on_match = on_match$0;
for(;;){
if(limit < pos) return 0;
var match = Re_Compile[3].call(null, 1, 0, re, s, pos, limit - pos | 0);
if(typeof match !== "number" && 0 === match[0]){
var
substr = match[1],
a = Re_Group[17].call(null, substr, 0),
p1 = caml_call1(Re_Group[16][2], a),
b = Re_Group[18].call(null, substr, 0),
p2 = caml_call1(Re_Group[16][2], b);
if(! on_match) break;
if(p1 !== pos) break;
if(p1 !== p2) break;
var pos$0 = pos + 1 | 0;
pos = pos$0;
on_match = 0;
continue;
}
return 0;
}
var pos$1 = p1 === p2 ? p2 + 1 | 0 : p2, c = p1 !== p2 ? 1 : 0;
return [0, substr, function(a){return aux(pos$1, c, a);}];
}
return function(a){return aux(pos, 0, a);};
}
function matches(pos, len, re, s){
var a = all(pos, len, re, s);
function b(sub){return Re_Group[2].call(null, sub, 0);}
var c = Stdlib_Seq[29];
return function(d){return c(b, a, d);};
}
var a = [0, "lib/search.ml", 56, 6];
function split_full(opt, len, re, s){
var pos = opt ? opt[1] : 0, cst_Re_split = "Re.split";
if(pos < 0) Stdlib[1].call(null, cst_Re_split);
if(len){
var
l = len[1],
b = l < 0,
c = b || caml_ml_string_length(s) < (pos + l | 0);
if(c) Stdlib[1].call(null, cst_Re_split);
var limit = pos + l | 0;
}
else
var limit = caml_ml_string_length(s);
function aux(state$0, i, pos$2, param){
a:
{
b:
{
var old_i = i, pos$0 = pos$2;
for(;;){
if(typeof state$0 !== "number") break;
if(limit < pos$0){
if(old_i === limit) return 0;
throw caml_maybe_attach_backtrace([0, Assert_failure, a], 1);
}
var
match =
Re_Compile[3].call(null, 1, 0, re, s, pos$0, limit - pos$0 | 0);
if(typeof match === "number") break b;
if(0 !== match[0]) return 0;
var
substr = match[1],
b = Re_Group[17].call(null, substr, 0),
p1 = caml_call1(Re_Group[16][2], b),
c = Re_Group[18].call(null, substr, 0),
p2 = caml_call1(Re_Group[16][2], c),
pos$1 = p1 === p2 ? p2 + 1 | 0 : p2;
if(old_i !== p1) break a;
if(p1 !== p2) break a;
if(pos >= p1) break a;
old_i = p2;
pos$0 = pos$1;
}
var x = state$0[2];
return [0, x, function(a){return aux(814535476, old_i, pos$0, a);}];
}
if(old_i >= limit) return 0;
var text = Stdlib_String[16].call(null, s, old_i, limit - old_i | 0);
return [0,
[0, 936573133, text],
function(a){return aux(state$0, limit, pos$0, a);}];
}
if(pos >= p1)
return [0,
[0, -363573681, substr],
function(a){return aux(state$0, p2, pos$1, a);}];
var
text$0 = Stdlib_String[16].call(null, s, old_i, p1 - old_i | 0),
state = [0, 73271853, [0, -363573681, substr]];
return [0,
[0, 936573133, text$0],
function(a){return aux(state, p2, pos$1, a);}];
}
return function(a){return aux(814535476, pos, pos, a);};
}
function split(pos, len, re, s){
var seq = split_full(pos, len, re, s);
function filter(seq$1, param){
var seq = seq$1;
for(;;){
var match = caml_call1(seq, 0);
if(! match) return 0;
var match$0 = match[1], variant = match$0[1];
if(936573133 <= variant) break;
var seq$0 = match[2];
seq = seq$0;
}
var tl = match[2], s = match$0[2];
return [0, s, function(a){return filter(tl, a);}];
}
return function(a){return filter(seq, a);};
}
function split_delim(pos, len, re, s){
var seq = split_full(pos, len, re, s);
function filter(delim$0, seq$1, param){
a:
{
var cst = "";
b:
{
var delim = delim$0, seq = seq$1;
for(;;){
var match = caml_call1(seq, 0);
if(! match) break;
var match$0 = match[1], variant = match$0[1];
if(936573133 <= variant) break a;
var seq$0 = match[2];
if(delim) break b;
delim = 1;
seq = seq$0;
}
return delim ? [0, cst, function(param){return 0;}] : 0;
}
return [0, cst, function(param){return filter(1, seq$0, 0);}];
}
var tl = match[2], s = match$0[2];
return [0, s, function(a){return filter(0, tl, a);}];
}
return function(a){return filter(1, seq, a);};
}
runtime.caml_register_global
(13, [0, all, matches, split_full, split, split_delim], "Re__Search");
return;
}
(globalThis));
//# 4741 "../.js/default/re/re.cma.js"
//# shape: Re__Core:[N,F(1),F(1)*,F(1)*,F(4),F(4),F(4),F(4),F(4),N,F(4),F(4),F(4)->F(1),F(4),F(4),F(4)->F(1),F(4),F(4),F(4),F(4)->F(1),F(4),F(4),F(4)->F(1),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,F(2),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,F(2),F(2),N,F(2),F(2),F(1),F(1),F(2),F(2),F(1)*,N]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Re_Search = global_data.Re__Search,
Stdlib_Seq = global_data.Stdlib__Seq,
Stdlib_ListLabels = global_data.Stdlib__ListLabels,
Re_Group = global_data.Re__Group,
Re_Pmark = global_data.Re__Pmark,
Re_Compile = global_data.Re__Compile,
Stdlib = global_data.Stdlib,
Re_Cset = global_data.Re__Cset,
Re_Ast = global_data.Re__Ast,
cset = Re_Ast[8];
function rg(c$0, c){return cset(Re_Cset[25].call(null, c$0, c));}
var
notnl = cset(Re_Cset[22]),
lower = cset(Re_Cset[30]),
upper = cset(Re_Cset[31]),
alpha = cset(Re_Cset[32]),
digit = cset(Re_Cset[19]),
alnum = cset(Re_Cset[33]),
wordc = cset(Re_Cset[34]),
ascii = cset(Re_Cset[23]),
blank = cset(Re_Cset[27]),
cntrl = cset(Re_Cset[35]),
graph = cset(Re_Cset[36]),
print = cset(Re_Cset[37]),
punct = cset(Re_Cset[38]),
space = cset(Re_Cset[28]),
xdigit = cset(Re_Cset[29]),
include = Re_Ast[7],
empty = include[1],
epsilon = include[2],
str = include[3],
no_case = include[4],
case$ = include[5],
diff = include[6],
compl = include[7],
repn = include[8],
inter = include[9],
char = include[10],
any = include[11],
set = include[12],
mark = include[13],
nest = include[14],
no_group = include[15],
whole_string = include[16],
leol = include[17],
longest = include[18],
greedy = include[19],
non_greedy = include[20],
stop = include[21],
not_boundary = include[22],
group = include[23],
word = include[24],
first = include[25],
bos = include[26],
bow = include[27],
eow = include[28],
eos = include[29],
bol = include[30],
start = include[31],
eol = include[32],
opt = include[33],
rep = include[34],
rep1 = include[35],
alt = include[36],
shortest = include[37],
seq = include[38],
pp = include[39],
witness = include[40];
function exec_internal(a, opt, partial, groups, re, s){
var pos = a ? a[1] : 0, len = opt ? opt[1] : -1;
return Re_Compile[3].call(null, groups, partial, re, s, pos, len);
}
function exec(pos, len, re, s){
var match = exec_internal(pos, len, 0, 1, re, s);
if(typeof match !== "number" && 0 === match[0]){var substr = match[1]; return substr;}
throw caml_maybe_attach_backtrace(Stdlib[8], 1);
}
function exec_opt(pos, len, re, s){
var match = exec_internal(pos, len, 0, 1, re, s);
if(typeof match !== "number" && 0 === match[0]){var substr = match[1]; return [0, substr];}
return 0;
}
function execp(a, opt, re, s){
var pos = a ? a[1] : 0, len = opt ? opt[1] : -1;
return Re_Compile[4].call(null, re, s, pos, len);
}
function exec_partial(pos, len, re, s){
var match = exec_internal(pos, len, 1, 0, re, s);
return typeof match === "number"
? -1062743954
: 0 === match[0] ? 782112175 : 939392865;
}
function exec_partial_detailed(pos, len, re, s){
var match = exec_internal(pos, len, 1, 1, re, s);
if(typeof match === "number") return -1062743954;
if(0 === match[0]){var group = match[1]; return [0, 782112175, group];}
var no_match_starts_before = match[1];
return [0, 939392865, no_match_starts_before];
}
function marked(g, p){
var a = Re_Group[13].call(null, g);
return caml_call2(Re_Pmark[6][31], p, a);
}
function mark_set(g){return Re_Group[13].call(null, g);}
var equal = Re_Pmark[1], compare = Re_Pmark[2];
function gen_of_seq(s){
var r = [0, s];
return function(param){
var match = caml_call1(r[1], 0);
if(! match) return 0;
var tl = match[2], x = match[1];
r[1] = tl;
return [0, x];};
}
function split_gen(pos, len, re, s){
return gen_of_seq(Re_Search[4].call(null, pos, len, re, s));
}
function split_full_gen(pos, len, re, s){
return gen_of_seq(Re_Search[3].call(null, pos, len, re, s));
}
function all_gen(pos, len, re, s){
return gen_of_seq(Re_Search[1].call(null, pos, len, re, s));
}
function matches_gen(pos, len, re, s){
return gen_of_seq(Re_Search[2].call(null, pos, len, re, s));
}
var
split_full_seq = Re_Search[3],
split_seq = Re_Search[4],
matches_seq = Re_Search[2],
all_seq = Re_Search[1],
get = Re_Group[2],
get_ofs = Re_Group[4],
get_all = Re_Group[10],
get_all_ofs = Re_Group[11],
test = Re_Group[12];
function list_of_seq(s){
var a = Stdlib_Seq[5].call(null, function(l, x){return [0, x, l];}, 0, s);
return Stdlib_ListLabels[10].call(null, a);
}
function all(pos, len, re, s){
return list_of_seq(Re_Search[1].call(null, pos, len, re, s));
}
function matches(pos, len, re, s){
return list_of_seq(Re_Search[2].call(null, pos, len, re, s));
}
function split_full(pos, len, re, s){
return list_of_seq(Re_Search[3].call(null, pos, len, re, s));
}
function split(pos, len, re, s){
return list_of_seq(Re_Search[4].call(null, pos, len, re, s));
}
function split_delim(pos, len, re, s){
return list_of_seq(Re_Search[5].call(null, pos, len, re, s));
}
var
compile = Re_Compile[5],
print_re = Re_Compile[8],
group_names = Re_Compile[7],
group_count = Re_Compile[6],
b = Re_Compile[1],
c = b[4],
a = Re_Pmark[6],
Re_Core =
[0,
[0,
Re_Group[2],
Re_Group[3],
Re_Group[4],
Re_Group[5],
Re_Group[6],
Re_Group[7],
Re_Group[8],
Re_Group[9],
Re_Group[10],
Re_Group[11],
Re_Group[12],
Re_Group[14],
Re_Group[15]],
compile,
group_count,
group_names,
exec,
exec_opt,
execp,
exec_partial,
exec_partial_detailed,
[0,
marked,
[0,
a[1],
a[2],
a[3],
a[4],
a[5],
a[6],
a[7],
a[8],
a[9],
a[10],
a[11],
a[12],
a[13],
a[14],
a[15],
a[16],
a[17],
a[18],
a[19],
a[20],
a[21],
a[22],
a[23],
a[24],
a[25],
a[26],
a[27],
a[28],
a[29],
a[30],
a[31],
a[32],
a[33],
a[34],
a[35],
a[36],
a[43],
a[37],
a[38],
a[39],
a[40],
a[41],
a[42]],
mark_set,
equal,
compare],
all,
all_gen,
all_seq,
matches,
matches_gen,
matches_seq,
split,
split_delim,
split_gen,
split_seq,
split_full,
split_full_gen,
split_full_seq,
[0,
Re_Search[1],
Re_Search[2],
Re_Search[4],
Re_Search[5],
Re_Search[3]],
str,
char,
alt,
seq,
empty,
epsilon,
rep,
rep1,
repn,
opt,
bol,
eol,
bow,
eow,
bos,
eos,
leol,
start,
stop,
word,
not_boundary,
whole_string,
longest,
shortest,
first,
greedy,
non_greedy,
group,
no_group,
nest,
mark,
set,
rg,
inter,
diff,
compl,
any,
notnl,
alnum,
wordc,
alpha,
ascii,
blank,
cntrl,
digit,
graph,
lower,
print,
punct,
space,
upper,
xdigit,
case$,
no_case,
pp,
print_re,
print_re,
witness,
get,
get_ofs,
get_all,
get_all_ofs,
test,
marked,
mark_set,
[0, b[1], b[2], b[3], [0, c[1], c[2], c[3], c[4]]]];
runtime.caml_register_global(9, Re_Core, "Re__Core");
return;
}
(globalThis));
//# 5088 "../.js/default/re/re.cma.js"
//# shape: Re__Parse_buffer:[N,F(1)*,F(1),F(1),F(1)*,F(2),F(3),F(1),F(2),F(2),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_string_get = runtime.caml_string_get,
caml_wrap_exception = runtime.caml_wrap_exception,
Stdlib = runtime.caml_get_global_data().Stdlib,
Parse_error =
[248, "Re__Parse_buffer.Parse_error", runtime.caml_fresh_oo_id(0)];
function create(str){return [0, str, 0];}
function unget(t){t[2] = t[2] - 1 | 0; return 0;}
function junk(t){t[2] = t[2] + 1 | 0; return 0;}
function eos(t){return t[2] === caml_ml_string_length(t[1]) ? 1 : 0;}
function test(t, c){
var a = 1 - eos(t), b = a ? caml_string_get(t[1], t[2]) === c ? 1 : 0 : a;
return b;
}
function test2(t, c$0, c){
var a = (t[2] + 1 | 0) < caml_ml_string_length(t[1]) ? 1 : 0;
if(a)
var
b = caml_string_get(t[1], t[2]) === c$0 ? 1 : 0,
d = b ? caml_string_get(t[1], t[2] + 1 | 0) === c ? 1 : 0 : b;
else
var d = a;
return d;
}
function accept(t, c){
var r = test(t, c);
if(r) t[2] = t[2] + 1 | 0;
return r;
}
function get(t){
var r = caml_string_get(t[1], t[2]);
t[2] = t[2] + 1 | 0;
return r;
}
function accept_s(t, s){
var len = caml_ml_string_length(s);
try{
var a = len - 1 | 0;
if(a >= 0){
var j = 0;
for(;;){
try{
var b = caml_string_get(t[1], t[2] + j | 0);
if(caml_string_get(s, j) !== b) throw Stdlib[3];
}
catch(exn){throw Stdlib[3];}
var c = j + 1 | 0;
if(a === j) break;
j = c;
}
}
t[2] = t[2] + len | 0;
return 1;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[3]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function integer(t){
if(eos(t)) return 0;
var d$0 = get(t);
if(9 < d$0 - 48 >>> 0){unget(t); return 0;}
var i$1 = d$0 - 48 | 0, i = i$1;
for(;;){
if(eos(t)) return [0, i];
var d = get(t);
if(9 < d - 48 >>> 0){unget(t); return [0, i];}
var i$0 = (10 * i | 0) + (d - 48 | 0) | 0;
if(i$0 < i) throw caml_maybe_attach_backtrace(Parse_error, 1);
i = i$0;
}
}
runtime.caml_register_global
(2,
[0,
Parse_error,
create,
junk,
unget,
eos,
test,
test2,
get,
accept,
accept_s,
integer],
"Re__Parse_buffer");
return;
}
(globalThis));
//# 5941 "../.js/default/re/re.cma.js"
//# shape: Re__Replace:[F(6),F(6)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_string_get = runtime.caml_string_get;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
var
global_data = runtime.caml_get_global_data(),
Re_Compile = global_data.Re__Compile,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Re_Group = global_data.Re__Group,
Stdlib = global_data.Stdlib;
function replace(a, len, opt, re, f, s){
var
pos = a ? a[1] : 0,
all = opt ? opt[1] : 1,
cst_Re_replace = "Re.replace";
if(pos < 0) Stdlib[1].call(null, cst_Re_replace);
if(len){
var
l = len[1],
b = l < 0,
c = b || caml_ml_string_length(s) < (pos + l | 0);
if(c) Stdlib[1].call(null, cst_Re_replace);
var limit = pos + l | 0;
}
else
var limit = caml_ml_string_length(s);
var
buf = Stdlib_Buffer[1].call(null, caml_ml_string_length(s)),
pos$0 = pos,
on_match = 0;
for(;;){
if(pos$0 <= limit){
var
match = Re_Compile[3].call(null, 1, 0, re, s, pos$0, limit - pos$0 | 0);
if(typeof match === "number")
Stdlib_Buffer[18].call(null, buf, s, pos$0, limit - pos$0 | 0);
else if(0 === match[0]){
var
substr = match[1],
d = Re_Group[17].call(null, substr, 0),
p1 = caml_call1(Re_Group[16][2], d),
e = Re_Group[18].call(null, substr, 0),
p2 = caml_call1(Re_Group[16][2], e);
if(pos$0 === p1 && p1 === p2 && on_match){
if(p2 < limit){
var g = caml_string_get(s, p2);
Stdlib_Buffer[12].call(null, buf, g);
}
var pos$1 = p2 + 1 | 0;
pos$0 = pos$1;
on_match = 0;
continue;
}
Stdlib_Buffer[18].call(null, buf, s, pos$0, p1 - pos$0 | 0);
var replacing = caml_call1(f, substr);
Stdlib_Buffer[16].call(null, buf, replacing);
if(all){
var on_match$0 = p1 !== p2;
if(p1 !== p2){pos$0 = p2; on_match = on_match$0; continue;}
if(p2 < limit){
var h = caml_string_get(s, p2);
Stdlib_Buffer[12].call(null, buf, h);
}
pos$0 = p2 + 1 | 0;
on_match = on_match$0;
continue;
}
Stdlib_Buffer[18].call(null, buf, s, p2, limit - p2 | 0);
}
}
return Stdlib_Buffer[2].call(null, buf);
}
}
function replace_string(pos, len, all, re, by, s){
return replace(pos, len, all, re, function(param){return by;}, s);
}
runtime.caml_register_global
(6, [0, replace, replace_string], "Re__Replace");
return;
}
(globalThis));
//# 6453 "../.js/default/re/re.cma.js"
//# shape: Re__Posix_class:[N,F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_list_of_js_array = runtime.caml_list_of_js_array,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
var
global_data = runtime.caml_get_global_data(),
cst_alnum = "alnum",
cst_alpha = "alpha",
cst_ascii = "ascii",
cst_blank = "blank",
cst_cntrl = "cntrl",
cst_digit = "digit",
cst_graph = "graph",
cst_lower = "lower",
cst_print = "print",
cst_punct = "punct",
cst_space = "space",
cst_upper = "upper",
cst_word = "word",
cst_xdigit = "xdigit",
names =
caml_list_of_js_array
([cst_alpha,
cst_alnum,
cst_ascii,
cst_blank,
cst_cntrl,
cst_digit,
cst_lower,
cst_print,
cst_space,
cst_upper,
cst_word,
cst_punct,
cst_graph,
cst_xdigit]),
Re_Parse_buffer = global_data.Re__Parse_buffer,
Stdlib_List = global_data.Stdlib__List,
Stdlib = global_data.Stdlib,
Re_Core = global_data.Re__Core;
function of_name(class$){
var switch$ = runtime.caml_string_compare(class$, cst_lower);
if(0 <= switch$){
if(0 >= switch$) return Re_Core[71];
if(class$ === cst_print) return Re_Core[72];
if(class$ === cst_punct) return Re_Core[73];
if(class$ === cst_space) return Re_Core[74];
if(class$ === cst_upper) return Re_Core[75];
if(class$ === cst_word) return Re_Core[64];
if(class$ === cst_xdigit) return Re_Core[76];
}
else{
if(class$ === cst_alnum) return Re_Core[63];
if(class$ === cst_alpha) return Re_Core[65];
if(class$ === cst_ascii) return Re_Core[66];
if(class$ === cst_blank) return Re_Core[67];
if(class$ === cst_cntrl) return Re_Core[68];
if(class$ === cst_digit) return Re_Core[69];
if(class$ === cst_graph) return Re_Core[70];
}
var a = Stdlib[28].call(null, "Invalid pcre class: ", class$);
return Stdlib[1].call(null, a);
}
function parse(buf){
var a = Re_Parse_buffer[9], b = Re_Parse_buffer[10];
function accept_s(a){return b(buf, a);}
if(! a(buf, 58)) return 0;
var compl = a(buf, 94);
try{var cls = Stdlib_List[39].call(null, accept_s, names);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8])
throw caml_maybe_attach_backtrace(Re_Parse_buffer[1], 1);
throw caml_maybe_attach_backtrace(exn, 0);
}
if(1 - b(buf, ":]"))
throw caml_maybe_attach_backtrace(Re_Parse_buffer[1], 1);
var
posix_class = of_name(cls),
c = compl ? caml_call1(Re_Core[60], [0, posix_class, 0]) : posix_class;
return [0, c];
}
runtime.caml_register_global
(21, [0, names, of_name, parse], "Re__Posix_class");
return;
}
(globalThis));
//# 6553 "../.js/default/re/re.cma.js"
//# shape: Re__Perl:[N,N,F(2),F(2),F(1),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_mul = runtime.caml_mul,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_List = global_data.Stdlib__List,
Re_Core = global_data.Re__Core,
Re_Parse_buffer = global_data.Re__Parse_buffer,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Re_Posix_class = global_data.Re__Posix_class,
Stdlib = global_data.Stdlib,
Parse_error = Re_Parse_buffer[1],
Not_supported =
[248, "Re__Perl.Not_supported", runtime.caml_fresh_oo_id(0)];
function char_of_int(x){
try{var x$0 = Stdlib[29].call(null, x); return x$0;}
catch(exn){throw caml_maybe_attach_backtrace(Parse_error, 1);}
}
var
a = [0, caml_call1(Re_Core[26], 95), 0],
word_char = [0, Re_Core[63], a],
word = [1, caml_call1(Re_Core[27], word_char)],
not_word = [1, caml_call1(Re_Core[27], word_char)],
space = [1, Re_Core[74]],
not_space = [1, caml_call1(Re_Core[60], [0, Re_Core[74], 0])],
digit = [1, Re_Core[69]],
not_digit = [1, caml_call1(Re_Core[60], [0, Re_Core[69], 0])],
char_b = [0, 8],
char_newline = [0, 10],
char_cr = [0, 13],
char_tab = [0, 9];
function re(opt, s){
var
opts = opt ? opt[1] : 0,
ungreedy = Stdlib_List[38].call(null, -243745063, opts),
dotall = Stdlib_List[38].call(null, -424303016, opts),
dollar_endonly = Stdlib_List[38].call(null, -712595228, opts),
multiline = Stdlib_List[38].call(null, 1071952589, opts),
buf = Re_Parse_buffer[2].call(null, s),
a = Re_Parse_buffer[9];
function eos(param){return Re_Parse_buffer[5].call(null, buf);}
function test(c){return Re_Parse_buffer[6].call(null, buf, c);}
function get(param){return Re_Parse_buffer[8].call(null, buf);}
function greedy_mod(r){
var gr$0 = a(buf, 63), gr = ungreedy ? 1 - gr$0 : gr$0;
return gr ? caml_call1(Re_Core[51], r) : caml_call1(Re_Core[50], r);
}
function regexp(param){
var left = [0, branch(0), 0], left$0 = left;
for(;;){
if(! a(buf, 124)){
var b = Stdlib_List[10].call(null, left$0);
return caml_call1(Re_Core[27], b);
}
var left$1 = [0, branch(0), left$0];
left$0 = left$1;
}
}
function branch(param){
var left = 0;
for(;;){
if(! eos(0) && ! test(124) && ! test(41)){
var r = atom(0);
if(a(buf, 42))
var b = greedy_mod(caml_call1(Re_Core[31], r));
else if(a(buf, 43))
var b = greedy_mod(caml_call1(Re_Core[32], r));
else if(a(buf, 63))
var b = greedy_mod(caml_call1(Re_Core[34], r));
else if(a(buf, 123)){
var match = Re_Parse_buffer[11].call(null, buf);
if(match){
var
i = match[1],
j = a(buf, 44) ? Re_Parse_buffer[11].call(null, buf) : [0, i];
if(1 - a(buf, 125))
throw caml_maybe_attach_backtrace(Parse_error, 1);
if(j){
var j$0 = j[1];
if(j$0 < i) throw caml_maybe_attach_backtrace(Parse_error, 1);
}
var b = greedy_mod(caml_call3(Re_Core[33], r, i, j));
}
else{Re_Parse_buffer[4].call(null, buf); var b = r;}
}
else
var b = r;
var left$0 = [0, b, left];
left = left$0;
continue;
}
var c = Stdlib_List[10].call(null, left);
return caml_call1(Re_Core[28], c);
}
}
function atom(param){
if(a(buf, 46)) return dotall ? Re_Core[61] : Re_Core[62];
if(! a(buf, 40)){
if(a(buf, 94)) return multiline ? Re_Core[35] : Re_Core[39];
if(a(buf, 36))
return multiline
? Re_Core[36]
: dollar_endonly ? Re_Core[41] : Re_Core[40];
if(a(buf, 91)){
if(a(buf, 94)){var h = bracket(0); return caml_call1(Re_Core[60], h);}
var j = bracket(0);
return caml_call1(Re_Core[27], j);
}
if(! a(buf, 92)){
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var c = get(0);
a:
{
if(64 <= c){
if(92 !== c && 123 !== c) break a;
}
else
if(44 <= c){if(63 > c) break a;} else if(42 > c) break a;
throw caml_maybe_attach_backtrace(Parse_error, 1);
}
return caml_call1(Re_Core[26], c);
}
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var n1 = get(0), switcher = n1 - 48 | 0;
if(74 >= switcher >>> 0)
switch(switcher){
case 17:
return Re_Core[39];
case 18:
return Re_Core[45];
case 20:
return caml_call1(Re_Core[60], [0, Re_Core[69], 0]);
case 21:
throw caml_maybe_attach_backtrace(Parse_error, 1);
case 23:
return Re_Core[42];
case 33:
var buf$0 = Stdlib_Buffer[1].call(null, 12);
for(;;)
if(a(buf, 92)){
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var c$0 = get(0);
if(69 === c$0){
var q = Stdlib_Buffer[2].call(null, buf$0);
return caml_call1(Re_Core[25], q);
}
Stdlib_Buffer[12].call(null, buf$0, 92);
Stdlib_Buffer[12].call(null, buf$0, c$0);
}
else{
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var s = get(0);
Stdlib_Buffer[12].call(null, buf$0, s);
}
break;
case 35:
return caml_call1(Re_Core[60], [0, Re_Core[74], 0]);
case 39:
var l = [0, caml_call1(Re_Core[26], 95), 0];
return caml_call1(Re_Core[60], [0, Re_Core[63], l]);
case 42:
return Re_Core[41];
case 50:
return caml_call1
(Re_Core[27], [0, Re_Core[37], [0, Re_Core[38], 0]]);
case 52:
return Re_Core[69];
case 53:
return caml_call1(Re_Core[26], 27);
case 54:
return caml_call1(Re_Core[26], 12);
case 62:
return caml_call1(Re_Core[26], 10);
case 63:
if(a(buf, 123)){
var acc$1 = 0;
for(;;){
if(a(buf, 125)){var match$0 = [0, acc$1]; break;}
var match = maybe_octaldigit(0);
if(! match) throw caml_maybe_attach_backtrace(Parse_error, 1);
var p = match[1], acc$2 = [0, p, acc$1];
acc$1 = acc$2;
}
}
else
var match$0 = 0;
if(! match$0) throw caml_maybe_attach_backtrace(Parse_error, 1);
var digits$1 = match$0[1], digits = digits$1, acc = 0, i = 1;
for(;;){
if(! digits){
var m = char_of_int(acc);
return caml_call1(Re_Core[26], m);
}
var
digits$0 = digits[2],
d = digits[1],
acc$0 = acc + caml_mul(d, i) | 0,
i$0 = caml_mul(i, i);
digits = digits$0;
acc = acc$0;
i = i$0;
}
break;
case 66:
return caml_call1(Re_Core[26], 13);
case 67:
return Re_Core[74];
case 68:
return caml_call1(Re_Core[26], 9);
case 71:
var n = [0, caml_call1(Re_Core[26], 95), 0];
return caml_call1(Re_Core[27], [0, Re_Core[63], n]);
case 72:
if(a(buf, 123)){
var acc$4 = 0;
for(;;){
if(a(buf, 125)){var match$1 = [0, acc$4]; break;}
var acc$3 = [0, hexdigit(0), acc$4];
acc$4 = acc$3;
}
}
else
var match$1 = 0;
a:
{
if(match$1){
var e = match$1[1];
if(e){
var match$2 = e[2], c1 = e[1];
if(! match$2){var c2$0 = c1, c1$0 = 0; break a;}
if(! match$2[2]){
var c2 = match$2[1], c2$0 = c2, c1$0 = c1;
break a;
}
}
throw caml_maybe_attach_backtrace(Parse_error, 1);
}
var
c1$1 = hexdigit(0),
c2$1 = hexdigit(0),
c2$0 = c2$1,
c1$0 = c1$1;
}
var code = (c1$0 * 16 | 0) + c2$0 | 0, o = char_of_int(code);
return caml_call1(Re_Core[26], o);
case 74:
return Re_Core[40];
case 8:
case 9:
throw caml_maybe_attach_backtrace(Not_supported, 1);
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
var n2 = maybe_octaldigit(0), n3 = maybe_octaldigit(0);
if(n2 && n3){
var
n3$0 = n3[1],
n2$0 = n2[1],
n1$0 = n1 - 48 | 0,
k = char_of_int(((n1$0 * 64 | 0) + (n2$0 * 8 | 0) | 0) + n3$0 | 0);
return caml_call1(Re_Core[26], k);
}
throw caml_maybe_attach_backtrace(Not_supported, 1);
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 43:
case 44:
case 45:
case 46:
case 47:
case 48: break;
default: throw caml_maybe_attach_backtrace(Parse_error, 1);
}
return caml_call1(Re_Core[26], n1);
}
if(! a(buf, 63)){
var r$1 = regexp(0);
if(1 - a(buf, 41)) throw caml_maybe_attach_backtrace(Parse_error, 1);
return caml_call2(Re_Core[52], 0, r$1);
}
if(a(buf, 58)){
var r = regexp(0);
if(1 - a(buf, 41)) throw caml_maybe_attach_backtrace(Parse_error, 1);
return r;
}
if(! a(buf, 35)){
if(! a(buf, 60)) throw caml_maybe_attach_backtrace(Parse_error, 1);
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var c$1 = get(0), f = c$1 - 91 | 0;
a:
{
if(5 < f >>> 0){
if(57 < f + 26 >>> 0) break a;
}
else if(4 !== f) break a;
var b = Stdlib_Buffer[1].call(null, 32);
Stdlib_Buffer[12].call(null, b, c$1);
for(;;){
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var c$2 = get(0);
b:
{
if(65 <= c$2){
var g = c$2 - 91 | 0;
if(5 < g >>> 0){if(32 <= g) break b;} else if(4 !== g) break b;
}
else{
if(58 <= c$2){
if(62 !== c$2) break b;
var name = Stdlib_Buffer[2].call(null, b), r$0 = regexp(0);
if(1 - a(buf, 41))
throw caml_maybe_attach_backtrace(Parse_error, 1);
return caml_call2(Re_Core[52], [0, name], r$0);
}
if(48 > c$2) break b;
}
Stdlib_Buffer[12].call(null, b, c$2);
continue;
}
throw caml_maybe_attach_backtrace(Parse_error, 1);
}
}
throw caml_maybe_attach_backtrace(Parse_error, 1);
}
for(;;){
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
if(a(buf, 41)) return Re_Core[30];
Re_Parse_buffer[3].call(null, buf);
}
}
function hexdigit(param){
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var d = get(0);
if(65 <= d){
if(97 <= d){
if(103 > d) return (d - 97 | 0) + 10 | 0;
}
else if(71 > d) return (d - 65 | 0) + 10 | 0;
}
else if(9 >= d - 48 >>> 0) return d - 48 | 0;
throw caml_maybe_attach_backtrace(Parse_error, 1);
}
function maybe_octaldigit(param){
if(eos(0)) return 0;
var d = get(0);
return 7 < d - 48 >>> 0 ? 0 : [0, d - 48 | 0];
}
function bracket(s$2){
var s = s$2;
for(;;){
if(0 !== s && a(buf, 93)) return s;
var match = char(0);
if(0 === match[0]){
var c = match[1];
if(a(buf, 45)){
if(a(buf, 93)){
var b = [0, caml_call1(Re_Core[26], 45), s];
return [0, caml_call1(Re_Core[26], c), b];
}
var match$0 = char(0);
if(0 === match$0[0]){
var c$0 = match$0[1];
s = [0, Re_Core[57].call(null, c, c$0), s];
}
else{
var
st = match$0[1],
d = [0, caml_call1(Re_Core[26], 45), [0, st, s]];
s = [0, caml_call1(Re_Core[26], c), d];
}
}
else{var s$0 = [0, caml_call1(Re_Core[26], c), s]; s = s$0;}
}
else{var st$0 = match[1], s$1 = [0, st$0, s]; s = s$1;}
}
}
function char(param){
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var c = get(0);
if(91 === c){
if(a(buf, 61)) throw caml_maybe_attach_backtrace(Not_supported, 1);
var match = Re_Posix_class[3].call(null, buf);
if(match){var set = match[1]; return [1, set];}
if(! a(buf, 46)) return [0, c];
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var c$0 = get(0);
if(1 - a(buf, 46)) throw caml_maybe_attach_backtrace(Not_supported, 1);
if(1 - a(buf, 93)) throw caml_maybe_attach_backtrace(Parse_error, 1);
return [0, c$0];
}
if(92 !== c) return [0, c];
if(eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var c$1 = get(0);
if(58 <= c$1){
if(123 > c$1)
switch(c$1 - 58 | 0){
case 10:
return not_digit;
case 25:
return not_space;
case 29:
return not_word;
case 40:
return char_b;
case 42:
return digit;
case 52:
return char_newline;
case 56:
return char_cr;
case 57:
return space;
case 58:
return char_tab;
case 61:
return word;
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 33:
case 34:
case 35:
case 36:
case 37:
case 38: break;
default: throw caml_maybe_attach_backtrace(Parse_error, 1);
}
}
else if(48 <= c$1) throw caml_maybe_attach_backtrace(Not_supported, 1);
return [0, c$1];
}
var res = regexp(0);
if(1 - eos(0)) throw caml_maybe_attach_backtrace(Parse_error, 1);
var
r =
Stdlib_List[38].call(null, 616470068, opts)
? caml_call1(Re_Core[28], [0, Re_Core[42], [0, res, 0]])
: res,
r$0 =
Stdlib_List[38].call(null, 604571177, opts)
? caml_call1(Re_Core[78], r)
: r;
return r$0;
}
var compile = Re_Core[2];
function compile_pat(opt, s){
var opts = opt ? opt[1] : 0;
return compile(re([0, opts], s));
}
var b = [1, 404463778], c = [1, 434889564];
function re_result(opts, s){
try{var s$0 = re(opts, s);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Not_supported) return b;
if(exn === Parse_error) return c;
throw caml_maybe_attach_backtrace(exn, 0);
}
return [0, s$0];
}
runtime.caml_register_global
(13,
[0, Parse_error, Not_supported, re, re_result, compile, compile_pat],
"Re__Perl");
return;
}
(globalThis));
//# 7058 "../.js/default/re/re.cma.js"
//# shape: Re__Pcre:[N,N,F(2),F(2),F(2),F(2),F(3),F(2),F(1),F(3),F(3),F(2),F(2),F(3),F(3),F(2),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_bytes_unsafe_set = runtime.caml_bytes_unsafe_set,
caml_create_bytes = runtime.caml_create_bytes,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_string_get = runtime.caml_string_get,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Re_Core = global_data.Re__Core,
Stdlib_List = global_data.Stdlib__List,
Stdlib_Bytes = global_data.Stdlib__Bytes,
Re_Group = global_data.Re__Group,
Stdlib_String = global_data.Stdlib__String,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_Array = global_data.Stdlib__Array,
Re_Perl = global_data.Re__Perl,
Parse_error = Re_Perl[1],
Not_supported = Re_Perl[2];
function re(opt, pat){
var
flags = opt ? opt[1] : 0,
opts =
Stdlib_List[20].call
(null,
function(param){
return 601676297 <= param
? 613575188 <= param ? 616470068 : 604571177
: 426394317 <= param ? 1071952589 : -424303016;
},
flags);
return Re_Perl[3].call(null, [0, opts], pat);
}
var a = [1, 404463778], b = [1, 434889564];
function re_result(flags, s){
try{var s$0 = re(flags, s);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Not_supported) return a;
if(exn === Parse_error) return b;
throw caml_maybe_attach_backtrace(exn, 0);
}
return [0, s$0];
}
function regexp(flags, pat){
var a = re(flags, pat);
return Re_Core[2].call(null, a);
}
function extract(rex, s){
var a = Re_Core[5].call(null, 0, 0, rex, s);
return caml_call1(Re_Core[1][9], a);
}
function exec(rex, pos, s){return Re_Core[5].call(null, pos, 0, rex, s);}
function names(rex){
var
a = Re_Core[4].call(null, rex),
b = Stdlib_List[20].call(null, function(a){return a[1];}, a);
return Stdlib_Array[11].call(null, b);
}
function get_named_substring_opt(rex, name, s){
var param = Re_Core[4].call(null, rex);
for(;;){
if(! param) return 0;
var match = param[1], rem = param[2], i = match[2], n = match[1];
if(n === name){
var s$0 = caml_call2(Re_Core[1][2], s, i);
if(s$0) return s$0;
param = rem;
}
else{var rem$0 = param[2]; param = rem$0;}
}
}
function get_substring_ofs(s, i){return caml_call2(Re_Core[1][3], s, i);}
function pmatch(rex, s){return Re_Core[7].call(null, 0, 0, rex, s);}
function substitute(rex, subst, str){
var b = Stdlib_Buffer[1].call(null, 1024), pos = 0, on_match = 0;
for(;;){
a:
if(Re_Core[7].call(null, [0, pos], 0, rex, str)){
var
ss = Re_Core[5].call(null, [0, pos], 0, rex, str),
match = caml_call2(Re_Core[1][3], ss, 0),
fin = match[2],
start = match[1];
if(on_match && start === pos && start === fin){
if(pos >= caml_ml_string_length(str)) break a;
var a = caml_string_get(str, pos);
Stdlib_Buffer[12].call(null, b, a);
var pos$0 = pos + 1 | 0;
pos = pos$0;
on_match = 0;
continue;
}
var pat = caml_call2(Re_Core[1][1], ss, 0);
Stdlib_Buffer[18].call(null, b, str, pos, start - pos | 0);
var c = caml_call1(subst, pat);
Stdlib_Buffer[16].call(null, b, c);
if(start !== fin){pos = fin; on_match = 1; continue;}
if(fin < caml_ml_string_length(str)){
var d = caml_string_get(str, fin);
Stdlib_Buffer[12].call(null, b, d);
var pos$1 = fin + 1 | 0;
pos = pos$1;
on_match = 0;
continue;
}
}
else
Stdlib_Buffer[18].call
(null, b, str, pos, caml_ml_string_length(str) - pos | 0);
return Stdlib_Buffer[2].call(null, b);
}
}
var c = [0, 0];
function split(rex, s){
function split(accu$1, start$1){
var accu = accu$1, start = start$1;
for(;;){
if(start === caml_ml_string_length(s)) return accu;
try{
var
g = Re_Core[5].call(null, [0, start], 0, rex, s),
g$0 =
Re_Group[8].call(null, g, 0) === start
? Re_Core[5].call(null, [0, start + 1 | 0], 0, rex, s)
: g;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8])
return [0,
Stdlib_String[16].call
(null, s, start, caml_ml_string_length(s) - start | 0),
accu];
throw caml_maybe_attach_backtrace(exn, 0);
}
var
start$0 = Re_Group[8].call(null, g$0, 0),
a = Re_Group[6].call(null, g$0, 0) - start | 0,
accu$0 = [0, Stdlib_String[16].call(null, s, start, a), accu];
accu = accu$0;
start = start$0;
}
}
try{var g = Re_Core[5].call(null, c, 0, rex, s);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8]) return s === "" ? 0 : [0, s, 0];
throw caml_maybe_attach_backtrace(exn, 0);
}
if(0 === Re_Group[6].call(null, g, 0))
var a = split(0, Re_Group[8].call(null, g, 0));
else
var
b = Re_Group[8].call(null, g, 0),
d = Re_Group[6].call(null, g, 0),
a = split([0, Stdlib_String[16].call(null, s, 0, d), 0], b);
return Stdlib_List[10].call(null, a);
}
function quote(s){
var
len = caml_ml_string_length(s),
buf = caml_create_bytes(len << 1),
d = len - 1 | 0,
b = 0;
if(d < 0)
var pos$4 = b;
else{
var pos = b, i = 0;
for(;;){
var c = runtime.caml_string_unsafe_get(s, i);
a:
{
b:
{
if(91 <= c){
var a = c - 93 | 0;
if(29 < a >>> 0){if(32 <= a) break b;} else if(1 !== a) break b;
}
else
if(47 <= c){
if(63 !== c) break b;
}
else{
if(36 > c) break b;
switch(c - 36 | 0){case 1:case 2:case 3:case 8:case 9: break b;
}
}
caml_bytes_unsafe_set(buf, pos, 92);
var pos$1 = pos + 1 | 0;
caml_bytes_unsafe_set(buf, pos$1, c);
var pos$2 = pos$1 + 1 | 0, pos$3 = pos$2;
break a;
}
caml_bytes_unsafe_set(buf, pos, c);
var pos$0 = pos + 1 | 0, pos$3 = pos$0;
}
var e = i + 1 | 0;
if(d === i){var pos$4 = pos$3; break;}
pos = pos$3;
i = e;
}
}
var r = caml_create_bytes(pos$4);
runtime.caml_blit_bytes(buf, 0, r, 0, pos$4);
return Stdlib_Bytes[44].call(null, r);
}
var d = [0, -1, -1];
function full_split(opt, rex, s){
var max = opt ? opt[1] : 0;
if(0 === caml_ml_string_length(s)) return 0;
if(1 === max) return [0, [0, s], 0];
var
results = Re_Core[21].call(null, 0, 0, rex, s),
matches =
Stdlib_List[20].call
(null,
function(param){
var variant = param[1];
if(936573133 <= variant){var s = param[2]; return [0, [0, s], 0];}
var
d$0 = param[2],
matches = caml_call1(Re_Core[1][10], d$0),
delim = caml_call2(Re_Core[1][1], d$0, 0),
b = matches.length - 2 | 0,
a = 0;
if(b < 1)
var l$0 = a;
else{
var l = a, i = 1;
for(;;){
var
e =
runtime.caml_equal
(runtime.caml_check_bound(matches, i)[i + 1], d)
? 0
: [2, i, caml_call2(Re_Core[1][1], d$0, i)],
c = [0, e, l],
f = i + 1 | 0;
if(b === i){var l$0 = c; break;}
l = c;
i = f;
}
}
return [0, [1, delim], Stdlib_List[10].call(null, l$0)];
},
results);
return Stdlib_List[14].call(null, matches);
}
function get_substring(s, i){return caml_call2(Re_Core[1][1], s, i);}
function get_named_substring(rex, name, s){
var match = get_named_substring_opt(rex, name, s);
if(! match) throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var s$0 = match[1];
return s$0;
}
runtime.caml_register_global
(14,
[0,
Parse_error,
Not_supported,
re,
re_result,
regexp,
extract,
exec,
get_substring,
names,
get_named_substring,
get_named_substring_opt,
get_substring_ofs,
pmatch,
substitute,
full_split,
split,
quote],
"Re__Pcre");
return;
}
(globalThis));
//# 7587 "../.js/default/re/re.cma.js"
//# shape: Re:[N,F(1),F(1)*,F(1)*,F(4),F(4),F(4),F(4),F(4),N,F(4),F(4),F(4)->F(1),F(4),F(4),F(4)->F(1),F(4),F(4),F(4),F(4)->F(1),F(4),F(4),F(4)->F(1),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,F(2),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,F(2),F(2),N,F(2),F(2),F(1),F(1),F(2),F(2),F(1)*,N,F(6),F(6)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
global_data = runtime.caml_get_global_data(),
Re_Core = global_data.Re__Core,
Re_Replace = global_data.Re__Replace,
Group = Re_Core[1],
compile = Re_Core[2],
group_count = Re_Core[3],
group_names = Re_Core[4],
exec = Re_Core[5],
exec_opt = Re_Core[6],
execp = Re_Core[7],
exec_partial = Re_Core[8],
exec_partial_detailed = Re_Core[9],
Mark = Re_Core[10],
all = Re_Core[11],
all_gen = Re_Core[12],
all_seq = Re_Core[13],
matches = Re_Core[14],
matches_gen = Re_Core[15],
matches_seq = Re_Core[16],
split = Re_Core[17],
split_delim = Re_Core[18],
split_gen = Re_Core[19],
split_seq = Re_Core[20],
split_full = Re_Core[21],
split_full_gen = Re_Core[22],
split_full_seq = Re_Core[23],
Seq = Re_Core[24],
str = Re_Core[25],
char = Re_Core[26],
alt = Re_Core[27],
seq = Re_Core[28],
empty = Re_Core[29],
epsilon = Re_Core[30],
rep = Re_Core[31],
rep1 = Re_Core[32],
repn = Re_Core[33],
opt = Re_Core[34],
bol = Re_Core[35],
eol = Re_Core[36],
bow = Re_Core[37],
eow = Re_Core[38],
bos = Re_Core[39],
eos = Re_Core[40],
leol = Re_Core[41],
start = Re_Core[42],
stop = Re_Core[43],
word = Re_Core[44],
not_boundary = Re_Core[45],
whole_string = Re_Core[46],
longest = Re_Core[47],
shortest = Re_Core[48],
first = Re_Core[49],
greedy = Re_Core[50],
non_greedy = Re_Core[51],
group = Re_Core[52],
no_group = Re_Core[53],
nest = Re_Core[54],
mark = Re_Core[55],
set = Re_Core[56],
rg = Re_Core[57],
inter = Re_Core[58],
diff = Re_Core[59],
compl = Re_Core[60],
any = Re_Core[61],
notnl = Re_Core[62],
alnum = Re_Core[63],
wordc = Re_Core[64],
alpha = Re_Core[65],
ascii = Re_Core[66],
blank = Re_Core[67],
cntrl = Re_Core[68],
digit = Re_Core[69],
graph = Re_Core[70],
lower = Re_Core[71],
print = Re_Core[72],
punct = Re_Core[73],
space = Re_Core[74],
upper = Re_Core[75],
xdigit = Re_Core[76],
case$ = Re_Core[77],
no_case = Re_Core[78],
pp = Re_Core[79],
pp_re = Re_Core[80],
print_re = Re_Core[81],
witness = Re_Core[82],
get = Re_Core[83],
get_ofs = Re_Core[84],
get_all = Re_Core[85],
get_all_ofs = Re_Core[86],
test = Re_Core[87],
marked = Re_Core[88],
mark_set = Re_Core[89],
Stream = Re_Core[90],
replace = Re_Replace[1],
replace_string = Re_Replace[2];
runtime.caml_register_global
(2,
[0,
Group,
compile,
group_count,
group_names,
exec,
exec_opt,
execp,
exec_partial,
exec_partial_detailed,
Mark,
all,
all_gen,
all_seq,
matches,
matches_gen,
matches_seq,
split,
split_delim,
split_gen,
split_seq,
split_full,
split_full_gen,
split_full_seq,
Seq,
str,
char,
alt,
seq,
empty,
epsilon,
rep,
rep1,
repn,
opt,
bol,
eol,
bow,
eow,
bos,
eos,
leol,
start,
stop,
word,
not_boundary,
whole_string,
longest,
shortest,
first,
greedy,
non_greedy,
group,
no_group,
nest,
mark,
set,
rg,
inter,
diff,
compl,
any,
notnl,
alnum,
wordc,
alpha,
ascii,
blank,
cntrl,
digit,
graph,
lower,
print,
punct,
space,
upper,
xdigit,
case$,
no_case,
pp,
pp_re,
print_re,
witness,
get,
get_ofs,
get_all,
get_all_ofs,
test,
marked,
mark_set,
Stream,
replace,
replace_string],
"Re");
return;
}
(globalThis));
//# 6 "../.js/default/unix/unix.cma.js"
//# shape: Unix:[N,F(1),F(2),F(1),F(1),F(1),F(1),F(2),F(2),F(3),F(2),F(3),F(1),F(1),F(2),F(1),F(1),F(1),F(1),F(1),N,N,N,F(3),F(1),F(1),F(4),F(4),F(4),F(4),F(4),F(4),F(4),F(4),F(1),F(1),F(1),F(1),F(3),F(2),F(2),F(1),F(1),F(1),F(1),N,F(6),F(1),F(2),F(3),F(1),F(2),F(2),F(3),F(3),F(1),F(2),F(2),F(3),F(1),F(1),F(1),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(2),F(5),F(6),F(1),F(1),F(1),F(1),F(2),F(2),F(2),F(3),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3),F(1),F(1),F(4),F(3),F(2),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(1)*,F(1),N,N,N,N,F(1)*,F(4),F(1)*,F(4),F(2),F(2),F(2),F(2),F(2),F(1),F(1),F(5),F(5),F(5),F(5),F(6),F(6),F(2),F(3),F(2),F(3),F(2),F(3),F(2),F(3),F(1),F(1),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(2),F(2),F(3),F(2),F(1),F(3),F(2),F(1),F(2),F(2),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_ba_dim_1 = runtime.caml_ba_dim_1,
caml_channel_descriptor = runtime.caml_channel_descriptor,
caml_int64_create_lo_mi_hi = runtime.caml_int64_create_lo_mi_hi,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_bytes_length = runtime.caml_ml_bytes_length,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_sys_exit = runtime.caml_sys_exit,
caml_unix_close = runtime.caml_unix_close,
caml_unix_getpwnam = runtime.caml_unix_getpwnam,
caml_unix_inchannel_of_filedes = runtime.caml_unix_inchannel_of_filedescr,
caml_unix_inet_addr_of_string = runtime.caml_unix_inet_addr_of_string,
caml_unix_outchannel_of_filede = runtime.caml_unix_outchannel_of_filedescr,
caml_unix_write_bigarray = runtime.caml_unix_write_bigarray,
caml_wrap_exception = runtime.caml_wrap_exception,
unix_error_message = runtime.unix_error_message;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Hashtbl = global_data.Stdlib__Hashtbl,
Stdlib_Mutex = global_data.Stdlib__Mutex,
Stdlib_List = global_data.Stdlib__List,
Stdlib_Fun = global_data.Stdlib__Fun,
Stdlib_Int = global_data.Stdlib__Int;
global_data.Stdlib__Array;
var
Stdlib_Bytes = global_data.Stdlib__Bytes,
Stdlib_Printf = global_data.Stdlib__Printf,
Stdlib_Callback = global_data.Stdlib__Callback,
Stdlib_Printexc = global_data.Stdlib__Printexc,
cst_Unix_Unix_error = "Unix.Unix_error",
Unix_error = [248, cst_Unix_Unix_error, runtime.caml_fresh_oo_id(0)],
cst = "";
Stdlib_Callback[2].call
(null, cst_Unix_Unix_error, [0, Unix_error, 0, cst, cst]);
var
cst$0 = ", ",
a =
[0,
[11,
"Unix.Unix_error(Unix.",
[2, 0, [11, cst$0, [3, 0, [11, cst$0, [3, 0, [12, 41, 0]]]]]]],
"Unix.Unix_error(Unix.%s, %S, %S)"],
b = [0, [11, "EUNKNOWNERR ", [4, 0, 0, 0, 0]], "EUNKNOWNERR %d"];
Stdlib_Printexc[9].call
(null,
function(param){
if(param[1] !== Unix_error) return 0;
var s = param[4], s$0 = param[3], e = param[2];
if(typeof e === "number"){
var c = e;
if(34 <= c)
switch(c){
case 34:
var msg = "ESPIPE"; break;
case 35:
var msg = "ESRCH"; break;
case 36:
var msg = "EXDEV"; break;
case 37:
var msg = "EWOULDBLOCK"; break;
case 38:
var msg = "EINPROGRESS"; break;
case 39:
var msg = "EALREADY"; break;
case 40:
var msg = "ENOTSOCK"; break;
case 41:
var msg = "EDESTADDRREQ"; break;
case 42:
var msg = "EMSGSIZE"; break;
case 43:
var msg = "EPROTOTYPE"; break;
case 44:
var msg = "ENOPROTOOPT"; break;
case 45:
var msg = "EPROTONOSUPPORT"; break;
case 46:
var msg = "ESOCKTNOSUPPORT"; break;
case 47:
var msg = "EOPNOTSUPP"; break;
case 48:
var msg = "EPFNOSUPPORT"; break;
case 49:
var msg = "EAFNOSUPPORT"; break;
case 50:
var msg = "EADDRINUSE"; break;
case 51:
var msg = "EADDRNOTAVAIL"; break;
case 52:
var msg = "ENETDOWN"; break;
case 53:
var msg = "ENETUNREACH"; break;
case 54:
var msg = "ENETRESET"; break;
case 55:
var msg = "ECONNABORTED"; break;
case 56:
var msg = "ECONNRESET"; break;
case 57:
var msg = "ENOBUFS"; break;
case 58:
var msg = "EISCONN"; break;
case 59:
var msg = "ENOTCONN"; break;
case 60:
var msg = "ESHUTDOWN"; break;
case 61:
var msg = "ETOOMANYREFS"; break;
case 62:
var msg = "ETIMEDOUT"; break;
case 63:
var msg = "ECONNREFUSED"; break;
case 64:
var msg = "EHOSTDOWN"; break;
case 65:
var msg = "EHOSTUNREACH"; break;
case 66:
var msg = "ELOOP"; break;
default: var msg = "EOVERFLOW";
}
else
switch(c){
case 0:
var msg = "E2BIG"; break;
case 1:
var msg = "EACCES"; break;
case 2:
var msg = "EAGAIN"; break;
case 3:
var msg = "EBADF"; break;
case 4:
var msg = "EBUSY"; break;
case 5:
var msg = "ECHILD"; break;
case 6:
var msg = "EDEADLK"; break;
case 7:
var msg = "EDOM"; break;
case 8:
var msg = "EEXIST"; break;
case 9:
var msg = "EFAULT"; break;
case 10:
var msg = "EFBIG"; break;
case 11:
var msg = "EINTR"; break;
case 12:
var msg = "EINVAL"; break;
case 13:
var msg = "EIO"; break;
case 14:
var msg = "EISDIR"; break;
case 15:
var msg = "EMFILE"; break;
case 16:
var msg = "EMLINK"; break;
case 17:
var msg = "ENAMETOOLONG"; break;
case 18:
var msg = "ENFILE"; break;
case 19:
var msg = "ENODEV"; break;
case 20:
var msg = "ENOENT"; break;
case 21:
var msg = "ENOEXEC"; break;
case 22:
var msg = "ENOLCK"; break;
case 23:
var msg = "ENOMEM"; break;
case 24:
var msg = "ENOSPC"; break;
case 25:
var msg = "ENOSYS"; break;
case 26:
var msg = "ENOTDIR"; break;
case 27:
var msg = "ENOTEMPTY"; break;
case 28:
var msg = "ENOTTY"; break;
case 29:
var msg = "ENXIO"; break;
case 30:
var msg = "EPERM"; break;
case 31:
var msg = "EPIPE"; break;
case 32:
var msg = "ERANGE"; break;
default: var msg = "EROFS";
}
}
else
var x = e[1], msg = caml_call1(Stdlib_Printf[4].call(null, b), x);
return [0, caml_call3(Stdlib_Printf[4].call(null, a), msg, s$0, s)];
});
function handle_unix_error(f, arg){
try{var c = caml_call1(f, arg); return c;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Unix_error) throw caml_maybe_attach_backtrace(exn, 0);
var
arg$0 = exn[4],
fun_name = exn[3],
err = exn[2],
a = runtime.caml_check_bound(runtime.caml_sys_argv(0), 0)[1];
Stdlib[49].call(null, a);
Stdlib[49].call(null, ': "');
Stdlib[49].call(null, fun_name);
Stdlib[49].call(null, '" failed');
if(0 < caml_ml_string_length(arg$0)){
Stdlib[49].call(null, ' on "');
Stdlib[49].call(null, arg$0);
Stdlib[49].call(null, '"');
}
Stdlib[49].call(null, ": ");
var b = unix_error_message(err);
Stdlib[53].call(null, b);
return Stdlib[99].call(null, 2);
}
}
var c = caml_int64_create_lo_mi_hi(0, 0, 0);
function read(fd, buf, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(buf) - len | 0) >= ofs)
return runtime.caml_unix_read(fd, buf, ofs, len);
return Stdlib[1].call(null, "Unix.read");
}
function read_bigarray(fd, buf, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ba_dim_1(buf) - len | 0) >= ofs)
return runtime.caml_unix_read_bigarray(fd, buf, ofs, len);
return Stdlib[1].call(null, "Unix.read_bigarray");
}
function write(fd, buf, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(buf) - len | 0) >= ofs)
return runtime.caml_unix_write(fd, buf, ofs, len);
return Stdlib[1].call(null, "Unix.write");
}
function write_bigarray(fd, buf, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ba_dim_1(buf) - len | 0) >= ofs)
return caml_unix_write_bigarray(fd, buf, ofs, len, 0);
return Stdlib[1].call(null, "Unix.write_bigarray");
}
function single_write(fd, buf, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(buf) - len | 0) >= ofs)
return runtime.caml_unix_single_write(fd, buf, ofs, len);
return Stdlib[1].call(null, "Unix.single_write");
}
function single_write_bigarray(fd, buf, ofs, len){
if(0 <= ofs && 0 <= len && (caml_ba_dim_1(buf) - len | 0) >= ofs)
return caml_unix_write_bigarray(fd, buf, ofs, len, 1);
return Stdlib[1].call(null, "Unix.single_write_bigarray");
}
function write_substring(fd, buf, ofs, len){
return write(fd, Stdlib_Bytes[45].call(null, buf), ofs, len);
}
function single_write_substring(fd, buf, ofs, len){
return single_write(fd, Stdlib_Bytes[45].call(null, buf), ofs, len);
}
function map_file(fd, opt, kind, layout, shared, dims){
var pos = opt ? opt[1] : c;
return runtime.caml_unix_map_file_bytecode
(fd, kind, layout, shared, dims, pos);
}
function pause(param){
var sigs = runtime.caml_unix_sigprocmask(1, 0);
return runtime.caml_unix_sigsuspend(sigs);
}
function sleep(duration){return runtime.caml_unix_sleep(duration);}
function is_inet6_addr(s){return 16 === caml_ml_string_length(s) ? 1 : 0;}
var
cst_0_0_0_0 = "0.0.0.0",
inet_addr_any = caml_unix_inet_addr_of_string(cst_0_0_0_0),
cst_127_0_0_1 = "127.0.0.1",
inet_addr_loopback = caml_unix_inet_addr_of_string(cst_127_0_0_1),
inet6_addr_any = caml_unix_inet_addr_of_string("::"),
inet6_addr_loopback = caml_unix_inet_addr_of_string("::1");
function domain_of_sockaddr(param){
if(0 === param[0]) return 0;
var a = param[1];
return is_inet6_addr(a) ? 2 : 1;
}
function recv(fd, buf, ofs, len, flags){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(buf) - len | 0) >= ofs)
return runtime.caml_unix_recv(fd, buf, ofs, len, flags);
return Stdlib[1].call(null, "Unix.recv");
}
function recvfrom(fd, buf, ofs, len, flags){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(buf) - len | 0) >= ofs)
return runtime.caml_unix_recvfrom(fd, buf, ofs, len, flags);
return Stdlib[1].call(null, "Unix.recvfrom");
}
function send(fd, buf, ofs, len, flags){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(buf) - len | 0) >= ofs)
return runtime.caml_unix_send(fd, buf, ofs, len, flags);
return Stdlib[1].call(null, "Unix.send");
}
function sendto(fd, buf, ofs, len, flags, addr){
if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(buf) - len | 0) >= ofs)
return runtime.caml_unix_sendto(fd, buf, ofs, len, flags, addr);
return Stdlib[1].call(null, "Unix.sendto");
}
function send_substring(fd, buf, ofs, len, flags){
return send(fd, Stdlib_Bytes[45].call(null, buf), ofs, len, flags);
}
function sendto_substring(fd, buf, ofs, len, flags, addr){
return sendto(fd, Stdlib_Bytes[45].call(null, buf), ofs, len, flags, addr);
}
function getsockopt(fd, opt){
return runtime.caml_unix_getsockopt(0, fd, opt);
}
function setsockopt(fd, opt, v){
return runtime.caml_unix_setsockopt(0, fd, opt, v);
}
function getsockopt_int(fd, opt){
return runtime.caml_unix_getsockopt(1, fd, opt);
}
function setsockopt_int(fd, opt, v){
return runtime.caml_unix_setsockopt(1, fd, opt, v);
}
function getsockopt_optint(fd, opt){
return runtime.caml_unix_getsockopt(2, fd, opt);
}
function setsockopt_optint(fd, opt, v){
return runtime.caml_unix_setsockopt(2, fd, opt, v);
}
function getsockopt_float(fd, opt){
return runtime.caml_unix_getsockopt(3, fd, opt);
}
function setsockopt_float(fd, opt, v){
return runtime.caml_unix_setsockopt(3, fd, opt, v);
}
function getsockopt_error(fd){
return runtime.caml_unix_getsockopt(4, fd, 0);
}
var cst_tcp = "tcp", cst_udp = "udp";
function getaddrinfo(node, service, opts){
try{
var
d = runtime.caml_unix_getaddrinfo(node, service, opts),
e = Stdlib_List[10].call(null, d);
return e;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Stdlib[6]) throw caml_maybe_attach_backtrace(exn, 0);
var opt_socktype = [0, 0], opt_protocol = [0, 0];
Stdlib_List[18].call
(null,
function(param){
if(typeof param === "number"){if(2 === param) return 0;}
else
switch(param[0]){
case 1:
var s = param[1]; opt_socktype[1] = [0, s]; return 0;
case 2:
var p = param[1]; opt_protocol[1] = p; return 0;
}
return 0;
},
opts);
var
get_port =
function(ty, kind){
if(service === cst) return [0, [0, ty, 0], 0];
try{
var b = [0, [0, ty, runtime.caml_int_of_string(service)], 0];
return b;
}
catch(exn$1){
var exn = caml_wrap_exception(exn$1);
if(exn[1] !== Stdlib[7]) throw caml_maybe_attach_backtrace(exn, 0);
try{
var
a =
[0,
[0, ty, runtime.caml_unix_getservbyname(service, kind)[3]],
0];
return a;
}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 === Stdlib[8]) return 0;
throw caml_maybe_attach_backtrace(exn$0, 0);
}
}
},
match = opt_socktype[1];
if(match)
var
ty = match[1],
ports =
1 === ty
? get_port(1, cst_udp)
: ty
? service === cst ? [0, [0, ty, 0], 0] : 0
: get_port(0, cst_tcp);
else
var
b = get_port(1, cst_udp),
c = get_port(0, cst_tcp),
ports = Stdlib[37].call(null, c, b);
var
addresses =
node === cst
? Stdlib_List
[37].call
(null, 2, opts)
? [0, [0, inet_addr_any, cst_0_0_0_0], 0]
: [0, [0, inet_addr_loopback, cst_127_0_0_1], 0]
: [0, [0, caml_unix_inet_addr_of_string(node), node], 0],
a =
Stdlib_List[20].call
(null,
function(param){
var port = param[2], ty = param[1];
return Stdlib_List[20].call
(null,
function(param){
var name = param[2], addr = param[1];
return [0, 1, ty, opt_protocol[1], [1, addr, port], name];
},
addresses);
},
ports);
return Stdlib_List[15].call(null, a);
}
}
function getnameinfo(addr, opts){
try{var d = runtime.caml_unix_getnameinfo(addr, opts); return d;}
catch(exn$2){
var exn$1 = caml_wrap_exception(exn$2);
if(exn$1[1] !== Stdlib[6]) throw caml_maybe_attach_backtrace(exn$1, 0);
if(0 === addr[0]){var f = addr[1]; return [0, cst, f];}
var p = addr[2], a = addr[1];
try{
if(Stdlib_List[37].call(null, 1, opts))
throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var c = runtime.caml_unix_gethostbyaddr(a)[1], hostname = c;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
if(Stdlib_List[37].call(null, 2, opts))
throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var hostname = runtime.caml_unix_string_of_inet_addr(a);
}
try{
if(Stdlib_List[37].call(null, 3, opts))
throw caml_maybe_attach_backtrace(Stdlib[8], 1);
var
kind = Stdlib_List[37].call(null, 4, opts) ? cst_udp : cst_tcp,
b = runtime.caml_unix_getservbyport(p, kind)[1],
service = b;
}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn$0, 0);
var service = Stdlib_Int[12].call(null, p);
}
return [0, hostname, service];
}
}
function waitpid_non_intr(pid){
for(;;)
try{var a = runtime.caml_unix_waitpid(0, pid); return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Unix_error){
var match = exn[2];
if(typeof match === "number" && 11 === match) continue;
}
throw caml_maybe_attach_backtrace(exn, 0);
}
}
var d = [0, 1];
function create_process_gen
(cmd, args, optenv, new_stdin, new_stdout, new_stderr){
var toclose = [0, 0];
function close_after(param){
return Stdlib_List[18].call
(null,
function(fd){
try{var a = caml_unix_close(fd); return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Unix_error) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
},
toclose[1]);
}
function file_descr_not_standard(fd$1){
var fd = fd$1;
for(;;){
if(3 <= fd) return fd;
var fd$0 = runtime.caml_unix_dup(d, fd);
toclose[1] = [0, fd$0, toclose[1]];
fd = fd$0;
}
}
var
a = 2 === new_stderr ? 2 : file_descr_not_standard(new_stderr),
b = 1 === new_stdout ? 1 : file_descr_not_standard(new_stdout),
c = 0 === new_stdin ? 0 : file_descr_not_standard(new_stdin),
redirections = [0, c, b, a];
return Stdlib_Fun[5].call
(null,
close_after,
function(param){
return runtime.caml_unix_spawn
(cmd, args, optenv, 1, redirections);
});
}
function create_process(cmd, args, new_stdin, new_stdout, new_stderr){
return create_process_gen(cmd, args, 0, new_stdin, new_stdout, new_stderr);
}
function create_process_env
(cmd, args, env, new_stdin, new_stdout, new_stderr){
return create_process_gen
(cmd, args, [0, env], new_stdin, new_stdout, new_stderr);
}
var cst_c = "-c", cst_bin_sh = "/bin/sh", shell = cst_bin_sh;
function system(cmd){
var
pid =
runtime.caml_unix_spawn
(cst_bin_sh, [0, shell, cst_c, cmd], 0, 0, [0, 0, 1, 2]);
return waitpid_non_intr(pid)[2];
}
var
popen_processes = Stdlib_Hashtbl[1].call(null, 0, 7),
popen_mutex = Stdlib_Mutex[1].call(null, 0);
function open_proc(prog, args, envopt, proc, input, output, error){
var pid = create_process_gen(prog, args, envopt, input, output, error);
return Stdlib_Mutex[5].call
(null,
popen_mutex,
function(param){
return Stdlib_Hashtbl[5].call(null, popen_processes, proc, pid);
});
}
var stdin = 0, stderr = 2, e = [0, 1];
function open_process_args_in(prog, args){
var
match = runtime.caml_unix_pipe(e, 0),
in_write = match[2],
in_read = match[1],
inchan = caml_unix_inchannel_of_filedes(in_read);
try{open_proc(prog, args, 0, [1, inchan], stdin, in_write, stderr);}
catch(e){
var e$0 = caml_wrap_exception(e);
Stdlib[93].call(null, inchan);
caml_unix_close(in_write);
throw caml_maybe_attach_backtrace(e$0, 0);
}
caml_unix_close(in_write);
return inchan;
}
var stdout = 1, f = [0, 1];
function open_process_args_out(prog, args){
var
match = runtime.caml_unix_pipe(f, 0),
out_write = match[2],
out_read = match[1],
outchan = caml_unix_outchannel_of_filede(out_write);
try{open_proc(prog, args, 0, [2, outchan], out_read, stdout, stderr);}
catch(e$0){
var e = caml_wrap_exception(e$0);
Stdlib[76].call(null, outchan);
caml_unix_close(out_read);
throw caml_maybe_attach_backtrace(e, 0);
}
caml_unix_close(out_read);
return outchan;
}
var g = [0, 1], h = [0, 1];
function open_process_args(prog, args){
var
match = runtime.caml_unix_pipe(g, 0),
in_write = match[2],
in_read = match[1];
try{var match$0 = runtime.caml_unix_pipe(h, 0);}
catch(e$0){
var e = caml_wrap_exception(e$0);
caml_unix_close(in_read);
caml_unix_close(in_write);
throw caml_maybe_attach_backtrace(e, 0);
}
var
out_write = match$0[2],
out_read = match$0[1],
inchan = caml_unix_inchannel_of_filedes(in_read),
outchan = caml_unix_outchannel_of_filede(out_write);
try{
open_proc
(prog, args, 0, [0, inchan, outchan], out_read, in_write, stderr);
}
catch(e){
var e$0 = caml_wrap_exception(e);
caml_unix_close(out_read);
caml_unix_close(out_write);
caml_unix_close(in_read);
caml_unix_close(in_write);
throw caml_maybe_attach_backtrace(e$0, 0);
}
caml_unix_close(out_read);
caml_unix_close(in_write);
return [0, inchan, outchan];
}
var i = [0, 1], j = [0, 1], k = [0, 1];
function open_process_args_full(prog, args, env){
var
match = runtime.caml_unix_pipe(i, 0),
in_write = match[2],
in_read = match[1];
try{var match$0 = runtime.caml_unix_pipe(j, 0);}
catch(e$0){
var e = caml_wrap_exception(e$0);
caml_unix_close(in_read);
caml_unix_close(in_write);
throw caml_maybe_attach_backtrace(e, 0);
}
var out_write = match$0[2], out_read = match$0[1];
try{var match$1 = runtime.caml_unix_pipe(k, 0);}
catch(e){
var e$0 = caml_wrap_exception(e);
caml_unix_close(in_read);
caml_unix_close(in_write);
caml_unix_close(out_read);
caml_unix_close(out_write);
throw caml_maybe_attach_backtrace(e$0, 0);
}
var
err_write = match$1[2],
err_read = match$1[1],
inchan = caml_unix_inchannel_of_filedes(in_read),
outchan = caml_unix_outchannel_of_filede(out_write),
errchan = caml_unix_inchannel_of_filedes(err_read);
try{
open_proc
(prog,
args,
[0, env],
[3, inchan, outchan, errchan],
out_read,
in_write,
err_write);
}
catch(e){
var e$1 = caml_wrap_exception(e);
caml_unix_close(out_read);
caml_unix_close(out_write);
caml_unix_close(in_read);
caml_unix_close(in_write);
caml_unix_close(err_read);
caml_unix_close(err_write);
throw caml_maybe_attach_backtrace(e$1, 0);
}
caml_unix_close(out_read);
caml_unix_close(in_write);
caml_unix_close(err_write);
return [0, inchan, outchan, errchan];
}
function open_process_shell(fn, cmd){
return caml_call2(fn, shell, [0, shell, cst_c, cmd]);
}
function open_process_in(cmd){
return open_process_shell(open_process_args_in, cmd);
}
function open_process_out(cmd){
return open_process_shell(open_process_args_out, cmd);
}
function open_process(cmd){
return open_process_shell(open_process_args, cmd);
}
function open_process_full(cmd){
return open_process_shell(open_process_args_full, cmd);
}
function find_proc_id(fun_name, proc){
try{
var
a =
Stdlib_Mutex[5].call
(null,
popen_mutex,
function(param){
return Stdlib_Hashtbl[6].call(null, popen_processes, proc);
});
return a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8])
throw caml_maybe_attach_backtrace([0, Unix_error, 3, fun_name, cst], 1);
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function remove_proc_id(proc){
return Stdlib_Mutex[5].call
(null,
popen_mutex,
function(param){
return Stdlib_Hashtbl[10].call(null, popen_processes, proc);
});
}
function process_in_pid(inchan){
return find_proc_id("process_in_pid", [1, inchan]);
}
function process_out_pid(outchan){
return find_proc_id("process_out_pid", [2, outchan]);
}
function process_pid(param){
var outchan = param[2], inchan = param[1];
return find_proc_id("process_pid", [0, inchan, outchan]);
}
function process_full_pid(param){
var errchan = param[3], outchan = param[2], inchan = param[1];
return find_proc_id("process_full_pid", [3, inchan, outchan, errchan]);
}
function close_process_in(inchan){
var proc = [1, inchan], pid = find_proc_id("close_process_in", proc);
remove_proc_id(proc);
Stdlib[93].call(null, inchan);
return waitpid_non_intr(pid)[2];
}
function close_process_out(outchan){
var proc = [2, outchan], pid = find_proc_id("close_process_out", proc);
remove_proc_id(proc);
try{Stdlib[76].call(null, outchan);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Stdlib[11]) throw caml_maybe_attach_backtrace(exn, 0);
}
return waitpid_non_intr(pid)[2];
}
function close_process(param){
var
outchan = param[2],
inchan = param[1],
proc = [0, inchan, outchan],
pid = find_proc_id("close_process", proc);
remove_proc_id(proc);
Stdlib[93].call(null, inchan);
try{Stdlib[76].call(null, outchan);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Stdlib[11]) throw caml_maybe_attach_backtrace(exn, 0);
}
return waitpid_non_intr(pid)[2];
}
function close_process_full(param){
var
errchan = param[3],
outchan = param[2],
inchan = param[1],
proc = [3, inchan, outchan, errchan],
pid = find_proc_id("close_process_full", proc);
remove_proc_id(proc);
Stdlib[93].call(null, inchan);
try{Stdlib[76].call(null, outchan);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Stdlib[11]) throw caml_maybe_attach_backtrace(exn, 0);
}
Stdlib[93].call(null, errchan);
return waitpid_non_intr(pid)[2];
}
var l = [0, 1];
function open_connection(sockaddr){
var
sock = runtime.caml_unix_socket(l, domain_of_sockaddr(sockaddr), 0, 0);
try{
runtime.caml_unix_connect(sock, sockaddr);
var
a = caml_unix_outchannel_of_filede(sock),
b = [0, caml_unix_inchannel_of_filedes(sock), a];
return b;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
caml_unix_close(sock);
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function shutdown_connection(inchan){
return runtime.caml_unix_shutdown(caml_channel_descriptor(inchan), 1);
}
var m = [0, 1], n = [0, 1];
function establish_server(server_fun, sockaddr){
var
sock = runtime.caml_unix_socket(n, domain_of_sockaddr(sockaddr), 0, 0);
runtime.caml_unix_setsockopt(0, sock, 2, 1);
runtime.caml_unix_bind(sock, sockaddr);
runtime.caml_unix_listen(sock, 5);
for(;;){
try{var match$0 = runtime.caml_unix_accept(m, sock);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Unix_error){
var match = exn[2];
if(typeof match === "number" && 11 === match) continue;
}
throw caml_maybe_attach_backtrace(exn, 0);
}
var s = match$0[1], id = runtime.caml_unix_fork(0);
if(0 === id){
if(0 !== runtime.caml_unix_fork(0)) caml_sys_exit(0);
caml_unix_close(sock);
var
inchan = caml_unix_inchannel_of_filedes(s),
outchan = caml_unix_outchannel_of_filede(s);
caml_call2(server_fun, inchan, outchan);
Stdlib[99].call(null, 0);
}
else{caml_unix_close(s); waitpid_non_intr(id);}
}
}
var
Unix =
[0,
Unix_error,
unix_error_message,
handle_unix_error,
function(a){return runtime.caml_unix_environment(a);},
function(a){return runtime.caml_unix_environment_unsafe(a);},
runtime.caml_sys_getenv,
runtime.caml_sys_unsafe_getenv,
function(b, a){return runtime.caml_unix_putenv(b, a);},
function(b, a){return runtime.caml_unix_execv(b, a);},
function(c, b, a){return runtime.caml_unix_execve(c, b, a);},
function(b, a){return runtime.caml_unix_execvp(b, a);},
function(c, b, a){return runtime.caml_unix_execvpe(c, b, a);},
function(a){return runtime.caml_unix_fork(a);},
function(a){return runtime.caml_unix_wait(a);},
function(b, a){return runtime.caml_unix_waitpid(b, a);},
system,
caml_sys_exit,
function(a){return runtime.caml_unix_getpid(a);},
function(a){return runtime.caml_unix_getppid(a);},
function(a){return runtime.caml_unix_nice(a);},
stdin,
stdout,
stderr,
runtime.caml_unix_open,
caml_unix_close,
runtime.caml_unix_fsync,
read,
read_bigarray,
write,
write_bigarray,
single_write,
write_substring,
single_write_substring,
single_write_bigarray,
caml_unix_inchannel_of_filedes,
caml_unix_outchannel_of_filede,
caml_channel_descriptor,
caml_channel_descriptor,
runtime.caml_unix_lseek,
runtime.caml_unix_truncate,
runtime.caml_unix_ftruncate,
runtime.caml_unix_stat,
runtime.caml_unix_lstat,
runtime.caml_unix_fstat,
runtime.caml_unix_isatty,
[0,
runtime.caml_unix_lseek_64,
runtime.caml_unix_truncate_64,
runtime.caml_unix_ftruncate_64,
runtime.caml_unix_stat_64,
runtime.caml_unix_lstat_64,
runtime.caml_unix_fstat_64],
map_file,
runtime.caml_unix_unlink,
runtime.caml_unix_rename,
runtime.caml_unix_link,
function(a){return runtime.caml_unix_realpath(a);},
runtime.caml_unix_chmod,
runtime.caml_unix_fchmod,
function(c, b, a){return runtime.caml_unix_chown(c, b, a);},
function(c, b, a){return runtime.caml_unix_fchown(c, b, a);},
function(a){return runtime.caml_unix_umask(a);},
runtime.caml_unix_access,
function(b, a){return runtime.caml_unix_dup(b, a);},
function(c, b, a){return runtime.caml_unix_dup2(c, b, a);},
function(a){return runtime.caml_unix_set_nonblock(a);},
function(a){return runtime.caml_unix_clear_nonblock(a);},
function(a){return runtime.caml_unix_set_close_on_exec(a);},
function(a){return runtime.caml_unix_clear_close_on_exec(a);},
runtime.caml_unix_mkdir,
runtime.caml_unix_rmdir,
runtime.caml_unix_chdir,
function(a){return runtime.caml_sys_getcwd(a);},
function(a){return runtime.caml_unix_chroot(a);},
runtime.caml_unix_opendir,
runtime.caml_unix_readdir,
runtime.caml_unix_rewinddir,
runtime.caml_unix_closedir,
function(b, a){return runtime.caml_unix_pipe(b, a);},
function(b, a){return runtime.caml_unix_mkfifo(b, a);},
create_process,
create_process_env,
open_process_in,
open_process_out,
open_process,
open_process_full,
open_process_args,
open_process_args_in,
open_process_args_out,
open_process_args_full,
process_in_pid,
process_out_pid,
process_pid,
process_full_pid,
close_process_in,
close_process_out,
close_process,
close_process_full,
runtime.caml_unix_symlink,
runtime.caml_unix_has_symlink,
runtime.caml_unix_readlink,
function(d, c, b, a){return runtime.caml_unix_select(d, c, b, a);},
function(c, b, a){return runtime.caml_unix_lockf(c, b, a);},
function(b, a){return runtime.caml_unix_kill(b, a);},
function(b, a){return runtime.caml_unix_sigprocmask(b, a);},
function(a){return runtime.caml_unix_sigpending(a);},
function(a){return runtime.caml_unix_sigsuspend(a);},
pause,
function(a){return runtime.caml_unix_time(a);},
function(a){return runtime.caml_unix_gettimeofday(a);},
runtime.caml_unix_gmtime,
runtime.caml_unix_localtime,
runtime.caml_unix_mktime,
function(a){return runtime.caml_unix_alarm(a);},
sleep,
function(a){return runtime.caml_unix_sleep(a);},
function(a){return runtime.caml_unix_times(a);},
runtime.caml_unix_utimes,
function(a){return runtime.caml_unix_getitimer(a);},
function(b, a){return runtime.caml_unix_setitimer(b, a);},
runtime.caml_unix_getuid,
runtime.caml_unix_geteuid,
function(a){return runtime.caml_unix_setuid(a);},
runtime.caml_unix_getgid,
runtime.caml_unix_getegid,
function(a){return runtime.caml_unix_setgid(a);},
function(a){return runtime.caml_unix_getgroups(a);},
function(a){return runtime.caml_unix_setgroups(a);},
function(b, a){return runtime.caml_unix_initgroups(b, a);},
function(a){return runtime.caml_unix_getlogin(a);},
caml_unix_getpwnam,
caml_unix_getpwnam,
caml_unix_getpwnam,
caml_unix_getpwnam,
function(a){return caml_unix_inet_addr_of_string(a);},
function(a){return runtime.caml_unix_string_of_inet_addr(a);},
inet_addr_any,
inet_addr_loopback,
inet6_addr_any,
inet6_addr_loopback,
is_inet6_addr,
function(d, c, b, a){return runtime.caml_unix_socket(d, c, b, a);},
domain_of_sockaddr,
function(d, c, b, a){return runtime.caml_unix_socketpair(d, c, b, a);},
function(b, a){return runtime.caml_unix_accept(b, a);},
function(b, a){return runtime.caml_unix_bind(b, a);},
function(b, a){return runtime.caml_unix_connect(b, a);},
function(b, a){return runtime.caml_unix_listen(b, a);},
function(b, a){return runtime.caml_unix_shutdown(b, a);},
function(a){return runtime.caml_unix_getsockname(a);},
function(a){return runtime.caml_unix_getpeername(a);},
recv,
recvfrom,
send,
send_substring,
sendto,
sendto_substring,
getsockopt,
setsockopt,
getsockopt_int,
setsockopt_int,
getsockopt_optint,
setsockopt_optint,
getsockopt_float,
setsockopt_float,
getsockopt_error,
open_connection,
shutdown_connection,
establish_server,
function(a){return runtime.caml_unix_gethostname(a);},
function(a){return runtime.caml_unix_gethostbyname(a);},
function(a){return runtime.caml_unix_gethostbyaddr(a);},
function(a){return runtime.caml_unix_getprotobyname(a);},
function(a){return runtime.caml_unix_getprotobynumber(a);},
function(b, a){return runtime.caml_unix_getservbyname(b, a);},
function(b, a){return runtime.caml_unix_getservbyport(b, a);},
getaddrinfo,
getnameinfo,
function(a){return runtime.caml_unix_tcgetattr(a);},
function(c, b, a){return runtime.caml_unix_tcsetattr(c, b, a);},
function(b, a){return runtime.caml_unix_tcsendbreak(b, a);},
function(a){return runtime.caml_unix_tcdrain(a);},
function(b, a){return runtime.caml_unix_tcflush(b, a);},
function(b, a){return runtime.caml_unix_tcflow(b, a);},
function(a){return runtime.caml_unix_setsid(a);}];
runtime.caml_register_global(140, Unix, "Unix");
return;
}
(globalThis));
//# 1039 "../.js/default/unix/unix.cma.js"
//# shape: UnixLabels:[N,F(1),F(2),F(1),F(1),F(1),F(1),F(2),F(2),F(3),F(2),F(3),F(1),F(1),F(2),F(1),F(1),F(1),F(1),F(1),N,N,N,F(3),F(1),F(1),F(4),F(4),F(4),F(4),F(4),F(4),F(4),F(4),F(1),F(1),F(1),F(1),F(3),F(2),F(2),F(1),F(1),F(1),F(1),N,F(6),F(1),F(2),F(3),F(1),F(2),F(2),F(3),F(3),F(1),F(2),F(2),F(3),F(1),F(1),F(1),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(2),F(5),F(6),F(1),F(1),F(1),F(1),F(2),F(2),F(2),F(3),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3),F(1),F(1),F(4),F(3),F(2),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(1)*,F(1),N,N,N,N,F(1)*,F(4),F(1)*,F(4),F(2),F(2),F(2),F(2),F(2),F(1),F(1),F(5),F(5),F(5),F(5),F(6),F(6),F(2),F(3),F(2),F(3),F(2),F(3),F(2),F(3),F(1),F(1),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(2),F(2),F(3),F(2),F(1),F(3),F(2),F(1),F(2),F(2),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
Unix = runtime.caml_get_global_data().Unix,
Unix_error = Unix[1],
error_message = Unix[2],
handle_unix_error = Unix[3],
environment = Unix[4],
unsafe_environment = Unix[5],
getenv = Unix[6],
unsafe_getenv = Unix[7],
putenv = Unix[8],
execv = Unix[9],
execve = Unix[10],
execvp = Unix[11],
execvpe = Unix[12],
fork = Unix[13],
wait = Unix[14],
waitpid = Unix[15],
system = Unix[16],
exit = Unix[17],
getpid = Unix[18],
getppid = Unix[19],
nice = Unix[20],
stdin = Unix[21],
stdout = Unix[22],
stderr = Unix[23],
openfile = Unix[24],
close = Unix[25],
fsync = Unix[26],
read = Unix[27],
read_bigarray = Unix[28],
write = Unix[29],
write_bigarray = Unix[30],
single_write = Unix[31],
write_substring = Unix[32],
single_write_substring = Unix[33],
single_write_bigarray = Unix[34],
in_channel_of_descr = Unix[35],
out_channel_of_descr = Unix[36],
descr_of_in_channel = Unix[37],
descr_of_out_channel = Unix[38],
lseek = Unix[39],
truncate = Unix[40],
ftruncate = Unix[41],
stat = Unix[42],
lstat = Unix[43],
fstat = Unix[44],
isatty = Unix[45],
LargeFile = Unix[46],
map_file = Unix[47],
unlink = Unix[48],
rename = Unix[49],
link = Unix[50],
realpath = Unix[51],
chmod = Unix[52],
fchmod = Unix[53],
chown = Unix[54],
fchown = Unix[55],
umask = Unix[56],
access = Unix[57],
dup = Unix[58],
dup2 = Unix[59],
set_nonblock = Unix[60],
clear_nonblock = Unix[61],
set_close_on_exec = Unix[62],
clear_close_on_exec = Unix[63],
mkdir = Unix[64],
rmdir = Unix[65],
chdir = Unix[66],
getcwd = Unix[67],
chroot = Unix[68],
opendir = Unix[69],
readdir = Unix[70],
rewinddir = Unix[71],
closedir = Unix[72],
pipe = Unix[73],
mkfifo = Unix[74],
create_process = Unix[75],
create_process_env = Unix[76],
open_process_in = Unix[77],
open_process_out = Unix[78],
open_process = Unix[79],
open_process_full = Unix[80],
open_process_args = Unix[81],
open_process_args_in = Unix[82],
open_process_args_out = Unix[83],
open_process_args_full = Unix[84],
process_in_pid = Unix[85],
process_out_pid = Unix[86],
process_pid = Unix[87],
process_full_pid = Unix[88],
close_process_in = Unix[89],
close_process_out = Unix[90],
close_process = Unix[91],
close_process_full = Unix[92],
symlink = Unix[93],
has_symlink = Unix[94],
readlink = Unix[95],
select = Unix[96],
lockf = Unix[97],
kill = Unix[98],
sigprocmask = Unix[99],
sigpending = Unix[100],
sigsuspend = Unix[101],
pause = Unix[102],
time = Unix[103],
gettimeofday = Unix[104],
gmtime = Unix[105],
localtime = Unix[106],
mktime = Unix[107],
alarm = Unix[108],
sleep = Unix[109],
sleepf = Unix[110],
times = Unix[111],
utimes = Unix[112],
getitimer = Unix[113],
setitimer = Unix[114],
getuid = Unix[115],
geteuid = Unix[116],
setuid = Unix[117],
getgid = Unix[118],
getegid = Unix[119],
setgid = Unix[120],
getgroups = Unix[121],
setgroups = Unix[122],
initgroups = Unix[123],
getlogin = Unix[124],
getpwnam = Unix[125],
getgrnam = Unix[126],
getpwuid = Unix[127],
getgrgid = Unix[128],
inet_addr_of_string = Unix[129],
string_of_inet_addr = Unix[130],
inet_addr_any = Unix[131],
inet_addr_loopback = Unix[132],
inet6_addr_any = Unix[133],
inet6_addr_loopback = Unix[134],
is_inet6_addr = Unix[135],
socket = Unix[136],
domain_of_sockaddr = Unix[137],
socketpair = Unix[138],
accept = Unix[139],
bind = Unix[140],
connect = Unix[141],
listen = Unix[142],
shutdown = Unix[143],
getsockname = Unix[144],
getpeername = Unix[145],
recv = Unix[146],
recvfrom = Unix[147],
send = Unix[148],
send_substring = Unix[149],
sendto = Unix[150],
sendto_substring = Unix[151],
getsockopt = Unix[152],
setsockopt = Unix[153],
getsockopt_int = Unix[154],
setsockopt_int = Unix[155],
getsockopt_optint = Unix[156],
setsockopt_optint = Unix[157],
getsockopt_float = Unix[158],
setsockopt_float = Unix[159],
getsockopt_error = Unix[160],
open_connection = Unix[161],
shutdown_connection = Unix[162],
establish_server = Unix[163],
gethostname = Unix[164],
gethostbyname = Unix[165],
gethostbyaddr = Unix[166],
getprotobyname = Unix[167],
getprotobynumber = Unix[168],
getservbyname = Unix[169],
getservbyport = Unix[170],
getaddrinfo = Unix[171],
getnameinfo = Unix[172],
tcgetattr = Unix[173],
tcsetattr = Unix[174],
tcsendbreak = Unix[175],
tcdrain = Unix[176],
tcflush = Unix[177],
tcflow = Unix[178],
setsid = Unix[179];
runtime.caml_register_global
(1,
[0,
Unix_error,
error_message,
handle_unix_error,
environment,
unsafe_environment,
getenv,
unsafe_getenv,
putenv,
execv,
execve,
execvp,
execvpe,
fork,
wait,
waitpid,
system,
exit,
getpid,
getppid,
nice,
stdin,
stdout,
stderr,
openfile,
close,
fsync,
read,
read_bigarray,
write,
write_bigarray,
single_write,
write_substring,
single_write_substring,
single_write_bigarray,
in_channel_of_descr,
out_channel_of_descr,
descr_of_in_channel,
descr_of_out_channel,
lseek,
truncate,
ftruncate,
stat,
lstat,
fstat,
isatty,
LargeFile,
map_file,
unlink,
rename,
link,
realpath,
chmod,
fchmod,
chown,
fchown,
umask,
access,
dup,
dup2,
set_nonblock,
clear_nonblock,
set_close_on_exec,
clear_close_on_exec,
mkdir,
rmdir,
chdir,
getcwd,
chroot,
opendir,
readdir,
rewinddir,
closedir,
pipe,
mkfifo,
create_process,
create_process_env,
open_process_in,
open_process_out,
open_process,
open_process_full,
open_process_args,
open_process_args_in,
open_process_args_out,
open_process_args_full,
process_in_pid,
process_out_pid,
process_pid,
process_full_pid,
close_process_in,
close_process_out,
close_process,
close_process_full,
symlink,
has_symlink,
readlink,
select,
lockf,
kill,
sigprocmask,
sigpending,
sigsuspend,
pause,
time,
gettimeofday,
gmtime,
localtime,
mktime,
alarm,
sleep,
sleepf,
times,
utimes,
getitimer,
setitimer,
getuid,
geteuid,
setuid,
getgid,
getegid,
setgid,
getgroups,
setgroups,
initgroups,
getlogin,
getpwnam,
getgrnam,
getpwuid,
getgrgid,
inet_addr_of_string,
string_of_inet_addr,
inet_addr_any,
inet_addr_loopback,
inet6_addr_any,
inet6_addr_loopback,
is_inet6_addr,
socket,
domain_of_sockaddr,
socketpair,
accept,
bind,
connect,
listen,
shutdown,
getsockname,
getpeername,
recv,
recvfrom,
send,
send_substring,
sendto,
sendto_substring,
getsockopt,
setsockopt,
getsockopt_int,
setsockopt_int,
getsockopt_optint,
setsockopt_optint,
getsockopt_float,
setsockopt_float,
getsockopt_error,
open_connection,
shutdown_connection,
establish_server,
gethostname,
gethostbyname,
gethostbyaddr,
getprotobyname,
getprotobynumber,
getservbyname,
getservbyport,
getaddrinfo,
getnameinfo,
tcgetattr,
tcsetattr,
tcsendbreak,
tcdrain,
tcflush,
tcflow,
setsid],
"UnixLabels");
return;
}
(globalThis));
//# 5 "../lib/.sx.objs/jsoo/default/sx.cma.js"
//# shape: Sx_types:[N,N,N,F(1),F(1),N,N,N,N,N,N,N,N,N,N,N,N,N,N,F(1),F(1),N,N,N,N,F(3),F(2),F(2),F(3),F(2),F(3),F(3),F(2),F(1),F(1),F(1),F(1)*,F(1)*,F(1),N,F(1),F(3),N,N,N,N,N,N,N,F(1)*,F(6),F(5),F(5),F(2),F(1),F(1),F(1)*,F(1)*,F(1)*,F(1)*,F(1)*,F(1)*,F(1)*,F(1),F(1)*,F(1)*,F(1)*,F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(1),F(1)*,F(2),F(2),F(1),F(1),F(1),F(1),F(1)*,F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3),F(2),F(2),F(3),F(2),F(1)*,F(1),F(1),F(1),F(1),F(1)*,F(1),F(1),F(1),F(1),F(2),F(2),F(3),F(2),F(1),F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound,
caml_fresh_oo_id = runtime.caml_fresh_oo_id,
caml_make_vect = runtime.caml_make_vect,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Hashtbl = global_data.Stdlib__Hashtbl,
Stdlib = global_data.Stdlib,
Stdlib_Printf = global_data.Stdlib__Printf,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_String = global_data.Stdlib__String,
Stdlib_List = global_data.Stdlib__List,
Stdlib_Array = global_data.Stdlib__Array,
Stdlib_Uchar = global_data.Stdlib__Uchar,
Stdlib_Queue = global_data.Stdlib__Queue,
Stdlib_Float = global_data.Stdlib__Float,
sym_to_id = Stdlib_Hashtbl[1].call(null, 0, 512),
id_to_sym = Stdlib_Hashtbl[1].call(null, 0, 512),
sym_next = [0, 0];
function intern(s){
var match = Stdlib_Hashtbl[7].call(null, sym_to_id, s);
if(match){var id = match[1]; return id;}
var id$0 = sym_next[1];
sym_next[1]++;
Stdlib_Hashtbl[11].call(null, sym_to_id, s, id$0);
Stdlib_Hashtbl[11].call(null, id_to_sym, id$0, s);
return id$0;
}
function unintern(id){
var match = Stdlib_Hashtbl[7].call(null, id_to_sym, id);
if(match){var s = match[1]; return s;}
var a = Stdlib[33].call(null, id), b = Stdlib[28].call(null, a, ">");
return Stdlib[28].call(null, "<sym:", b);
}
var
vm_call_closure_ref =
[0,
function(a, param){
throw caml_maybe_attach_backtrace
([0, Stdlib[7], "VM call_closure not initialized"], 1);
}],
cek_call_ref =
[0,
function(a, param){
throw caml_maybe_attach_backtrace
([0, Stdlib[7], "CEK call not initialized"], 1);
}],
cek_eval_lambda_ref =
[0,
function(a, param){
throw caml_maybe_attach_backtrace
([0, Stdlib[7], "CEK eval lambda not initialized"], 1);
}],
Eval_error = [248, "Sx_types.Eval_error", caml_fresh_oo_id(0)],
Parse_error = [248, "Sx_types.Parse_error", caml_fresh_oo_id(0)],
CekPerformRequest =
[248, "Sx_types.CekPerformRequest", caml_fresh_oo_id(0)],
default_vm_globals = [0, Stdlib_Hashtbl[1].call(null, 0, 0)],
convert_vm_suspension = [0, function(param){return 0;}],
vm_suspension_to_dict = [0, function(param){return 0;}],
rtd_table = Stdlib_Hashtbl[1].call(null, 0, 16);
function make_env(param){
return [0, Stdlib_Hashtbl[1].call(null, 0, 16), 0];
}
function env_extend(parent){
return [0, Stdlib_Hashtbl[1].call(null, 0, 16), [0, parent]];
}
var env_bind_hook = [0, 0];
function env_bind(env, name, v){
var a = intern(name);
Stdlib_Hashtbl[11].call(null, env[1], a, v);
var match = env_bind_hook[1];
if(match){var f = match[1]; caml_call3(f, env, name, v);}
return 0;
}
function env_has_id(env$1, id){
var env = env$1;
for(;;){
var a = Stdlib_Hashtbl[9].call(null, env[1], id);
if(a)
var b = a;
else{
var match = env[2];
if(match){var env$0 = match[1]; env = env$0; continue;}
var b = 0;
}
return b;
}
}
function env_has(env, name){return env_has_id(env, intern(name));}
var symbol_resolve_hook = [0, 0];
function env_get_id(env$1, id, name){
var env = env$1;
for(;;){
var match = Stdlib_Hashtbl[7].call(null, env[1], id);
if(match){var v = match[1]; return v;}
var match$0 = env[2];
if(! match$0){
var
match$1 = symbol_resolve_hook[1],
cst_Undefined_symbol = "Undefined symbol: ";
if(! match$1)
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call(null, cst_Undefined_symbol, name)],
1);
var hook = match$1[1], match$2 = caml_call1(hook, name);
if(! match$2)
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call(null, cst_Undefined_symbol, name)],
1);
var v$0 = match$2[1];
Stdlib_Hashtbl[11].call(null, env[1], id, v$0);
return v$0;
}
var env$0 = match$0[1];
env = env$0;
}
}
function env_get(env, name){return env_get_id(env, intern(name), name);}
function env_set_id(env$1, id, v){
var env = env$1;
for(;;){
if(Stdlib_Hashtbl[9].call(null, env[1], id)){
Stdlib_Hashtbl[11].call(null, env[1], id, v);
var match = env_bind_hook[1];
if(match){var f = match[1]; caml_call3(f, env, unintern(id), v);}
return 0;
}
var match$0 = env[2];
if(! match$0){Stdlib_Hashtbl[11].call(null, env[1], id, v); return 0;}
var env$0 = match$0[1];
env = env$0;
}
}
function env_set(env, name, v){return env_set_id(env, intern(name), v);}
function env_merge(base, overlay){
if(base === overlay)
return [0, Stdlib_Hashtbl[1].call(null, 0, 16), [0, base]];
a:
{
b:
{
c:
{
var e = overlay, depth = 0;
for(;;){
if(100 < depth) break b;
if(e === base) break c;
var match = e[2];
if(! match) break;
var p = match[1], depth$0 = depth + 1 | 0;
e = p;
depth = depth$0;
}
var a = 0;
break a;
}
var a = 1;
break a;
}
var a = 0;
}
if(a) return [0, Stdlib_Hashtbl[1].call(null, 0, 16), [0, base]];
var e$0 = [0, Stdlib_Hashtbl[1].call(null, 0, 16), [0, base]];
Stdlib_Hashtbl[12].call
(null,
function(id, v){
var a = 1 - env_has_id(base, id);
return a ? Stdlib_Hashtbl[11].call(null, e$0[1], id, v) : a;
},
overlay[1]);
return e$0;
}
var
a = [0, [8, [0, 0, 3], 0, [0, 17], 0], "%.17g"],
b = [0, [8, [0, 0, 3], 0, 0, 0], "%g"];
function format_number(n){
if(Stdlib_Float[17].call(null, n)) return "nan";
if(n === Stdlib_Float[6]) return "inf";
if(n === Stdlib_Float[7]) return "-inf";
if(Stdlib_Float[18].call(null, n) && Math.abs(n) < 10000000000000000.)
return Stdlib[33].call(null, n | 0);
return Stdlib_Float[18].call(null, n)
? caml_call1(Stdlib_Printf[4].call(null, a), n)
: caml_call1(Stdlib_Printf[4].call(null, b), n);
}
var cst$1 = "", cst_false = "false", cst_true = "true";
function value_to_string(param){
if(typeof param === "number"){
if(0 === param) return cst$1;
}
else
switch(param[0]){
case 0:
return param[1] ? cst_true : cst_false;
case 1:
var n = param[1]; return Stdlib[33].call(null, n);
case 2:
var n$0 = param[1]; return format_number(n$0);
case 3:
case 4:
case 5:
var s = param[1]; return s;
}
return "<value>";
}
function value_to_string_list(param){
a:
if(typeof param !== "number"){
switch(param[0]){
case 6:
var items = param[1]; break;
case 21:
var items = param[1][1]; break;
default: break a;
}
return Stdlib_List[20].call(null, value_to_string, items);
}
return 0;
}
function value_to_bool(param){
if(typeof param === "number"){if(0 === param) return 0;}
else if(0 === param[0]){var b = param[1]; return b;}
return 1;
}
function value_to_string_opt(param){
if(typeof param === "number"){if(0 === param) return 0;}
else if(param[0] - 3 >>> 0 < 2){var s = param[1]; return [0, s];}
return 0;
}
function unwrap_env_val(param){
if(typeof param !== "number" && 20 === param[0]){var e = param[1]; return e;}
throw caml_maybe_attach_backtrace
([0, Eval_error, "make_lambda: expected env for closure"], 1);
}
var lambda_uid_counter = [0, 0];
function next_lambda_uid(param){
lambda_uid_counter[1]++;
return lambda_uid_counter[1];
}
function make_lambda(params, body, closure){
a:
{
if(typeof params !== "number" && 6 === params[0]){
var
items = params[1],
ps = Stdlib_List[20].call(null, value_to_string, items);
break a;
}
var ps = value_to_string_list(params);
}
var a = next_lambda_uid(0);
return [8, [0, ps, body, unwrap_env_val(closure), 0, 0, 0, a]];
}
var jit_cache_queue = Stdlib_Queue[2].call(null, 0);
function jit_cache_size(param){
return Stdlib_Queue[14].call(null, jit_cache_queue);
}
var cst_auto = "auto";
function make_component
(name, params, has_children, body, closure, affinity){
var
n = value_to_string(name),
ps = value_to_string_list(params),
hc = value_to_bool(has_children);
if(typeof affinity === "number" || ! (3 === affinity[0]))
var aff = cst_auto;
else
var s = affinity[1], aff = s;
return [9, [0, n, ps, hc, body, unwrap_env_val(closure), aff, 0, 0]];
}
function make_island(name, params, has_children, body, closure){
var
n = value_to_string(name),
ps = value_to_string_list(params),
hc = value_to_bool(has_children);
return [10, [0, n, ps, hc, body, unwrap_env_val(closure), 0, 0]];
}
function make_macro(params, rest_param, body, closure, name){
var
ps = value_to_string_list(params),
rp = value_to_string_opt(rest_param),
n = value_to_string_opt(name);
return [11, [0, ps, rp, body, unwrap_env_val(closure), n]];
}
function make_thunk(expr, env){return [12, expr, unwrap_env_val(env)];}
function make_symbol(name){return [4, value_to_string(name)];}
function make_keyword(name){return [5, value_to_string(name)];}
var cst_lambda = "lambda", cst_macro = "macro", cst_nil = "nil";
function type_of(param){
if(typeof param === "number") return 0 === param ? cst_nil : "eof-object";
var
cst_continuation = "continuation",
cst_dict = "dict",
cst_function = "function",
cst_number = "number";
switch(param[0]){
case 0:
return "boolean";
case 1:
return cst_number;
case 2:
return cst_number;
case 3:
return "string";
case 4:
return "symbol";
case 5:
return "keyword";
case 7:
return cst_dict;
case 8:
return cst_lambda;
case 9:
return "component";
case 10:
return "island";
case 11:
return cst_macro;
case 12:
return "thunk";
case 13:
return cst_continuation;
case 14:
return cst_continuation;
case 15:
return cst_function;
case 16:
return "signal";
case 17:
return "raw-html";
case 18:
return "spread";
case 19:
return "sx-expr";
case 20:
return "env";
case 22:
return cst_dict;
case 23:
return cst_dict;
case 24:
return cst_function;
case 25:
return "vm-frame";
case 26:
return "vm-machine";
case 27:
var r = param[1]; return r[1][1];
case 28:
return "parameter";
case 29:
return "vector";
case 30:
return "string-buffer";
case 31:
return "hash-table";
case 32:
return "char";
case 33:
return 0 === param[1][2][0] ? "input-port" : "output-port";
case 34:
return "rational";
case 35:
return "set";
case 36:
return "regexp";
case 37:
return "bytevector";
default: return "list";
}
}
function is_nil(param){
if(typeof param === "number" && ! param) return 1;
return 0;
}
function is_lambda(param){
if(typeof param !== "number" && 8 === param[0]) return 1;
return 0;
}
function is_component(param){
if(typeof param !== "number" && 9 === param[0]) return 1;
return 0;
}
function is_island(param){
if(typeof param !== "number" && 10 === param[0]) return 1;
return 0;
}
function is_macro(param){
if(typeof param !== "number" && 11 === param[0]) return 1;
return 0;
}
function is_thunk(param){
if(typeof param !== "number" && 12 === param[0]) return 1;
return 0;
}
function is_signal(param){
if(typeof param !== "number")
switch(param[0]){
case 7:
var d = param[1]; return Stdlib_Hashtbl[9].call(null, d, "__signal");
case 16:
return 1;
}
return 0;
}
function is_record(param){
if(typeof param !== "number" && 27 === param[0]) return 1;
return 0;
}
function is_callable(param){
if(typeof param !== "number")
switch(param[0]){case 8:case 13:case 14:case 15:case 24: return 1;}
return 0;
}
function sx_truthy(param){
a:
{
if(typeof param === "number"){if(0 !== param) break a;}
else if(0 !== param[0] || param[1]) break a;
return 0;
}
return 1;
}
function symbol_name(v){
if(typeof v !== "number" && 4 === v[0]){var s = v[1]; return [3, s];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, "Expected symbol, got ", a)],
1);
}
function keyword_name(v){
if(typeof v !== "number" && 5 === v[0]){var k = v[1]; return [3, k];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call(null, "Expected keyword, got ", a)],
1);
}
var cst_Expected_lambda_got = "Expected lambda, got ";
function lambda_params(v){
if(typeof v !== "number" && 8 === v[0]){
var l = v[1];
return [6, Stdlib_List[20].call(null, function(s){return [3, s];}, l[1])];
}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, cst_Expected_lambda_got, a)],
1);
}
function lambda_body(v){
if(typeof v !== "number" && 8 === v[0]){var l = v[1]; return l[2];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, cst_Expected_lambda_got, a)],
1);
}
function lambda_closure(v){
if(typeof v !== "number" && 8 === v[0]){var l = v[1]; return [20, l[3]];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, cst_Expected_lambda_got, a)],
1);
}
function lambda_name(v){
if(typeof v !== "number" && 8 === v[0]){
var l = v[1], match = l[4];
if(! match) return 0;
var n = match[1];
return [3, n];
}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, cst_Expected_lambda_got, a)],
1);
}
function set_lambda_name(l, n){
if(typeof l !== "number" && 8 === l[0]){
var l$0 = l[1];
l$0[4] = [0, n];
return 0;
}
throw caml_maybe_attach_backtrace
([0, Eval_error, "set-lambda-name!: not a lambda"], 1);
}
var cst_Expected_component_got = "Expected component, got ";
function component_name(v){
if(typeof v !== "number" && v[0] - 9 >>> 0 < 2){var c = v[1]; return [3, c[1]];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call(null, cst_Expected_component_got, a)],
1);
}
function component_file(param){
if(typeof param !== "number")
switch(param[0]){
case 9:
var c = param[1], match = c[7];
if(! match) return 0;
var f = match[1];
return [3, f];
case 10:
var i = param[1], match$0 = i[6];
if(! match$0) return 0;
var f$0 = match$0[1];
return [3, f$0];
}
return 0;
}
function component_set_file(v, f){
if(typeof v !== "number")
switch(v[0]){
case 9:
if(typeof f !== "number" && 3 === f[0]){var s = f[1], c = v[1]; c[7] = [0, s];
}
break;
case 10:
if(typeof f !== "number" && 3 === f[0]){
var s$0 = f[1], i = v[1];
i[6] = [0, s$0];
}
break;
}
return 0;
}
function component_params(v){
if(typeof v !== "number")
switch(v[0]){
case 9:
var c = v[1];
return [6,
Stdlib_List[20].call(null, function(s){return [3, s];}, c[2])];
case 10:
var i = v[1];
return [6,
Stdlib_List[20].call(null, function(s){return [3, s];}, i[2])];
}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call(null, cst_Expected_component_got, a)],
1);
}
function component_body(v){
if(typeof v !== "number" && v[0] - 9 >>> 0 < 2){var c = v[1]; return c[4];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call(null, cst_Expected_component_got, a)],
1);
}
function component_closure(v){
if(typeof v !== "number" && v[0] - 9 >>> 0 < 2){var c = v[1]; return [20, c[5]];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call(null, cst_Expected_component_got, a)],
1);
}
function component_has_children(v){
if(typeof v !== "number" && v[0] - 9 >>> 0 < 2){var c = v[1]; return [0, c[3]];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call(null, cst_Expected_component_got, a)],
1);
}
var c = [3, cst_auto], d = [3, "client"];
function component_affinity(param){
if(typeof param !== "number")
switch(param[0]){
case 9:
var c$0 = param[1]; return [3, c$0[6]];
case 10:
return d;
}
return c;
}
var cst_Expected_macro_got = "Expected macro, got ";
function macro_params(v){
if(typeof v !== "number" && 11 === v[0]){
var m = v[1];
return [6, Stdlib_List[20].call(null, function(s){return [3, s];}, m[1])];
}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, cst_Expected_macro_got, a)],
1);
}
function macro_rest_param(v){
if(typeof v !== "number" && 11 === v[0]){
var m = v[1], match = m[2];
if(! match) return 0;
var s = match[1];
return [3, s];
}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, cst_Expected_macro_got, a)],
1);
}
function macro_body(v){
if(typeof v !== "number" && 11 === v[0]){var m = v[1]; return m[3];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, cst_Expected_macro_got, a)],
1);
}
function macro_closure(v){
if(typeof v !== "number" && 11 === v[0]){var m = v[1]; return [20, m[4]];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, cst_Expected_macro_got, a)],
1);
}
var cst_Expected_thunk_got = "Expected thunk, got ";
function thunk_expr(v){
if(typeof v !== "number" && 12 === v[0]){var e = v[1]; return e;}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, cst_Expected_thunk_got, a)],
1);
}
function thunk_env(v){
if(typeof v !== "number" && 12 === v[0]){var e = v[2]; return [20, e];}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, cst_Expected_thunk_got, a)],
1);
}
function val_to_int(v){
if(typeof v !== "number")
switch(v[0]){
case 1:
var n = v[1]; return n;
case 2:
var n$0 = v[1]; return n$0 | 0;
}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0, Eval_error, Stdlib[28].call(null, "Expected number, got ", a)],
1);
}
var
rtd_counter = [0, 0],
e =
[0,
[11, "make-rtd: ctor param ", [2, 0, [11, " not in fields", 0]]],
"make-rtd: ctor param %s not in fields"];
function make_rtd(name, fields, ctor_params){
var uid = rtd_counter[1];
rtd_counter[1]++;
a:
{
if(typeof fields !== "number" && 6 === fields[0]){var l$0 = fields[1], a = l$0; break a;}
var a = 0;
}
var field_names = Stdlib_List[20].call(null, value_to_string, a);
a:
{
if(typeof ctor_params !== "number" && 6 === ctor_params[0]){var l = ctor_params[1], b = l; break a;}
var b = 0;
}
var
ctor_names = Stdlib_List[20].call(null, value_to_string, b),
field_arr = Stdlib_Array[11].call(null, field_names),
c =
Stdlib_List[20].call
(null,
function(cp){
var j = 0, param = field_names;
for(;;){
if(! param)
throw caml_maybe_attach_backtrace
([0,
Eval_error,
caml_call1(Stdlib_Printf[4].call(null, e), cp)],
1);
var f = param[1];
if(f === cp) return j;
var rest = param[2], j$0 = j + 1 | 0;
j = j$0;
param = rest;
}
},
ctor_names),
ctor_map = Stdlib_Array[11].call(null, c),
rt = [0, value_to_string(name), uid, field_arr, ctor_map];
Stdlib_Hashtbl[5].call(null, rtd_table, uid, rt);
return [2, uid];
}
var
cst_args_got = " args, got ",
cst_s_expected_d_args_got_d = "%s: expected %d args, got %d",
cst_expected = ": expected ",
f =
[0,
[2,
0,
[11, cst_expected, [4, 0, 0, 0, [11, cst_args_got, [4, 0, 0, 0, 0]]]]],
cst_s_expected_d_args_got_d];
function make_record(uid_val, args_list){
var uid = val_to_int(uid_val);
a:
{
if(typeof args_list !== "number" && 6 === args_list[0]){var l = args_list[1], ctor_args = l; break a;}
var ctor_args = 0;
}
var match = Stdlib_Hashtbl[7].call(null, rtd_table, uid);
if(! match)
throw caml_maybe_attach_backtrace
([0, Eval_error, "make-record: unknown rtd"], 1);
var
rt = match[1],
n_ctor = rt[4].length - 1,
n_args = Stdlib_List[1].call(null, ctor_args);
if(n_args !== n_ctor){
var a = rt[1];
throw caml_maybe_attach_backtrace
([0,
Eval_error,
caml_call3(Stdlib_Printf[4].call(null, f), a, n_ctor, n_args)],
1);
}
var fields = caml_make_vect(rt[3].length - 1, 0);
Stdlib_List[19].call
(null,
function(i, arg){
var a = caml_check_bound(rt[4], i)[i + 1];
caml_check_bound(fields, a)[a + 1] = arg;
return 0;
},
ctor_args);
return [27, [0, rt, fields]];
}
var
cst_out_of_bounds_for = " out of bounds for ",
g =
[0,
[11,
"record-ref: index ",
[4, 0, 0, 0, [11, cst_out_of_bounds_for, [2, 0, 0]]]],
"record-ref: index %d out of bounds for %s"];
function record_ref(v, idx){
if(typeof v !== "number" && 27 === v[0]){
var
r = v[1],
i = val_to_int(idx),
b = i < 0,
c = b || r[2].length - 1 <= i;
if(! c) return caml_check_bound(r[2], i)[i + 1];
var d = r[1][1];
throw caml_maybe_attach_backtrace
([0, Eval_error, caml_call2(Stdlib_Printf[4].call(null, g), i, d)],
1);
}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call(null, "record-ref: not a record, got ", a)],
1);
}
var
h =
[0,
[11,
"record-set!: index ",
[4, 0, 0, 0, [11, cst_out_of_bounds_for, [2, 0, 0]]]],
"record-set!: index %d out of bounds for %s"];
function record_set_b(v, idx, new_val){
if(typeof v !== "number" && 27 === v[0]){
var
r = v[1],
i = val_to_int(idx),
b = i < 0,
c = b || r[2].length - 1 <= i;
if(c){
var d = r[1][1];
throw caml_maybe_attach_backtrace
([0,
Eval_error,
caml_call2(Stdlib_Printf[4].call(null, h), i, d)],
1);
}
caml_check_bound(r[2], i)[i + 1] = new_val;
return 0;
}
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call(null, "record-set!: not a record, got ", a)],
1);
}
var i = [0, 0];
function record_type_p(v, uid_val){
if(typeof v !== "number" && 27 === v[0]){
var r = v[1], a = val_to_int(uid_val);
return [0, r[1][2] === a ? 1 : 0];
}
return i;
}
function record_p(v){return [0, is_record(v)];}
var
j =
[0,
[2,
0,
[11, cst_expected, [4, 0, 0, 0, [11, cst_args_got, [4, 0, 0, 0, 0]]]]],
cst_s_expected_d_args_got_d];
function make_record_constructor(uid_val){
var
uid = val_to_int(uid_val),
match = Stdlib_Hashtbl[7].call(null, rtd_table, uid);
if(! match)
throw caml_maybe_attach_backtrace
([0, Eval_error, "make-record-constructor: unknown rtd"], 1);
var rt = match[1];
return [15,
rt[1],
function(args){
var
n_ctor = rt[4].length - 1,
n_args = Stdlib_List[1].call(null, args);
if(n_args !== n_ctor){
var a = rt[1];
throw caml_maybe_attach_backtrace
([0,
Eval_error,
caml_call3
(Stdlib_Printf[4].call(null, j), a, n_ctor, n_args)],
1);
}
var fields = caml_make_vect(rt[3].length - 1, 0);
Stdlib_List[19].call
(null,
function(i, arg){
var a = caml_check_bound(rt[4], i)[i + 1];
caml_check_bound(fields, a)[a + 1] = arg;
return 0;
},
args);
return [27, [0, rt, fields]];
}];
}
var k = [0, 0];
function make_record_predicate(uid_val){
var uid = val_to_int(uid_val);
return [15,
"?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 27 === a[0]){
if(args[2]) break a;
var r = a[1];
return [0, r[1][2] === uid ? 1 : 0];
}
if(! args[2]) return k;
}
throw caml_maybe_attach_backtrace
([0, Eval_error, "record predicate: expected 1 arg"], 1);
}];
}
var
cst_out_of_bounds = " out of bounds",
l =
[0,
[11,
"record accessor: index ",
[4, 0, 0, 0, [11, cst_out_of_bounds, 0]]],
"record accessor: index %d out of bounds"];
function make_record_accessor(idx_val){
var idx = val_to_int(idx_val);
return [15,
"ref",
function(args){
a:
if(args){
var v = args[1];
if(typeof v !== "number" && 27 === v[0]){
if(args[2]) break a;
var r = v[1], b = idx < 0, c = b || r[2].length - 1 <= idx;
if(c)
throw caml_maybe_attach_backtrace
([0,
Eval_error,
caml_call1(Stdlib_Printf[4].call(null, l), idx)],
1);
return caml_check_bound(r[2], idx)[idx + 1];
}
if(! args[2]){
var a = type_of(v);
throw caml_maybe_attach_backtrace
([0,
Eval_error,
Stdlib[28].call
(null, "record accessor: not a record, got ", a)],
1);
}
}
throw caml_maybe_attach_backtrace
([0, Eval_error, "record accessor: expected 1 arg"], 1);
}];
}
var
m =
[0,
[11,
"record mutator: index ",
[4, 0, 0, 0, [11, cst_out_of_bounds, 0]]],
"record mutator: index %d out of bounds"];
function make_record_mutator(idx_val){
var idx = val_to_int(idx_val);
return [15,
"set!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 27 === a[0]){
var b = args[2];
if(b && ! b[2]){
var
new_val = b[1],
r = a[1],
c = idx < 0,
d = c || r[2].length - 1 <= idx;
if(d)
throw caml_maybe_attach_backtrace
([0,
Eval_error,
caml_call1(Stdlib_Printf[4].call(null, m), idx)],
1);
caml_check_bound(r[2], idx)[idx + 1] = new_val;
return 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Eval_error, "record mutator: expected (record value)"],
1);
}];
}
var n = [0, 0], o = [0, 1];
function parameter_p(v){
if(typeof v !== "number" && 28 === v[0]) return o;
return n;
}
function parameter_uid(v){
if(typeof v !== "number" && 28 === v[0]){var p = v[1]; return [3, p[1]];}
throw caml_maybe_attach_backtrace
([0, Eval_error, "parameter-uid: not a parameter"], 1);
}
function parameter_default(v){
if(typeof v !== "number" && 28 === v[0]){var p = v[1]; return p[2];}
throw caml_maybe_attach_backtrace
([0, Eval_error, "parameter-default: not a parameter"], 1);
}
function parameter_converter(v){
if(typeof v !== "number" && 28 === v[0]){
var p = v[1], match = p[3];
if(! match) return 0;
var c = match[1];
return c;
}
throw caml_maybe_attach_backtrace
([0, Eval_error, "parameter-converter: not a parameter"], 1);
}
function make_dict(param){return Stdlib_Hashtbl[1].call(null, 0, 8);}
function dict_get(d, key){
var match = Stdlib_Hashtbl[7].call(null, d, key);
if(! match) return 0;
var v = match[1];
return v;
}
function dict_has(d, key){return Stdlib_Hashtbl[9].call(null, d, key);}
function dict_set(d, key, v){
return Stdlib_Hashtbl[11].call(null, d, key, v);
}
function dict_delete(d, key){return Stdlib_Hashtbl[10].call(null, d, key);}
function dict_keys(d){
return Stdlib_Hashtbl[14].call
(null, function(k, param, acc){return [0, [3, k], acc];}, d, 0);
}
function dict_vals(d){
return Stdlib_Hashtbl[14].call
(null, function(param, v, acc){return [0, v, acc];}, d, 0);
}
var
cst = ")>",
cst_s_s = "<%s(%s)>",
cst$0 = '>"',
p = [0, [12, 58, [2, 0, [12, 32, [2, 0, 0]]]], ":%s %s"],
q = [0, [12, 60, [2, 0, [12, 40, [2, 0, [11, cst, 0]]]]], cst_s_s],
r =
[0,
[11, "<Component ~", [2, 0, [12, 40, [2, 0, [11, cst, 0]]]]],
"<Component ~%s(%s)>"],
s =
[0,
[11, "<Island ~", [2, 0, [12, 40, [2, 0, [11, cst, 0]]]]],
"<Island ~%s(%s)>"],
t = [0, [12, 60, [2, 0, [12, 40, [2, 0, [11, cst, 0]]]]], cst_s_s],
u = [0, [11, "<native:", [2, 0, [12, 62, 0]]], "<native:%s>"],
v =
[0,
[11, '"<raw-html:', [4, 0, 0, 0, [11, cst$0, 0]]],
'"<raw-html:%d>"'],
w =
[0, [11, '"<sx-expr:', [4, 0, 0, 0, [11, cst$0, 0]]], '"<sx-expr:%d>"'],
x = [0, [11, "<frame:", [2, 0, [12, 62, 0]]], "<frame:%s>"],
y = [0, [11, "<vm:", [2, 0, [12, 62, 0]]], "<vm:%s>"],
z =
[0,
[11,
"<vm-frame:ip=",
[4, 0, 0, 0, [11, " base=", [4, 0, 0, 0, [12, 62, 0]]]]],
"<vm-frame:ip=%d base=%d>"],
A =
[0,
[11,
"<vm-machine:sp=",
[4, 0, 0, 0, [11, " frames=", [4, 0, 0, 0, [12, 62, 0]]]]],
"<vm-machine:sp=%d frames=%d>"],
B = [0, [2, 0, [12, 61, [2, 0, 0]]], "%s=%s"],
C =
[0,
[11, "<record:", [2, 0, [12, 32, [2, 0, [12, 62, 0]]]]],
"<record:%s %s>"],
D = [0, [11, "<parameter:", [2, 0, [12, 62, 0]]], "<parameter:%s>"],
E = [0, [11, "#(", [2, 0, [12, 41, 0]]], "#(%s)"],
F =
[0,
[11, "<string-buffer:", [4, 0, 0, 0, [12, 62, 0]]],
"<string-buffer:%d>"],
G =
[0, [11, "<hash-table:", [4, 0, 0, 0, [12, 62, 0]]], "<hash-table:%d>"],
H =
[0,
[11, "<input-port:pos=", [4, 0, 0, 0, [2, 0, [12, 62, 0]]]],
"<input-port:pos=%d%s>"],
I =
[0,
[11, "<output-port:len=", [4, 0, 0, 0, [2, 0, [12, 62, 0]]]],
"<output-port:len=%d%s>"],
J = [0, [4, 0, 0, 0, [12, 47, [4, 0, 0, 0, 0]]], "%d/%d"],
K = [0, [11, "<set:", [4, 0, 0, 0, [12, 62, 0]]], "<set:%d>"],
L = [0, [11, "#/", [2, 0, [12, 47, [2, 0, 0]]]], "#/%s/%s"],
M = [0, [11, "#u8(", [2, 0, [12, 41, 0]]], "#u8(%s)"];
function inspect(param){
if(typeof param === "number") return 0 === param ? cst_nil : "#!eof";
var cst = " ", cst$0 = ", ";
switch(param[0]){
case 0:
return param[1] ? cst_true : cst_false;
case 1:
var n = param[1]; return Stdlib[33].call(null, n);
case 2:
var n$0 = param[1]; return format_number(n$0);
case 3:
var
s$0 = param[1],
buf = Stdlib_Buffer[1].call(null, caml_ml_string_length(s$0) + 2 | 0);
Stdlib_Buffer[12].call(null, buf, 34);
Stdlib_String[30].call
(null,
function(c){
if(34 === c) return Stdlib_Buffer[16].call(null, buf, '\\"');
if(14 <= c){
if(92 === c) return Stdlib_Buffer[16].call(null, buf, "\\\\");
}
else if(9 <= c)
switch(c - 9 | 0){
case 0:
return Stdlib_Buffer[16].call(null, buf, "\\t");
case 1:
return Stdlib_Buffer[16].call(null, buf, "\\n");
case 4:
return Stdlib_Buffer[16].call(null, buf, "\\r");
}
return Stdlib_Buffer[12].call(null, buf, c);
},
s$0);
Stdlib_Buffer[12].call(null, buf, 34);
return Stdlib_Buffer[2].call(null, buf);
case 4:
var s$1 = param[1]; return s$1;
case 5:
var k = param[1]; return Stdlib[28].call(null, ":", k);
case 6:
var items = param[1]; break;
case 7:
var
d = param[1],
pairs =
Stdlib_Hashtbl[14].call
(null,
function(k, v, acc){
var a = inspect(v);
return [0, caml_call2(Stdlib_Printf[4].call(null, p), k, a), acc];
},
d,
0),
j = Stdlib_String[7].call(null, cst, pairs),
o = Stdlib[28].call(null, j, "}");
return Stdlib[28].call(null, "{", o);
case 8:
var l = param[1], match = l[4];
if(match) var n$1 = match[1], tag = n$1; else var tag = cst_lambda;
var N = Stdlib_String[7].call(null, cst$0, l[1]);
return caml_call2(Stdlib_Printf[4].call(null, q), tag, N);
case 9:
var
c = param[1],
O = Stdlib_String[7].call(null, cst$0, c[2]),
P = c[1];
return caml_call2(Stdlib_Printf[4].call(null, r), P, O);
case 10:
var
i = param[1],
Q = Stdlib_String[7].call(null, cst$0, i[2]),
R = i[1];
return caml_call2(Stdlib_Printf[4].call(null, s), R, Q);
case 11:
var m = param[1], match$0 = m[5];
if(match$0)
var n$2 = match$0[1], tag$0 = n$2;
else
var tag$0 = cst_macro;
var S = Stdlib_String[7].call(null, cst$0, m[1]);
return caml_call2(Stdlib_Printf[4].call(null, t), tag$0, S);
case 12:
return "<thunk>";
case 13:
return "<continuation>";
case 14:
return "<callcc-continuation>";
case 15:
var name = param[1];
return caml_call1(Stdlib_Printf[4].call(null, u), name);
case 16:
return "<signal>";
case 17:
var s$2 = param[1];
return caml_call1
(Stdlib_Printf[4].call(null, v), caml_ml_string_length(s$2));
case 18:
return "<spread>";
case 19:
var s$3 = param[1];
return caml_call1
(Stdlib_Printf[4].call(null, w), caml_ml_string_length(s$3));
case 20:
return "<env>";
case 21:
var items = param[1][1]; break;
case 22:
return "<cek-state>";
case 23:
var f = param[1], T = f[1];
return caml_call1(Stdlib_Printf[4].call(null, x), T);
case 24:
var cl = param[1], match$1 = cl[3];
if(match$1) var n$3 = match$1[1], n$4 = n$3; else var n$4 = "anon";
return caml_call1(Stdlib_Printf[4].call(null, y), n$4);
case 25:
var f$0 = param[1], U = f$0[3], V = f$0[2];
return caml_call2(Stdlib_Printf[4].call(null, z), V, U);
case 26:
var m$0 = param[1], W = Stdlib_List[1].call(null, m$0[3]), X = m$0[2];
return caml_call2(Stdlib_Printf[4].call(null, A), X, W);
case 27:
var
r$0 = param[1],
Y =
Stdlib_Array[16].call
(null,
function(i, v){
var a = inspect(v), b = caml_check_bound(r$0[1][3], i)[i + 1];
return caml_call2(Stdlib_Printf[4].call(null, B), b, a);
},
r$0[2]),
fields = Stdlib_Array[10].call(null, Y),
Z = Stdlib_String[7].call(null, cst, fields),
_ = r$0[1][1];
return caml_call2(Stdlib_Printf[4].call(null, C), _, Z);
case 28:
var p$0 = param[1], $ = p$0[1];
return caml_call1(Stdlib_Printf[4].call(null, D), $);
case 29:
var
arr = param[1],
aa = Stdlib_Array[14].call(null, inspect, arr),
elts = Stdlib_Array[10].call(null, aa),
ab = Stdlib_String[7].call(null, cst, elts);
return caml_call1(Stdlib_Printf[4].call(null, E), ab);
case 30:
var buf$0 = param[1], ac = Stdlib_Buffer[7].call(null, buf$0);
return caml_call1(Stdlib_Printf[4].call(null, F), ac);
case 31:
var ht = param[1], ad = Stdlib_Hashtbl[15].call(null, ht);
return caml_call1(Stdlib_Printf[4].call(null, G), ad);
case 32:
var n$5 = param[1];
a:
{
if(33 <= n$5){
if(127 === n$5){var name$0 = "delete"; break a;}
}
else if(0 <= n$5)
switch(n$5){
case 0:
var name$0 = "nul"; break a;
case 8:
var name$0 = "backspace"; break a;
case 9:
var name$0 = "tab"; break a;
case 10:
var name$0 = "newline"; break a;
case 13:
var name$0 = "return"; break a;
case 27:
var name$0 = "escape"; break a;
case 32:
var name$0 = "space"; break a;
}
var
buf$1 = Stdlib_Buffer[1].call(null, 1),
ae = Stdlib_Uchar[8].call(null, n$5);
Stdlib_Buffer[13].call(null, buf$1, ae);
var name$0 = Stdlib_Buffer[2].call(null, buf$1);
}
return Stdlib[28].call(null, "#\\", name$0);
case 33:
var
a = param[1],
sp_closed = a[1],
match$2 = a[2],
cst_closed = ":closed";
if(0 === match$2[0]){
var
pos = match$2[2],
af = sp_closed ? cst_closed : cst$1,
ag = pos[1];
return caml_call2(Stdlib_Printf[4].call(null, H), ag, af);
}
var
buf$2 = match$2[1],
ah = sp_closed ? cst_closed : cst$1,
ai = Stdlib_Buffer[7].call(null, buf$2);
return caml_call2(Stdlib_Printf[4].call(null, I), ai, ah);
case 34:
var d$0 = param[2], n$6 = param[1];
return caml_call2(Stdlib_Printf[4].call(null, J), n$6, d$0);
case 35:
var ht$0 = param[1], aj = Stdlib_Hashtbl[15].call(null, ht$0);
return caml_call1(Stdlib_Printf[4].call(null, K), aj);
case 36:
var flags = param[2], src = param[1];
return caml_call2(Stdlib_Printf[4].call(null, L), src, flags);
default:
var
b = param[1],
ak =
Stdlib_List[11].call
(null,
runtime.caml_ml_bytes_length(b),
function(i){
var a = runtime.caml_bytes_get(b, i);
return Stdlib[33].call(null, a);
}),
al = Stdlib_String[7].call(null, cst, ak);
return caml_call1(Stdlib_Printf[4].call(null, M), al);
}
var
e = Stdlib_List[20].call(null, inspect, items),
g = Stdlib_String[7].call(null, cst, e),
h = Stdlib[28].call(null, g, ")");
return Stdlib[28].call(null, "(", h);
}
runtime.caml_register_global
(188,
[0,
sym_to_id,
id_to_sym,
sym_next,
intern,
unintern,
vm_call_closure_ref,
cek_call_ref,
cek_eval_lambda_ref,
Eval_error,
Parse_error,
CekPerformRequest,
[0, 0],
[0, 0],
default_vm_globals,
convert_vm_suspension,
vm_suspension_to_dict,
rtd_table,
rtd_counter,
[0, 0],
make_env,
env_extend,
env_bind_hook,
[0, 0],
[0, 0],
symbol_resolve_hook,
env_bind,
env_has_id,
env_has,
env_get_id,
env_get,
env_set_id,
env_set,
env_merge,
format_number,
value_to_string,
value_to_string_list,
value_to_bool,
value_to_string_opt,
unwrap_env_val,
lambda_uid_counter,
next_lambda_uid,
make_lambda,
[0, 4],
[0, 0],
[0, 0],
[0, 0],
[0, 5000],
[0, 0],
jit_cache_queue,
jit_cache_size,
make_component,
make_island,
make_macro,
make_thunk,
make_symbol,
make_keyword,
type_of,
is_nil,
is_lambda,
is_component,
is_island,
is_macro,
is_thunk,
is_signal,
is_record,
is_callable,
sx_truthy,
symbol_name,
keyword_name,
lambda_params,
lambda_body,
lambda_closure,
lambda_name,
set_lambda_name,
component_name,
component_file,
component_set_file,
component_set_file,
component_params,
component_body,
component_closure,
component_has_children,
component_affinity,
macro_params,
macro_rest_param,
macro_body,
macro_closure,
thunk_expr,
thunk_env,
val_to_int,
make_rtd,
make_record,
record_ref,
record_set_b,
record_type_p,
record_p,
make_record_constructor,
make_record_predicate,
make_record_accessor,
make_record_mutator,
parameter_p,
parameter_uid,
parameter_default,
parameter_converter,
make_dict,
dict_get,
dict_has,
dict_set,
dict_delete,
dict_keys,
dict_vals,
inspect],
"Sx_types");
return;
}
(globalThis));
//# 1442 "../lib/.sx.objs/jsoo/default/sx.cma.js"
//# shape: Sx_cst:[F(1),F(1),F(1),F(2),F(1),F(2),F(2),F(3)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
global_data = runtime.caml_get_global_data(),
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib = global_data.Stdlib,
Stdlib_List = global_data.Stdlib__List,
Sx_types = global_data.Sx_types,
Stdlib_String = global_data.Stdlib__String;
function trivia_to_string(ts){
var buf = Stdlib_Buffer[1].call(null, 64);
Stdlib_List[18].call
(null,
function(param){
if(0 === param[0]){
var s = param[1];
return Stdlib_Buffer[16].call(null, buf, s);
}
var s$0 = param[1];
return Stdlib_Buffer[16].call(null, buf, s$0);
},
ts);
return Stdlib_Buffer[2].call(null, buf);
}
function cst_to_source(node){
switch(node[0]){
case 0:
var
token = node[2],
leading_trivia = node[1],
a = trivia_to_string(leading_trivia);
return Stdlib[28].call(null, a, token);
case 1:
var
trailing_trivia = node[5],
close_delim = node[4],
children = node[3],
open_delim = node[2],
leading_trivia$0 = node[1],
buf = Stdlib_Buffer[1].call(null, 256),
b = trivia_to_string(leading_trivia$0);
Stdlib_Buffer[16].call(null, buf, b);
Stdlib_Buffer[12].call(null, buf, open_delim);
Stdlib_List[18].call
(null,
function(c){
var a = cst_to_source(c);
return Stdlib_Buffer[16].call(null, buf, a);
},
children);
var c = trivia_to_string(trailing_trivia);
Stdlib_Buffer[16].call(null, buf, c);
Stdlib_Buffer[12].call(null, buf, close_delim);
return Stdlib_Buffer[2].call(null, buf);
default:
var
trailing_trivia$0 = node[3],
children$0 = node[2],
leading_trivia$1 = node[1],
buf$0 = Stdlib_Buffer[1].call(null, 256),
d = trivia_to_string(leading_trivia$1);
Stdlib_Buffer[16].call(null, buf$0, d);
Stdlib_Buffer[12].call(null, buf$0, 123);
Stdlib_List[18].call
(null,
function(c){
var a = cst_to_source(c);
return Stdlib_Buffer[16].call(null, buf$0, a);
},
children$0);
var e = trivia_to_string(trailing_trivia$0);
Stdlib_Buffer[16].call(null, buf$0, e);
Stdlib_Buffer[12].call(null, buf$0, 125);
return Stdlib_Buffer[2].call(null, buf$0);
}
}
var cst = "";
function cst_to_source_file(nodes){
var a = Stdlib_List[20].call(null, cst_to_source, nodes);
return Stdlib_String[7].call(null, cst, a);
}
function cst_file_to_source(nodes, trailing){
var a = trivia_to_string(trailing), b = cst_to_source_file(nodes);
return Stdlib[28].call(null, b, a);
}
function cst_to_ast(param){
switch(param[0]){
case 0:
var value = param[3]; return value;
case 1:
var children = param[3];
return [6, Stdlib_List[20].call(null, cst_to_ast, children)];
default:
var
children$0 = param[2],
d = Sx_types[105].call(null, 0),
param$0 = children$0;
for(;;){
if(param$0){
var match = param$0[2];
if(match){
var
rest = match[2],
v = match[1],
k = param$0[1],
match$0 = cst_to_ast(k);
if(typeof match$0 === "number" || ! (match$0[0] - 3 >>> 0 < 3))
var key_str = cst;
else
var k$0 = match$0[1], key_str = k$0;
var a = cst_to_ast(v);
Sx_types[108].call(null, d, key_str, a);
param$0 = rest;
continue;
}
}
return [7, d];
}
}
}
function offset_to_loc(src, offset){
var
c =
Stdlib[16].call
(null, offset - 1 | 0, runtime.caml_ml_string_length(src) - 1 | 0),
a = 1,
b = 0;
if(c < 0)
var col$1 = b, line$2 = a;
else{
var col = b, line = a, i = 0;
for(;;){
if(10 === runtime.caml_string_get(src, i))
var line$0 = line + 1 | 0, col$0 = 0, line$1 = line$0;
else
var col$0 = col + 1 | 0, line$1 = line;
var d = i + 1 | 0;
if(c === i){var col$1 = col$0, line$2 = line$1; break;}
col = col$0;
line = line$1;
i = d;
}
}
return [0, line$2, col$1];
}
function cst_to_ast_loc(src, nodes){
return Stdlib_List[20].call
(null,
function(node){
if(1 === node[0])
var span$1 = node[6], span$0 = span$1;
else
var span = node[4], span$0 = span;
var
value = cst_to_ast(node),
match = offset_to_loc(src, span$0[1]),
col = match[2],
line = match[1],
d = Sx_types[105].call(null, 0);
Sx_types[108].call(null, d, "form", value);
Sx_types[108].call(null, d, "line", [2, line]);
Sx_types[108].call(null, d, "col", [2, col]);
return [7, d];
},
nodes);
}
function apply_edit(path, new_cst_nodes, original_cst_nodes){
function go(nodes, idx_path){
if(! idx_path) return nodes;
var target = idx_path[1];
if(! idx_path[2])
return Stdlib_List[21].call
(null,
function(i, node){
if(i !== target) return node;
if(new_cst_nodes && ! new_cst_nodes[2]){
var replacement = new_cst_nodes[1], leading_trivia = node[1];
switch(replacement[0]){
case 0:
return [0,
leading_trivia,
replacement[2],
replacement[3],
replacement[4]];
case 1:
return [1,
leading_trivia,
replacement[2],
replacement[3],
replacement[4],
replacement[5],
replacement[6]];
default:
return [2,
leading_trivia,
replacement[2],
replacement[3],
replacement[4]];
}
}
return node;
},
nodes);
var rest = idx_path[2];
return Stdlib_List[21].call
(null,
function(i, node){
if(i === target)
switch(node[0]){
case 0:
return node;
case 1:
var
a = node[6],
b = node[5],
c = node[4],
d = go(node[3], rest);
return [1, node[1], node[2], d, c, b, a];
default:
var e = node[4], f = node[3], g = go(node[2], rest);
return [2, node[1], g, f, e];
}
return node;
},
nodes);
}
return go(original_cst_nodes, path);
}
runtime.caml_register_global
(10,
[0,
trivia_to_string,
cst_to_source,
cst_to_source_file,
cst_file_to_source,
cst_to_ast,
offset_to_loc,
cst_to_ast_loc,
apply_edit],
"Sx_cst");
return;
}
(globalThis));
//# 1691 "../lib/.sx.objs/jsoo/default/sx.cma.js"
//# shape: Sx_parser:[F(1)*,F(1),F(1),F(1)*,F(1),F(1)*,F(1)*,F(1)*,F(1),F(1),F(2),F(2),F(1),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(5),F(3),F(1),F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_div = runtime.caml_div,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_mul = runtime.caml_mul,
caml_string_get = runtime.caml_string_get;
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call4(f, a0, a1, a2, a3){
return (f.l >= 0 ? f.l : f.l = f.length) === 4
? f(a0, a1, a2, a3)
: runtime.caml_call_gen(f, [a0, a1, a2, a3]);
}
var
global_data = runtime.caml_get_global_data(),
Sx_types = global_data.Sx_types,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_String = global_data.Stdlib__String,
Stdlib_Printf = global_data.Stdlib__Printf,
Stdlib_List = global_data.Stdlib__List,
Sx_cst = global_data.Sx_cst,
Stdlib = global_data.Stdlib,
Stdlib_Uchar = global_data.Stdlib__Uchar;
function make_state(src){return [0, src, caml_ml_string_length(src), 0];}
function peek(s){
return s[3] < s[2] ? [0, caml_string_get(s[1], s[3])] : 0;
}
function advance(s){s[3] = s[3] + 1 | 0; return 0;}
function at_end(s){return s[2] <= s[3] ? 1 : 0;}
function skip_whitespace_and_comments(s){
a:
for(;;){
if(at_end(s)) return 0;
var match = caml_string_get(s[1], s[3]);
b:
{
if(14 <= match){
if(32 !== match){
if(59 !== match) break b;
for(;;){
if(s[3] < s[2] && 10 !== caml_string_get(s[1], s[3])){advance(s); continue;}
if(s[3] >= s[2]) continue a;
advance(s);
continue a;
}
}
}
else
if(11 <= match){if(13 > match) break b;} else if(9 > match) break b;
advance(s);
continue;
}
return 0;
}
}
function is_ident_start(param){
a:
{
if(96 <= param){
if(123 <= param){
if(126 !== param) break a;
}
else if(97 > param) break a;
}
else{
var a = param - 33 | 0;
if(57 < a >>> 0){
if(62 > a) break a;
}
else if(32 > a)
switch(a){
case 0:
case 5:
case 9:
case 10:
case 12:
case 14:
case 27:
case 28:
case 29:
case 30: break;
default: break a;
}
}
return 1;
}
return 0;
}
function is_ident_char(c){
if(is_ident_start(c)) return 1;
a:
{
if(47 <= c){
if(10 < c - 48 >>> 0) break a;
}
else{
if(35 > c) break a;
switch(c - 35 | 0){case 0:case 9:case 11: break;default: break a;
}
}
return 1;
}
return 0;
}
function read_string(s){
advance(s);
var buf = Stdlib_Buffer[1].call(null, 64);
for(;;){
if(at_end(s))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], "Unterminated string"], 1);
var c = caml_string_get(s[1], s[3]);
advance(s);
if(34 === c) return Stdlib_Buffer[2].call(null, buf);
if(92 === c){
if(at_end(s))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], "Unterminated string escape"], 1);
var esc = caml_string_get(s[1], s[3]);
advance(s);
if(34 === esc)
Stdlib_Buffer[12].call(null, buf, 34);
else{
if(92 <= esc){
if(118 > esc)
switch(esc - 92 | 0){
case 0:
Stdlib_Buffer[12].call(null, buf, 92); continue;
case 4:
Stdlib_Buffer[12].call(null, buf, 96); continue;
case 18:
Stdlib_Buffer[12].call(null, buf, 10); continue;
case 22:
Stdlib_Buffer[12].call(null, buf, 13); continue;
case 24:
Stdlib_Buffer[12].call(null, buf, 9); continue;
case 25:
if(s[2] < (s[3] + 4 | 0))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], "Incomplete \\u escape"], 1);
var hex = Stdlib_String[16].call(null, s[1], s[3], 4);
s[3] = s[3] + 4 | 0;
var
code =
runtime.caml_int_of_string(Stdlib[28].call(null, "0x", hex)),
ubuf = Stdlib_Buffer[1].call(null, 4),
a = Stdlib_Uchar[8].call(null, code);
Stdlib_Buffer[13].call(null, ubuf, a);
var b = Stdlib_Buffer[2].call(null, ubuf);
Stdlib_Buffer[16].call(null, buf, b);
continue;
}
}
else if(47 === esc){Stdlib_Buffer[12].call(null, buf, 47); continue;}
Stdlib_Buffer[12].call(null, buf, 92);
Stdlib_Buffer[12].call(null, buf, esc);
}
}
else
Stdlib_Buffer[12].call(null, buf, c);
}
}
function read_symbol(s){
var start = s[3];
for(;;){
if(s[3] < s[2] && is_ident_char(caml_string_get(s[1], s[3]))){advance(s); continue;}
return Stdlib_String[16].call(null, s[1], start, s[3] - start | 0);
}
}
function gcd(a, b){
var
b$2 = Stdlib[18].call(null, b),
a$1 = Stdlib[18].call(null, a),
a$0 = a$1,
b$0 = b$2;
for(;;){
if(0 === b$0) return a$0;
var b$1 = runtime.caml_mod(a$0, b$0);
a$0 = b$0;
b$0 = b$1;
}
}
function make_rat(n, d){
if(0 === d)
throw caml_maybe_attach_backtrace
([0, Sx_types[10], "rational: division by zero"], 1);
var
sign = 0 <= d ? 1 : -1,
a = Stdlib[18].call(null, d),
g = gcd(Stdlib[18].call(null, n), a),
rn = caml_div(caml_mul(sign, n), g),
rd = caml_div(caml_mul(sign, d), g);
return 1 === rd ? [1, rn] : [34, rn, rd];
}
var cst = "";
function try_number(str){
var
has_dec = Stdlib_String[15].call(null, str, 46),
b = Stdlib_String[15].call(null, str, 101),
has_exp = b || Stdlib_String[15].call(null, str, 69);
if(! has_dec && ! has_exp){
var match$0 = Stdlib_String[17].call(null, 47, str);
if(match$0){
var a = match$0[2];
if(a && ! a[2]){
var den_s = a[1], num_s = match$0[1];
if(num_s !== cst && den_s !== cst){
var
match$3 = Stdlib[34].call(null, num_s),
match$4 = Stdlib[34].call(null, den_s);
if(match$3 && match$4){
var d = match$4[1], n$2 = match$3[1];
try{var c = [0, make_rat(n$2, d)]; return c;}catch(exn){return 0;}
}
return 0;
}
}
}
var match$1 = Stdlib[34].call(null, str);
if(match$1){var n$0 = match$1[1]; return [0, [1, n$0]];}
var match$2 = Stdlib[36].call(null, str);
if(! match$2) return 0;
var n$1 = match$2[1];
return [0, [2, n$1]];
}
var match = Stdlib[36].call(null, str);
if(! match) return 0;
var n = match[1];
return [0, [2, n]];
}
var
cst_pos = " (pos ",
cst_at_line = " at line ",
cst_col = " col ",
cst_Unexpected_char = "Unexpected char: ",
cst_Unexpected_char_c_at_line_ =
"Unexpected char: %c at line %d col %d (pos %d)",
cst_Unterminated_raw_string = "Unterminated raw string",
cst_false = "false",
cst_nil = "nil",
cst_quasiquote = "quasiquote",
cst_quote = "quote",
cst_splice_unquote = "splice-unquote",
cst_true = "true",
cst_unquote = "unquote",
a =
[0,
[11,
"Unexpected end of input at line ",
[4, 0, 0, 0, [11, cst_pos, [4, 0, 0, 0, [12, 41, 0]]]]],
"Unexpected end of input at line %d (pos %d)"],
b = [4, cst_quasiquote],
c =
[0,
[11,
cst_Unexpected_char,
[0,
[11,
cst_at_line,
[4,
0,
0,
0,
[11,
cst_col,
[4, 0, 0, 0, [11, cst_pos, [4, 0, 0, 0, [12, 41, 0]]]]]]]]],
cst_Unexpected_char_c_at_line_],
d = [0, 1],
e = [0, 0],
f = [4, cst_quote],
g = [4, cst_quote],
h = [4, cst_splice_unquote],
i = [4, cst_unquote];
function read_value(s){
a:
{
b:
{
c:
{
d:
{
e:
{
f:
{
g:
for(;;){
skip_whitespace_and_comments(s);
if(at_end(s)) break a;
var match = caml_string_get(s[1], s[3]);
if(92 <= match) break c;
if(45 <= match) break d;
if(34 > match) break b;
switch(match - 34 | 0){
case 0:
return [3, read_string(s)];
case 1:
if
((s[3] + 1 | 0) < s[2]
&& 92 === caml_string_get(s[1], s[3] + 1 | 0))
break e;
h:
if((s[3] + 1 | 0) < s[2]){
if
(116 !== caml_string_get(s[1], s[3] + 1 | 0)
&& 102 !== caml_string_get(s[1], s[3] + 1 | 0))
break h;
if
(s[2] > (s[3] + 2 | 0)
&& is_ident_char(caml_string_get(s[1], s[3] + 2 | 0)))
break h;
var b$0 = 116 === caml_string_get(s[1], s[3] + 1 | 0) ? 1 : 0;
advance(s);
advance(s);
return [0, b$0];
}
if((s[3] + 1 | 0) >= s[2]) break f;
if(59 !== caml_string_get(s[1], s[3] + 1 | 0)) break f;
advance(s);
advance(s);
read_value(s);
break;
case 5:
advance(s); return [6, [0, g, [0, read_value(s), 0]]];
case 6:
return read_list(s, 41);
case 10:
break g;
default: break b;
}
}
advance(s);
if(s[3] < s[2] && 64 === caml_string_get(s[1], s[3])){
advance(s);
return [6, [0, h, [0, read_value(s), 0]]];
}
return [6, [0, i, [0, read_value(s), 0]]];
}
if
((s[3] + 1 | 0) < s[2] && 39 === caml_string_get(s[1], s[3] + 1 | 0)){
advance(s);
advance(s);
return [6, [0, f, [0, read_value(s), 0]]];
}
if((s[3] + 1 | 0) >= s[2]) break b;
if(124 !== caml_string_get(s[1], s[3] + 1 | 0)) break b;
advance(s);
advance(s);
var buf = Stdlib_Buffer[1].call(null, 64);
for(;;){
if(at_end(s))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], cst_Unterminated_raw_string], 1);
var c$1 = caml_string_get(s[1], s[3]);
advance(s);
if(124 === c$1) return [3, Stdlib_Buffer[2].call(null, buf)];
Stdlib_Buffer[12].call(null, buf, c$1);
}
}
advance(s);
advance(s);
if(at_end(s))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], "Unexpected end of input after #\\"], 1);
var char_start = s[3];
if(! is_ident_start(caml_string_get(s[1], s[3]))){
var c$0 = caml_string_get(s[1], s[3]);
advance(s);
return [32, c$0];
}
for(;;){
if(s[3] >= s[2]) break;
if(! is_ident_char(caml_string_get(s[1], s[3]))) break;
advance(s);
}
var
name =
Stdlib_String[16].call
(null, s[1], char_start, s[3] - char_start | 0),
switch$ = runtime.caml_string_compare(name, "nul");
e:
{
if(0 <= switch$){
if(0 >= switch$){var cp = 0; break e;}
if(name === "null"){var cp = 0; break e;}
if(name === "return"){var cp = 13; break e;}
if(name === "rubout"){var cp = 127; break e;}
if(name === "space"){var cp = 32; break e;}
if(name === "tab"){var cp = 9; break e;}
}
else{
if(name === "altmode"){var cp = 27; break e;}
if(name === "backspace"){var cp = 8; break e;}
if(name === "delete"){var cp = 127; break e;}
if(name === "escape"){var cp = 27; break e;}
if(name === "newline"){var cp = 10; break e;}
}
var cp = caml_string_get(name, 0);
}
return [32, cp];
}
if(91 <= match) return read_list(s, 93);
break b;
}
if(96 === match){advance(s); return [6, [0, b, [0, read_value(s), 0]]];}
if(123 === match) return read_dict(s);
}
var token = read_symbol(s);
if(token !== cst){
if(token === cst_false) return e;
if(token === cst_nil) return 0;
if(token === cst_true) return d;
if(58 === caml_string_get(token, 0))
return [5,
Stdlib_String[16].call
(null, token, 1, caml_ml_string_length(token) - 1 | 0)];
var match$0 = try_number(token);
if(! match$0) return [4, token];
var n = match$0[1];
return n;
}
var l = s[3] - 1 | 0, j = 1, k = 1;
if(l < 0)
var col$2 = k, line$3 = j;
else{
var col = k, line$0 = j, i$0 = 0;
for(;;){
if(10 === caml_string_get(s[1], i$0))
var line$1 = line$0 + 1 | 0, col$1 = 1, line$2 = line$1;
else
var col$0 = col + 1 | 0, col$1 = col$0, line$2 = line$0;
var u = i$0 + 1 | 0;
if(l === i$0){var col$2 = col$1, line$3 = line$2; break;}
col = col$1;
line$0 = line$2;
i$0 = u;
}
}
var
q = s[3],
r = caml_string_get(s[1], s[3]),
t = caml_call4(Stdlib_Printf[4].call(null, c), r, line$3, col$2, q);
throw caml_maybe_attach_backtrace([0, Sx_types[10], t], 1);
}
var line = [0, 1];
Stdlib_String[30].call
(null,
function(c){
var a = 10 === c ? 1 : 0, b = a ? (line[1]++, 0) : a;
return b;
},
s[1]);
var
m = s[3],
o = line[1],
p = caml_call2(Stdlib_Printf[4].call(null, a), o, m);
throw caml_maybe_attach_backtrace([0, Sx_types[10], p], 1);
}
var cst_Unterminated_list = "Unterminated list";
function read_list(s, close_char){
advance(s);
var items = 0;
for(;;){
skip_whitespace_and_comments(s);
if(at_end(s))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], cst_Unterminated_list], 1);
if(caml_string_get(s[1], s[3]) === close_char){
advance(s);
return [6, Stdlib_List[10].call(null, items)];
}
items = [0, read_value(s), items];
}
}
var cst_Unterminated_dict = "Unterminated dict";
function read_dict(s){
advance(s);
var d = Sx_types[105].call(null, 0);
for(;;){
skip_whitespace_and_comments(s);
if(at_end(s))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], cst_Unterminated_dict], 1);
if(125 === caml_string_get(s[1], s[3])){advance(s); return [7, d];}
var key = read_value(s);
if(typeof key !== "number" && key[0] - 3 >>> 0 < 3){
var key_str = key[1], v = read_value(s);
Sx_types[108].call(null, d, key_str, v);
continue;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[10], "Dict key must be keyword, string, or symbol"],
1);
}
}
function parse_all(src){
var s = make_state(src), results = 0;
for(;;){
skip_whitespace_and_comments(s);
if(at_end(s)) return Stdlib_List[10].call(null, results);
results = [0, read_value(s), results];
}
}
function parse_file(path){
var
ic = Stdlib[79].call(null, path),
n = Stdlib[92].call(null, ic),
src = Stdlib[86].call(null, ic, n);
Stdlib[93].call(null, ic);
return parse_all(src);
}
function collect_trivia(s){
var items = 0;
a:
for(;;){
b:
if(! at_end(s)){
var match = caml_string_get(s[1], s[3]);
if(14 <= match){
if(32 !== match){
if(59 !== match) break b;
var start$0 = s[3];
for(;;){
if(s[3] >= s[2]) break;
if(10 === caml_string_get(s[1], s[3])) break;
advance(s);
}
var
text =
Stdlib_String[16].call(null, s[1], start$0, s[3] - start$0 | 0);
if(s[3] < s[2]) advance(s);
var
text$0 =
0 < s[3]
? s
[3]
<= s[2]
? 10
=== caml_string_get(s[1], s[3] - 1 | 0)
? Stdlib[28].call(null, text, "\n")
: text
: text
: text;
items = [0, [1, text$0], items];
continue;
}
}
else
if(11 <= match){if(13 > match) break b;} else if(9 > match) break b;
var start = s[3];
for(;;){
if(s[3] < s[2]){
var c = caml_string_get(s[1], s[3]), b = 32 === c;
if(b)
var a = b;
else{
var d = 9 === c;
if(d) var a = d; else var e = 10 === c, a = e || 13 === c;
}
if(a){advance(s); continue;}
}
items =
[0,
[0, Stdlib_String[16].call(null, s[1], start, s[3] - start | 0)],
items];
continue a;
}
}
return Stdlib_List[10].call(null, items);
}
}
var
j = [4, cst_quasiquote],
k =
[0,
[11,
cst_Unexpected_char,
[0,
[11,
cst_at_line,
[4,
0,
0,
0,
[11,
cst_col,
[4, 0, 0, 0, [11, cst_pos, [4, 0, 0, 0, [12, 41, 0]]]]]]]]],
cst_Unexpected_char_c_at_line_],
l = [0, 1],
m = [0, 0],
n = [4, cst_quote],
o = [4, cst_quote];
function read_cst(s){
var trivia = collect_trivia(s);
if(at_end(s))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], "Unexpected end of input"], 1);
var start = s[3], match = caml_string_get(s[1], s[3]);
if(92 <= match){
if(96 === match){
advance(s);
var
inner = read_cst(s),
end_pos = s[3],
token = Stdlib_String[16].call(null, s[1], start, end_pos - start | 0),
value = [6, [0, j, [0, Sx_cst[5].call(null, inner), 0]]];
return [0, trivia, token, value, [0, start, end_pos]];
}
if(123 === match) return read_cst_dict(s, trivia, start);
}
else
if(45 <= match){
if(91 <= match) return read_cst_list(s, trivia, start, 91, 93);
}
else if(34 <= match)
switch(match - 34 | 0){
case 0:
var
value$1 = [3, read_string(s)],
end_pos$1 = s[3],
token$1 =
Stdlib_String[16].call(null, s[1], start, end_pos$1 - start | 0);
return [0, trivia, token$1, value$1, [0, start, end_pos$1]];
case 1:
if
((s[3] + 1 | 0) < s[2] && 59 === caml_string_get(s[1], s[3] + 1 | 0)){
advance(s);
advance(s);
read_cst(s);
var
next = read_cst(s),
combined_trivia = Stdlib[37].call(null, trivia, next[1]);
switch(next[0]){
case 0:
return [0, combined_trivia, next[2], next[3], next[4]];
case 1:
return [1,
combined_trivia,
next[2],
next[3],
next[4],
next[5],
next[6]];
default: return [2, combined_trivia, next[2], next[3], next[4]];
}
}
if
((s[3] + 1 | 0) < s[2] && 39 === caml_string_get(s[1], s[3] + 1 | 0)){
advance(s);
advance(s);
var
inner$0 = read_cst(s),
end_pos$2 = s[3],
token$2 =
Stdlib_String[16].call(null, s[1], start, end_pos$2 - start | 0),
value$2 = [6, [0, n, [0, Sx_cst[5].call(null, inner$0), 0]]];
return [0, trivia, token$2, value$2, [0, start, end_pos$2]];
}
if
((s[3] + 1 | 0) < s[2]
&& 124 === caml_string_get(s[1], s[3] + 1 | 0)){
advance(s);
advance(s);
var buf = Stdlib_Buffer[1].call(null, 64);
for(;;){
if(at_end(s))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], cst_Unterminated_raw_string], 1);
var c = caml_string_get(s[1], s[3]);
advance(s);
if(124 === c){
var
end_pos$3 = s[3],
token$3 =
Stdlib_String[16].call
(null, s[1], start, end_pos$3 - start | 0);
return [0,
trivia,
token$3,
[3, Stdlib_Buffer[2].call(null, buf)],
[0, start, end_pos$3]];
}
Stdlib_Buffer[12].call(null, buf, c);
}
}
break;
case 5:
advance(s);
var
inner$1 = read_cst(s),
end_pos$4 = s[3],
token$4 =
Stdlib_String[16].call(null, s[1], start, end_pos$4 - start | 0),
value$3 = [6, [0, o, [0, Sx_cst[5].call(null, inner$1), 0]]];
return [0, trivia, token$4, value$3, [0, start, end_pos$4]];
case 6:
return read_cst_list(s, trivia, start, 40, 41);
case 10:
advance(s);
var
e = s[3] < s[2],
splice = e ? 64 === caml_string_get(s[1], s[3]) : e;
if(splice) advance(s);
var
inner$2 = read_cst(s),
end_pos$5 = s[3],
token$5 =
Stdlib_String[16].call(null, s[1], start, end_pos$5 - start | 0),
sym$0 = splice ? cst_splice_unquote : cst_unquote,
value$4 =
[6, [0, [4, sym$0], [0, Sx_cst[5].call(null, inner$2), 0]]];
return [0, trivia, token$5, value$4, [0, start, end_pos$5]];
}
var sym = read_symbol(s);
if(sym === cst){
var d = s[3] - 1 | 0, a = 1, b = 1;
if(d < 0)
var col$2 = b, line$2 = a;
else{
var col = b, line = a, i = 0;
for(;;){
if(10 === caml_string_get(s[1], i))
var line$0 = line + 1 | 0, col$1 = 1, line$1 = line$0;
else
var col$0 = col + 1 | 0, col$1 = col$0, line$1 = line;
var p = i + 1 | 0;
if(d === i){var col$2 = col$1, line$2 = line$1; break;}
col = col$1;
line = line$1;
i = p;
}
}
var
f = s[3],
g = caml_string_get(s[1], s[3]),
h = caml_call4(Stdlib_Printf[4].call(null, k), g, line$2, col$2, f);
throw caml_maybe_attach_backtrace([0, Sx_types[10], h], 1);
}
var
end_pos$0 = s[3],
token$0 =
Stdlib_String[16].call(null, s[1], start, end_pos$0 - start | 0);
if(sym !== cst_false)
if(sym !== cst_nil)
if(sym !== cst_true)
if(58 === caml_string_get(sym, 0))
var
value$0 =
[5,
Stdlib_String[16].call
(null, sym, 1, caml_ml_string_length(sym) - 1 | 0)];
else{
var match$0 = try_number(sym);
if(match$0)
var n$0 = match$0[1], value$0 = n$0;
else
var value$0 = [4, sym];
}
else
var value$0 = l;
else
var value$0 = 0;
else
var value$0 = m;
return [0, trivia, token$0, value$0, [0, start, end_pos$0]];
}
function read_cst_list(s, trivia, start, open_c, close_c){
advance(s);
var children = 0;
for(;;){
var child_trivia = collect_trivia(s);
if(at_end(s))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], cst_Unterminated_list], 1);
if(caml_string_get(s[1], s[3]) === close_c){
advance(s);
var end_pos = s[3];
return [1,
trivia,
open_c,
Stdlib_List[10].call(null, children),
close_c,
child_trivia,
[0, start, end_pos]];
}
var child = read_cst_inner(s);
switch(child[0]){
case 0:
var
a = child[4],
b = child[3],
c = child[2],
child_with_trivia =
[0, Stdlib[37].call(null, child_trivia, child[1]), c, b, a];
break;
case 1:
var
d = child[6],
e = child[5],
f = child[4],
g = child[3],
h = child[2],
child_with_trivia =
[1, Stdlib[37].call(null, child_trivia, child[1]), h, g, f, e, d];
break;
default:
var
i = child[4],
j = child[3],
k = child[2],
child_with_trivia =
[2, Stdlib[37].call(null, child_trivia, child[1]), k, j, i];
}
children = [0, child_with_trivia, children];
}
}
function read_cst_dict(s, trivia, start){
advance(s);
var children = 0;
for(;;){
var child_trivia = collect_trivia(s);
if(at_end(s))
throw caml_maybe_attach_backtrace
([0, Sx_types[10], cst_Unterminated_dict], 1);
if(125 === caml_string_get(s[1], s[3])){
advance(s);
var end_pos = s[3];
return [2,
trivia,
Stdlib_List[10].call(null, children),
child_trivia,
[0, start, end_pos]];
}
var child = read_cst_inner(s);
switch(child[0]){
case 0:
var
a = child[4],
b = child[3],
c = child[2],
child_with_trivia =
[0, Stdlib[37].call(null, child_trivia, child[1]), c, b, a];
break;
case 1:
var
d = child[6],
e = child[5],
f = child[4],
g = child[3],
h = child[2],
child_with_trivia =
[1, Stdlib[37].call(null, child_trivia, child[1]), h, g, f, e, d];
break;
default:
var
i = child[4],
j = child[3],
k = child[2],
child_with_trivia =
[2, Stdlib[37].call(null, child_trivia, child[1]), k, j, i];
}
children = [0, child_with_trivia, children];
}
}
function read_cst_inner(s){return read_cst(s);}
function parse_all_cst(src){
var s = make_state(src), results = 0;
for(;;){
var trivia = collect_trivia(s);
if(at_end(s)) return [0, Stdlib_List[10].call(null, results), trivia];
var node = read_cst_inner(s);
switch(node[0]){
case 0:
var
a = node[4],
b = node[3],
c = node[2],
node_with_trivia =
[0, Stdlib[37].call(null, trivia, node[1]), c, b, a];
break;
case 1:
var
d = node[6],
e = node[5],
f = node[4],
g = node[3],
h = node[2],
node_with_trivia =
[1, Stdlib[37].call(null, trivia, node[1]), h, g, f, e, d];
break;
default:
var
i = node[4],
j = node[3],
k = node[2],
node_with_trivia =
[2, Stdlib[37].call(null, trivia, node[1]), k, j, i];
}
results = [0, node_with_trivia, results];
}
}
function parse_file_cst(path){
var
ic = Stdlib[79].call(null, path),
n = Stdlib[92].call(null, ic),
src = Stdlib[86].call(null, ic, n);
Stdlib[93].call(null, ic);
return parse_all_cst(src);
}
runtime.caml_register_global
(61,
[0,
make_state,
peek,
advance,
at_end,
skip_whitespace_and_comments,
is_ident_start,
is_ident_char,
is_ident_char,
read_string,
read_symbol,
gcd,
make_rat,
try_number,
read_value,
read_list,
read_dict,
parse_all,
parse_file,
collect_trivia,
read_cst,
read_cst_list,
read_cst_dict,
read_cst_inner,
parse_all_cst,
parse_file_cst],
"Sx_parser");
return;
}
(globalThis));
//# 2644 "../lib/.sx.objs/jsoo/default/sx.cma.js"
//# shape: Sx_primitives:[N,N,N,N,N,N,N,F(1),F(1),F(1),N,F(1),F(2),F(1),F(1),N,F(1),F(1),F(1),F(1),F(1),F(1)*,F(1),N,F(2),F(2),F(1),F(1),F(1),F(2),F(2),F(2),F(2),F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_bytes_get = runtime.caml_bytes_get,
caml_bytes_set = runtime.caml_bytes_set,
caml_check_bound = runtime.caml_check_bound,
caml_create_bytes = runtime.caml_create_bytes,
caml_div = runtime.caml_div,
caml_equal = runtime.caml_equal,
caml_float_of_string = runtime.caml_float_of_string,
caml_int_of_string = runtime.caml_int_of_string,
caml_make_vect = runtime.caml_make_vect,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_bytes_length = runtime.caml_ml_bytes_length,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_mod = runtime.caml_mod,
caml_mul = runtime.caml_mul,
caml_obj_dup = runtime.caml_obj_dup,
caml_round_float = runtime.caml_round_float,
caml_string_get = runtime.caml_string_get,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib = global_data.Stdlib,
Stdlib_Float = global_data.Stdlib__Float,
Stdlib_Hashtbl = global_data.Stdlib__Hashtbl,
Sx_types = global_data.Sx_types,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_Printf = global_data.Stdlib__Printf,
Stdlib_String = global_data.Stdlib__String,
Stdlib_Char = global_data.Stdlib__Char,
Stdlib_List = global_data.Stdlib__List,
Stdlib_Queue = global_data.Stdlib__Queue,
Unix = global_data.Unix,
Stdlib_Filename = global_data.Stdlib__Filename,
Stdlib_Array = global_data.Stdlib__Array,
Stdlib_Bytes = global_data.Stdlib__Bytes,
Sx_parser = global_data.Sx_parser,
Re = global_data.Re,
Re_Pcre = global_data.Re__Pcre,
Stdlib_Uchar = global_data.Stdlib__Uchar,
primitives = Stdlib_Hashtbl[1].call(null, 0, 128),
sx_call_fn =
[0,
function(a, param){
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sx_call not initialized"], 1);
}],
sx_trampoline_fn = [0, function(v){return v;}],
scope_stacks = Stdlib_Hashtbl[1].call(null, 0, 8),
scope_trace = [0, 0],
scope_log = [0, 0];
function scope_trace_enable(param){
scope_trace[1] = 1;
scope_log[1] = 0;
return 0;
}
function scope_trace_disable(param){scope_trace[1] = 0; return 0;}
function scope_trace_drain(param){
var log = Stdlib_List[10].call(null, scope_log[1]);
scope_log[1] = 0;
return log;
}
var request_cookies = Stdlib_Hashtbl[1].call(null, 0, 8);
function scope_clear_all(param){
return Stdlib_Hashtbl[2].call(null, scope_stacks);
}
function register(name, fn){
return Stdlib_Hashtbl[11].call(null, primitives, name, fn);
}
function is_primitive(name){
return Stdlib_Hashtbl[9].call(null, primitives, name);
}
function get_primitive(name){
var match = Stdlib_Hashtbl[7].call(null, primitives, name);
if(match){var fn = match[1]; return [15, name, fn];}
var a = Stdlib[28].call(null, "Unknown primitive: ", name);
throw caml_maybe_attach_backtrace([0, Sx_types[9], a], 1);
}
var
trampoline_hook = [0, function(v){return v;}],
cst_Expected_number_got = "Expected number, got ";
function as_int(v){
if(typeof v !== "number")
switch(v[0]){
case 1:
var n = v[1]; return n;
case 2:
var n$0 = v[1]; return n$0 | 0;
}
var
a = Sx_types[57].call(null, v),
b = Stdlib[28].call(null, cst_Expected_number_got, a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
function a(param){
if(typeof param !== "number" && 1 === param[0]) return 1;
return 0;
}
var b = Stdlib_List[33];
function all_ints(c){return b(a, c);}
var
cst = "",
cst_signal = "__signal",
cst_dict = "dict",
cst_value = "value";
function as_number(t$1){
a:
{
var t = t$1;
for(;;){
if(typeof t === "number") break;
switch(t[0]){
case 0:
return t[1] ? 1. : 0.;
case 1:
var n = t[1]; return n;
case 2:
var n$0 = t[1]; return n$0;
case 3:
var s = t[1], match$0 = Stdlib[36].call(null, s);
if(! match$0) return Stdlib_Float[8];
var n$1 = match$0[1];
return n$1;
case 12:
var t$0 = caml_call1(trampoline_hook[1], t); t = t$0; break;
case 34:
var d$0 = t[2], n$2 = t[1]; return n$2 / d$0;
default: break a;
}
}
if(0 === t) return 0.;
}
if(typeof t === "number" || ! (7 === t[0]))
var a = cst;
else{
var d = t[1];
if(Stdlib_Hashtbl[7].call(null, d, cst_signal)){
var match = Stdlib_Hashtbl[7].call(null, d, cst_value);
if(match)
var v = match[1], b = Sx_types[35].call(null, v);
else
var b = "?";
var
h = Stdlib[28].call(null, b, "}"),
a = Stdlib[28].call(null, "signal{value=", h);
}
else
var a = cst_dict;
}
var
c = Stdlib[28].call(null, ": ", a),
e = Sx_types[57].call(null, t),
f = Stdlib[28].call(null, e, c),
g = Stdlib[28].call(null, cst_Expected_number_got, f);
throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1);
}
function as_string(v){
if(typeof v !== "number" && 3 === v[0]){var s = v[1]; return s;}
var
a = Sx_types[57].call(null, v),
b = Stdlib[28].call(null, "Expected string, got ", a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
function as_list(t$1){
var t = t$1;
for(;;){
if(typeof t === "number"){if(0 === t) return 0;}
else
switch(t[0]){
case 6:
var l = t[1]; return l;
case 12:
var t$0 = caml_call1(sx_trampoline_fn[1], t); t = t$0; continue;
case 21:
var r = t[1]; return r[1];
}
var
a = Sx_types[57].call(null, t),
b = Stdlib[28].call(null, "Expected list, got ", a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
}
function as_bool(v){
if(typeof v !== "number" && 0 === v[0]){var b = v[1]; return b;}
return Sx_types[67].call(null, v);
}
var cst_false = "false", cst_true = "true";
function to_string(t$1){
var t = t$1;
for(;;){
if(typeof t === "number"){if(0 === t) return cst;}
else
switch(t[0]){
case 0:
return t[1] ? cst_true : cst_false;
case 1:
var n = t[1]; return Stdlib[33].call(null, n);
case 2:
var n$0 = t[1]; return Sx_types[34].call(null, n$0);
case 12:
var t$0 = caml_call1(trampoline_hook[1], t); t = t$0; continue;
case 3:
case 4:
case 5:
case 17:
case 19:
var s = t[1]; return s;
}
return Sx_types[112].call(null, t);
}
}
function rat_gcd(a, b){
var
b$2 = Stdlib[18].call(null, b),
a$1 = Stdlib[18].call(null, a),
a$0 = a$1,
b$0 = b$2;
for(;;){
if(0 === b$0) return a$0;
var b$1 = caml_mod(a$0, b$0);
a$0 = b$0;
b$0 = b$1;
}
}
var cst_rational_division_by_zero = "rational: division by zero";
function make_rat(n, d){
if(0 === d)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_rational_division_by_zero], 1);
var
sign = 0 <= d ? 1 : -1,
a = Stdlib[18].call(null, d),
g = rat_gcd(Stdlib[18].call(null, n), a),
rn = caml_div(caml_mul(sign, n), g),
rd = caml_div(caml_mul(sign, d), g);
return 1 === rd ? [1, rn] : [34, rn, rd];
}
function rat_of_val(v){
if(typeof v !== "number")
switch(v[0]){
case 1:
var n = v[1]; return [0, n, 1];
case 34:
var d = v[2], n$0 = v[1]; return [0, n$0, d];
}
var
a = Sx_types[57].call(null, v),
b = Stdlib[28].call(null, "expected integer or rational, got ", a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
function has_rational(args){
return Stdlib_List[34].call
(null,
function(param){
if(typeof param !== "number" && 34 === param[0]) return 1;
return 0;
},
args);
}
function has_float(args){
return Stdlib_List[34].call
(null,
function(param){
if(typeof param !== "number" && 2 === param[0]) return 1;
return 0;
},
args);
}
function rat_add(a, param){
var bd = param[2], bn = param[1], ad = a[2], an = a[1];
return make_rat(caml_mul(an, bd) + caml_mul(bn, ad) | 0, caml_mul(ad, bd));
}
function rat_sub(a, param){
var bd = param[2], bn = param[1], ad = a[2], an = a[1];
return make_rat(caml_mul(an, bd) - caml_mul(bn, ad) | 0, caml_mul(ad, bd));
}
function rat_mul(a, param){
var bd = param[2], bn = param[1], ad = a[2], an = a[1];
return make_rat(caml_mul(an, bn), caml_mul(ad, bd));
}
function rat_div(a, param){
var bd = param[2], bn = param[1], ad = a[2], an = a[1];
if(0 === bn)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_rational_division_by_zero], 1);
return make_rat(caml_mul(an, bd), caml_mul(ad, bn));
}
var
cst$0 = " ",
cst_d_d = "%d/%d",
cst_g = "%g",
c = [0, [8, [0, 0, 3], 0, 0, 0], cst_g],
d = [0, [11, "#\\", [0, 0]], "#\\%c"],
e = [0, [4, 0, 0, 0, [12, 47, [4, 0, 0, 0, 0]]], cst_d_d];
function sx_write_val(v){
if(typeof v === "number") return 0 === v ? "()" : "#!eof";
switch(v[0]){
case 0:
return v[1] ? "#t" : "#f";
case 1:
var n = v[1]; return Stdlib[33].call(null, n);
case 2:
var n$0 = v[1], s = caml_call1(Stdlib_Printf[4].call(null, c), n$0);
if
(!
Stdlib_String[15].call(null, s, 46)
&& ! Stdlib_String[15].call(null, s, 101))
return s;
return s;
case 3:
var
s$0 = v[1],
buf = Stdlib_Buffer[1].call(null, caml_ml_string_length(s$0) + 2 | 0);
Stdlib_Buffer[12].call(null, buf, 34);
Stdlib_String[30].call
(null,
function(c){
if(34 === c) return Stdlib_Buffer[16].call(null, buf, '\\"');
if(14 <= c){
if(92 === c) return Stdlib_Buffer[16].call(null, buf, "\\\\");
}
else if(9 <= c)
switch(c - 9 | 0){
case 0:
return Stdlib_Buffer[16].call(null, buf, "\\t");
case 1:
return Stdlib_Buffer[16].call(null, buf, "\\n");
case 4:
return Stdlib_Buffer[16].call(null, buf, "\\r");
}
return Stdlib_Buffer[12].call(null, buf, c);
},
s$0);
Stdlib_Buffer[12].call(null, buf, 34);
return Stdlib_Buffer[2].call(null, buf);
case 4:
var s$1 = v[1]; return s$1;
case 5:
var k = v[1]; return Stdlib[28].call(null, ":", k);
case 6:
var items = v[1]; break;
case 21:
var items = v[1][1]; break;
case 32:
var n$1 = v[1];
if(32 === n$1) return "#\\space";
if(10 === n$1) return "#\\newline";
if(9 === n$1) return "#\\tab";
var g = Stdlib_Char[1].call(null, n$1 & 255);
return caml_call1(Stdlib_Printf[4].call(null, d), g);
case 34:
var d$0 = v[2], n$2 = v[1];
return caml_call2(Stdlib_Printf[4].call(null, e), n$2, d$0);
default: return Sx_types[112].call(null, v);
}
var
a = Stdlib_List[20].call(null, sx_write_val, items),
b = Stdlib_String[7].call(null, cst$0, a),
f = Stdlib[28].call(null, b, ")");
return Stdlib[28].call(null, "(", f);
}
function sx_display_val(v){
if(typeof v !== "number")
switch(v[0]){
case 3:
var s = v[1]; return s;
case 32:
var n = v[1], a = Stdlib_Char[1].call(null, n & 255);
return Stdlib_String[1].call(null, 1, a);
}
return sx_write_val(v);
}
var f = [1, 0];
register
("+",
function(args){
if(b(a, args))
return [1,
Stdlib_List[26].call
(null,
function(acc, a){
if(typeof a !== "number" && 1 === a[0]){var n = a[1]; return acc + n | 0;}
return acc;
},
0,
args)];
if(has_rational(args) && ! has_float(args))
return Stdlib_List[26].call
(null,
function(acc, a){
if(typeof acc !== "number")
switch(acc[0]){
case 1:
var an = acc[1]; return rat_add([0, an, 1], rat_of_val(a));
case 34:
var ad = acc[2], an$0 = acc[1];
return rat_add([0, an$0, ad], rat_of_val(a));
}
return acc;
},
f,
args);
return [2,
Stdlib_List[26].call
(null, function(acc, a){return acc + as_number(a);}, 0., args)];
});
var cst$3 = "-", g = [2, 0.], h = [1, 0], i = [1, 0];
register
(cst$3,
function(args){
if(! args) return i;
var a$0 = args[1];
a:
{
if(typeof a$0 !== "number")
switch(a$0[0]){
case 1:
if(args[2]) break a; var n = a$0[1]; return [1, - n | 0];
case 34:
if(args[2]) break a;
var d = a$0[2], n$0 = a$0[1];
return make_rat(- n$0 | 0, d);
}
if(! args[2]) return [2, - as_number(a$0)];
}
if(! b(a, args)){
if(has_rational(args) && ! has_float(args)){
if(! args) return h;
var tl$0 = args[2], h$1 = args[1];
return Stdlib_List[26].call
(null,
function(acc, a){
if(typeof acc !== "number")
switch(acc[0]){
case 1:
var an = acc[1]; return rat_sub([0, an, 1], rat_of_val(a));
case 34:
var ad = acc[2], an$0 = acc[1];
return rat_sub([0, an$0, ad], rat_of_val(a));
}
return acc;
},
h$1,
tl$0);
}
var rest = args[2], a$1 = args[1], c = as_number(a$1);
return [2,
Stdlib_List[26].call
(null, function(acc, x){return acc - as_number(x);}, c, rest)];
}
if(args){
var match = args[1];
if(typeof match !== "number" && 1 === match[0]){
var tl = args[2], h$0 = match[1];
return [1,
Stdlib_List[26].call
(null,
function(acc, a){
if(typeof a !== "number" && 1 === a[0]){var n = a[1]; return acc - n | 0;}
return acc;
},
h$0,
tl)];
}
}
return g;
});
var j = [1, 1];
register
("*",
function(args){
if(b(a, args))
return [1,
Stdlib_List[26].call
(null,
function(acc, a){
if(typeof a !== "number" && 1 === a[0]){var n = a[1]; return caml_mul(acc, n);
}
return acc;
},
1,
args)];
if(has_rational(args) && ! has_float(args))
return Stdlib_List[26].call
(null,
function(acc, a){
if(typeof acc !== "number")
switch(acc[0]){
case 1:
var an = acc[1]; return rat_mul([0, an, 1], rat_of_val(a));
case 34:
var ad = acc[2], an$0 = acc[1];
return rat_mul([0, an$0, ad], rat_of_val(a));
}
return acc;
},
j,
args);
return [2,
Stdlib_List[26].call
(null, function(acc, a){return acc * as_number(a);}, 1., args)];
});
register
("/",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
var e = args[2];
if(! e) break a;
var c = e[1], a$0 = a[1];
if(typeof c !== "number")
switch(c[0]){
case 1:
if(e[2]) break a; var b$0 = c[1]; return make_rat(a$0, b$0);
case 34:
if(e[2]) break a;
var bd = c[2], bn = c[1];
return make_rat(caml_mul(a$0, bd), bn);
}
break;
case 34:
var f = args[2];
if(! f) break a;
var d = f[1], ad = a[2], an = a[1];
if(typeof d !== "number")
switch(d[0]){
case 1:
if(f[2]) break a;
var b$1 = d[1];
return make_rat(an, caml_mul(ad, b$1));
case 34:
if(f[2]) break a;
var bd$0 = d[2], bn$0 = d[1];
return rat_div([0, an, ad], [0, bn$0, bd$0]);
}
break;
}
var g = args[2];
if(g && ! g[2]){
var b = g[1], h = as_number(b);
return [2, as_number(a) / h];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "/: expected 2 args"], 1);
});
register
("mod",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
var d = args[2];
if(! d) break a;
var e = d[1];
if(typeof e !== "number" && 1 === e[0]){
if(d[2]) break a;
var b$0 = e[1], a$0 = a[1];
return [1, caml_mod(a$0, b$0)];
}
}
var c = args[2];
if(c && ! c[2]){
var b = c[1], f = as_number(b);
return [2, as_number(a) % f];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "mod: expected 2 args"], 1);
});
register
("inc",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
if(args[2]) break a;
var n = a[1];
return [1, n + 1 | 0];
}
if(! args[2]) return [2, as_number(a) + 1.];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "inc: 1 arg"], 1);
});
register
("dec",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
if(args[2]) break a;
var n = a[1];
return [1, n - 1 | 0];
}
if(! args[2]) return [2, as_number(a) - 1.];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "dec: 1 arg"], 1);
});
register
("abs",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
if(args[2]) break a;
var n = a[1];
return [1, Stdlib[18].call(null, n)];
}
if(! args[2]) return [2, Math.abs(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "abs: 1 arg"], 1);
});
register
("floor",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
if(args[2]) break a;
var n = a[1];
return [1, n];
}
if(! args[2]) return [1, Math.floor(as_number(a)) | 0];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "floor: 1 arg"], 1);
});
register
("ceil",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
if(args[2]) break a;
var n = a[1];
return [1, n];
}
if(! args[2]) return [1, Math.ceil(as_number(a)) | 0];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "ceil: 1 arg"], 1);
});
register
("round",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0] && ! args[2]){var n$0 = a[1]; return [1, n$0];}
var match = args[2];
if(! match) return [1, caml_round_float(as_number(a)) | 0];
if(! match[2]){
var
b = match[1],
n = as_number(a),
places = as_int(b),
factor = Math.pow(10., places);
return [2, caml_round_float(n * factor) / factor];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "round: 1-2 args"], 1);
});
register
("min",
function(args){
if(args)
return b(a, args)
? [1,
Stdlib_List[26].call
(null,
function(acc, a){
if(typeof a !== "number" && 1 === a[0]){
var n = a[1];
return Stdlib[16].call(null, acc, n);
}
return acc;
},
Stdlib[19],
args)]
: [2,
Stdlib_List[26].call
(null,
function(acc, a){
var b = as_number(a);
return Stdlib_Float[23].call(null, acc, b);
},
Stdlib_Float[6],
args)];
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "min: at least 1 arg"], 1);
});
register
("max",
function(args){
if(args)
return b(a, args)
? [1,
Stdlib_List[26].call
(null,
function(acc, a){
if(typeof a !== "number" && 1 === a[0]){
var n = a[1];
return Stdlib[17].call(null, acc, n);
}
return acc;
},
Stdlib[20],
args)]
: [2,
Stdlib_List[26].call
(null,
function(acc, a){
var b = as_number(a);
return Stdlib_Float[24].call(null, acc, b);
},
Stdlib_Float[7],
args)];
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "max: at least 1 arg"], 1);
});
register
("sqrt",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, Math.sqrt(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "sqrt: 1 arg"], 1);
});
register
("pow",
function(args){
if(args){
var c = args[2];
if(c && ! c[2]){
var b = c[1], a = args[1], d = as_number(b);
return [2, Math.pow(as_number(a), d)];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "pow: 2 args"], 1);
});
register
("cbrt",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, runtime.caml_cbrt_float(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "cbrt: 1 arg"], 1);
});
register
("exp",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, Math.exp(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "exp: 1 arg"], 1);
});
register
("expm1",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, runtime.caml_expm1_float(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "expm1: 1 arg"], 1);
});
register
("log",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, Math.log(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "log: 1 arg"], 1);
});
register
("log2",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, Math.log(as_number(a)) / 0.6931471805599453];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "log2: 1 arg"], 1);
});
register
("log10",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, runtime.caml_log10_float(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "log10: 1 arg"], 1);
});
register
("log1p",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, runtime.caml_log1p_float(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "log1p: 1 arg"], 1);
});
register
("sin",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, Math.sin(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "sin: 1 arg"], 1);
});
register
("cos",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, Math.cos(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "cos: 1 arg"], 1);
});
register
("tan",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, Math.tan(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "tan: 1 arg"], 1);
});
register
("asin",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, Math.asin(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "asin: 1 arg"], 1);
});
register
("acos",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, Math.acos(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "acos: 1 arg"], 1);
});
register
("atan",
function(args){
if(args){
var match = args[2], a = args[1];
if(! match) return [2, Math.atan(as_number(a))];
if(! match[2]){
var x = match[1], b = as_number(x);
return [2, Math.atan2(as_number(a), b)];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "atan: 1-2 args"], 1);
});
register
("atan2",
function(args){
if(args){
var c = args[2];
if(c && ! c[2]){
var b = c[1], a = args[1], d = as_number(b);
return [2, Math.atan2(as_number(a), d)];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "atan2: 2 args"], 1);
});
register
("sinh",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, runtime.caml_sinh_float(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "sinh: 1 arg"], 1);
});
register
("cosh",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, runtime.caml_cosh_float(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "cosh: 1 arg"], 1);
});
register
("tanh",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, runtime.caml_tanh_float(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "tanh: 1 arg"], 1);
});
register
("asinh",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, runtime.caml_asinh_float(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "asinh: 1 arg"], 1);
});
register
("acosh",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, runtime.caml_acosh_float(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "acosh: 1 arg"], 1);
});
register
("atanh",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2, runtime.caml_atanh_float(as_number(a))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "atanh: 1 arg"], 1);
});
register
("hypot",
function(args){
var
sum =
Stdlib_List[26].call
(null,
function(acc, a){var x = as_number(a); return acc + x * x;},
0.,
args);
return [2, Math.sqrt(sum)];
});
register
("sign",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
if(args[2]) break a;
var n$0 = a[1], c = 0 < n$0 ? 1 : 0 <= n$0 ? 0 : -1;
return [1, c];
}
if(! args[2]){
var
n = as_number(a),
b =
Stdlib_Float[17].call(null, n)
? Stdlib_Float[8]
: 0. < n ? 1. : n < 0. ? -1. : n;
return [2, b];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "sign: 1 arg"], 1);
});
register
("fround",
function(args){
if(args && ! args[2]){
var a = args[1];
return [2,
runtime.caml_int32_float_of_bits
(runtime.caml_int32_bits_of_float(as_number(a)))];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "fround: 1 arg"], 1);
});
var k = [2, 32.];
register
("clz32",
function(args){
if(args && ! args[2]){
var a = args[1], n = as_number(a);
a:
{
if
(! Stdlib_Float[17].call(null, n) && ! Stdlib_Float[16].call(null, n)){var i = n % 4294967296. | 0; break a;}
var i = 0;
}
if(caml_equal(i, 0)) return k;
var x = i, count = 0;
for(;;){
if(! caml_equal(x & -2147483648, 0)) return [2, count];
var count$0 = count + 1 | 0;
x = x << 1;
count = count$0;
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "clz32: 1 arg"], 1);
});
register
("imul",
function(args){
if(args){
var c = args[2];
if(c && ! c[2]){
var
b = c[1],
a = args[1],
tou32 =
function(f){
if
(!
Stdlib_Float[17].call(null, f)
&& ! Stdlib_Float[16].call(null, f))
return f % 4294967296. | 0;
return 0;
},
ai = tou32(as_number(a)),
bi = tou32(as_number(b)),
r = caml_mul(ai, bi);
return [2, r];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "imul: 2 args"], 1);
});
register
("clamp",
function(args){
if(args){
var a = args[2];
if(a){
var b = a[2];
if(b && ! b[2]){
var
hi = b[1],
lo = a[1],
x = args[1],
x$0 = as_number(x),
lo$0 = as_number(lo),
hi$0 = as_number(hi),
c = Stdlib_Float[23].call(null, hi$0, x$0);
return [2, Stdlib_Float[24].call(null, lo$0, c)];
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "clamp: 3 args"], 1);
});
register
("truncate",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
if(args[2]) break a;
var n$0 = a[1];
return [1, n$0];
}
if(! args[2]){
var n = as_number(a), b = 0. <= n ? Math.floor(n) : Math.ceil(n);
return [1, b | 0];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "truncate: 1 arg"], 1);
});
register
("remainder",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
var d = args[2];
if(! d) break a;
var e = d[1];
if(typeof e !== "number" && 1 === e[0]){
if(d[2]) break a;
var b$0 = e[1], a$0 = a[1];
return [1, caml_mod(a$0, b$0)];
}
}
var c = args[2];
if(c && ! c[2]){
var b = c[1], f = as_number(b);
return [2, as_number(a) % f];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "remainder: 2 args"], 1);
});
register
("modulo",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
var d = args[2];
if(! d) break a;
var e = d[1];
if(typeof e !== "number" && 1 === e[0]){
if(d[2]) break a;
var
b$1 = e[1],
a$1 = a[1],
r$1 = caml_mod(a$1, b$1),
r$2 =
0 === r$1
? r$1
: (0 < r$1 ? 1 : 0) === (0 < b$1 ? 1 : 0) ? r$1 : r$1 + b$1 | 0;
return [1, r$2];
}
}
var c = args[2];
if(c && ! c[2]){
var
b = c[1],
a$0 = as_number(a),
b$0 = as_number(b),
r = a$0 % b$0,
r$0 =
r === 0.
? r
: (0. < r ? 1 : 0) === (0. < b$0 ? 1 : 0) ? r : r + b$0;
return [2, r$0];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "modulo: 2 args"], 1);
});
var l = [0, 0], m = [0, 1], n = [0, 0];
register
("exact?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
if(args[2]) break a; return m;
case 2:
if(args[2]) break a; return n;
}
if(! args[2]) return l;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "exact?: 1 arg"], 1);
});
var o = [0, 0], p = [0, 0], q = [0, 1];
register
("inexact?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
if(args[2]) break a; return p;
case 2:
if(args[2]) break a; return q;
}
if(! args[2]) return o;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "inexact?: 1 arg"], 1);
});
register
("exact->inexact",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
if(args[2]) break a; var n = a[1]; return [2, n];
case 2:
if(args[2]) break a; var n$0 = a[1]; return [2, n$0];
case 34:
if(args[2]) break a; var d = a[2], n$1 = a[1]; return [2, n$1 / d];
}
if(! args[2]) return [2, as_number(a)];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "exact->inexact: 1 arg"], 1);
});
register
("inexact->exact",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
if(args[2]) break a; var n = a[1]; return [1, n];
case 2:
if(args[2]) break a;
var n$0 = a[1];
return [1, caml_round_float(n$0) | 0];
}
if(! args[2]) return [1, caml_round_float(as_number(a)) | 0];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "inexact->exact: 1 arg"], 1);
});
register
("expt",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
var d = args[2];
if(! d) break a;
var f = d[1];
if(typeof f !== "number" && 1 === f[0]){
if(d[2]) break a;
var b$0 = f[1], base = a[1];
if(0 <= b$0){
var e = b$0, acc = 1;
for(;;){
if(0 === e) return [1, acc];
var acc$0 = caml_mul(acc, base), e$0 = e - 1 | 0;
e = e$0;
acc = acc$0;
}
}
}
}
var c = args[2];
if(c && ! c[2]){
var b = c[1], g = as_number(b);
return [2, Math.pow(as_number(a), g)];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "expt: 2 args"], 1);
});
register
("quotient",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
var d = args[2];
if(! d) break a;
var e = d[1];
if(typeof e !== "number" && 1 === e[0]){
if(d[2]) break a;
var b$0 = e[1], a$0 = a[1];
return [1, caml_div(a$0, b$0)];
}
}
var c = args[2];
if(c && ! c[2]){
var
b = c[1],
f = as_number(b),
n = as_number(a) / f,
g = 0. <= n ? Math.floor(n) : Math.ceil(n);
return [1, g | 0];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "quotient: 2 args"], 1);
});
function igcd(a$0, b$1){
var a = a$0, b = b$1;
for(;;){if(0 === b) return a; var b$0 = caml_mod(a, b); a = b; b = b$0;}
}
register
("gcd",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
var d = args[2];
if(! d) break a;
var e = d[1];
if(typeof e !== "number" && 1 === e[0]){
if(d[2]) break a;
var b$3 = e[1], a$2 = a[1], f = Stdlib[18].call(null, b$3);
return [1, igcd(Stdlib[18].call(null, a$2), f)];
}
}
var c = args[2];
if(c && ! c[2]){
var
b = c[1],
b$2 = Math.abs(as_number(b)),
a$1 = Math.abs(as_number(a)),
a$0 = a$1,
b$0 = b$2;
for(;;){
if(b$0 === 0.) return [2, a$0];
var b$1 = a$0 % b$0;
a$0 = b$0;
b$0 = b$1;
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "gcd: 2 args"], 1);
});
var r = [2, 0.], s = [1, 0];
register
("lcm",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
var d = args[2];
if(! d) break a;
var e = d[1];
if(typeof e !== "number" && 1 === e[0]){
if(d[2]) break a;
var
b$3 = e[1],
a$2 = a[1],
f = Stdlib[18].call(null, b$3),
g = igcd(Stdlib[18].call(null, a$2), f);
if(0 === g) return s;
var h = Stdlib[18].call(null, b$3);
return [1, caml_mul(caml_div(Stdlib[18].call(null, a$2), g), h)];
}
}
var c = args[2];
if(c && ! c[2]){
var
b = c[1],
a$0 = Math.abs(as_number(a)),
b$0 = Math.abs(as_number(b)),
a$1 = a$0,
b$1 = b$0;
for(;;){
if(b$1 === 0.) return a$1 === 0. ? r : [2, a$0 / a$1 * b$0];
var b$2 = a$1 % b$1;
a$1 = b$1;
b$1 = b$2;
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "lcm: 2 args"], 1);
});
var
t = [0, [8, [0, 0, 3], 0, 0, 0], cst_g],
u = [0, [4, 0, 0, 0, [12, 47, [4, 0, 0, 0, 0]]], cst_d_d];
register
("number->string",
function(args){
function int_to_radix(n, r){
if(0 === n) return "0";
var neg = n < 0, buf = Stdlib_Buffer[1].call(null, 16);
function go(n){
var a = 0 < n ? 1 : 0;
if(! a) return a;
go(caml_div(n, r));
var
b =
caml_string_get
("0123456789abcdefghijklmnopqrstuvwxyz", caml_mod(n, r));
return Stdlib_Buffer[12].call(null, buf, b);
}
go(Stdlib[18].call(null, n));
var a = Stdlib_Buffer[2].call(null, buf), b = neg ? cst$3 : cst;
return Stdlib[28].call(null, b, a);
}
if(args){
var a = args[1];
if(typeof a !== "number"){
var
cst_number_string_radix_out_of = "number->string: radix out of range";
switch(a[0]){
case 1:
var match = args[2], n = a[1];
if(! match) return [3, Stdlib[33].call(null, n)];
var b = match[1];
if(typeof b !== "number" && 1 === b[0] && ! match[2]){
var r = b[1], e = r < 2, g = e || 36 < r;
if(g)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_number_string_radix_out_of], 1);
return [3, int_to_radix(n, r)];
}
break;
case 2:
var match$0 = args[2], f = a[1];
if(! match$0)
return [3, caml_call1(Stdlib_Printf[4].call(null, t), f)];
var c = match$0[1];
if(typeof c !== "number" && 1 === c[0] && ! match$0[2]){
var r$0 = c[1], h = r$0 < 2, i = h || 36 < r$0;
if(i)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_number_string_radix_out_of], 1);
return [3, int_to_radix(f | 0, r$0)];
}
break;
case 34:
if(! args[2]){
var d = a[2], n$0 = a[1];
return [3, caml_call2(Stdlib_Printf[4].call(null, u), n$0, d)];
}
break;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "number->string: 1-2 args"], 1);
});
register
("string->number",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var match = args[2], s = a[1];
if(! match)
try{var m = [1, caml_int_of_string(s)]; return m;}
catch(exn){
try{var l = [2, caml_float_of_string(s)]; return l;}
catch(exn){return 0;}
}
var b = match[1];
if(typeof b !== "number" && 1 === b[0] && ! match[2]){
var r = b[1];
try{
var
e = 0 < caml_ml_string_length(s),
neg = e ? 45 === caml_string_get(s, 0) : e,
start = neg ? 1 : 0,
g = caml_ml_string_length(s) - 1 | 0,
f = 0;
if(g < start)
var n$0 = f;
else{
var n = f, i = start;
for(;;){
var c = caml_string_get(s, i);
a:
{
if(48 <= c && 57 >= c){var d = c - 48 | 0; break a;}
if(97 <= c && 122 >= c){var d = c - 87 | 0; break a;}
if(65 <= c && 90 >= c){var d = c - 55 | 0; break a;}
throw caml_maybe_attach_backtrace(Stdlib[3], 1);
}
if(r <= d) throw caml_maybe_attach_backtrace(Stdlib[3], 1);
var h = caml_mul(n, r) + d | 0, k = i + 1 | 0;
if(g === i){var n$0 = h; break;}
n = h;
i = k;
}
}
var j = neg ? - n$0 | 0 : n$0;
return [1, j];
}
catch(exn){return 0;}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "string->number: 1-2 args"], 1);
});
function make_rational_val(n, d){
if(0 === d)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-rational: denominator cannot be zero"], 1);
var
sign = 0 <= d ? 1 : -1,
b$1 = Stdlib[18].call(null, d),
a$0 = Stdlib[18].call(null, n),
a = a$0,
b = b$1;
for(;;){
if(0 === b){
var
rn = caml_div(caml_mul(sign, n), a),
rd = caml_div(caml_mul(sign, d), a);
return 1 === rd ? [1, rn] : [34, rn, rd];
}
var b$0 = caml_mod(a, b);
a = b;
b = b$0;
}
}
register
("make-rational",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
var b = args[2];
if(b){
var c = b[1], n = a[1];
if(typeof c !== "number")
switch(c[0]){
case 1:
if(! b[2]){var d = c[1]; return make_rational_val(n, d);}
break;
case 2:
if(! b[2]){var f = c[1]; return make_rational_val(n, f | 0);}
break;
}
}
break;
case 2:
var e = args[2];
if(e){
var g = e[1];
if(typeof g !== "number" && 1 === g[0] && ! e[2]){
var d$0 = g[1], f$0 = a[1];
return make_rational_val(f$0 | 0, d$0);
}
}
break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-rational: expected 2 integers"], 1);
});
var v = [0, 0], w = [0, 1];
register
("rational?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 34 === a[0]){if(args[2]) break a; return w;}
if(! args[2]) return v;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "rational?: expected 1 arg"], 1);
});
register
("numerator",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
if(! args[2]){var n = a[1]; return [1, n];} break;
case 34:
if(! args[2]){var n$0 = a[1]; return [1, n$0];} break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "numerator: expected rational or integer"], 1);
});
var x = [1, 1];
register
("denominator",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
if(! args[2]) return x; break;
case 34:
if(! args[2]){var d = a[2]; return [1, d];} break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "denominator: expected rational or integer"],
1);
});
register
("parse-int",
function(args){
function parse_leading_int(s){
var
len = caml_ml_string_length(s),
a = 0 < len,
neg = a ? 45 === caml_string_get(s, 0) : a;
if(neg)
var start = 1;
else
var
b = 0 < len,
d = b ? 43 === caml_string_get(s, 0) : b,
start = d ? 1 : 0;
var j = start;
for(;;){
if
(j < len
&& 48 <= caml_string_get(s, j) && 57 >= caml_string_get(s, j)){var j$0 = j + 1 | 0; j = j$0; continue;}
if(start >= j) return 0;
var
n =
caml_int_of_string
(Stdlib_String[16].call(null, s, start, j - start | 0)),
c = neg ? - n | 0 : n;
return [0, c];
}
}
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
var c = args[2], n = a[1]; if(c && c[2]) break a; return [1, n];
case 2:
var d = args[2], n$0 = a[1];
if(d && d[2]) break a;
return [1, n$0 | 0];
case 3:
var match = args[2], s = a[1];
if(match){
if(match[2]) break a;
var default_val$0 = match[1], match$0 = parse_leading_int(s);
if(! match$0) return default_val$0;
var n$1 = match$0[1];
return [1, n$1];
}
var match$1 = parse_leading_int(s);
if(! match$1) return 0;
var n$2 = match$1[1];
return [1, n$2];
}
var b = args[2];
if(b && ! b[2]){var default_val = b[1]; return default_val;}
}
return 0;
});
register
("parse-float",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 2:
if(! args[2]){var n = a[1]; return [2, n];} break;
case 3:
if(! args[2]){
var s = a[1], match = Stdlib[36].call(null, s);
if(! match) return 0;
var n$0 = match[1];
return [2, n$0];
}
break;
}
}
return 0;
});
var cst_host_handle = "__host_handle";
function safe_eq(a, b){
if(a === b) return 1;
a:
if(typeof a === "number"){
if(0 === a && typeof b === "number" && ! b) return 1;
}
else{
switch(a[0]){
case 0:
if(typeof b === "number") break a;
if(0 !== b[0]) break a;
var y = b[1], x = a[1];
return x === y ? 1 : 0;
case 1:
var x$0 = a[1];
if(typeof b === "number") break a;
switch(b[0]){
case 1:
var y$0 = b[1]; return x$0 === y$0 ? 1 : 0;
case 2:
var y$1 = b[1]; return x$0 === y$1 ? 1 : 0;
case 34:
var d = b[2], n = b[1]; return caml_mul(x$0, d) === n ? 1 : 0;
default: break a;
}
case 2:
var x$1 = a[1];
if(typeof b === "number") break a;
switch(b[0]){
case 1:
var y$2 = b[1]; return x$1 === y$2 ? 1 : 0;
case 2:
var y$3 = b[1]; return x$1 === y$3 ? 1 : 0;
case 34:
var d$0 = b[2], n$0 = b[1]; return x$1 === n$0 / d$0 ? 1 : 0;
default: break a;
}
case 3:
if(typeof b === "number") break a;
if(3 !== b[0]) break a;
var y$4 = b[1], x$2 = a[1];
return x$2 === y$4 ? 1 : 0;
case 4:
if(typeof b === "number") break a;
if(4 !== b[0]) break a;
var y$5 = b[1], x$3 = a[1];
return x$3 === y$5 ? 1 : 0;
case 5:
if(typeof b === "number") break a;
if(5 !== b[0]) break a;
var y$6 = b[1], x$4 = a[1];
return x$4 === y$6 ? 1 : 0;
case 6:
var la = a[1]; break;
case 7:
if(typeof b === "number") break a;
if(7 !== b[0]) break a;
var
b$0 = b[1],
a$0 = a[1],
match = Stdlib_Hashtbl[7].call(null, a$0, cst_host_handle),
match$0 = Stdlib_Hashtbl[7].call(null, b$0, cst_host_handle);
if(match){
var e = match[1];
if(typeof e !== "number" && 2 === e[0] && match$0){
var match$1 = match$0[1];
if(typeof match$1 !== "number" && 2 === match$1[0]){
var hb = match$1[1], ha = e[1];
return ha === hb ? 1 : 0;
}
}
}
else if(! match$0){
var
t = Stdlib_Hashtbl[15].call(null, b$0),
h = Stdlib_Hashtbl[15].call(null, a$0) === t ? 1 : 0;
if(h){
var eq = [0, 1];
Stdlib_Hashtbl[12].call
(null,
function(k, v){
var a = eq[1];
if(a){
var match = Stdlib_Hashtbl[7].call(null, b$0, k);
if(match){
var
v$0 = match[1],
b = 1 - safe_eq(v, v$0),
d = b ? (eq[1] = 0, 0) : b;
return d;
}
eq[1] = 0;
var c = 0;
}
else
var c = a;
return c;
},
a$0);
var j = eq[1];
}
else
var j = h;
return j;
}
return 0;
case 21:
var la = a[1][1]; break;
case 27:
if(typeof b === "number") break a;
if(27 !== b[0]) break a;
var b$1 = b[1], a$1 = a[1], k = a$1[1][2] === b$1[1][2] ? 1 : 0;
if(k){
var l = a$1[2].length - 1 === b$1[2].length - 1 ? 1 : 0;
if(l){
var o = a$1[2].length - 2 | 0, m = 1;
if(o < 0)
var c = m;
else{
var eq$0 = m, i = 0;
for(;;){
var
u = caml_check_bound(b$1[2], i)[i + 1],
eq$1 =
1 - safe_eq(caml_check_bound(a$1[2], i)[i + 1], u) ? 0 : eq$0,
v = i + 1 | 0;
if(o === i){var c = eq$1; break;}
eq$0 = eq$1;
i = v;
}
}
}
else
var c = l;
}
else
var c = k;
return c;
case 28:
if(typeof b === "number") break a;
if(28 !== b[0]) break a;
var b$2 = b[1], a$2 = a[1];
return a$2[1] === b$2[1] ? 1 : 0;
case 29:
if(typeof b === "number") break a;
if(29 !== b[0]) break a;
var
b$3 = b[1],
a$3 = a[1],
p = a$3.length - 1 === b$3.length - 1 ? 1 : 0;
if(p){
var r = a$3.length - 2 | 0, q = 1;
if(r < 0)
var f = q;
else{
var eq$2 = q, i$0 = 0;
for(;;){
var
w = caml_check_bound(b$3, i$0)[i$0 + 1],
eq$3 =
1 - safe_eq(caml_check_bound(a$3, i$0)[i$0 + 1], w) ? 0 : eq$2,
z = i$0 + 1 | 0;
if(r === i$0){var f = eq$3; break;}
eq$2 = eq$3;
i$0 = z;
}
}
}
else
var f = p;
return f;
case 34:
var d$1 = a[2], n$1 = a[1];
if(typeof b === "number") break a;
switch(b[0]){
case 1:
var y$7 = b[1]; return n$1 === caml_mul(y$7, d$1) ? 1 : 0;
case 2:
var y$8 = b[1]; return n$1 / d$1 === y$8 ? 1 : 0;
case 34:
var bd = b[2], bn = b[1];
return caml_mul(n$1, bd) === caml_mul(bn, d$1) ? 1 : 0;
default: break a;
}
default: break a;
}
if(typeof b !== "number"){
switch(b[0]){
case 6:
var lb = b[1]; break;
case 21:
var lb = b[1][1]; break;
default: break a;
}
var
s = Stdlib_List[1].call(null, lb),
g = Stdlib_List[1].call(null, la) === s ? 1 : 0;
return g ? Stdlib_List[35].call(null, safe_eq, la, lb) : g;
}
}
return 0;
}
register
("=",
function(args){
if(args){
var c = args[2];
if(c && ! c[2]){var b = c[1], a = args[1]; return [0, safe_eq(a, b)];}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "=: 2 args"], 1);
});
register
("!=",
function(args){
if(args){
var c = args[2];
if(c && ! c[2]){
var b = c[1], a = args[1];
return [0, 1 - safe_eq(a, b)];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "!=: 2 args"], 1);
});
register
("<",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var d = args[2];
if(! d) break a;
var e = d[1];
if(typeof e !== "number" && 3 === e[0]){
if(d[2]) break a;
var b$0 = e[1], a$0 = a[1];
return [0, runtime.caml_string_lessthan(a$0, b$0)];
}
}
var c = args[2];
if(c && ! c[2]){
var b = c[1], f = as_number(b);
return [0, as_number(a) < f ? 1 : 0];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "<: 2 args"], 1);
});
register
(">",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var d = args[2];
if(! d) break a;
var e = d[1];
if(typeof e !== "number" && 3 === e[0]){
if(d[2]) break a;
var b$0 = e[1], a$0 = a[1];
return [0, runtime.caml_string_greaterthan(a$0, b$0)];
}
}
var c = args[2];
if(c && ! c[2]){
var b = c[1], f = as_number(b);
return [0, f < as_number(a) ? 1 : 0];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], ">: 2 args"], 1);
});
register
("<=",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var d = args[2];
if(! d) break a;
var e = d[1];
if(typeof e !== "number" && 3 === e[0]){
if(d[2]) break a;
var b$0 = e[1], a$0 = a[1];
return [0, runtime.caml_string_lessequal(a$0, b$0)];
}
}
var c = args[2];
if(c && ! c[2]){
var b = c[1], f = as_number(b);
return [0, as_number(a) <= f ? 1 : 0];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "<=: 2 args"], 1);
});
register
(">=",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var d = args[2];
if(! d) break a;
var e = d[1];
if(typeof e !== "number" && 3 === e[0]){
if(d[2]) break a;
var b$0 = e[1], a$0 = a[1];
return [0, runtime.caml_string_greaterequal(a$0, b$0)];
}
}
var c = args[2];
if(c && ! c[2]){
var b = c[1], f = as_number(b);
return [0, f <= as_number(a) ? 1 : 0];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], ">=: 2 args"], 1);
});
register
("not",
function(args){
if(args && ! args[2]){
var a = args[1];
return [0, 1 - Sx_types[67].call(null, a)];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "not: 1 arg"], 1);
});
register
("nil?",
function(args){
if(args && ! args[2]){
var a = args[1];
return [0, Sx_types[58].call(null, a)];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "nil?: 1 arg"], 1);
});
var y = [0, 0], z = [0, 1];
register
("number?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && a[0] - 1 >>> 0 < 2){if(args[2]) break a; return z;}
if(! args[2]) return y;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "number?: 1 arg"], 1);
});
var A = [0, 0], B = [0, 1];
register
("integer?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
if(args[2]) break a; return B;
case 2:
if(args[2]) break a;
var f = a[1];
return [0, Stdlib_Float[18].call(null, f)];
}
if(! args[2]) return A;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "integer?: 1 arg"], 1);
});
var C = [0, 0], D = [0, 1];
register
("float?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 2 === a[0]){if(args[2]) break a; return D;}
if(! args[2]) return C;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "float?: 1 arg"], 1);
});
var E = [0, 0], F = [0, 1];
register
("string?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){if(args[2]) break a; return F;}
if(! args[2]) return E;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "string?: 1 arg"], 1);
});
var G = [0, 0], H = [0, 1];
register
("boolean?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 0 === a[0]){if(args[2]) break a; return H;}
if(! args[2]) return G;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "boolean?: 1 arg"], 1);
});
var I = [0, 0], J = [0, 1];
register
("list?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){case 6:case 21: if(args[2]) break a; return J;}
if(! args[2]) return I;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "list?: 1 arg"], 1);
});
var K = [0, 0], L = [0, 1];
register
("dict?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 7 === a[0]){if(args[2]) break a; return L;}
if(! args[2]) return K;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "dict?: 1 arg"], 1);
});
var M = [0, 0], N = [0, 1];
register
("symbol?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 4 === a[0]){if(args[2]) break a; return N;}
if(! args[2]) return M;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "symbol?: 1 arg"], 1);
});
var O = [0, 0], P = [0, 1];
register
("keyword?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 5 === a[0]){if(args[2]) break a; return P;}
if(! args[2]) return O;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "keyword?: 1 arg"], 1);
});
var Q = [0, 1], R = [0, 0], S = [0, 0], T = [0, 1], U = [0, 0], V = [0, 1];
register
("empty?",
function(args){
a:
if(args){
var a = args[1];
b:
{
if(typeof a !== "number"){
c:
{
switch(a[0]){
case 3:
if(a[1] !== cst){if(args[2]) break a; return S;}
if(args[2]) break a;
return T;
case 6:
if(a[1]){if(args[2]) break a; break c;}
if(args[2]) break a;
break;
case 7:
if(args[2]) break a;
var d = a[1];
return [0, 0 === Stdlib_Hashtbl[15].call(null, d) ? 1 : 0];
case 21:
if(a[1][1]){if(args[2]) break a; break c;}
if(args[2]) break a;
break;
default: break b;
}
return V;
}
return U;
}
if(0 === a){if(args[2]) break a; return Q;}
}
if(! args[2]) return R;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "empty?: 1 arg"], 1);
});
register
("odd?",
function(args){
if(args && ! args[2]){
var a = args[1];
return [0, 0 !== ((as_number(a) | 0) % 2 | 0) ? 1 : 0];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "odd?: 1 arg"], 1);
});
register
("even?",
function(args){
if(args && ! args[2]){
var a = args[1];
return [0, 0 === ((as_number(a) | 0) % 2 | 0) ? 1 : 0];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "even?: 1 arg"], 1);
});
register
("zero?",
function(args){
if(args && ! args[2]){
var a = args[1];
return [0, as_number(a) === 0. ? 1 : 0];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "zero?: 1 arg"], 1);
});
register
("str",
function(args){
var a = Stdlib_List[20].call(null, to_string, args);
return [3, Stdlib_String[7].call(null, cst, a)];
});
register
("upper",
function(args){
if(args && ! args[2]){
var a = args[1], b = as_string(a);
return [3, Stdlib_String[26].call(null, b)];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "upper: 1 arg"], 1);
});
register
("upcase",
function(args){
if(args && ! args[2]){
var a = args[1], b = as_string(a);
return [3, Stdlib_String[26].call(null, b)];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "upcase: 1 arg"], 1);
});
register
("lower",
function(args){
if(args && ! args[2]){
var a = args[1], b = as_string(a);
return [3, Stdlib_String[27].call(null, b)];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "lower: 1 arg"], 1);
});
register
("downcase",
function(args){
if(args && ! args[2]){
var a = args[1], b = as_string(a);
return [3, Stdlib_String[27].call(null, b)];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "downcase: 1 arg"], 1);
});
register
("trim",
function(args){
if(args && ! args[2]){
var a = args[1], b = as_string(a);
return [3, Stdlib_String[24].call(null, b)];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "trim: 1 arg"], 1);
});
register
("string-length",
function(args){
if(args && ! args[2]){
var a = args[1];
return [1, caml_ml_string_length(as_string(a))];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "string-length: 1 arg"], 1);
});
register
("string-contains?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var needle = c[1], haystack = a[1], i = 0;
for(;;){
if
(caml_ml_string_length(haystack)
< (i + caml_ml_string_length(needle) | 0))
var d = 0;
else{
if
(Stdlib_String[16].call
(null, haystack, i, caml_ml_string_length(needle))
!== needle){
var i$0 = i + 1 | 0;
i = i$0;
continue;
}
var d = 1;
}
return [0, d];
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "string-contains?: 2 string args"], 1);
});
var W = [0, 0];
register
("starts-with?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var
prefix = c[1],
s = a[1],
d =
caml_ml_string_length(prefix) <= caml_ml_string_length(s) ? 1 : 0,
e =
d
? Stdlib_String
[16].call
(null, s, 0, caml_ml_string_length(prefix))
=== prefix
? 1
: 0
: d;
return [0, e];
}
}
}
}
return W;
});
var X = [0, 0];
register
("ends-with?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var
suffix = c[1],
s = a[1],
sl = caml_ml_string_length(s),
xl = caml_ml_string_length(suffix),
d = xl <= sl ? 1 : 0,
e =
d
? Stdlib_String
[16].call
(null, s, sl - xl | 0, xl)
=== suffix
? 1
: 0
: d;
return [0, e];
}
}
}
}
return X;
});
var Y = [2, -1.];
register
("index-of",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 3:
var b = args[2];
if(! b) break a;
var c = b[1];
if(typeof c === "number") break a;
if(3 !== c[0]) break a;
if(b[2]) break a;
var
needle = c[1],
haystack = a[1],
nl = caml_ml_string_length(needle),
hl = caml_ml_string_length(haystack),
i = 0;
for(;;){
if(hl < (i + nl | 0)) return Y;
if(Stdlib_String[16].call(null, haystack, i, nl) === needle)
return [2, i];
var i$0 = i + 1 | 0;
i = i$0;
}
break;
case 6:
var d = args[2];
if(! d) break a;
if(d[2]) break a;
var target = d[1], items = a[1];
break;
case 21:
var e = args[2], f = a[1][1];
if(! e) break a;
if(e[2]) break a;
var target = e[1], items = f;
break;
default: break a;
}
var
eq =
function(a, b){
if(typeof a === "number"){
if(0 === a && typeof b === "number" && ! b) return 1;
}
else
switch(a[0]){
case 0:
if(typeof b !== "number" && 0 === b[0]){
var y = b[1], x = a[1];
return x === y ? 1 : 0;
}
break;
case 1:
var x$0 = a[1];
if(typeof b !== "number")
switch(b[0]){
case 1:
var y$0 = b[1]; return x$0 === y$0 ? 1 : 0;
case 2:
var y$1 = b[1]; return x$0 === y$1 ? 1 : 0;
}
break;
case 2:
var x$1 = a[1];
if(typeof b !== "number")
switch(b[0]){
case 1:
var y$2 = b[1]; return x$1 === y$2 ? 1 : 0;
case 2:
var y$3 = b[1]; return x$1 === y$3 ? 1 : 0;
}
break;
case 3:
if(typeof b !== "number" && 3 === b[0]){
var y$4 = b[1], x$2 = a[1];
return x$2 === y$4 ? 1 : 0;
}
break;
case 4:
if(typeof b !== "number" && 4 === b[0]){
var y$5 = b[1], x$3 = a[1];
return x$3 === y$5 ? 1 : 0;
}
break;
case 5:
if(typeof b !== "number" && 5 === b[0]){
var y$6 = b[1], x$4 = a[1];
return x$4 === y$6 ? 1 : 0;
}
break;
}
return a === b ? 1 : 0;
},
i$1 = 0,
param = items;
for(;;){
if(! param) return 0;
var h = param[1];
if(eq(h, target)) return [2, i$1];
var tl = param[2], i$2 = i$1 + 1 | 0;
i$1 = i$2;
param = tl;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "index-of: 2 string args or list+target"], 1);
});
register
("substring",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[2];
if(c && ! c[2]){
var
end_v = c[1],
start_v = b[1],
s = a[1],
i = as_int(start_v),
j = as_int(end_v),
len = caml_ml_string_length(s),
d = Stdlib[16].call(null, i, len),
i$0 = Stdlib[17].call(null, 0, d),
e = Stdlib[16].call(null, j, len),
j$0 = Stdlib[17].call(null, 0, e),
f = Stdlib[17].call(null, 0, j$0 - i$0 | 0);
return [3, Stdlib_String[16].call(null, s, i$0, f)];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "substring: 3 args"], 1);
});
register
("substr",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var match = b[2], start_v = b[1], s = a[1];
if(! match){
var
i$1 = as_int(start_v),
sl$0 = caml_ml_string_length(s),
e = Stdlib[16].call(null, i$1, sl$0),
i$2 = Stdlib[17].call(null, 0, e);
return [3, Stdlib_String[16].call(null, s, i$2, sl$0 - i$2 | 0)];
}
if(! match[2]){
var
len_v = match[1],
i = as_int(start_v),
n = as_int(len_v),
sl = caml_ml_string_length(s),
c = Stdlib[16].call(null, i, sl),
i$0 = Stdlib[17].call(null, 0, c),
d = Stdlib[16].call(null, n, sl - i$0 | 0),
n$0 = Stdlib[17].call(null, 0, d);
return [3, Stdlib_String[16].call(null, s, i$0, n$0)];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "substr: 2-3 args"], 1);
});
register
("split",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var sep = c[1], s = a[1];
if(1 === caml_ml_string_length(sep)){
var
d = caml_string_get(sep, 0),
e = Stdlib_String[17].call(null, d, s);
return [6,
Stdlib_List[20].call(null, function(p){return [3, p];}, e)];
}
var
f = caml_call1(Re[25], sep),
re = Re[2].call(null, f),
g = Re[17].call(null, 0, 0, re, s);
return [6,
Stdlib_List[20].call(null, function(p){return [3, p];}, g)];
}
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "split: 2 args"], 1);
});
register
("join",
function(args){
a:
if(args){
var b = args[1];
if(typeof b !== "number" && 3 === b[0]){
var c = args[2];
if(c){
var a = c[1], sep = b[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
var items = a[1]; break;
case 21:
var items = a[1][1]; break;
default: break a;
}
if(! c[2]){
var d = Stdlib_List[20].call(null, to_string, items);
return [3, Stdlib_String[7].call(null, sep, d)];
}
}
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "join: 2 args"], 1);
});
var Z = [0, [8, [0, 0, 3], 0, 0, 0], cst_g];
register
("replace",
function(args){
function to_str(t){
if(typeof t === "number"){if(0 === t) return cst;}
else
switch(t[0]){
case 0:
return t[1] ? cst_true : cst_false;
case 1:
var n = t[1]; return Stdlib[33].call(null, n);
case 2:
var n$0 = t[1];
return Stdlib_Float[18].call(null, n$0)
? Stdlib[33].call(null, n$0 | 0)
: caml_call1(Stdlib_Printf[4].call(null, Z), n$0);
case 12:
var v = caml_call1(sx_trampoline_fn[1], t);
if(typeof v !== "number" && 3 === v[0]){var s$0 = v[1]; return s$0;}
return to_string(v);
case 3:
case 4:
case 5:
case 17:
case 19:
var s = t[1]; return s;
}
return to_string(t);
}
if(args){
var a = args[2];
if(a){
var b = a[2];
if(b && ! b[2]){
var
new_s = b[1],
old_s = a[1],
s = args[1],
s$0 = to_str(s),
old_s$0 = to_str(old_s),
new_s$0 = to_str(new_s),
ol = caml_ml_string_length(old_s$0);
if(0 === ol) return [3, s$0];
var
buf = Stdlib_Buffer[1].call(null, caml_ml_string_length(s$0)),
i = 0;
for(;;){
if(caml_ml_string_length(s$0) <= i)
return [3, Stdlib_Buffer[2].call(null, buf)];
if
((i + ol | 0) <= caml_ml_string_length(s$0)
&& Stdlib_String[16].call(null, s$0, i, ol) === old_s$0){
Stdlib_Buffer[16].call(null, buf, new_s$0);
var i$0 = i + ol | 0;
i = i$0;
continue;
}
var c = caml_string_get(s$0, i);
Stdlib_Buffer[12].call(null, buf, c);
var i$1 = i + 1 | 0;
i = i$1;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "replace: 3 string args"], 1);
});
register
("char-from-code",
function(args){
if(args && ! args[2]){
var
a = args[1],
n = as_int(a),
buf = Stdlib_Buffer[1].call(null, 4),
b = Stdlib_Uchar[8].call(null, n);
Stdlib_Buffer[13].call(null, buf, b);
return [3, Stdlib_Buffer[2].call(null, buf)];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-from-code: 1 arg"], 1);
});
register
("char-at",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b && ! b[2]){
var n = b[1], s = a[1], i = as_int(n);
if(0 <= i && i < caml_ml_string_length(s)){
var c = caml_string_get(s, i);
return [3, Stdlib_String[1].call(null, 1, c)];
}
return 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-at: string and index"], 1);
});
register
("char-code",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var s = a[1];
if(0 < caml_ml_string_length(s)) return [1, caml_string_get(s, 0)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-code: 1 non-empty string arg"], 1);
});
register
("parse-number",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var
s = a[1],
has_dec = Stdlib_String[15].call(null, s, 46),
b = Stdlib_String[15].call(null, s, 101),
has_exp = b || Stdlib_String[15].call(null, s, 69);
if(! has_dec && ! has_exp){
var match = Stdlib[34].call(null, s);
if(match){var n = match[1]; return [1, n];}
try{var d = [2, caml_float_of_string(s)]; return d;}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0[1] === Stdlib[7]) return 0;
throw caml_maybe_attach_backtrace(exn$0, 0);
}
}
try{var c = [2, caml_float_of_string(s)]; return c;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Stdlib[7]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "parse-number: 1 string arg"], 1);
});
var _ = [0, 0, 0];
register
("regex-match",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var input = c[1], pattern = a[1];
try{
var
f = Re_Pcre[3].call(null, 0, pattern),
re = Re[2].call(null, f),
match = Re[6].call(null, 0, 0, re, input);
if(match){
var
group = match[1],
full = caml_call2(Re[1][1], group, 0),
n = caml_call1(Re[1][12], group),
d = n - 1 | 0,
groups = [0, [0, [3, full], 0]];
if(d >= 1){
var i = 1;
for(;;){
try{
var h = [0, [3, caml_call2(Re[1][1], group, i)], 0];
groups[1] = Stdlib[37].call(null, groups[1], h);
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn, 0);
groups[1] = Stdlib[37].call(null, groups[1], _);
}
var g = i + 1 | 0;
if(d === i) break;
i = g;
}
}
var e = [6, groups[1]];
}
else
var e = 0;
return e;
}
catch(exn){return 0;}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-match: pattern and input strings"], 1);
});
var $ = [0, 0];
register
("regex-match?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var input = c[1], pattern = a[1];
try{
var
d = Re_Pcre[3].call(null, 0, pattern),
e = Re[2].call(null, d),
f = [0, Re[7].call(null, 0, 0, e, input)];
return f;
}
catch(exn){return $;}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-match?: pattern and input strings"], 1);
});
register
("regex-find-all",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var input = c[1], pattern = a[1];
try{
var
d = Re_Pcre[3].call(null, 0, pattern),
re = Re[2].call(null, d),
matches = Re[11].call(null, 0, 0, re, input),
results =
Stdlib_List[20].call
(null,
function(group){
try{var a = [3, caml_call2(Re[1][1], group, 1)]; return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8])
return [3, caml_call2(Re[1][1], group, 0)];
throw caml_maybe_attach_backtrace(exn, 0);
}
},
matches);
return [21, [0, results]];
}
catch(exn){return [21, [0, 0]];}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-find-all: pattern and input strings"],
1);
});
var cst_regex_replace = "regex-replace";
register
(cst_regex_replace,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0]){
var d = b[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 3 === e[0] && ! d[2]){
var input = e[1], replacement = c[1], pattern = a[1];
try{
var
f = Re_Pcre[3].call(null, 0, pattern),
re = Re[2].call(null, f),
g = [3, Re[92].call(null, 0, 0, 0, re, replacement, input)];
return g;
}
catch(exn){return [3, input];}
}
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"regex-replace: pattern, replacement, input strings"],
1);
});
register
("regex-replace-first",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0]){
var d = b[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 3 === e[0] && ! d[2]){
var input = e[1], replacement = c[1], pattern = a[1];
try{
var
g = Re_Pcre[3].call(null, 0, pattern),
re = Re[2].call(null, g),
match = Re[6].call(null, 0, 0, re, input);
if(match)
var
group = match[1],
start = caml_call2(Re[1][5], group, 0),
stop = caml_call2(Re[1][7], group, 0),
h =
Stdlib_String[16].call
(null, input, stop, caml_ml_string_length(input) - stop | 0),
i = Stdlib[28].call(null, replacement, h),
j = Stdlib_String[16].call(null, input, 0, start),
f = [3, Stdlib[28].call(null, j, i)];
else
var f = [3, input];
return f;
}
catch(exn){return [3, input];}
}
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"regex-replace-first: pattern, replacement, input strings"],
1);
});
var cst_regex_split = "regex-split";
register
(cst_regex_split,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var input = c[1], pattern = a[1];
try{
var
d = Re_Pcre[3].call(null, 0, pattern),
re = Re[2].call(null, d),
e = Re[17].call(null, 0, 0, re, input),
f =
[21,
[0, Stdlib_List[20].call(null, function(s){return [3, s];}, e)]];
return f;
}
catch(exn){return [21, [0, [0, [3, input], 0]]];}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-split: pattern and input strings"], 1);
});
register("list", function(args){return [21, [0, args]];});
var
cst_args = " args",
cst_len = "len",
aa = [0, [11, "len: ", [4, 0, 0, 0, [11, cst_args, 0]]], "len: %d args"],
ab = [1, 0],
ac = [1, 1],
ad = [1, 1],
ae = [1, 0];
register
(cst_len,
function(args){
a:
if(args){
var a = args[1];
b:
{
if(typeof a !== "number"){
switch(a[0]){
case 0:
if(a[1]){if(args[2]) break a; return ac;}
if(args[2]) break a;
break b;
case 3:
if(args[2]) break a;
var s = a[1];
return [1, caml_ml_string_length(s)];
case 6:
if(args[2]) break a; var l = a[1]; break;
case 7:
if(args[2]) break a;
var d = a[1];
return [1, Stdlib_Hashtbl[15].call(null, d)];
case 17:
if(args[2]) break a;
var s$0 = a[1];
return [1, caml_ml_string_length(s$0)];
case 18:
if(args[2]) break a;
var pairs = a[1];
return [1, Stdlib_List[1].call(null, pairs)];
case 19:
if(args[2]) break a;
var s$1 = a[1];
return [1, caml_ml_string_length(s$1)];
case 21:
var e = a[1][1]; if(args[2]) break a; var l = e; break;
case 1:
case 2:
if(args[2]) break a; return ad;
case 4:
case 5:
case 8:
case 9:
case 10:
case 11:
case 12:
case 15:
if(args[2]) break a; return ae;
default: break a;
}
return [1, Stdlib_List[1].call(null, l)];
}
if(0 !== a || args[2]) break a;
}
return ab;
}
var
b = Stdlib_List[1].call(null, args),
c = caml_call1(Stdlib_Printf[4].call(null, aa), b);
throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1);
});
register("length", Stdlib_Hashtbl[6].call(null, primitives, cst_len));
register
("first",
function(args){
a:
if(args){
var x = args[1];
b:
{
if(typeof x !== "number"){
c:
{
switch(x[0]){
case 6:
var a = x[1];
if(a){if(args[2]) break a; var x$0 = a[1]; break c;}
if(args[2]) break a;
break;
case 21:
var b = x[1][1];
if(b){if(args[2]) break a; var x$0 = b[1]; break c;}
if(args[2]) break a;
break;
default: break b;
}
return 0;
}
return x$0;
}
if(0 === x){if(args[2]) break a; return 0;}
}
if(! args[2]){
var
c = Sx_types[112].call(null, x),
d = Stdlib[28].call(null, "first: expected list, got ", c);
throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "first: 1 list arg"], 1);
});
var af = [6, 0], ag = [6, 0];
register
("rest",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
b:
{
switch(a[0]){
case 6:
var b = a[1];
if(b){if(args[2]) break a; var xs = b[2]; break b;}
if(args[2]) break a;
break;
case 21:
var c = a[1][1];
if(c){if(args[2]) break a; var xs = c[2]; break b;}
if(args[2]) break a;
break;
default: break a;
}
return ag;
}
return [6, xs];
}
if(0 === a && ! args[2]) return af;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "rest: 1 list arg"], 1);
});
register
("last",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
if(args[2]) break a; var l = a[1]; break;
case 21:
var b = a[1][1]; if(args[2]) break a; var l = b; break;
default: break a;
}
var match = Stdlib_List[10].call(null, l);
if(! match) return 0;
var x = match[1];
return x;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "last: 1 list arg"], 1);
});
var ah = [6, 0];
register
("init",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
if(args[2]) break a; var l = a[1]; break;
case 21:
var b = a[1][1]; if(args[2]) break a; var l = b; break;
default: break a;
}
var match = Stdlib_List[10].call(null, l);
if(! match) return ah;
var rest = match[2];
return [6, Stdlib_List[10].call(null, rest)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "init: 1 list arg"], 1);
});
register
("nth",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 3:
var b = args[2];
if(! b) break a;
if(b[2]) break a;
var n = b[1], s = a[1], i = as_int(n);
if(0 <= i && i < caml_ml_string_length(s)){
var e = caml_string_get(s, i);
return [3, Stdlib_String[1].call(null, 1, e)];
}
return 0;
case 6:
var c = args[2];
if(! c) break a;
if(c[2]) break a;
var n$0 = c[1], l = a[1];
break;
case 21:
var d = args[2], h = a[1][1];
if(! d) break a;
if(d[2]) break a;
var n$0 = d[1], l = h;
break;
default: break a;
}
try{
var f = as_int(n$0), g = Stdlib_List[8].call(null, l, f);
return g;
}
catch(exn){return 0;}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "nth: list/string and number"], 1);
});
register
("cons",
function(args){
a:
if(args){
var a = args[2];
if(a){
var b = a[1], x = args[1];
if(typeof b !== "number"){
switch(b[0]){
case 6:
if(a[2]) break a; var l = b[1]; break;
case 21:
var c = b[1][1]; if(a[2]) break a; var l = c; break;
default: break a;
}
return [6, [0, x, l]];
}
if(0 === b && ! a[2]) return [6, [0, x, 0]];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "cons: value and list"], 1);
});
register
("append",
function(args){
a:
if(args){
var v = args[1];
b:
{
c:
if(typeof v === "number"){
if(0 === v){
var d = args[2];
if(! d) break a;
var a = d[1];
if(typeof a === "number") break b;
switch(a[0]){
case 6:
var lb$0 = a[1]; break;
case 21:
var lb$0 = a[1][1]; break;
default: break b;
}
if(d[2]) break a;
return [6, lb$0];
}
}
else{
switch(v[0]){
case 6:
var la$1 = v[1]; break;
case 21:
var la$1 = v[1][1]; break;
default: break c;
}
var h = args[2];
if(! h) break a;
var c = h[1];
if(typeof c !== "number"){
switch(c[0]){
case 6:
var lb$1 = c[1]; break;
case 21:
var lb$1 = c[1][1]; break;
default: break c;
}
if(h[2]) break a;
return [6, Stdlib[37].call(null, la$1, lb$1)];
}
}
if(typeof v !== "number"){
switch(v[0]){
case 6:
var la$0 = v[1]; break;
case 21:
var la$0 = v[1][1]; break;
default: break b;
}
var g = args[2];
if(! g) break a;
var i = g[1];
if(typeof i === "number" && ! i){if(g[2]) break a; return [6, la$0];}
}
}
b:
if(typeof v !== "number"){
switch(v[0]){
case 6:
var la = v[1]; break;
case 21:
var la = v[1][1]; break;
default: break b;
}
var f = args[2];
if(! f) break a;
if(f[2]) break a;
var v$0 = f[1];
return [6, Stdlib[37].call(null, la, [0, v$0, 0])];
}
var e = args[2];
if(e){
var b = e[1];
if(typeof b !== "number"){
switch(b[0]){
case 6:
var lb = b[1]; break;
case 21:
var lb = b[1][1]; break;
default: break a;
}
if(! e[2]) return [6, Stdlib[37].call(null, [0, v, 0], lb)];
}
}
}
var all = Stdlib_List[24].call(null, as_list, args);
return [6, all];
});
register
("append!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 6:
var b = args[2];
if(b && ! b[2]){
var item = b[1], items = a[1];
return [6, Stdlib[37].call(null, items, [0, item, 0])];
}
break;
case 21:
var c = args[2];
if(c && ! c[2]){
var item$0 = c[1], r = a[1];
r[1] = Stdlib[37].call(null, r[1], [0, item$0, 0]);
return [21, r];
}
break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "append!: list and item"], 1);
});
register
("reverse",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
if(args[2]) break a; var l = a[1]; break;
case 21:
var b = a[1][1]; if(args[2]) break a; var l = b; break;
default: break a;
}
return [6, Stdlib_List[10].call(null, l)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "reverse: 1 list"], 1);
});
register
("flatten",
function(args){
function flat(x){
a:
if(typeof x !== "number"){
switch(x[0]){
case 6:
var items = x[1]; break;
case 21:
var items = x[1][1]; break;
default: break a;
}
return Stdlib_List[24].call(null, flat, items);
}
return [0, x, 0];
}
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
if(args[2]) break a; var l = a[1]; break;
case 21:
var b = a[1][1]; if(args[2]) break a; var l = b; break;
default: break a;
}
return [6, Stdlib_List[24].call(null, flat, l)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "flatten: 1 list"], 1);
});
register
("concat",
function(args){return [6, Stdlib_List[24].call(null, as_list, args)];});
register
("contains?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 3:
var b = args[2];
if(! b) break a;
var c = b[1];
if(typeof c === "number") break a;
if(3 !== c[0]) break a;
if(b[2]) break a;
var sub = c[1], s = a[1], i = 0;
for(;;){
if
(caml_ml_string_length(s) < (i + caml_ml_string_length(sub) | 0))
var f = 0;
else{
if
(Stdlib_String[16].call(null, s, i, caml_ml_string_length(sub))
!== sub){
var i$0 = i + 1 | 0;
i = i$0;
continue;
}
var f = 1;
}
return [0, f];
}
case 6:
var d = args[2];
if(! d) break a;
if(d[2]) break a;
var item = d[1], l = a[1];
break;
case 21:
var e = args[2], g = a[1][1];
if(! e) break a;
if(e[2]) break a;
var item = e[1], l = g;
break;
default: break a;
}
var
safe_eq =
function(a, b){
var d = a === b ? 1 : 0;
if(d)
var e = d;
else{
if(typeof a === "number"){
if(0 === a && typeof b === "number" && ! b) return 1;
}
else
switch(a[0]){
case 0:
if(typeof b !== "number" && 0 === b[0]){
var y = b[1], x = a[1];
return x === y ? 1 : 0;
}
break;
case 1:
var x$0 = a[1];
if(typeof b !== "number")
switch(b[0]){
case 1:
var y$0 = b[1]; return x$0 === y$0 ? 1 : 0;
case 2:
var y$1 = b[1]; return x$0 === y$1 ? 1 : 0;
}
break;
case 2:
var x$1 = a[1];
if(typeof b !== "number")
switch(b[0]){
case 1:
var y$2 = b[1]; return x$1 === y$2 ? 1 : 0;
case 2:
var y$3 = b[1]; return x$1 === y$3 ? 1 : 0;
}
break;
case 3:
if(typeof b !== "number" && 3 === b[0]){
var y$4 = b[1], x$2 = a[1];
return x$2 === y$4 ? 1 : 0;
}
break;
case 4:
if(typeof b !== "number" && 4 === b[0]){
var y$5 = b[1], x$3 = a[1];
return x$3 === y$5 ? 1 : 0;
}
break;
case 5:
if(typeof b !== "number" && 5 === b[0]){
var y$6 = b[1], x$4 = a[1];
return x$4 === y$6 ? 1 : 0;
}
break;
case 7:
if(typeof b !== "number" && 7 === b[0]){
var
b$0 = b[1],
a$0 = a[1],
match = Stdlib_Hashtbl[7].call(null, a$0, cst_host_handle),
match$0 = Stdlib_Hashtbl[7].call(null, b$0, cst_host_handle);
if(match){
var c = match[1];
if(typeof c !== "number" && 2 === c[0] && match$0){
var match$1 = match$0[1];
if(typeof match$1 !== "number" && 2 === match$1[0]){
var hb = match$1[1], ha = c[1];
return ha === hb ? 1 : 0;
}
}
}
return 0;
}
break;
}
var e = 0;
}
return e;
};
return [0,
Stdlib_List[34].call
(null, function(x){return safe_eq(x, item);}, l)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "contains?: 2 args"], 1);
});
var ai = [6, 0], aj = [6, 0];
register
("range",
function(args){
if(args){
var match = args[2], start_v = args[1];
if(! match){
var n = as_int(start_v), h = Stdlib[17].call(null, 0, n);
return [6, Stdlib_List[11].call(null, h, function(i){return [1, i];})];
}
var match$0 = match[2], stop_v = match[1];
if(! match$0){
var
s$1 = as_int(start_v),
e$1 = as_int(stop_v),
len = Stdlib[17].call(null, 0, e$1 - s$1 | 0);
return [6,
Stdlib_List[11].call
(null, len, function(i){return [1, s$1 + i | 0];})];
}
if(! match$0[2]){
var step_v = match$0[1];
if
(typeof start_v !== "number"
&&
1 === start_v[0]
&&
typeof stop_v !== "number"
&&
1 === stop_v[0] && typeof step_v !== "number" && 1 === step_v[0]){
var st$0 = step_v[1], e$0 = stop_v[1], s$0 = start_v[1];
if(0 === st$0) return aj;
var b = 0;
if(0 < st$0){
var i = s$0, items = b;
for(;;){
if(i >= e$0){var items$1 = items; break;}
var f = [0, [1, i], items];
i = i + st$0 | 0;
items = f;
}
}
else{
var i$0 = s$0, items$0 = b;
for(;;){
if(e$0 >= i$0){var items$1 = items$0; break;}
var g = [0, [1, i$0], items$0];
i$0 = i$0 + st$0 | 0;
items$0 = g;
}
}
return [6, Stdlib_List[10].call(null, items$1)];
}
var
s = as_number(start_v),
e = as_number(stop_v),
st = as_number(step_v);
if(st === 0.) return ai;
var a = 0;
if(0. < st){
var i$1 = s, items$2 = a;
for(;;){
if(! (i$1 < e)){var items$4 = items$2; break;}
var c = [0, [2, i$1], items$2];
i$1 = i$1 + st;
items$2 = c;
}
}
else{
var i$2 = s, items$3 = a;
for(;;){
if(! (e < i$2)){var items$4 = items$3; break;}
var d = [0, [2, i$2], items$3];
i$2 = i$2 + st;
items$3 = d;
}
}
return [6, Stdlib_List[10].call(null, items$4)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "range: 1-3 args"], 1);
});
register
("slice",
function(args){
a:
if(args){
var a = args[1];
b:
if(typeof a !== "number"){
switch(a[0]){
case 3:
var d = args[2];
if(! d) break a;
var match = d[2], start_v$0 = d[1], s = a[1];
if(! match){
var
k = as_int(start_v$0),
i$1 = Stdlib[17].call(null, 0, k),
m = Stdlib[17].call(null, 0, caml_ml_string_length(s) - i$1 | 0);
return [3, Stdlib_String[16].call(null, s, i$1, m)];
}
if(match[2]) break a;
var
end_v$0 = match[1],
g = as_int(start_v$0),
i$0 = Stdlib[17].call(null, 0, g),
j$1 = as_int(end_v$0),
sl = caml_ml_string_length(s),
j$2 = Stdlib[16].call(null, j$1, sl),
h = Stdlib[17].call(null, 0, j$2 - i$0 | 0);
return [3, Stdlib_String[16].call(null, s, i$0, h)];
case 6:
var l$0 = a[1]; break;
case 21:
var l$0 = a[1][1]; break;
default: break b;
}
var e = args[2];
if(! e) break a;
if(! e[2]){
var
start_v$1 = e[1],
o = as_int(start_v$1),
i$2 = Stdlib[17].call(null, 0, o),
n = i$2,
l$1 = l$0;
for(;;){
if(l$1){
var xs = l$1[2];
if(0 < n){var n$0 = n - 1 | 0; n = n$0; l$1 = xs; continue;}
}
return [6, l$1];
}
}
}
if(typeof a !== "number"){
switch(a[0]){
case 6:
var l = a[1]; break;
case 21:
var l = a[1][1]; break;
default: break a;
}
var b = args[2];
if(b){
var c = b[2];
if(c && ! c[2]){
var
end_v = c[1],
start_v = b[1],
f = as_int(start_v),
i = Stdlib[17].call(null, 0, f),
j = as_int(end_v),
len = Stdlib_List[1].call(null, l),
j$0 = Stdlib[16].call(null, j, len),
take_range =
function(idx$1, param$0){
var idx = idx$1, param = param$0;
for(;;){
if(! param) return 0;
var xs = param[2], x = param[1];
if(j$0 <= idx) return 0;
if(i <= idx) return [0, x, take_range(idx + 1 | 0, xs)];
var idx$0 = idx + 1 | 0;
idx = idx$0;
param = xs;
}
};
return [6, take_range(0, l)];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "slice: 2-3 args"], 1);
});
register
("sort",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
if(args[2]) break a; var l = a[1]; break;
case 21:
var b = a[1][1]; if(args[2]) break a; var l = b; break;
default: break a;
}
return [6, Stdlib_List[59].call(null, runtime.caml_compare, l)];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "sort: 1 list"], 1);
});
register
("zip",
function(args){
if(args){
var c = args[2];
if(c && ! c[2]){
var
b = c[1],
a = args[1],
la = as_list(a),
lb = as_list(b),
l1 = la,
l2 = lb,
acc = 0;
for(;;){
if(l1 && l2){
var
ys = l2[2],
y = l2[1],
xs = l1[2],
x = l1[1],
acc$0 = [0, [6, [0, x, [0, y, 0]]], acc];
l1 = xs;
l2 = ys;
acc = acc$0;
continue;
}
return [6, Stdlib_List[10].call(null, acc)];
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "zip: 2 lists"], 1);
});
register
("zip-pairs",
function(args){
if(args && ! args[2]){
var
v = args[1],
l = as_list(v),
go =
function(param){
if(param){
var match = param[2];
if(match){
var rest = match[2], b = match[1], a = param[1];
return [0, [6, [0, a, [0, b, 0]]], go(rest)];
}
}
return 0;
};
return [6, go(l)];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "zip-pairs: 1 list"], 1);
});
register
("take",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
var l = a[1]; break;
case 21:
var l = a[1][1]; break;
default: break a;
}
var b = args[2];
if(b && ! b[2]){
var
n = b[1],
take_n =
function(i, param){
if(param){
var xs = param[2], x = param[1];
if(0 < i) return [0, x, take_n(i - 1 | 0, xs)];
}
return 0;
};
return [6, take_n(as_int(n), l)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "take: list and number"], 1);
});
register
("drop",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
var l = a[1]; break;
case 21:
var l = a[1][1]; break;
default: break a;
}
var b = args[2];
if(b && ! b[2]){
var n = b[1], i$1 = as_int(n), i = i$1, l$0 = l;
for(;;){
if(l$0){
var xs = l$0[2];
if(0 < i){var i$0 = i - 1 | 0; i = i$0; l$0 = xs; continue;}
}
return [6, l$0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "drop: list and number"], 1);
});
register
("chunk-every",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
var l = a[1]; break;
case 21:
var l = a[1][1]; break;
default: break a;
}
var b = args[2];
if(b && ! b[2]){
var
n = b[1],
size = as_int(n),
go =
function(l){
if(! l) return 0;
function take_n(i, param){
if(param){
var xs = param[2], x = param[1];
if(0 < i) return [0, x, take_n(i - 1 | 0, xs)];
}
return 0;
}
var i = size, l$0 = l;
for(;;){
if(l$0){
var xs = l$0[2];
if(0 < i){var i$0 = i - 1 | 0; i = i$0; l$0 = xs; continue;}
}
var a = go(l$0);
return [0, [6, take_n(size, l)], a];
}
};
return [6, go(l)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "chunk-every: list and number"], 1);
});
register
("unique",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
var l = a[1]; break;
case 21:
var l = a[1][1]; break;
default: break a;
}
if(! args[2]){
var
seen = Stdlib_Hashtbl[1].call(null, 0, 16),
result =
Stdlib_List[44].call
(null,
function(x){
var key = Sx_types[112].call(null, x);
return Stdlib_Hashtbl[9].call(null, seen, key)
? 0
: (Stdlib_Hashtbl[11].call(null, seen, key, 1), 1);
},
l);
return [6, result];
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "unique: 1 list"], 1);
});
register
(cst_dict,
function(args){
var d = Sx_types[105].call(null, 0), param = args;
for(;;){
if(! param) return [7, d];
var a = param[1];
if(typeof a !== "number")
switch(a[0]){
case 3:
var match = param[2];
if(match){
var rest = match[2], v = match[1], k = a[1];
Sx_types[108].call(null, d, k, v);
param = rest;
continue;
}
break;
case 5:
var match$0 = param[2];
if(match$0){
var rest$0 = match$0[2], v$0 = match$0[1], k$0 = a[1];
Sx_types[108].call(null, d, k$0, v$0);
param = rest$0;
continue;
}
break;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "dict: pairs of key value"], 1);
}
});
register
("get",
function(args){
a:
if(args){
var a = args[1];
b:
if(typeof a === "number"){
if(0 === a){
var g = args[2];
if(! g) break a;
if(g[2]) break a;
return 0;
}
}
else{
switch(a[0]){
case 6:
var e = args[2];
if(! e) break a;
if(e[2]) break a;
var n = e[1], l = a[1];
break;
case 7:
var b = args[2];
if(! b) break a;
var c = b[1], d = a[1];
if(typeof c === "number") break b;
switch(c[0]){
case 3:
if(b[2]) break a;
var k = c[1];
return Sx_types[106].call(null, d, k);
case 5:
if(b[2]) break a;
var k$0 = c[1];
return Sx_types[106].call(null, d, k$0);
default: break b;
}
case 21:
var f = args[2], o = a[1][1];
if(! f) break a;
if(f[2]) break a;
var n = f[1], l = o;
break;
default: break b;
}
c:
{
if(typeof n !== "number" && n[0] - 1 >>> 0 < 2){var i = 1; break c;}
var i = 0;
}
if(i)
try{var j = as_int(n), m = Stdlib_List[8].call(null, l, j); return m;
}
catch(exn){return 0;}
}
var h = args[2];
if(h && ! h[2]) return 0;
}
return 0;
});
register
("has-key?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 7 === c[0]){
var a = args[2];
if(a){
var b = a[1], d = c[1];
if(typeof b !== "number")
switch(b[0]){
case 3:
if(! a[2]){
var k = b[1];
return [0, Sx_types[107].call(null, d, k)];
}
break;
case 5:
if(! a[2]){
var k$0 = b[1];
return [0, Sx_types[107].call(null, d, k$0)];
}
break;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "has-key?: dict and key"], 1);
});
register
("assoc",
function(args){
if(args){
var match = args[1];
if(typeof match !== "number" && 7 === match[0]){
var
rest = args[2],
d = match[1],
d2 = Stdlib_Hashtbl[4].call(null, d),
param = rest;
for(;;){
if(! param) return [7, d2];
var a = param[1];
if(typeof a !== "number")
switch(a[0]){
case 3:
var match$0 = param[2];
if(match$0){
var rest$0 = match$0[2], v = match$0[1], k = a[1];
Stdlib_Hashtbl[11].call(null, d2, k, v);
param = rest$0;
continue;
}
break;
case 5:
var match$1 = param[2];
if(match$1){
var rest$1 = match$1[2], v$0 = match$1[1], k$0 = a[1];
Stdlib_Hashtbl[11].call(null, d2, k$0, v$0);
param = rest$1;
continue;
}
break;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "assoc: pairs"], 1);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "assoc: dict + pairs"], 1);
});
register
("dissoc",
function(args){
if(args){
var match = args[1];
if(typeof match !== "number" && 7 === match[0]){
var
keys = args[2],
d = match[1],
d2 = Stdlib_Hashtbl[4].call(null, d);
Stdlib_List[18].call
(null,
function(k){
var a = to_string(k);
return Stdlib_Hashtbl[10].call(null, d2, a);
},
keys);
return [7, d2];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "dissoc: dict + keys"], 1);
});
register
("merge",
function(args){
var d = Sx_types[105].call(null, 0);
Stdlib_List[18].call
(null,
function(param){
if(typeof param !== "number" && 7 === param[0]){
var src = param[1];
return Stdlib_Hashtbl[12].call
(null,
function(k, v){
return Stdlib_Hashtbl[11].call(null, d, k, v);
},
src);
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "merge: all args must be dicts"], 1);
},
args);
return [7, d];
});
register
("keys",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 7 === a[0] && ! args[2]){
var d = a[1];
return [6, Sx_types[110].call(null, d)];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "keys: 1 dict"], 1);
});
register
("vals",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 7 === a[0] && ! args[2]){
var d = a[1];
return [6, Sx_types[111].call(null, d)];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "vals: 1 dict"], 1);
});
register("mutable-list", function(args){return [21, [0, 0]];});
register
("set-nth!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 6:
var d = args[2];
if(d){
var e = d[2];
if(e && ! e[2])
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"set-nth!: list is immutable, use ListRef"],
1);
}
break;
case 21:
var b = args[2];
if(b){
var c = b[2];
if(c && ! c[2]){
var v = c[1], idx = b[1], r = a[1], i = as_int(idx), l = r[1];
r[1] =
Stdlib_List[21].call
(null, function(j, x){return j === i ? v : x;}, l);
return 0;
}
}
break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set-nth!: expected (list idx val)"], 1);
});
register
("dict-set!",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 7 === c[0]){
var a = args[2];
if(a){
var b = a[1], d = c[1];
if(typeof b !== "number")
switch(b[0]){
case 3:
var e = a[2];
if(e && ! e[2]){
var v = e[1], k = b[1];
Sx_types[108].call(null, d, k, v);
return v;
}
break;
case 5:
var f = a[2];
if(f && ! f[2]){
var v$0 = f[1], k$0 = b[1];
Sx_types[108].call(null, d, k$0, v$0);
return v$0;
}
break;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "dict-set!: dict key val"], 1);
});
register
("dict-get",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 7 === c[0]){
var a = args[2];
if(a){
var b = a[1], d = c[1];
if(typeof b !== "number")
switch(b[0]){
case 3:
if(! a[2]){var k = b[1]; return Sx_types[106].call(null, d, k);}
break;
case 5:
if(! a[2]){
var k$0 = b[1];
return Sx_types[106].call(null, d, k$0);
}
break;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "dict-get: dict and key"], 1);
});
register
("dict-has?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 7 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var k = c[1], d = a[1];
return [0, Sx_types[107].call(null, d, k)];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "dict-has?: dict and key"], 1);
});
register
("dict-delete!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 7 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var k = c[1], d = a[1];
Sx_types[109].call(null, d, k);
return 0;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "dict-delete!: dict and key"], 1);
});
register
("type-of",
function(args){
if(args && ! args[2]){
var a = args[1];
return [3, Sx_types[57].call(null, a)];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "type-of: 1 arg"], 1);
});
register
("inspect",
function(args){
if(args && ! args[2]){
var a = args[1];
return [3, Sx_types[112].call(null, a)];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "inspect: 1 arg"], 1);
});
var
cst_s = "~%s",
ak = [3, "<lambda>"],
al = [0, [12, 126, [2, 0, 0]], cst_s],
am = [0, [12, 126, [2, 0, 0]], cst_s],
an = [0, [12, 58, [2, 0, [12, 32, [2, 0, 0]]]], ":%s %s"],
ao =
[0, [11, "(make-spread {", [2, 0, [11, "})", 0]]], "(make-spread {%s})"],
ap = [0, [11, "#<", [2, 0, [12, 62, 0]]], "#<%s>"],
aq = [0, [11, "#<parameter ", [2, 0, [12, 62, 0]]], "#<parameter %s>"],
ar = [0, [11, "#(", [2, 0, [12, 41, 0]]], "#(%s)"];
register
("serialize",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 8:
if(args[2]) break a; return ak;
case 9:
if(args[2]) break a;
var c = a[1], b = c[1];
return [3, caml_call1(Stdlib_Printf[4].call(null, al), b)];
case 10:
if(args[2]) break a;
var i = a[1], d = i[1];
return [3, caml_call1(Stdlib_Printf[4].call(null, am), d)];
case 17:
if(args[2]) break a; var s = a[1]; return [3, s];
case 18:
if(args[2]) break a;
var
pairs = a[1],
dict_parts =
Stdlib_List[20].call
(null,
function(param){
var
v = param[2],
k = param[1],
a = Sx_types[112].call(null, v);
return caml_call2(Stdlib_Printf[4].call(null, an), k, a);
},
pairs),
e = Stdlib_String[7].call(null, cst$0, dict_parts);
return [3, caml_call1(Stdlib_Printf[4].call(null, ao), e)];
case 19:
if(args[2]) break a; var s$0 = a[1]; return [3, s$0];
case 27:
if(args[2]) break a;
var r = a[1], f = r[1][1];
return [3, caml_call1(Stdlib_Printf[4].call(null, ap), f)];
case 28:
if(args[2]) break a;
var p = a[1], g = p[1];
return [3, caml_call1(Stdlib_Printf[4].call(null, aq), g)];
case 29:
if(args[2]) break a;
var
arr = a[1],
h =
Stdlib_Array[14].call
(null, function(v){return Sx_types[112].call(null, v);}, arr),
elts = Stdlib_Array[10].call(null, h),
j = Stdlib_String[7].call(null, cst$0, elts);
return [3, caml_call1(Stdlib_Printf[4].call(null, ar), j)];
}
if(! args[2]) return [3, Sx_types[112].call(null, a)];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "serialize: 1 arg"], 1);
});
register
("make-symbol",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){var s = a[1]; return [4, s];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-symbol: expected string"], 1);
});
var cst_error = "error";
register
(cst_error,
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
if(args[2]) break a;
var msg = a[1];
throw caml_maybe_attach_backtrace([0, Sx_types[9], msg], 1);
}
if(! args[2]){
var b = to_string(a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "error: 1 arg"], 1);
});
register
("host-error",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
if(args[2]) break a;
var msg = a[1];
throw caml_maybe_attach_backtrace([0, Sx_types[9], msg], 1);
}
if(! args[2]){
var b = to_string(a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "host-error: 1 arg"], 1);
});
register
("try-catch",
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var catch_fn = a[1], try_fn = args[1];
try{
var
c = caml_call2(sx_call_fn[1], try_fn, 0),
d = caml_call1(sx_trampoline_fn[1], c);
return d;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sx_types[9]) throw caml_maybe_attach_backtrace(exn, 0);
var
msg = exn[2],
b = caml_call2(sx_call_fn[1], catch_fn, [0, [3, msg], 0]);
return caml_call1(sx_trampoline_fn[1], b);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "try-catch: expected (try-fn catch-fn)"], 1);
});
var is_client = [0, 0];
register("client?", function(args){return [0, is_client[1]];});
var store_registry = Stdlib_Hashtbl[1].call(null, 0, 16);
register
("def-store",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b && ! b[2]){
var init_fn = b[1], name = a[1];
if(1 - Stdlib_Hashtbl[9].call(null, store_registry, name)){
var
c = caml_call2(sx_call_fn[1], init_fn, 0),
store = caml_call1(sx_trampoline_fn[1], c);
Stdlib_Hashtbl[11].call(null, store_registry, name, store);
}
var match = Stdlib_Hashtbl[7].call(null, store_registry, name);
if(! match) return 0;
var v = match[1];
return v;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "def-store: expected (name init-fn)"], 1);
});
register
("use-store",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var
name = a[1],
match = Stdlib_Hashtbl[7].call(null, store_registry, name);
if(match){var v = match[1]; return v;}
var b = Stdlib[28].call(null, "Store not found: ", name);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "use-store: expected (name)"], 1);
});
register
("clear-stores",
function(args){Stdlib_Hashtbl[2].call(null, store_registry); return 0;});
var as = [0, 1], at = [0, 1], au = [6, 0], av = [6, 0];
register
("resource",
function(args){
var state = Stdlib_Hashtbl[1].call(null, 0, 8);
Stdlib_Hashtbl[11].call(null, state, "loading", as);
Stdlib_Hashtbl[11].call(null, state, "data", 0);
Stdlib_Hashtbl[11].call(null, state, cst_error, 0);
var sig_d = Stdlib_Hashtbl[1].call(null, 0, 8);
Stdlib_Hashtbl[11].call(null, sig_d, cst_signal, at);
Stdlib_Hashtbl[11].call(null, sig_d, cst_value, [7, state]);
Stdlib_Hashtbl[11].call(null, sig_d, "subscribers", au);
Stdlib_Hashtbl[11].call(null, sig_d, "deps", av);
return [7, sig_d];
});
register
("apply",
function(args){
function call(f, a){
if(typeof f !== "number" && 15 === f[0]){
var fn = f[2];
return caml_call1(fn, a);
}
var b = caml_call2(sx_call_fn[1], f, a);
return caml_call1(sx_trampoline_fn[1], b);
}
a:
if(args){
var c = args[2];
if(c){
var b = c[1], f = args[1];
if(typeof b === "number"){
if(0 === b && ! c[2]) return call(f, 0);
}
else{
switch(b[0]){
case 6:
var a = b[1]; break;
case 21:
var a = b[1][1]; break;
default: break a;
}
if(! c[2]) return call(f, a);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "apply: function and list"], 1);
});
register
("identical?",
function(args){
if(args){
var c = args[2];
if(c && ! c[2]){
var b = c[1], a = args[1];
a:
{
if(typeof a === "number"){
if(0 === a && typeof b === "number" && ! b){var identical = 1; break a;}
}
else
switch(a[0]){
case 0:
if(typeof b !== "number" && 0 === b[0]){
var y = b[1], x = a[1], identical = x === y ? 1 : 0;
break a;
}
break;
case 1:
var x$0 = a[1];
if(typeof b !== "number")
switch(b[0]){
case 1:
var y$0 = b[1], identical = x$0 === y$0 ? 1 : 0; break a;
case 2:
var y$1 = b[1], identical = x$0 === y$1 ? 1 : 0; break a;
}
break;
case 2:
var x$1 = a[1];
if(typeof b !== "number")
switch(b[0]){
case 1:
var y$2 = b[1], identical = x$1 === y$2 ? 1 : 0; break a;
case 2:
var y$3 = b[1], identical = x$1 === y$3 ? 1 : 0; break a;
}
break;
case 3:
if(typeof b !== "number" && 3 === b[0]){
var y$4 = b[1], x$2 = a[1], identical = x$2 === y$4 ? 1 : 0;
break a;
}
break;
}
var identical = a === b ? 1 : 0;
}
return [0, identical];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "identical?: 2 args"], 1);
});
register
("make-spread",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 7 === a[0] && ! args[2]){
var
d = a[1],
pairs =
Stdlib_Hashtbl[14].call
(null, function(k, v, acc){return [0, [0, k, v], acc];}, d, 0);
return [18, pairs];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-spread: 1 dict"], 1);
});
var aw = [0, 0], ax = [0, 1];
register
("spread?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 18 === a[0]){if(args[2]) break a; return ax;}
if(! args[2]) return aw;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "spread?: 1 arg"], 1);
});
register
("spread-attrs",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 18 === a[0] && ! args[2]){
var pairs = a[1], d = Sx_types[105].call(null, 0);
Stdlib_List[18].call
(null,
function(param){
var v = param[2], k = param[1];
return Sx_types[108].call(null, d, k, v);
},
pairs);
return [7, d];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "spread-attrs: 1 spread"], 1);
});
function call_any(f, args){
if(typeof f !== "number" && 15 === f[0]){
var fn = f[2];
return caml_call1(fn, args);
}
var a = caml_call2(sx_call_fn[1], f, args);
return caml_call1(sx_trampoline_fn[1], a);
}
var ay = [6, 0];
register
("map",
function(args){
a:
if(args){
var b = args[2];
if(b){
var a = b[1], f = args[1];
if(typeof a === "number"){
if(0 === a && ! b[2]) return ay;
}
else{
switch(a[0]){
case 6:
var items = a[1]; break;
case 21:
var items = a[1][1]; break;
default: break a;
}
if(! b[2])
return [6,
Stdlib_List[20].call
(null, function(x){return call_any(f, [0, x, 0]);}, items)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "map: expected (fn list)"], 1);
});
var az = [6, 0];
register
("map-indexed",
function(args){
a:
if(args){
var b = args[2];
if(b){
var a = b[1], f = args[1];
if(typeof a === "number"){
if(0 === a && ! b[2]) return az;
}
else{
switch(a[0]){
case 6:
var items = a[1]; break;
case 21:
var items = a[1][1]; break;
default: break a;
}
if(! b[2])
return [6,
Stdlib_List[21].call
(null,
function(i, x){return call_any(f, [0, [1, i], [0, x, 0]]);},
items)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "map-indexed: expected (fn list)"], 1);
});
var aA = [6, 0];
register
("filter",
function(args){
a:
if(args){
var b = args[2];
if(b){
var a = b[1], f = args[1];
if(typeof a === "number"){
if(0 === a && ! b[2]) return aA;
}
else{
switch(a[0]){
case 6:
var items = a[1]; break;
case 21:
var items = a[1][1]; break;
default: break a;
}
if(! b[2])
return [6,
Stdlib_List[44].call
(null,
function(x){
var a = call_any(f, [0, x, 0]);
return Sx_types[67].call(null, a);
},
items)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "filter: expected (fn list)"], 1);
});
var
cst$2 = ", ",
aB =
[0,
[11,
"for-each: expected (fn list), got (",
[2, 0, [11, ") ", [4, 0, 0, 0, [11, cst_args, 0]]]]],
"for-each: expected (fn list), got (%s) %d args"];
register
("for-each",
function(args){
a:
if(args){
var b = args[2];
if(b){
var a = b[1], f = args[1];
if(typeof a === "number"){
if(0 === a && ! b[2]) return 0;
}
else{
switch(a[0]){
case 6:
var items = a[1]; break;
case 21:
var items = a[1][1]; break;
default: break a;
}
if(! b[2]){
Stdlib_List[18].call
(null, function(x){call_any(f, [0, x, 0]); return 0;}, items);
return 0;
}
}
}
}
var
c =
Stdlib_List[20].call
(null, function(v){return Sx_types[57].call(null, v);}, args),
types = Stdlib_String[7].call(null, cst$2, c),
d = Stdlib_List[1].call(null, args),
e = caml_call2(Stdlib_Printf[4].call(null, aB), types, d);
throw caml_maybe_attach_backtrace([0, Sx_types[9], e], 1);
});
register
("reduce",
function(args){
a:
if(args){
var b = args[2];
if(b){
var c = b[2];
if(c){
var a = c[1], init = b[1], f = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
var items = a[1]; break;
case 21:
var items = a[1][1]; break;
default: break a;
}
if(! c[2])
return Stdlib_List[26].call
(null,
function(acc, x){return call_any(f, [0, acc, [0, x, 0]]);},
init,
items);
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "reduce: expected (fn init list)"], 1);
});
var aC = [0, 0], aD = [0, 0];
register
("some",
function(args){
a:
if(args){
var b = args[2];
if(b){
var a = b[1], f = args[1];
if(typeof a === "number"){
if(0 === a && ! b[2]) return aC;
}
else{
switch(a[0]){
case 6:
var items = a[1]; break;
case 21:
var items = a[1][1]; break;
default: break a;
}
if(! b[2]){
var param = items;
for(;;){
if(! param) return aD;
var rest = param[2], x = param[1], result = call_any(f, [0, x, 0]);
if(Sx_types[67].call(null, result)) return result;
param = rest;
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "some: expected (fn list)"], 1);
});
var aE = [0, 1];
register
("every?",
function(args){
a:
if(args){
var b = args[2];
if(b){
var a = b[1], f = args[1];
if(typeof a === "number"){
if(0 === a && ! b[2]) return aE;
}
else{
switch(a[0]){
case 6:
var items = a[1]; break;
case 21:
var items = a[1][1]; break;
default: break a;
}
if(! b[2])
return [0,
Stdlib_List[33].call
(null,
function(x){
var a = call_any(f, [0, x, 0]);
return Sx_types[67].call(null, a);
},
items)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "every?: expected (fn list)"], 1);
});
register
("make-vm-stack",
function(args){
if(args && ! args[2]){
var n = args[1], a = as_int(n);
return [21,
[0, Stdlib_List[11].call(null, a, function(param){return 0;})]];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-vm-stack: expected (size)"], 1);
});
register
("vm-stack-get",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 21 === a[0]){
var b = args[2];
if(b && ! b[2]){
var n = b[1], r = a[1], c = as_int(n);
return Stdlib_List[8].call(null, r[1], c);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vm-stack-get: expected (stack idx)"], 1);
});
register
("vm-stack-set!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 21 === a[0]){
var b = args[2];
if(b){
var c = b[2];
if(c && ! c[2]){
var v = c[1], n = b[1], r = a[1], i = as_int(n);
r[1] =
Stdlib_List[21].call
(null, function(j, x){return j === i ? v : x;}, r[1]);
return 0;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vm-stack-set!: expected (stack idx val)"], 1);
});
register
("vm-stack-length",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 21 === a[0] && ! args[2]){
var r = a[1];
return [1, Stdlib_List[1].call(null, r[1])];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vm-stack-length: expected (stack)"], 1);
});
register
("vm-stack-copy!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 21 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 21 === c[0]){
var d = b[2];
if(d && ! d[2]){
var
n = d[1],
dst = c[1],
src = a[1],
count = as_int(n),
src_items = src[1];
dst[1] =
Stdlib_List[21].call
(null,
function(i, x){
return i < count ? Stdlib_List[8].call(null, src_items, i) : x;
},
dst[1]);
return 0;
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vm-stack-copy!: expected (src dst count)"], 1);
});
var aF = [0, 0];
register
("primitive?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var name = a[1];
return [0, Stdlib_Hashtbl[9].call(null, primitives, name)];
}
}
return aF;
});
var aG = [0, 0], aH = [0, 1];
register
("lambda?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 8 === a[0] && ! args[2]) return aH;
}
return aG;
});
var aI = [0, 0], aJ = [0, 1];
register
("island?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 10 === a[0] && ! args[2]) return aJ;
}
return aI;
});
var aK = [0, 0];
register
("record?",
function(args){
if(args && ! args[2]){
var v = args[1];
return Sx_types[96].call(null, v);
}
return aK;
});
register
("make-rtd",
function(args){
if(args){
var a = args[2];
if(a){
var b = a[2];
if(b && ! b[2]){
var ctor_params = b[1], fields = a[1], name = args[1];
return Sx_types[91].call(null, name, fields, ctor_params);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-rtd: expected (name fields ctor-params)"],
1);
});
register
("make-record",
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var arg_list = a[1], uid = args[1];
return Sx_types[92].call(null, uid, arg_list);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-record: expected (uid args-list)"], 1);
});
register
("record-ref",
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var idx = a[1], v = args[1];
return Sx_types[93].call(null, v, idx);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "record-ref: expected (record index)"], 1);
});
register
("record-set!",
function(args){
if(args){
var a = args[2];
if(a){
var b = a[2];
if(b && ! b[2]){
var nv = b[1], idx = a[1], v = args[1];
return Sx_types[94].call(null, v, idx, nv);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "record-set!: expected (record index value)"],
1);
});
var aL = [0, 0];
register
("record-type?",
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var uid = a[1], v = args[1];
return Sx_types[95].call(null, v, uid);
}
}
return aL;
});
register
("make-record-constructor",
function(args){
if(args && ! args[2]){
var uid = args[1];
return Sx_types[97].call(null, uid);
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-record-constructor: expected (uid)"], 1);
});
register
("make-record-predicate",
function(args){
if(args && ! args[2]){
var uid = args[1];
return Sx_types[98].call(null, uid);
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-record-predicate: expected (uid)"], 1);
});
register
("make-record-accessor",
function(args){
if(args && ! args[2]){
var idx = args[1];
return Sx_types[99].call(null, idx);
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-record-accessor: expected (index)"], 1);
});
register
("make-record-mutator",
function(args){
if(args && ! args[2]){
var idx = args[1];
return Sx_types[100].call(null, idx);
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-record-mutator: expected (index)"], 1);
});
register
("make-parameter",
function(args){
if(args){
var match = args[2], init = args[1], cst_param = "__param_";
if(! match){
var uid$0 = Sx_types[19][1];
Sx_types[19][1]++;
var b = Stdlib[33].call(null, uid$0);
return [28, [0, Stdlib[28].call(null, cst_param, b), init, 0]];
}
if(! match[2]){
var converter = match[1], uid = Sx_types[19][1];
Sx_types[19][1]++;
if(typeof converter === "number" || ! (15 === converter[0]))
var converted = init;
else
var f = converter[2], converted = caml_call1(f, [0, init, 0]);
var a = Stdlib[33].call(null, uid);
return [28,
[0,
Stdlib[28].call(null, cst_param, a),
converted,
[0, converter]]];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-parameter: expected 1-2 args"], 1);
});
var aM = [0, 0], aN = [0, 0], aO = [0, 1];
register
("parameter?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 28 === a[0]){if(args[2]) break a; return aO;}
if(! args[2]) return aN;
}
return aM;
});
register
("parameter-uid",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 28 === a[0] && ! args[2]){var p = a[1]; return [3, p[1]];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "parameter-uid: expected parameter"], 1);
});
register
("parameter-default",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 28 === a[0] && ! args[2]){var p = a[1]; return p[2];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "parameter-default: expected parameter"], 1);
});
register
("parameter-converter",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 28 === a[0] && ! args[2]){
var p = a[1], match = p[3];
if(! match) return 0;
var c = match[1];
return c;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "parameter-converter: expected parameter"], 1);
});
register
("make-vector",
function(args){
if(args){
var match = args[2], n = args[1];
if(! match) return [29, caml_make_vect(as_int(n), 0)];
if(! match[2]){
var fill = match[1];
return [29, caml_make_vect(as_int(n), fill)];
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"make-vector: expected (length) or (length fill)"],
1);
});
register
("vector",
function(args){return [29, Stdlib_Array[11].call(null, args)];});
var aP = [0, 0], aQ = [0, 1];
register
("vector?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 29 === a[0]){if(args[2]) break a; return aQ;}
if(! args[2]) return aP;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "vector?: 1 arg"], 1);
});
register
("vector-length",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 29 === a[0] && ! args[2]){var arr = a[1]; return [1, arr.length - 1];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vector-length: expected vector"], 1);
});
var
cst_out_of_bounds_length = " out of bounds (length ",
aR =
[0,
[11,
"vector-ref: index ",
[4,
0,
0,
0,
[11, cst_out_of_bounds_length, [4, 0, 0, 0, [12, 41, 0]]]]],
"vector-ref: index %d out of bounds (length %d)"];
register
("vector-ref",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 29 === a[0]){
var b = args[2];
if(b && ! b[2]){
var
n = b[1],
arr = a[1],
i = as_int(n),
c = i < 0,
d = c || arr.length - 1 <= i;
if(! d) return caml_check_bound(arr, i)[i + 1];
var
e = caml_call2(Stdlib_Printf[4].call(null, aR), i, arr.length - 1);
throw caml_maybe_attach_backtrace([0, Sx_types[9], e], 1);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vector-ref: expected (vector index)"], 1);
});
var
aS =
[0,
[11,
"vector-set!: index ",
[4,
0,
0,
0,
[11, cst_out_of_bounds_length, [4, 0, 0, 0, [12, 41, 0]]]]],
"vector-set!: index %d out of bounds (length %d)"];
register
("vector-set!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 29 === a[0]){
var b = args[2];
if(b){
var c = b[2];
if(c && ! c[2]){
var
v = c[1],
n = b[1],
arr = a[1],
i = as_int(n),
d = i < 0,
e = d || arr.length - 1 <= i;
if(e){
var
f = caml_call2(Stdlib_Printf[4].call(null, aS), i, arr.length - 1);
throw caml_maybe_attach_backtrace([0, Sx_types[9], f], 1);
}
caml_check_bound(arr, i)[i + 1] = v;
return 0;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vector-set!: expected (vector index value)"],
1);
});
register
("vector->list",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 29 === a[0] && ! args[2]){
var arr = a[1];
return [6, Stdlib_Array[10].call(null, arr)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vector->list: expected vector"], 1);
});
register
("list->vector",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 6:
if(! args[2]){
var l = a[1];
return [29, Stdlib_Array[11].call(null, l)];
}
break;
case 21:
var l$0 = a[1][1];
if(! args[2]) return [29, Stdlib_Array[11].call(null, l$0)];
break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "list->vector: expected list"], 1);
});
register
("vector-fill!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 29 === a[0]){
var b = args[2];
if(b && ! b[2]){
var v = b[1], arr = a[1];
Stdlib_Array[8].call(null, arr, 0, arr.length - 1, v);
return 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vector-fill!: expected (vector value)"], 1);
});
register
("vector-copy",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 29 === a[0]){
var match = args[2], arr = a[1];
if(! match) return [29, Stdlib_Array[7].call(null, arr)];
var match$0 = match[2], s = match[1];
if(! match$0){
var start$0 = as_int(s), len$0 = arr.length - 1 - start$0 | 0;
return 0 < len$0
? [29, Stdlib_Array[6].call(null, arr, start$0, len$0)]
: [29, [0]];
}
if(! match$0[2]){
var
e = match$0[1],
start = as_int(s),
b = as_int(e),
stop = Stdlib[16].call(null, b, arr.length - 1),
len = stop - start | 0;
return 0 < len
? [29, Stdlib_Array[6].call(null, arr, start, len)]
: [29, [0]];
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"vector-copy: expected (vector) or (vector start) or (vector start end)"],
1);
});
register
("make-string-buffer",
function(param){return [30, Stdlib_Buffer[1].call(null, 64)];});
var aT = [0, 0], aU = [0, 1];
register
("string-buffer?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 30 === a[0]){if(args[2]) break a; return aU;}
if(! args[2]) return aT;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "string-buffer?: expected 1 arg"], 1);
});
register
("string-buffer-append!",
function(args){
a:
if(args){
var b = args[1];
if(typeof b !== "number" && 30 === b[0]){
var a = args[2];
if(a){
var v = a[1], buf = b[1];
if(typeof v !== "number" && 3 === v[0]){
if(a[2]) break a;
var s = v[1];
Stdlib_Buffer[16].call(null, buf, s);
return 0;
}
if(! a[2]){
var
c = Sx_types[57].call(null, v),
d =
Stdlib[28].call
(null, "string-buffer-append!: expected string, got ", c);
throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1);
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"string-buffer-append!: expected (buffer string)"],
1);
});
register
("string-buffer->string",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 30 === a[0] && ! args[2]){
var buf = a[1];
return [3, Stdlib_Buffer[2].call(null, buf)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "string-buffer->string: expected (buffer)"], 1);
});
register
("string-buffer-length",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 30 === a[0] && ! args[2]){
var buf = a[1];
return [1, Stdlib_Buffer[7].call(null, buf)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "string-buffer-length: expected (buffer)"], 1);
});
var cap_stack = [0, 0];
register
("with-capabilities",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 6:
var b = args[2];
if(b && ! b[2]){
var
body = b[1],
caps = a[1],
cap_set =
Stdlib_List[23].call
(null,
function(v){
if(typeof v !== "number" && v[0] - 3 >>> 0 < 3){var s = v[1]; return [0, s];}
return 0;
},
caps),
prev = cap_stack[1];
cap_stack[1] = cap_set;
if(typeof body !== "number")
switch(body[0]){
case 8:
case 15:
case 24:
try{var result = caml_call2(Sx_types[7][1], body, 0);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
cap_stack[1] = prev;
throw caml_maybe_attach_backtrace(exn, 0);
}
cap_stack[1] = prev;
return result;
}
cap_stack[1] = prev;
return body;
}
break;
case 21:
var caps$0 = a[1][1], c = args[2];
if(c && ! c[2]){
var
body$0 = c[1],
cap_set$0 =
Stdlib_List[23].call
(null,
function(v){
if(typeof v !== "number" && v[0] - 3 >>> 0 < 3){var s = v[1]; return [0, s];}
return 0;
},
caps$0),
prev$0 = cap_stack[1];
cap_stack[1] = cap_set$0;
if(typeof body$0 !== "number")
switch(body$0[0]){
case 8:
case 15:
case 24:
try{var result$0 = caml_call2(Sx_types[7][1], body$0, 0);}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
cap_stack[1] = prev$0;
throw caml_maybe_attach_backtrace(exn$0, 0);
}
cap_stack[1] = prev$0;
return result$0;
}
cap_stack[1] = prev$0;
return body$0;
}
break;
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"with-capabilities: expected (cap-list body-fn)"],
1);
});
register
("current-capabilities",
function(args){
return 0 === cap_stack[1]
? 0
: [6,
Stdlib_List[20].call
(null, function(s){return [3, s];}, cap_stack[1])];
});
var aV = [0, 1], aW = [0, 1];
register
("has-capability?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && a[0] - 3 >>> 0 < 3 && ! args[2]){
var cap = a[1];
return 0 === cap_stack[1]
? aW
: [0, Stdlib_List[37].call(null, cap, cap_stack[1])];
}
}
return aV;
});
var
aX =
[0,
[11,
"Capability '",
[2,
0,
[11, "' not available. Current capabilities: [", [2, 0, [12, 93, 0]]]]],
"Capability '%s' not available. Current capabilities: [%s]"];
register
("require-capability!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && a[0] - 3 >>> 0 < 3 && ! args[2]){
var cap = a[1];
if(0 === cap_stack[1]) return 0;
if(Stdlib_List[37].call(null, cap, cap_stack[1])) return 0;
var
b = Stdlib_String[7].call(null, cst$2, cap_stack[1]),
c = caml_call2(Stdlib_Printf[4].call(null, aX), cap, b);
throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1);
}
}
return 0;
});
register
("capability-restricted?",
function(args){return [0, 0 !== cap_stack[1] ? 1 : 0];});
var aY = [0, 0], aZ = [0, 1], a0 = [0, 1];
register
("is-else-clause?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 0:
if(a[1] && ! args[2]) return aZ; break;
case 5:
if(a[1] === "else" && ! args[2]) return a0; break;
}
}
return aY;
});
var a1 = [0, 0];
register
("cond-scheme?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 6 === a[0] && ! args[2]){
var clauses = a[1];
return [0,
Stdlib_List[33].call
(null,
function(c){
if(typeof c !== "number" && 6 === c[0]){
var l = c[1];
return 2 === Stdlib_List[1].call(null, l) ? 1 : 0;
}
return 0;
},
clauses)];
}
}
return a1;
});
var a2 = [0, 0], a3 = [0, 1], a4 = [0, 1];
register
("component?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]) return a3; break;
case 10:
if(! args[2]) return a4; break;
}
}
return a2;
});
register
("lambda-closure",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 8 === a[0] && ! args[2]){var l = a[1]; return [20, l[3]];}
}
return 0;
});
register
("component-closure",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){var c = a[1]; return [20, c[5]];} break;
case 10:
if(! args[2]){var i = a[1]; return [20, i[5]];} break;
}
}
return 0;
});
var a5 = [0, 0];
register
("component-has-children?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){var c = a[1]; return [0, c[3]];} break;
case 10:
if(! args[2]){var i = a[1]; return [0, i[3]];} break;
}
}
return a5;
});
register
("component-name",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){var c = a[1]; return [3, c[1]];} break;
case 10:
if(! args[2]){var i = a[1]; return [3, i[1]];} break;
}
}
return 0;
});
var a6 = [6, 0];
register
("component-params",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){
var c = a[1];
return [6,
Stdlib_List[20].call
(null, function(s){return [3, s];}, c[2])];
}
break;
case 10:
if(! args[2]){
var i = a[1];
return [6,
Stdlib_List[20].call
(null, function(s){return [3, s];}, i[2])];
}
break;
}
}
return a6;
});
register
("component-body",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){var c = a[1]; return c[4];} break;
case 10:
if(! args[2]){var i = a[1]; return i[4];} break;
}
}
return 0;
});
register
("component-file",
function(args){
if(args && ! args[2]){
var v = args[1];
return Sx_types[76].call(null, v);
}
return 0;
});
register
("component-set-file!",
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var f = a[1], v = args[1];
return Sx_types[77].call(null, v, f);
}
}
return 0;
});
var a7 = [0, 0], a8 = [0, 1];
register
("macro?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 11 === a[0] && ! args[2]) return a8;
}
return a7;
});
register
("for-each-indexed",
function(args){
a:
if(args){
var b = args[2];
if(b){
var a = b[1], f = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
var items = a[1]; break;
case 21:
var items = a[1][1]; break;
default: break a;
}
if(! b[2]){
Stdlib_List[19].call
(null,
function(i, x){call_any(f, [0, [2, i], [0, x, 0]]); return 0;},
items);
return 0;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "for-each-indexed: expected (fn list)"], 1);
});
var a9 = [6, 0];
register
("lambda-params",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 8 === a[0] && ! args[2]){
var l = a[1];
return [6,
Stdlib_List[20].call(null, function(s){return [3, s];}, l[1])];
}
}
return a9;
});
register
("lambda-body",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 8 === a[0] && ! args[2]){var l = a[1]; return l[2];}
}
return 0;
});
var a_ = [0, 1];
register
("empty-dict?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 7 === a[0] && ! args[2]){
var d = a[1];
return [0, 0 === Stdlib_Hashtbl[15].call(null, d) ? 1 : 0];
}
}
return a_;
});
register
("make-raw-html",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){var s = a[1]; return [17, s];}
}
return 0;
});
var a$ = [3, cst];
register
("raw-html-content",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 17 === a[0] && ! args[2]){var s = a[1]; return [3, s];}
}
return a$;
});
var cst_VM_undefined = "VM undefined: ";
register
("get-primitive",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var
name = a[1],
match = Stdlib_Hashtbl[7].call(null, primitives, name);
if(match){var fn = match[1]; return [15, name, fn];}
var b = Stdlib[28].call(null, cst_VM_undefined, name);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "get-primitive: expected (name)"], 1);
});
register
("call-primitive",
function(args){
a:
if(args){
var d = args[1];
if(typeof d !== "number" && 3 === d[0]){
var c = args[2];
if(c){
var b = c[1], name = d[1];
if(typeof b === "number"){
if(0 === b && ! c[2]){
var match = Stdlib_Hashtbl[7].call(null, primitives, name);
if(match){var fn = match[1]; return caml_call1(fn, 0);}
var e = Stdlib[28].call(null, cst_VM_undefined, name);
throw caml_maybe_attach_backtrace([0, Sx_types[9], e], 1);
}
}
else{
switch(b[0]){
case 6:
var a = b[1]; break;
case 21:
var a = b[1][1]; break;
default: break a;
}
if(! c[2]){
var match$0 = Stdlib_Hashtbl[7].call(null, primitives, name);
if(match$0){var fn$0 = match$0[1]; return caml_call1(fn$0, a);}
var f = Stdlib[28].call(null, cst_VM_undefined, name);
throw caml_maybe_attach_backtrace([0, Sx_types[9], f], 1);
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "call-primitive: expected (name args-list)"],
1);
});
register
("get-cookie",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var
name = a[1],
match = Stdlib_Hashtbl[7].call(null, request_cookies, name);
if(! match) return 0;
var v = match[1];
return [3, v];
}
}
return 0;
});
register("set-cookie", function(args){return 0;});
var
cst_depth = " depth=",
cst$1 = "->",
cst_scope_push = "scope-push!",
ba =
[0,
[11,
"PUSH ",
[2, 0, [11, cst_depth, [4, 0, 0, 0, [11, cst$1, [4, 0, 0, 0, 0]]]]]],
"PUSH %s depth=%d->%d"];
register
(cst_scope_push,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b && ! b[2]){
var value = b[1], name = a[1];
try{
var f = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = f;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(scope_trace[1]){
var
c = scope_log[1],
d = Stdlib_List[1].call(null, stack) + 1 | 0,
e = Stdlib_List[1].call(null, stack);
scope_log[1] =
[0, caml_call3(Stdlib_Printf[4].call(null, ba), name, e, d), c];
}
Stdlib_Hashtbl[11].call(null, scope_stacks, name, [0, value, stack]);
return 0;
}
}
}
return 0;
});
var
cst_scope_pop = "scope-pop!",
bb =
[0,
[11,
"POP ",
[2, 0, [11, cst_depth, [4, 0, 0, 0, [11, cst$1, [4, 0, 0, 0, 0]]]]]],
"POP %s depth=%d->%d"];
register
(cst_scope_pop,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var name = a[1];
try{
var f = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = f;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(scope_trace[1]){
var
b = scope_log[1],
c = Stdlib_List[1].call(null, stack) - 1 | 0,
d = Stdlib[17].call(null, 0, c),
e = Stdlib_List[1].call(null, stack);
scope_log[1] =
[0, caml_call3(Stdlib_Printf[4].call(null, bb), name, e, d), b];
}
if(stack){
var rest = stack[2];
Stdlib_Hashtbl[11].call(null, scope_stacks, name, rest);
}
return 0;
}
}
return 0;
});
var
cst_found = " found=",
bc =
[0,
[11,
"PEEK ",
[2, 0, [11, cst_depth, [4, 0, 0, 0, [11, cst_found, [9, 0, 0]]]]]],
"PEEK %s depth=%d found=%b"];
register
("scope-peek",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var name = a[1];
try{
var d = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = d;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(scope_trace[1]){
var b = scope_log[1], c = Stdlib_List[1].call(null, stack);
scope_log[1] =
[0,
caml_call3
(Stdlib_Printf[4].call(null, bc), name, c, 0 !== stack ? 1 : 0),
b];
}
if(! stack) return 0;
var v = stack[1];
return v;
}
}
return 0;
});
var
cst_context = "context",
bd =
[0,
[11,
"CTX ",
[2, 0, [11, cst_depth, [4, 0, 0, 0, [11, cst_found, [9, 0, 0]]]]]],
"CTX %s depth=%d found=%b"];
register
(cst_context,
function(args){
if(args){
var match = args[1];
if(typeof match !== "number" && 3 === match[0]){
var rest = args[2], name = match[1];
try{
var c = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = c;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(scope_trace[1]){
var a = scope_log[1], b = Stdlib_List[1].call(null, stack);
scope_log[1] =
[0,
caml_call3
(Stdlib_Printf[4].call(null, bd), name, b, 0 !== stack ? 1 : 0),
a];
}
if(stack){var v = stack[1]; return v;}
if(! rest) return 0;
var default_val = rest[1];
return default_val;
}
}
return 0;
});
var
be = [3, "bad args"],
bf =
[0,
[11,
"name=",
[2,
0,
[11,
" stack_len=",
[4, 0, 0, 0, [11, " all_keys=[", [2, 0, [12, 93, 0]]]]]]],
"name=%s stack_len=%d all_keys=[%s]"];
register
("context-debug",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var name = a[1];
try{
var d = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = d;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
var
all_keys =
Stdlib_Hashtbl[14].call
(null,
function(k, param, acc){return [0, k, acc];},
scope_stacks,
0),
b = Stdlib_String[7].call(null, ",", all_keys),
c = Stdlib_List[1].call(null, stack);
return [3, caml_call3(Stdlib_Printf[4].call(null, bf), name, c, b)];
}
}
return be;
});
register
("collect!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b && ! b[2]){
var value = b[1], name = a[1];
try{
var d = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = d;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(stack){
var match = stack[1];
if(typeof match !== "number" && 6 === match[0]){
var rest = stack[2], items = match[1];
if(1 - Stdlib_List[37].call(null, value, items)){
var
c = [0, [6, Stdlib[37].call(null, items, [0, value, 0])], rest];
Stdlib_Hashtbl[11].call(null, scope_stacks, name, c);
}
}
}
else
Stdlib_Hashtbl[11].call
(null, scope_stacks, name, [0, [6, [0, value, 0]], 0]);
return 0;
}
}
}
return 0;
});
var cst_collected = "collected", bg = [6, 0], bh = [6, 0];
register
(cst_collected,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var name = a[1];
try{
var b = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = b;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(stack){
var match = stack[1];
if(typeof match !== "number" && 6 === match[0]){var items = match[1]; return [6, items];}
}
return bh;
}
}
return bg;
});
var
cst_clear_collected = "clear-collected!",
bi = [6, 0],
bj = [0, [6, 0], 0];
register
(cst_clear_collected,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var name = a[1];
try{
var b = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = b;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(stack){
var rest = stack[2];
Stdlib_Hashtbl[11].call(null, scope_stacks, name, [0, bi, rest]);
}
else
Stdlib_Hashtbl[11].call(null, scope_stacks, name, bj);
return 0;
}
}
return 0;
});
register
("provide-reactive!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b && ! b[2]){
var value = b[1], name = a[1];
try{
var c = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = c;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
Stdlib_Hashtbl[11].call
(null, scope_stacks, name, [0, [16, [0, value, 0, 0]], stack]);
return 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "provide-reactive!: expected (name value)"], 1);
});
register
("provide-pop-reactive!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var name = a[1];
try{
var b = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = b;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(stack){
var rest = stack[2];
Stdlib_Hashtbl[11].call(null, scope_stacks, name, rest);
}
return 0;
}
}
return 0;
});
var
bk =
[0,
[11, "provide-set!: '", [2, 0, [11, "' is not a reactive provide", 0]]],
"provide-set!: '%s' is not a reactive provide"];
register
("provide-set!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b && ! b[2]){
var new_value = b[1], name = a[1];
try{
var d = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = d;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(stack){
var match = stack[1];
if(typeof match !== "number" && 16 === match[0]){
var sig = match[1];
sig[1] = new_value;
Stdlib_List[18].call
(null, function(sub){return caml_call1(sub, 0);}, sig[2]);
return 0;
}
}
var c = caml_call1(Stdlib_Printf[4].call(null, bk), name);
throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "provide-set!: expected (name new-value)"], 1);
});
register
("peek",
function(args){
if(args){
var match = args[1];
if(typeof match !== "number" && 3 === match[0]){
var name = match[1];
try{
var a = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(! stack) return 0;
var v = stack[1];
if(typeof v !== "number" && 16 === v[0]){var sig = v[1]; return sig[1];}
return v;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "peek: expected (name)"], 1);
});
var tracking_active = [0, 0], tracking_deps = [0, 0];
register
("tracking-start!",
function(args){tracking_active[1] = 1; tracking_deps[1] = 0; return 0;});
register
("tracking-stop!",
function(args){
tracking_active[1] = 0;
var deps = tracking_deps[1];
tracking_deps[1] = 0;
return [6, deps];
});
register
("tracking-active?", function(args){return [0, tracking_active[1]];});
Stdlib_Hashtbl[10].call(null, primitives, cst_context);
register
(cst_context,
function(args){
if(args){
var match = args[1];
if(typeof match !== "number" && 3 === match[0]){
var rest = args[2], name = match[1];
try{
var a = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(! stack){
if(! rest) return 0;
var default_val = rest[1];
return default_val;
}
var v = stack[1];
if(typeof v !== "number" && 16 === v[0]){
var sig = v[1];
if
(tracking_active[1]
&& 1 - Stdlib_List[38].call(null, [16, sig], tracking_deps[1]))
tracking_deps[1] = [0, [16, sig], tracking_deps[1]];
return sig[1];
}
return v;
}
}
return 0;
});
register
("tracking-register-scope!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var name = a[1];
if(! tracking_active[1]) return 0;
try{
var b = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = b;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(stack){
var match = stack[1];
if(typeof match !== "number" && 16 === match[0]){
var sig = match[1];
if(1 - Stdlib_List[38].call(null, [16, sig], tracking_deps[1]))
tracking_deps[1] = [0, [16, sig], tracking_deps[1]];
return 0;
}
}
return 0;
}
}
return 0;
});
register
("deref",
function(args){
a:
if(args){
var v = args[1];
if(typeof v !== "number" && 16 === v[0]){
if(args[2]) break a;
var sig = v[1];
if
(tracking_active[1]
&& 1 - Stdlib_List[38].call(null, [16, sig], tracking_deps[1]))
tracking_deps[1] = [0, [16, sig], tracking_deps[1]];
return sig[1];
}
if(! args[2]) return v;
}
return 0;
});
register
("bind",
function(args){
a:
if(args){
var b = args[2], body_fn = args[1];
if(b && b[2]) break a;
b:
{
if(args){
var a = args[2];
if(a && ! a[2]){var u = a[1], update_fn = [0, u]; break b;}
}
var update_fn = 0;
}
var
disposers = [0, 0],
run_tracked =
function(param){
Stdlib_List[18].call
(null, function(d){return caml_call1(d, 0);}, disposers[1]);
disposers[1] = 0;
tracking_active[1] = 1;
tracking_deps[1] = 0;
var
result = caml_call2(Sx_types[7][1], body_fn, 0),
deps = tracking_deps[1];
tracking_active[1] = 0;
tracking_deps[1] = 0;
Stdlib_List[18].call
(null,
function(dep){
if(typeof dep !== "number" && 16 === dep[0]){
var
sig = dep[1],
subscriber =
function(param){
var new_result = run_tracked(0);
if(! update_fn) return 0;
var f = update_fn[1];
caml_call2(Sx_types[7][1], f, [6, [0, new_result, 0]]);
return 0;
};
sig[2] = [0, subscriber, sig[2]];
disposers[1] =
[0,
function(param){
sig[2] =
Stdlib_List[44].call
(null,
function(s){return s !== subscriber ? 1 : 0;},
sig[2]);
return 0;
},
disposers[1]];
return 0;
}
return 0;
},
deps);
return result;
};
return run_tracked(0);
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"bind: expected (body-fn) or (body-fn update-fn)"],
1);
});
var cst_scope_emit = "scope-emit!";
register
(cst_scope_emit,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b && ! b[2]){
var value = b[1], name = a[1];
try{
var d = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = d;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(stack){
var match = stack[1];
if(typeof match === "number"){
if(0 === match){
var rest = stack[2];
Stdlib_Hashtbl[11].call
(null, scope_stacks, name, [0, [6, [0, value, 0]], rest]);
}
}
else if(6 === match[0]){
var
rest$0 = stack[2],
items = match[1],
c = [0, [6, Stdlib[37].call(null, items, [0, value, 0])], rest$0];
Stdlib_Hashtbl[11].call(null, scope_stacks, name, c);
}
}
else
Stdlib_Hashtbl[11].call
(null, scope_stacks, name, [0, [6, [0, value, 0]], 0]);
return 0;
}
}
}
return 0;
});
register
("emit!",
function(args){
var match = Stdlib_Hashtbl[7].call(null, primitives, cst_scope_emit);
if(! match) return 0;
var fn = match[1];
return caml_call1(fn, args);
});
var cst_emitted = "emitted", bl = [6, 0], bm = [6, 0];
register
(cst_emitted,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var name = a[1];
try{
var b = Stdlib_Hashtbl[6].call(null, scope_stacks, name), stack = b;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var stack = 0;
}
if(stack){
var match = stack[1];
if(typeof match !== "number" && 6 === match[0]){var items = match[1]; return [6, items];}
}
return bm;
}
}
return bl;
});
var bn = [6, 0];
register
("scope-emitted",
function(args){
var match = Stdlib_Hashtbl[7].call(null, primitives, cst_emitted);
if(! match) return bn;
var fn = match[1];
return caml_call1(fn, args);
});
var bo = [6, 0];
register
("scope-collected",
function(args){
var match = Stdlib_Hashtbl[7].call(null, primitives, cst_collected);
if(! match) return bo;
var fn = match[1];
return caml_call1(fn, args);
});
register
("scope-clear-collected!",
function(args){
var
match = Stdlib_Hashtbl[7].call(null, primitives, cst_clear_collected);
if(! match) return 0;
var fn = match[1];
return caml_call1(fn, args);
});
register
("provide-push!",
function(args){
var match = Stdlib_Hashtbl[7].call(null, primitives, cst_scope_push);
if(! match) return 0;
var fn = match[1];
return caml_call1(fn, args);
});
register
("provide-pop!",
function(args){
var match = Stdlib_Hashtbl[7].call(null, primitives, cst_scope_pop);
if(! match) return 0;
var fn = match[1];
return caml_call1(fn, args);
});
register
("hs-safe-call",
function(args){
if(args && ! args[2]){
var thunk = args[1];
try{var a = caml_call2(Sx_types[7][1], thunk, 0); return a;}
catch(exn){return 0;}
}
return 0;
});
var
regex_table = Stdlib_Hashtbl[1].call(null, 0, 32),
cst_id = "id",
bp = [0, 1];
function make_regex_value(id, source, flags){
var d = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, d, "__regex__", bp);
Stdlib_Hashtbl[11].call(null, d, cst_id, [2, id]);
Stdlib_Hashtbl[11].call(null, d, "source", [3, source]);
Stdlib_Hashtbl[11].call(null, d, "flags", [3, flags]);
return [7, d];
}
function regex_of_value(param){
if(typeof param !== "number" && 7 === param[0]){
var d = param[1], match = Stdlib_Hashtbl[7].call(null, d, cst_id);
if(match){
var match$0 = match[1];
if(typeof match$0 !== "number" && 2 === match$0[0]){
var
n = match$0[1],
match$1 = Stdlib_Hashtbl[7].call(null, regex_table, n | 0);
if(! match$1)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex: handle not found"], 1);
var r = match$1[1];
return r;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex: missing id"], 1);
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex: expected regex dict"], 1);
}
var cst_groups = "groups", cst_input = "input", cst_match = "match";
function group_to_dict(g, input){
var
d = Stdlib_Hashtbl[1].call(null, 0, 4),
e = [3, caml_call2(Re[1][1], g, 0)];
Stdlib_Hashtbl[11].call(null, d, cst_match, e);
var f = [2, caml_call2(Re[1][5], g, 0)];
Stdlib_Hashtbl[11].call(null, d, "index", f);
Stdlib_Hashtbl[11].call(null, d, cst_input, [3, input]);
var count = caml_call1(Re[1][12], g), b = count - 1 | 0, a = 0;
if(b < 1)
var groups$0 = a;
else{
var groups = a, i = b;
for(;;){
try{var j = caml_call2(Re[1][1], g, i), s = j;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var s = cst;
}
var c = [0, [3, s], groups], h = i - 1 | 0;
if(1 === i){var groups$0 = c; break;}
groups = c;
i = h;
}
}
Stdlib_Hashtbl[11].call(null, d, cst_groups, [6, groups$0]);
return [7, d];
}
var regex_next_id = [0, 0];
register
("regex-compile",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var
match = args[2],
source = a[1],
cst_regex_compile_invalid_patt = "regex-compile: invalid pattern ";
if(! match)
try{
var
h = Re_Pcre[3].call(null, 0, source),
re$0 = Re[2].call(null, h),
id$0 = regex_next_id[1];
regex_next_id[1]++;
Stdlib_Hashtbl[11].call
(null, regex_table, id$0, [0, re$0, source, cst]);
var i = make_regex_value(id$0, source, cst);
return i;
}
catch(exn){
var
g = Stdlib[28].call(null, cst_regex_compile_invalid_patt, source);
throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1);
}
var b = match[1];
if(typeof b !== "number" && 3 === b[0]){
var c = match[2], flags = b[1];
if(c && c[2]) break a;
var opts = [0, 0];
Stdlib_String[30].call
(null,
function(param){
var switcher = param - 105 | 0;
if(10 >= switcher >>> 0)
switch(switcher){
case 0:
opts[1] = [0, 601676297, opts[1]]; return 0;
case 4:
opts[1] = [0, 426394317, opts[1]]; return 0;
case 10:
opts[1] = [0, -459022792, opts[1]]; return 0;
}
return 0;
},
flags);
var opts$0 = opts[1];
try{
var
e = Re_Pcre[3].call(null, [0, opts$0], source),
re = Re[2].call(null, e),
id = regex_next_id[1];
regex_next_id[1]++;
Stdlib_Hashtbl[11].call
(null, regex_table, id, [0, re, source, flags]);
var f = make_regex_value(id, source, flags);
return f;
}
catch(exn){
var
d = Stdlib[28].call(null, cst_regex_compile_invalid_patt, source);
throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1);
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-compile: (source flags)"], 1);
});
register
("regex-test",
function(args){
if(args){
var a = args[2];
if(a){
var b = a[1];
if(typeof b !== "number" && 3 === b[0] && ! a[2]){
var s = b[1], rx = args[1], re = regex_of_value(rx)[1];
return [0, Re[7].call(null, 0, 0, re, s)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-test: (regex string)"], 1);
});
register
("regex-exec",
function(args){
a:
if(args){
var a = args[2];
if(a){
var b = a[1];
if(typeof b !== "number" && 3 === b[0]){
var match = a[2], s = b[1], rx = args[1];
if(match){
var c = match[1];
if(typeof c === "number") break a;
if(2 !== c[0]) break a;
if(match[2]) break a;
var n = c[1], start = n | 0;
}
else
var start = 0;
var re = regex_of_value(rx)[1];
try{
var
g = Re[5].call(null, [0, start], 0, re, s),
d = group_to_dict(g, s);
return d;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8]) return 0;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-exec: (regex string start?)"], 1);
});
register
("regex-match-all",
function(args){
if(args){
var a = args[2];
if(a){
var b = a[1];
if(typeof b !== "number" && 3 === b[0] && ! a[2]){
var
s = b[1],
rx = args[1],
re = regex_of_value(rx)[1],
all = Re[11].call(null, 0, 0, re, s);
return [6,
Stdlib_List[20].call
(null, function(g){return group_to_dict(g, s);}, all)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-match-all: (regex string)"], 1);
});
register
(cst_regex_replace,
function(args){
if(args){
var a = args[2];
if(a){
var b = a[1];
if(typeof b !== "number" && 3 === b[0]){
var c = a[2];
if(c){
var d = c[1];
if(typeof d !== "number" && 3 === d[0] && ! c[2]){
var
replacement = d[1],
s = b[1],
rx = args[1],
match = regex_of_value(rx),
flags = match[3],
re = match[1],
expand =
function(g){
var
buf =
Stdlib_Buffer[1].call
(null, caml_ml_string_length(replacement)),
n = caml_ml_string_length(replacement),
i = 0;
for(;;){
if(i >= n) return Stdlib_Buffer[2].call(null, buf);
var c = caml_string_get(replacement, i);
if(36 === c && (i + 1 | 0) < n){
var
c$0 = caml_string_get(replacement, i + 1 | 0),
switcher = c$0 - 36 | 0;
if(2 >= switcher >>> 0)
switch(switcher){
case 0:
Stdlib_Buffer[12].call(null, buf, 36);
i = i + 2 | 0;
continue;
case 2:
var b = caml_call2(Re[1][1], g, 0);
Stdlib_Buffer[16].call(null, buf, b);
i = i + 2 | 0;
continue;
}
if(48 <= c$0 && 57 >= c$0){
var idx = c$0 - 48 | 0;
try{
var a = caml_call2(Re[1][1], g, idx);
Stdlib_Buffer[16].call(null, buf, a);
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn, 0);
}
i = i + 2 | 0;
continue;
}
Stdlib_Buffer[12].call(null, buf, c);
var i$0 = i + 1 | 0;
i = i$0;
continue;
}
Stdlib_Buffer[12].call(null, buf, c);
var i$1 = i + 1 | 0;
i = i$1;
}
},
global = Stdlib_String[15].call(null, flags, 103);
if(global) return [3, Re[91].call(null, 0, 0, 0, re, expand, s)];
var match$0 = Re[6].call(null, 0, 0, re, s);
if(! match$0) return [3, s];
var
g = match$0[1],
repl = expand(g),
e = caml_call2(Re[1][5], g, 0),
before = Stdlib_String[16].call(null, s, 0, e),
after_start = caml_call2(Re[1][7], g, 0),
after =
Stdlib_String[16].call
(null,
s,
after_start,
caml_ml_string_length(s) - after_start | 0),
f = Stdlib[28].call(null, repl, after);
return [3, Stdlib[28].call(null, before, f)];
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-replace: (regex string replacement)"],
1);
});
register
("regex-replace-fn",
function(args){
if(args){
var a = args[2];
if(a){
var b = a[1];
if(typeof b !== "number" && 3 === b[0]){
var c = a[2];
if(c && ! c[2]){
var
f = c[1],
s = b[1],
rx = args[1],
match = regex_of_value(rx),
flags = match[3],
re = match[1],
call_fn =
function(g){
var
match_str = caml_call2(Re[1][1], g, 0),
count = caml_call1(Re[1][12], g),
b = count - 1 | 0,
a = 0;
if(b < 1)
var groups_before$0 = a;
else{
var groups_before = a, i = b;
for(;;){
try{var h = [3, caml_call2(Re[1][1], g, i)], v$0 = h;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn, 0);
var v$0 = 0;
}
var c = [0, v$0, groups_before], e = i - 1 | 0;
if(1 === i){var groups_before$0 = c; break;}
groups_before = c;
i = e;
}
}
var
idx = [2, caml_call2(Re[1][5], g, 0)],
d =
Stdlib[37].call
(null, groups_before$0, [0, idx, [0, [3, s], 0]]),
all_args = Stdlib[37].call(null, [0, [3, match_str], 0], d),
v = caml_call2(Sx_types[7][1], f, [6, all_args]);
if(typeof v !== "number")
switch(v[0]){
case 2:
var n = v[1]; return Sx_types[34].call(null, n);
case 3:
var s$0 = v[1]; return s$0;
}
return Sx_types[112].call(null, v);
},
global = Stdlib_String[15].call(null, flags, 103);
if(global) return [3, Re[91].call(null, 0, 0, 0, re, call_fn, s)];
var match$0 = Re[6].call(null, 0, 0, re, s);
if(! match$0) return [3, s];
var
g = match$0[1],
repl = call_fn(g),
d = caml_call2(Re[1][5], g, 0),
before = Stdlib_String[16].call(null, s, 0, d),
after_start = caml_call2(Re[1][7], g, 0),
after =
Stdlib_String[16].call
(null,
s,
after_start,
caml_ml_string_length(s) - after_start | 0),
e = Stdlib[28].call(null, repl, after);
return [3, Stdlib[28].call(null, before, e)];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-replace-fn: (regex string fn)"], 1);
});
register
(cst_regex_split,
function(args){
if(args){
var a = args[2];
if(a){
var b = a[1];
if(typeof b !== "number" && 3 === b[0] && ! a[2]){
var
s = b[1],
rx = args[1],
re = regex_of_value(rx)[1],
c = Re[17].call(null, 0, 0, re, s);
return [6,
Stdlib_List[20].call(null, function(x){return [3, x];}, c)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-split: (regex string)"], 1);
});
register
("regex-source",
function(args){
if(args && ! args[2]){
var rx = args[1], source = regex_of_value(rx)[2];
return [3, source];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-source: (regex)"], 1);
});
register
("regex-flags",
function(args){
if(args && ! args[2]){
var rx = args[1], flags = regex_of_value(rx)[3];
return [3, flags];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regex-flags: (regex)"], 1);
});
function make_regexp_value(source, flags){
var opts = [0, 0];
Stdlib_String[30].call
(null,
function(param){
var switcher = param - 105 | 0;
if(10 >= switcher >>> 0)
switch(switcher){
case 0:
opts[1] = [0, 601676297, opts[1]]; return 0;
case 4:
opts[1] = [0, 426394317, opts[1]]; return 0;
case 10:
opts[1] = [0, -459022792, opts[1]]; return 0;
}
return 0;
},
flags);
var opts$0 = opts[1];
try{
var
b = Re_Pcre[3].call(null, [0, opts$0], source),
compiled = Re[2].call(null, b),
c = [36, source, flags, compiled];
return c;
}
catch(exn){
var a = Stdlib[28].call(null, "make-regexp: invalid pattern: ", source);
throw caml_maybe_attach_backtrace([0, Sx_types[9], a], 1);
}
}
function match_dict(g, input){
var
d = Stdlib_Hashtbl[1].call(null, 0, 4),
e = [3, caml_call2(Re[1][1], g, 0)];
Stdlib_Hashtbl[11].call(null, d, cst_match, e);
var f = [1, caml_call2(Re[1][5], g, 0)];
Stdlib_Hashtbl[11].call(null, d, "start", f);
var h = [1, caml_call2(Re[1][7], g, 0)];
Stdlib_Hashtbl[11].call(null, d, "end", h);
Stdlib_Hashtbl[11].call(null, d, cst_input, [3, input]);
var count = caml_call1(Re[1][12], g), b = count - 1 | 0, a = 0;
if(b < 1)
var groups$0 = a;
else{
var groups = a, i = b;
for(;;){
try{var k = caml_call2(Re[1][1], g, i), s = k;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
var s = cst;
}
var c = [0, [3, s], groups], j = i - 1 | 0;
if(1 === i){var groups$0 = c; break;}
groups = c;
i = j;
}
}
Stdlib_Hashtbl[11].call(null, d, cst_groups, [6, groups$0]);
return [7, d];
}
register
("make-regexp",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var match = args[2], src = a[1];
if(! match) return make_regexp_value(src, cst);
var b = match[1];
if(typeof b !== "number" && 3 === b[0] && ! match[2]){
var flags = b[1];
return make_regexp_value(src, flags);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-regexp: (pattern [flags])"], 1);
});
var bq = [0, 0], br = [0, 1];
register
("regexp?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 36 === a[0]){if(args[2]) break a; return br;}
if(! args[2]) return bq;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "regexp?: 1 arg"], 1);
});
register
("regexp-source",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 36 === a[0] && ! args[2]){var src = a[1]; return [3, src];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regexp-source: expected regexp"], 1);
});
register
("regexp-flags",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 36 === a[0] && ! args[2]){var flags = a[2]; return [3, flags];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regexp-flags: expected regexp"], 1);
});
register
("regexp-match",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 36 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var s = c[1], re = a[3], match = Re[6].call(null, 0, 0, re, s);
if(! match) return 0;
var g = match[1];
return match_dict(g, s);
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regexp-match: (regexp string)"], 1);
});
register
("regexp-match-all",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 36 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var s = c[1], re = a[3], d = Re[11].call(null, 0, 0, re, s);
return [6,
Stdlib_List[20].call
(null, function(g){return match_dict(g, s);}, d)];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regexp-match-all: (regexp string)"], 1);
});
register
("regexp-replace",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 36 === a[0]){
var b = args[2];
if(b){
var d = b[1];
if(typeof d !== "number" && 3 === d[0]){
var e = b[2];
if(e){
var f = e[1];
if(typeof f !== "number" && 3 === f[0] && ! e[2]){
var
replacement = f[1],
s = d[1],
re = a[3],
match = Re[6].call(null, 0, 0, re, s);
if(! match) return [3, s];
var
g = match[1],
buf = Stdlib_Buffer[1].call(null, caml_ml_string_length(s)),
n = caml_ml_string_length(replacement),
k = caml_call2(Re[1][5], g, 0),
l = Stdlib_String[16].call(null, s, 0, k);
Stdlib_Buffer[16].call(null, buf, l);
var i = 0;
for(;;){
if(i >= n){
var
m = caml_ml_string_length(s) - caml_call2(Re[1][7], g, 0) | 0,
o = caml_call2(Re[1][7], g, 0),
p = Stdlib_String[16].call(null, s, o, m);
Stdlib_Buffer[16].call(null, buf, p);
return [3, Stdlib_Buffer[2].call(null, buf)];
}
var c = caml_string_get(replacement, i);
if(36 === c && (i + 1 | 0) < n){
var
c$0 = caml_string_get(replacement, i + 1 | 0),
switcher = c$0 - 36 | 0;
if(2 >= switcher >>> 0)
switch(switcher){
case 0:
Stdlib_Buffer[12].call(null, buf, 36);
i = i + 2 | 0;
continue;
case 2:
var j = caml_call2(Re[1][1], g, 0);
Stdlib_Buffer[16].call(null, buf, j);
i = i + 2 | 0;
continue;
}
if(48 <= c$0 && 57 >= c$0){
var idx = c$0 - 48 | 0;
try{
var h = caml_call2(Re[1][1], g, idx);
Stdlib_Buffer[16].call(null, buf, h);
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn, 0);
}
i = i + 2 | 0;
continue;
}
Stdlib_Buffer[12].call(null, buf, c);
var i$0 = i + 1 | 0;
i = i$0;
continue;
}
Stdlib_Buffer[12].call(null, buf, c);
var i$1 = i + 1 | 0;
i = i$1;
}
}
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regexp-replace: (regexp string replacement)"],
1);
});
register
("regexp-replace-all",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 36 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0]){
var d = b[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 3 === e[0] && ! d[2]){
var
replacement = e[1],
s = c[1],
re = a[3],
expand =
function(g){
var
buf =
Stdlib_Buffer[1].call
(null, caml_ml_string_length(replacement)),
n = caml_ml_string_length(replacement),
i = 0;
for(;;){
if(i >= n) return Stdlib_Buffer[2].call(null, buf);
var c = caml_string_get(replacement, i);
if(36 === c && (i + 1 | 0) < n){
var
c$0 = caml_string_get(replacement, i + 1 | 0),
switcher = c$0 - 36 | 0;
if(2 >= switcher >>> 0)
switch(switcher){
case 0:
Stdlib_Buffer[12].call(null, buf, 36);
i = i + 2 | 0;
continue;
case 2:
var b = caml_call2(Re[1][1], g, 0);
Stdlib_Buffer[16].call(null, buf, b);
i = i + 2 | 0;
continue;
}
if(48 <= c$0 && 57 >= c$0){
var idx = c$0 - 48 | 0;
try{
var a = caml_call2(Re[1][1], g, idx);
Stdlib_Buffer[16].call(null, buf, a);
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn, 0);
}
i = i + 2 | 0;
continue;
}
Stdlib_Buffer[12].call(null, buf, c);
var i$0 = i + 1 | 0;
i = i$0;
continue;
}
Stdlib_Buffer[12].call(null, buf, c);
var i$1 = i + 1 | 0;
i = i$1;
}
};
return [3, Re[91].call(null, 0, 0, 0, re, expand, s)];
}
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"regexp-replace-all: (regexp string replacement)"],
1);
});
register
("regexp-split",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 36 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var s = c[1], re = a[3], d = Re[17].call(null, 0, 0, re, s);
return [6,
Stdlib_List[20].call(null, function(x){return [3, x];}, d)];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "regexp-split: (regexp string)"], 1);
});
register
("bitwise-and",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 1 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 1 === e[0] && ! d[2]){var b = e[1], a = c[1]; return [1, a & b];}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bitwise-and: expected (integer integer)"], 1);
});
register
("bitwise-or",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 1 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 1 === e[0] && ! d[2]){var b = e[1], a = c[1]; return [1, a | b];}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bitwise-or: expected (integer integer)"], 1);
});
register
("bitwise-xor",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 1 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 1 === e[0] && ! d[2]){var b = e[1], a = c[1]; return [1, a ^ b];}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bitwise-xor: expected (integer integer)"], 1);
});
register
("bitwise-not",
function(args){
if(args){
var b = args[1];
if(typeof b !== "number" && 1 === b[0] && ! args[2]){var a = b[1]; return [1, Stdlib[21].call(null, a)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bitwise-not: expected (integer)"], 1);
});
register
("arithmetic-shift",
function(args){
if(args){
var b = args[1];
if(typeof b !== "number" && 1 === b[0]){
var c = args[2];
if(c){
var d = c[1];
if(typeof d !== "number" && 1 === d[0] && ! c[2]){
var
count = d[1],
a = b[1],
e = 0 <= count ? a << count : a >> (- count | 0);
return [1, e];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "arithmetic-shift: expected (integer integer)"],
1);
});
register
("bit-count",
function(args){
if(args){
var b = args[1];
if(typeof b !== "number" && 1 === b[0] && ! args[2]){
var a = b[1], c = 0, n = Stdlib[18].call(null, a);
for(;;){
if(0 === n) return [1, c];
c = c + (n & 1) | 0;
n = n >>> 1 | 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bit-count: expected (integer)"], 1);
});
register
("integer-length",
function(args){
if(args){
var b = args[1];
if(typeof b !== "number" && 1 === b[0] && ! args[2]){
var a = b[1], bits = 0, n = Stdlib[18].call(null, a);
for(;;){
if(0 === n) return [1, bits];
var bits$0 = bits + 1 | 0;
bits = bits$0;
n = n >>> 1 | 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "integer-length: expected (integer)"], 1);
});
register
("make-hash-table",
function(param){return [31, Stdlib_Hashtbl[1].call(null, 0, 16)];});
var bs = [0, 0], bt = [0, 0], bu = [0, 1];
register
("hash-table?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 31 === a[0]){if(args[2]) break a; return bu;}
if(! args[2]) return bt;
}
return bs;
});
register
("hash-table-set!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 31 === a[0]){
var b = args[2];
if(b){
var c = b[2];
if(c && ! c[2]){
var v = c[1], k = b[1], ht = a[1];
try{Stdlib_Hashtbl[11].call(null, ht, k, v);}
catch(exn){
var found = [0, 0];
Stdlib_Hashtbl[12].call
(null,
function(ek, param){
var
a = ek === k ? 1 : 0,
b =
a
? (Stdlib_Hashtbl
[11].call
(null, ht, ek, v),
found[1] = 1,
0)
: a;
return b;
},
ht);
if(1 - found[1]) Stdlib_Hashtbl[11].call(null, ht, k, v);
}
return 0;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "hash-table-set!: expected (ht key val)"], 1);
});
register
("hash-table-ref",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 31 === a[0]){
var b = args[2];
if(b){
var match = b[2], k = b[1], ht = a[1];
if(! match)
try{var d = Stdlib_Hashtbl[6].call(null, ht, k); return d;}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 === Stdlib[8])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "hash-table-ref: key not found"], 1);
throw caml_maybe_attach_backtrace(exn$0, 0);
}
if(! match[2]){
var default$ = match[1];
try{var c = Stdlib_Hashtbl[6].call(null, ht, k); return c;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8]) return default$;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"hash-table-ref: expected (ht key) or (ht key default)"],
1);
});
register
("hash-table-delete!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 31 === a[0]){
var b = args[2];
if(b && ! b[2]){
var k = b[1], ht = a[1];
Stdlib_Hashtbl[10].call(null, ht, k);
return 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "hash-table-delete!: expected (ht key)"], 1);
});
register
("hash-table-size",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 31 === a[0] && ! args[2]){
var ht = a[1];
return [1, Stdlib_Hashtbl[15].call(null, ht)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "hash-table-size: expected (ht)"], 1);
});
register
("hash-table-keys",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 31 === a[0] && ! args[2]){
var ht = a[1];
return [6,
Stdlib_Hashtbl[14].call
(null, function(k, param, acc){return [0, k, acc];}, ht, 0)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "hash-table-keys: expected (ht)"], 1);
});
register
("hash-table-values",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 31 === a[0] && ! args[2]){
var ht = a[1];
return [6,
Stdlib_Hashtbl[14].call
(null, function(param, v, acc){return [0, v, acc];}, ht, 0)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "hash-table-values: expected (ht)"], 1);
});
register
("hash-table->alist",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 31 === a[0] && ! args[2]){
var ht = a[1];
return [6,
Stdlib_Hashtbl[14].call
(null,
function(k, v, acc){
return [0, [6, [0, k, [0, v, 0]]], acc];
},
ht,
0)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "hash-table->alist: expected (ht)"], 1);
});
register
("hash-table-for-each",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 31 === a[0]){
var b = args[2];
if(b && ! b[2]){
var fn = b[1], ht = a[1];
Stdlib_Hashtbl[12].call
(null,
function(k, v){
caml_call2(Sx_types[7][1], fn, [6, [0, k, [0, v, 0]]]);
return 0;
},
ht);
return 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "hash-table-for-each: expected (ht fn)"], 1);
});
register
("hash-table-merge!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 31 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 31 === c[0] && ! b[2]){
var src = c[1], dst = a[1];
Stdlib_Hashtbl[12].call
(null,
function(k, v){return Stdlib_Hashtbl[11].call(null, dst, k, v);},
src);
return 0;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "hash-table-merge!: expected (dst src)"], 1);
});
var bv = [6, 0];
function seq_to_list(v){
if(typeof v === "number"){if(0 === v) return bv;}
else
switch(v[0]){
case 3:
var s = v[1], chars = [0, 0];
Stdlib_String[30].call
(null,
function(c){
var a = chars[1];
chars[1] = [0, [3, Stdlib_String[1].call(null, 1, c)], a];
return 0;
},
s);
return [6, Stdlib_List[10].call(null, chars[1])];
case 6:
return v;
case 21:
var items = v[1][1]; return [6, items];
case 29:
var arr = v[1]; return [6, Stdlib_Array[10].call(null, arr)];
}
return v;
}
register
("seq-to-list",
function(args){
if(args && ! args[2]){var v = args[1]; return seq_to_list(v);}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "seq-to-list: expected 1 arg"], 1);
});
register
("sequence-to-list",
function(args){
if(args && ! args[2]){var v = args[1]; return seq_to_list(v);}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sequence-to-list: expected 1 arg"], 1);
});
register
("sequence-to-vector",
function(args){
if(args && ! args[2]){
var v = args[1], x = seq_to_list(v);
if(typeof x !== "number" && 6 === x[0]){
var xs = x[1];
return [29, Stdlib_Array[11].call(null, xs)];
}
return x;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sequence-to-vector: expected 1 arg"], 1);
});
register
("sequence-length",
function(args){
a:
if(args){
var v = args[1];
if(typeof v !== "number")
switch(v[0]){
case 3:
if(args[2]) break a;
var s = v[1];
return [1, caml_ml_string_length(s)];
case 29:
if(args[2]) break a; var arr = v[1]; return [1, arr.length - 1];
}
if(! args[2]){
var match = seq_to_list(v);
if(typeof match !== "number" && 6 === match[0]){
var xs = match[1];
return [1, Stdlib_List[1].call(null, xs)];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sequence-length: expected sequence"], 1);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sequence-length: expected 1 arg"], 1);
});
var
cst_out_of_bounds = " out of bounds",
cst_sequence_ref_index = "sequence-ref: index ",
cst_sequence_ref_index_d_out_o = "sequence-ref: index %d out of bounds",
bw =
[0,
[11, cst_sequence_ref_index, [4, 0, 0, 0, [11, cst_out_of_bounds, 0]]],
cst_sequence_ref_index_d_out_o],
bx =
[0,
[11, cst_sequence_ref_index, [4, 0, 0, 0, [11, cst_out_of_bounds, 0]]],
cst_sequence_ref_index_d_out_o],
by =
[0,
[11, cst_sequence_ref_index, [4, 0, 0, 0, [11, cst_out_of_bounds, 0]]],
cst_sequence_ref_index_d_out_o];
register
("sequence-ref",
function(args){
a:
if(args){
var v = args[1];
if(typeof v !== "number" && 3 === v[0]){
var a = args[2];
if(! a) break a;
var b = a[1], s = v[1];
if(typeof b !== "number")
switch(b[0]){
case 1:
if(a[2]) break a;
var i$0 = b[1];
if(0 <= i$0 && caml_ml_string_length(s) > i$0){
var g = caml_string_get(s, i$0);
return [3, Stdlib_String[1].call(null, 1, g)];
}
var f = caml_call1(Stdlib_Printf[4].call(null, bx), i$0);
throw caml_maybe_attach_backtrace([0, Sx_types[9], f], 1);
case 2:
if(a[2]) break a;
var n$1 = b[1], i$1 = n$1 | 0;
if(0 <= i$1 && caml_ml_string_length(s) > i$1){
var j = caml_string_get(s, i$1);
return [3, Stdlib_String[1].call(null, 1, j)];
}
var h = caml_call1(Stdlib_Printf[4].call(null, by), i$1);
throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1);
}
}
var c = args[2];
if(c && ! c[2]){
var idx = c[1], lst = seq_to_list(v);
b:
if(typeof idx !== "number"){
switch(idx[0]){
case 1:
var n = idx[1], i = n; break;
case 2:
var n$0 = idx[1], i = n$0 | 0; break;
default: break b;
}
if(typeof lst !== "number" && 6 === lst[0]){
var xs = lst[1];
try{var e = Stdlib_List[8].call(null, xs, i); return e;}
catch(exn){
var d = caml_call1(Stdlib_Printf[4].call(null, bw), i);
throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sequence-ref: expected sequence"], 1);
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sequence-ref: index must be number"], 1);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sequence-ref: expected (seq index)"], 1);
});
register
("sequence-append",
function(args){
a:
if(args){
var v1 = args[1];
if(typeof v1 !== "number" && 3 === v1[0]){
var b = args[2];
if(! b) break a;
var c = b[1];
if(typeof c !== "number" && 3 === c[0]){
if(b[2]) break a;
var s2 = c[1], s1 = v1[1];
return [3, Stdlib[28].call(null, s1, s2)];
}
}
var a = args[2];
if(a && ! a[2]){
var v2 = a[1], l1 = seq_to_list(v1), l2 = seq_to_list(v2);
if
(typeof l1 !== "number"
&& 6 === l1[0] && typeof l2 !== "number" && 6 === l2[0]){
var xs2 = l2[1], xs1 = l1[1];
return [6, Stdlib[37].call(null, xs1, xs2)];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sequence-append: expected sequences"], 1);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sequence-append: expected 2 args"], 1);
});
register
("in-range",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
var match = args[2], n = a[1];
if(match){
var b = match[1];
if(typeof b !== "number" && 1 === b[0]){
var match$0 = match[2], hi = b[1];
if(match$0){
var c = match$0[1];
if(typeof c !== "number" && 1 === c[0] && ! match$0[2]){
var step = c[1];
if(0 === step)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "in-range: step cannot be zero"], 1);
var i = n, acc = 0;
for(;;){
a:
{
if(0 < step && hi <= i) break a;
if(0 > step && i <= hi) break a;
var acc$0 = [0, [1, i], acc], i$0 = i + step | 0;
i = i$0;
acc = acc$0;
continue;
}
return [6, Stdlib_List[10].call(null, acc)];
}
}
}
else{
var i$3 = hi - 1 | 0, i$1 = i$3, acc$1 = 0;
for(;;){
if(i$1 < n) return [6, acc$1];
var acc$2 = [0, [1, i$1], acc$1], i$2 = i$1 - 1 | 0;
i$1 = i$2;
acc$1 = acc$2;
}
}
}
}
else{
var i$6 = n - 1 | 0, i$4 = i$6, acc$3 = 0;
for(;;){
if(0 > i$4) return [6, acc$3];
var acc$4 = [0, [1, i$4], acc$3], i$5 = i$4 - 1 | 0;
i$4 = i$5;
acc$3 = acc$4;
}
}
break;
case 2:
var match$1 = args[2], n$0 = a[1];
if(match$1){
var d = match$1[1];
if(typeof d !== "number" && 2 === d[0] && ! match$1[2]){
var
hi$0 = d[1],
lo_i = n$0 | 0,
hi_i = hi$0 | 0,
i$9 = hi_i - 1 | 0,
i$7 = i$9,
acc$5 = 0;
for(;;){
if(i$7 < lo_i) return [6, acc$5];
var acc$6 = [0, [1, i$7], acc$5], i$8 = i$7 - 1 | 0;
i$7 = i$8;
acc$5 = acc$6;
}
}
}
else{
var hi$1 = n$0 | 0, i$12 = hi$1 - 1 | 0, i$10 = i$12, acc$7 = 0;
for(;;){
if(0 > i$10) return [6, acc$7];
var acc$8 = [0, [1, i$10], acc$7], i$11 = i$10 - 1 | 0;
i$10 = i$11;
acc$7 = acc$8;
}
}
break;
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"in-range: expected (end) or (start end) or (start end step)"],
1);
});
var gensym_counter = [0, 0];
register
("gensym",
function(args){
a:
{
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 3:
if(! args[2]){var s = a[1], prefix = s; break a;} break;
case 4:
if(! args[2]){var s$0 = a[1], prefix = s$0; break a;} break;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "gensym: expected optional prefix string"],
1);
}
var prefix = "g";
}
gensym_counter[1]++;
var b = Stdlib[33].call(null, gensym_counter[1]);
return [4, Stdlib[28].call(null, prefix, b)];
});
register
("string->symbol",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){var s = a[1]; return [4, s];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "string->symbol: expected 1 string"], 1);
});
register
("symbol->string",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 4 === a[0] && ! args[2]){var s = a[1]; return [3, s];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "symbol->string: expected 1 symbol"], 1);
});
register
("intern",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){var s = a[1]; return [4, s];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "intern: expected 1 string"], 1);
});
var bz = [0, 1];
register
("symbol-interned?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 4 === a[0] && ! args[2]) return bz;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "symbol-interned?: expected 1 symbol"], 1);
});
function char_downcase_cp(n){
if(65 <= n && 90 >= n) return n + 32 | 0;
return n;
}
register
("make-char",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0] && ! args[2]){var n = a[1]; return [32, n];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-char: expected integer codepoint"], 1);
});
var bA = [0, 0], bB = [0, 1];
register
("char?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 32 === a[0]){if(args[2]) break a; return bB;}
if(! args[2]) return bA;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char?: expected 1 argument"], 1);
});
register
("char->integer",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 32 === a[0] && ! args[2]){var n = a[1]; return [1, n];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char->integer: expected char"], 1);
});
register
("integer->char",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0] && ! args[2]){var n = a[1]; return [32, n];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "integer->char: expected integer"], 1);
});
register
("char-upcase",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 32 === a[0] && ! args[2]){
var n = a[1], b = 97 <= n ? 122 < n ? n : n - 32 | 0 : n;
return [32, b];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-upcase: expected char"], 1);
});
register
("char-downcase",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 32 === a[0] && ! args[2]){var n = a[1]; return [32, char_downcase_cp(n)];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-downcase: expected char"], 1);
});
register
("char=?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 32 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 32 === e[0] && ! d[2]){
var b = e[1], a = c[1];
return [0, a === b ? 1 : 0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char=?: expected 2 chars"], 1);
});
register
("char<?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 32 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 32 === e[0] && ! d[2]){
var b = e[1], a = c[1];
return [0, a < b ? 1 : 0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char<?: expected 2 chars"], 1);
});
register
("char>?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 32 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 32 === e[0] && ! d[2]){
var b = e[1], a = c[1];
return [0, b < a ? 1 : 0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char>?: expected 2 chars"], 1);
});
register
("char<=?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 32 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 32 === e[0] && ! d[2]){
var b = e[1], a = c[1];
return [0, a <= b ? 1 : 0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char<=?: expected 2 chars"], 1);
});
register
("char>=?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 32 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 32 === e[0] && ! d[2]){
var b = e[1], a = c[1];
return [0, b <= a ? 1 : 0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char>=?: expected 2 chars"], 1);
});
register
("char-ci=?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 32 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 32 === e[0] && ! d[2]){
var b = e[1], a = c[1], f = char_downcase_cp(b);
return [0, char_downcase_cp(a) === f ? 1 : 0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-ci=?: expected 2 chars"], 1);
});
register
("char-ci<?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 32 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 32 === e[0] && ! d[2]){
var b = e[1], a = c[1], f = char_downcase_cp(b);
return [0, char_downcase_cp(a) < f ? 1 : 0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-ci<?: expected 2 chars"], 1);
});
register
("char-ci>?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 32 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 32 === e[0] && ! d[2]){
var b = e[1], a = c[1], f = char_downcase_cp(b);
return [0, f < char_downcase_cp(a) ? 1 : 0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-ci>?: expected 2 chars"], 1);
});
register
("char-ci<=?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 32 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 32 === e[0] && ! d[2]){
var b = e[1], a = c[1], f = char_downcase_cp(b);
return [0, char_downcase_cp(a) <= f ? 1 : 0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-ci<=?: expected 2 chars"], 1);
});
register
("char-ci>=?",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 32 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 32 === e[0] && ! d[2]){
var b = e[1], a = c[1], f = char_downcase_cp(b);
return [0, f <= char_downcase_cp(a) ? 1 : 0];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-ci>=?: expected 2 chars"], 1);
});
register
("char-alphabetic?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 32 === a[0] && ! args[2]){
var n = a[1], b = 65 <= n ? 1 : 0, c = b ? n <= 90 ? 1 : 0 : b;
if(c)
var d = c;
else
var e = 97 <= n ? 1 : 0, d = e ? n <= 122 ? 1 : 0 : e;
return [0, d];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-alphabetic?: expected char"], 1);
});
register
("char-numeric?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 32 === a[0] && ! args[2]){
var n = a[1], b = 48 <= n ? 1 : 0, c = b ? n <= 57 ? 1 : 0 : b;
return [0, c];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-numeric?: expected char"], 1);
});
register
("char-whitespace?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 32 === a[0] && ! args[2]){
var n = a[1], c = 32 === n ? 1 : 0;
if(c)
var b = c;
else{
var d = 9 === n ? 1 : 0;
if(d)
var b = d;
else
var e = 10 === n ? 1 : 0, b = e || (13 === n ? 1 : 0);
}
return [0, b];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-whitespace?: expected char"], 1);
});
register
("char-upper-case?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 32 === a[0] && ! args[2]){
var n = a[1], b = 65 <= n ? 1 : 0, c = b ? n <= 90 ? 1 : 0 : b;
return [0, c];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-upper-case?: expected char"], 1);
});
register
("char-lower-case?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 32 === a[0] && ! args[2]){
var n = a[1], b = 97 <= n ? 1 : 0, c = b ? n <= 122 ? 1 : 0 : b;
return [0, c];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-lower-case?: expected char"], 1);
});
register
("string->list",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var s = a[1], chars = [0, 0];
Stdlib_String[30].call
(null, function(c){chars[1] = [0, [32, c], chars[1]]; return 0;}, s);
return [6, Stdlib_List[10].call(null, chars[1])];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "string->list: expected string"], 1);
});
register
("list->string",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
if(args[2]) break a; var chars = a[1]; break;
case 21:
var c = a[1][1]; if(args[2]) break a; var chars = c; break;
default: break a;
}
var
b = Stdlib_List[1].call(null, chars),
buf = Stdlib_Buffer[1].call(null, b);
Stdlib_List[18].call
(null,
function(v){
if(typeof v !== "number" && 32 === v[0]){
var n = v[1], c = Stdlib_Char[1].call(null, n & 255);
return Stdlib_Buffer[12].call(null, buf, c);
}
var
a = Sx_types[57].call(null, v),
b = Stdlib[28].call(null, "list->string: expected char, got ", a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
},
chars);
return [3, Stdlib_Buffer[2].call(null, buf)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "list->string: expected list of chars"], 1);
});
register("eof-object", function(args){return 1;});
var bC = [0, 1], bD = [0, 0];
register
("eof-object?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a === "number" && a){if(args[2]) break a; return bC;}
if(! args[2]) return bD;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "eof-object?: expected 1 argument"], 1);
});
register
("open-input-string",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){var s = a[1]; return [33, [0, 0, [0, s, [0, 0]]]];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "open-input-string: expected string"], 1);
});
register
("open-output-string",
function(args){
if(args)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "open-output-string: expected no arguments"],
1);
return [33, [0, 0, [1, Stdlib_Buffer[1].call(null, 64)]]];
});
register
("get-output-string",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 33 === a[0]){
var b = a[1][2];
if(0 !== b[0] && ! args[2]){
var buf = b[1];
return [3, Stdlib_Buffer[2].call(null, buf)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "get-output-string: expected output port"], 1);
});
var bE = [0, 0], bF = [0, 1];
register
("port?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 33 === a[0]){if(args[2]) break a; return bF;}
if(! args[2]) return bE;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "port?: expected 1 argument"], 1);
});
var bG = [0, 0], bH = [0, 1];
register
("input-port?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 33 === a[0] && 0 === a[1][2][0]){if(args[2]) break a; return bH;}
if(! args[2]) return bG;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "input-port?: expected 1 argument"], 1);
});
var bI = [0, 0], bJ = [0, 1];
register
("output-port?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 33 === a[0] && 0 !== a[1][2][0]){if(args[2]) break a; return bJ;}
if(! args[2]) return bI;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "output-port?: expected 1 argument"], 1);
});
register
("close-port",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 33 === a[0] && ! args[2]){var p = a[1]; p[1] = 1; return 0;}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "close-port: expected port"], 1);
});
register
("read-char",
function(args){
if(! args)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "read-char: no default port in this host"], 1);
var
a = args[1],
cst_read_char_expected_input_p = "read-char: expected input port";
if(typeof a !== "number" && 33 === a[0] && ! args[2]){
var p = a[1], match = p[2];
if(0 !== match[0])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_read_char_expected_input_p], 1);
var pos = match[2], src = match[1];
if(! p[1] && caml_ml_string_length(src) > pos[1]){
var cp = caml_string_get(src, pos[1]);
pos[1]++;
return [32, cp];
}
return 1;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_read_char_expected_input_p], 1);
});
register
("peek-char",
function(args){
if(! args)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "peek-char: no default port in this host"], 1);
var
a = args[1],
cst_peek_char_expected_input_p = "peek-char: expected input port";
if(typeof a !== "number" && 33 === a[0] && ! args[2]){
var p = a[1], match = p[2];
if(0 !== match[0])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_peek_char_expected_input_p], 1);
var pos = match[2], src = match[1];
if(! p[1] && caml_ml_string_length(src) > pos[1])
return [32, caml_string_get(src, pos[1])];
return 1;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_peek_char_expected_input_p], 1);
});
register
("read-line",
function(args){
if(! args)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "read-line: no default port in this host"], 1);
var
a = args[1],
cst_read_line_expected_input_p = "read-line: expected input port";
if(typeof a !== "number" && 33 === a[0] && ! args[2]){
var p = a[1], match = p[2];
if(0 !== match[0])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_read_line_expected_input_p], 1);
var pos = match[2], src = match[1];
if(! p[1] && caml_ml_string_length(src) > pos[1]){
var start = pos[1], len = caml_ml_string_length(src);
for(;;){
if(pos[1] < len && 10 !== caml_string_get(src, pos[1])){pos[1]++; continue;}
var
line = Stdlib_String[16].call(null, src, start, pos[1] - start | 0);
if(pos[1] < len) pos[1]++;
return [3, line];
}
}
return 1;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_read_line_expected_input_p], 1);
});
register
("write-char",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 32 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 33 === c[0] && ! b[2]){
var p = c[1], n = a[1], match = p[2];
if(0 === match[0])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "write-char: expected output port"], 1);
var buf = match[1];
if(1 - p[1]){
var d = Stdlib_Char[1].call(null, n & 255);
Stdlib_Buffer[12].call(null, buf, d);
}
return 0;
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "write-char: expected char and output port"],
1);
});
register
("write-string",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 33 === c[0] && ! b[2]){
var p = c[1], s = a[1], match = p[2];
if(0 === match[0])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "write-string: expected output port"], 1);
var buf = match[1];
if(1 - p[1]) Stdlib_Buffer[16].call(null, buf, s);
return 0;
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"write-string: expected string and output port"],
1);
});
var bK = [0, 0];
register
("char-ready?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 33 === a[0]){
var c = a[1];
if(! c[1]){
var b = c[2];
if(0 === b[0]){
if(args[2]) break a;
var pos = b[2], src = b[1];
return [0, pos[1] < caml_ml_string_length(src) ? 1 : 0];
}
}
if(! args[2]) return bK;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "char-ready?: expected input port"], 1);
});
function read_postprocess(v){
if(typeof v !== "number" && 6 === v[0]){
var items = v[1];
return items
? [6, Stdlib_List[20].call(null, read_postprocess, items)]
: 0;
}
return v;
}
register
("read",
function(args){
if(! args) return 1;
var a = args[1];
if(typeof a !== "number" && 33 === a[0] && ! args[2]){
var p = a[1], match = p[2];
if(0 !== match[0])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "read: expected input port"], 1);
var pos = match[2], src = match[1], len = caml_ml_string_length(src);
if(! p[1] && len > pos[1]){
var
sub = Stdlib_String[16].call(null, src, pos[1], len - pos[1] | 0),
s = Sx_parser[1].call(null, sub);
Sx_parser[5].call(null, s);
if(Sx_parser[4].call(null, s)){pos[1] = len; return 1;}
try{
var form = read_postprocess(Sx_parser[14].call(null, s));
pos[1] = pos[1] + s[3] | 0;
return form;
}
catch(exn){pos[1] = len; return 1;}
}
return 1;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "read: expected optional input port"], 1);
});
register
("write",
function(args){
if(args){
var match = args[2], v = args[1];
if(! match) return [3, sx_write_val(v)];
var a = match[1];
if(typeof a !== "number" && 33 === a[0] && ! match[2]){
var p = a[1], match$0 = p[2];
if(0 === match$0[0])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "write: expected output port"], 1);
var buf = match$0[1];
if(1 - p[1]){
var b = sx_write_val(v);
Stdlib_Buffer[16].call(null, buf, b);
}
return 0;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "write: expected val [port]"], 1);
});
register
("display",
function(args){
if(args){
var match = args[2], v = args[1];
if(! match) return [3, sx_display_val(v)];
var a = match[1];
if(typeof a !== "number" && 33 === a[0] && ! match[2]){
var p = a[1], match$0 = p[2];
if(0 === match$0[0])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "display: expected output port"], 1);
var buf = match$0[1];
if(1 - p[1]){
var b = sx_display_val(v);
Stdlib_Buffer[16].call(null, buf, b);
}
return 0;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "display: expected val [port]"], 1);
});
register
("newline",
function(args){
if(! args) return 0;
var a = args[1];
if(typeof a !== "number" && 33 === a[0] && ! args[2]){
var p = a[1], match = p[2];
if(0 === match[0])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "newline: expected output port"], 1);
var buf = match[1];
if(1 - p[1]) Stdlib_Buffer[12].call(null, buf, 10);
return 0;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "newline: expected optional output port"], 1);
});
register
("write-to-string",
function(args){
if(args && ! args[2]){var v = args[1]; return [3, sx_write_val(v)];}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "write-to-string: 1 arg"], 1);
});
register
("display-to-string",
function(args){
if(args && ! args[2]){var v = args[1]; return [3, sx_display_val(v)];}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "display-to-string: 1 arg"], 1);
});
var
cst_f = "%.*f",
cst_6f = "%.6f",
bL = [0, [8, [0, 0, 0], 0, [0, 6], 0], cst_6f],
bM = [0, [8, [0, 0, 0], 0, 1, 0], cst_f],
bN = [0, [8, [0, 0, 0], 0, [0, 6], 0], cst_6f],
bO = [0, [8, [0, 0, 0], 0, 1, 0], cst_f];
register
("format-decimal",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
var b = args[2];
if(b){
var d = b[1], n = a[1];
if(typeof d !== "number" && 1 === d[0]){
if(b[2]) break;
var prec = d[1];
return [3, caml_call2(Stdlib_Printf[4].call(null, bM), prec, n)];
}
if(! b[2])
return [3, caml_call1(Stdlib_Printf[4].call(null, bL), n)];
}
break;
case 2:
var c = args[2];
if(c){
var e = c[1], n$0 = a[1];
if(typeof e !== "number" && 1 === e[0]){
if(c[2]) break;
var prec$0 = e[1];
return [3,
caml_call2(Stdlib_Printf[4].call(null, bO), prec$0, n$0)];
}
if(! c[2])
return [3, caml_call1(Stdlib_Printf[4].call(null, bN), n$0)];
}
break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "format-decimal: expected number precision"],
1);
});
register("current-input-port", function(param){return 0;});
register("current-output-port", function(param){return 0;});
register("current-error-port", function(param){return 0;});
function set_key(v){return Sx_types[112].call(null, v);}
register
("make-set",
function(args){
var ht = Stdlib_Hashtbl[1].call(null, 0, 8);
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 6:
if(! args[2]){
var items = a[1];
Stdlib_List[18].call
(null,
function(v){
var a = set_key(v);
return Stdlib_Hashtbl[11].call(null, ht, a, v);
},
items);
break a;
}
break;
case 21:
if(! args[2]){
var r = a[1];
Stdlib_List[18].call
(null,
function(v){
var a = set_key(v);
return Stdlib_Hashtbl[11].call(null, ht, a, v);
},
r[1]);
break a;
}
break;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-set: expected optional list"], 1);
}
return [35, ht];
});
var bP = [0, 0], bQ = [0, 1];
register
("set?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 35 === a[0]){if(args[2]) break a; return bQ;}
if(! args[2]) return bP;
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "set?: 1 arg"], 1);
});
register
("set-add!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 35 === a[0]){
var b = args[2];
if(b && ! b[2]){
var v = b[1], ht = a[1], c = set_key(v);
Stdlib_Hashtbl[11].call(null, ht, c, v);
return 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set-add!: expected set val"], 1);
});
register
("set-member?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 35 === a[0]){
var b = args[2];
if(b && ! b[2]){
var v = b[1], ht = a[1], c = set_key(v);
return [0, Stdlib_Hashtbl[9].call(null, ht, c)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set-member?: expected set val"], 1);
});
register
("set-remove!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 35 === a[0]){
var b = args[2];
if(b && ! b[2]){
var v = b[1], ht = a[1], c = set_key(v);
Stdlib_Hashtbl[10].call(null, ht, c);
return 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set-remove!: expected set val"], 1);
});
register
("set-size",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 35 === a[0] && ! args[2]){
var ht = a[1];
return [1, Stdlib_Hashtbl[15].call(null, ht)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set-size: expected set"], 1);
});
register
("set->list",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 35 === a[0] && ! args[2]){
var ht = a[1];
return [6,
Stdlib_Hashtbl[14].call
(null, function(param, v, acc){return [0, v, acc];}, ht, 0)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set->list: expected set"], 1);
});
register
("list->set",
function(args){
if(args){
var a = args[1];
if(typeof a === "number"){
if(0 === a && ! args[2])
return [35, Stdlib_Hashtbl[1].call(null, 0, 0)];
}
else
switch(a[0]){
case 6:
if(! args[2]){
var
items = a[1],
b = Stdlib_List[1].call(null, items),
ht = Stdlib_Hashtbl[1].call(null, 0, b);
Stdlib_List[18].call
(null,
function(v){
var a = set_key(v);
return Stdlib_Hashtbl[11].call(null, ht, a, v);
},
items);
return [35, ht];
}
break;
case 21:
if(! args[2]){
var
r = a[1],
c = Stdlib_List[1].call(null, r[1]),
ht$0 = Stdlib_Hashtbl[1].call(null, 0, c);
Stdlib_List[18].call
(null,
function(v){
var a = set_key(v);
return Stdlib_Hashtbl[11].call(null, ht$0, a, v);
},
r[1]);
return [35, ht$0];
}
break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "list->set: expected list"], 1);
});
register
("set-union",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 35 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 35 === e[0] && ! d[2]){
var b = e[1], a = c[1], ht = Stdlib_Hashtbl[4].call(null, a);
Stdlib_Hashtbl[12].call
(null,
function(k, v){return Stdlib_Hashtbl[11].call(null, ht, k, v);},
b);
return [35, ht];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set-union: expected 2 sets"], 1);
});
register
("set-intersection",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 35 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 35 === e[0] && ! d[2]){
var b = e[1], a = c[1], ht = Stdlib_Hashtbl[1].call(null, 0, 8);
Stdlib_Hashtbl[12].call
(null,
function(k, v){
var a = Stdlib_Hashtbl[9].call(null, b, k);
return a ? Stdlib_Hashtbl[11].call(null, ht, k, v) : a;
},
a);
return [35, ht];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set-intersection: expected 2 sets"], 1);
});
register
("set-difference",
function(args){
if(args){
var c = args[1];
if(typeof c !== "number" && 35 === c[0]){
var d = args[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 35 === e[0] && ! d[2]){
var b = e[1], a = c[1], ht = Stdlib_Hashtbl[1].call(null, 0, 8);
Stdlib_Hashtbl[12].call
(null,
function(k, v){
var a = 1 - Stdlib_Hashtbl[9].call(null, b, k);
return a ? Stdlib_Hashtbl[11].call(null, ht, k, v) : a;
},
a);
return [35, ht];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set-difference: expected 2 sets"], 1);
});
register
("set-for-each",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 35 === a[0]){
var b = args[2];
if(b && ! b[2]){
var fn = b[1], ht = a[1];
Stdlib_Hashtbl[12].call
(null,
function(param, v){
caml_call2(Sx_types[7][1], fn, [6, [0, v, 0]]);
return 0;
},
ht);
return 0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set-for-each: expected set fn"], 1);
});
register
("set-map",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 35 === a[0]){
var b = args[2];
if(b && ! b[2]){
var
fn = b[1],
ht = a[1],
c = Stdlib_Hashtbl[15].call(null, ht),
out = Stdlib_Hashtbl[1].call(null, 0, c);
Stdlib_Hashtbl[12].call
(null,
function(param, v){
var
r = caml_call2(Sx_types[7][1], fn, [6, [0, v, 0]]),
a = set_key(r);
return Stdlib_Hashtbl[11].call(null, out, a, r);
},
ht);
return [35, out];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "set-map: expected set fn"], 1);
});
register
("make-bytevector",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
var match = args[2], n = a[1];
if(! match) return [37, Stdlib_Bytes[1].call(null, n, 0)];
var b = match[1];
if(typeof b !== "number" && 1 === b[0] && ! match[2]){
var fill = b[1], c = fill < 0, d = c || 255 < fill;
if(d)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-bytevector: fill must be 0-255"], 1);
var e = Stdlib_Char[1].call(null, fill);
return [37, Stdlib_Bytes[1].call(null, n, e)];
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "make-bytevector: expected n [fill]"], 1);
});
var bR = [0, 0], bS = [0, 1];
register
("bytevector?",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 37 === a[0]){if(args[2]) break a; return bS;}
if(! args[2]) return bR;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bytevector?: 1 arg"], 1);
});
register
("bytevector-length",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 37 === a[0] && ! args[2]){var b = a[1]; return [1, caml_ml_bytes_length(b)];}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bytevector-length: expected bytevector"], 1);
});
var
cst_out_of_range = " out of range",
bT =
[0,
[11,
"bytevector-u8-ref: index ",
[4, 0, 0, 0, [11, cst_out_of_range, 0]]],
"bytevector-u8-ref: index %d out of range"];
register
("bytevector-u8-ref",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 37 === a[0]){
var c = args[2];
if(c){
var d = c[1];
if(typeof d !== "number" && 1 === d[0] && ! c[2]){
var
i = d[1],
b = a[1],
e = i < 0,
f = e || caml_ml_bytes_length(b) <= i;
if(! f) return [1, caml_bytes_get(b, i)];
var g = caml_call1(Stdlib_Printf[4].call(null, bT), i);
throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1);
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bytevector-u8-ref: expected bytevector index"],
1);
});
var
bU =
[0,
[11,
"bytevector-u8-set!: index ",
[4, 0, 0, 0, [11, cst_out_of_range, 0]]],
"bytevector-u8-set!: index %d out of range"];
register
("bytevector-u8-set!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 37 === a[0]){
var c = args[2];
if(c){
var d = c[1];
if(typeof d !== "number" && 1 === d[0]){
var e = c[2];
if(e){
var f = e[1];
if(typeof f !== "number" && 1 === f[0] && ! e[2]){
var
byte = f[1],
i = d[1],
b = a[1],
g = i < 0,
h = g || caml_ml_bytes_length(b) <= i;
if(h){
var j = caml_call1(Stdlib_Printf[4].call(null, bU), i);
throw caml_maybe_attach_backtrace([0, Sx_types[9], j], 1);
}
var k = byte < 0, l = k || 255 < byte;
if(l)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bytevector-u8-set!: byte must be 0-255"],
1);
caml_bytes_set(b, i, Stdlib_Char[1].call(null, byte));
return 0;
}
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"bytevector-u8-set!: expected bytevector index byte"],
1);
});
register
("bytevector-copy",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 37 === a[0]){
var match = args[2], b = a[1];
if(! match) return [37, Stdlib_Bytes[4].call(null, b)];
var c = match[1];
if(typeof c !== "number" && 1 === c[0]){
var match$0 = match[2], start = c[1];
if(! match$0){
var len = caml_ml_bytes_length(b) - start | 0;
return [37, Stdlib_Bytes[7].call(null, b, start, len)];
}
var d = match$0[1];
if(typeof d !== "number" && 1 === d[0] && ! match$0[2]){
var stop = d[1];
return [37, Stdlib_Bytes[7].call(null, b, start, stop - start | 0)];
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"bytevector-copy: expected bytevector [start [end]]"],
1);
});
register
("bytevector-copy!",
function(args){
function do_copy(dst, at, src, start, stop){
var len = stop - start | 0;
Stdlib_Bytes[11].call(null, src, start, dst, at, len);
return 0;
}
if(args){
var a = args[1];
if(typeof a !== "number" && 37 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 1 === c[0]){
var d = b[2];
if(d){
var e = d[1];
if(typeof e !== "number" && 37 === e[0]){
var match = d[2], src = e[1], at = c[1], dst = a[1];
if(! match)
return do_copy(dst, at, src, 0, caml_ml_bytes_length(src));
var f = match[1];
if(typeof f !== "number" && 1 === f[0]){
var match$0 = match[2], start = f[1];
if(! match$0)
return do_copy(dst, at, src, start, caml_ml_bytes_length(src));
var g = match$0[1];
if(typeof g !== "number" && 1 === g[0] && ! match$0[2]){
var stop = g[1];
return do_copy(dst, at, src, start, stop);
}
}
}
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"bytevector-copy!: expected dst at src [start [end]]"],
1);
});
register
("bytevector-append",
function(args){
var
bufs =
Stdlib_List[20].call
(null,
function(param){
if(typeof param !== "number" && 37 === param[0]){var b = param[1]; return b;}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bytevector-append: expected bytevectors"],
1);
},
args),
total =
Stdlib_List[26].call
(null,
function(acc, b){return acc + caml_ml_bytes_length(b) | 0;},
0,
bufs),
result = caml_create_bytes(total),
pos = [0, 0];
Stdlib_List[18].call
(null,
function(b){
var len = caml_ml_bytes_length(b);
Stdlib_Bytes[11].call(null, b, 0, result, pos[1], len);
pos[1] = pos[1] + len | 0;
return 0;
},
bufs);
return [37, result];
});
register
("utf8->string",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 37 === a[0]){
var match = args[2], b = a[1];
if(! match) return [3, Stdlib_Bytes[6].call(null, b)];
var c = match[1];
if(typeof c !== "number" && 1 === c[0]){
var match$0 = match[2], start = c[1];
if(! match$0)
return [3,
Stdlib_Bytes[8].call
(null, b, start, caml_ml_bytes_length(b) - start | 0)];
var d = match$0[1];
if(typeof d !== "number" && 1 === d[0] && ! match$0[2]){
var stop = d[1];
return [3, Stdlib_Bytes[8].call(null, b, start, stop - start | 0)];
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"utf8->string: expected bytevector [start [end]]"],
1);
});
register
("string->utf8",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var match = args[2], s = a[1];
if(! match) return [37, Stdlib_Bytes[5].call(null, s)];
var b = match[1];
if(typeof b !== "number" && 1 === b[0]){
var match$0 = match[2], start = b[1];
if(! match$0){
var
len = caml_ml_string_length(s) - start | 0,
e = Stdlib_String[16].call(null, s, start, len);
return [37, Stdlib_Bytes[5].call(null, e)];
}
var c = match$0[1];
if(typeof c !== "number" && 1 === c[0] && ! match$0[2]){
var
stop = c[1],
d = Stdlib_String[16].call(null, s, start, stop - start | 0);
return [37, Stdlib_Bytes[5].call(null, d)];
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "string->utf8: expected string [start [end]]"],
1);
});
register
("bytevector->list",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 37 === a[0] && ! args[2]){
var
b = a[1],
items =
Stdlib_List[11].call
(null,
caml_ml_bytes_length(b),
function(i){return [1, caml_bytes_get(b, i)];});
return [6, items];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "bytevector->list: expected bytevector"], 1);
});
var
bV =
[0,
[11,
"list->bytevector: byte ",
[4, 0, 0, 0, [11, cst_out_of_range, 0]]],
"list->bytevector: byte %d out of range"];
register
("list->bytevector",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
if(args[2]) break a; var items = a[1]; break;
case 21:
var c = a[1][1]; if(args[2]) break a; var items = c; break;
default: break a;
}
var
bytes_list =
Stdlib_List[20].call
(null,
function(v){
if(typeof v !== "number" && 1 === v[0]){
var n = v[1];
if(0 <= n && 255 >= n) return Stdlib_Char[1].call(null, n);
var c = caml_call1(Stdlib_Printf[4].call(null, bV), n);
throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1);
}
var
a = Sx_types[57].call(null, v),
b =
Stdlib[28].call
(null, "list->bytevector: expected integer, got ", a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
},
items),
b = caml_create_bytes(Stdlib_List[1].call(null, bytes_list));
Stdlib_List[19].call
(null, function(i, c){return caml_bytes_set(b, i, c);}, bytes_list);
return [37, b];
}
if(0 === a && ! args[2]) return [37, caml_create_bytes(0)];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "list->bytevector: expected list"], 1);
});
register
("file-read",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var path = a[1];
try{
var
ic = Stdlib[79].call(null, path),
n = Stdlib[92].call(null, ic),
s = caml_create_bytes(n);
Stdlib[85].call(null, ic, s, 0, n);
Stdlib[93].call(null, ic);
var c = [3, Stdlib_Bytes[6].call(null, s)];
return c;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Stdlib[11]) throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2], b = Stdlib[28].call(null, "file-read: ", msg);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "file-read: (path)"], 1);
});
register
("file-write",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var content = c[1], path = a[1];
try{
var oc = Stdlib[60].call(null, path);
Stdlib[66].call(null, oc, content);
Stdlib[76].call(null, oc);
return 0;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Stdlib[11])
throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2], d = Stdlib[28].call(null, "file-write: ", msg);
throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1);
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "file-write: (path content)"], 1);
});
var bW = [0, 2, [0, 3, [0, 1, [0, 7, 0]]]];
register
("file-append",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0]){
var b = args[2];
if(b){
var c = b[1];
if(typeof c !== "number" && 3 === c[0] && ! b[2]){
var content = c[1], path = a[1];
try{
var oc = Stdlib[62].call(null, bW, 420, path);
Stdlib[66].call(null, oc, content);
Stdlib[76].call(null, oc);
return 0;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Stdlib[11])
throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2], d = Stdlib[28].call(null, "file-append: ", msg);
throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1);
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "file-append: (path content)"], 1);
});
register
("file-exists?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var path = a[1];
return [0, runtime.caml_sys_file_exists(path)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "file-exists?: (path)"], 1);
});
register
("file-glob",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var
pat = a[1],
dir = Stdlib_Filename[14].call(null, pat),
base_pat = Stdlib_Filename[13].call(null, pat),
cst$0 = ".",
cst = cst$0,
dir$0 =
dir === cst$0
? 1
< caml_ml_string_length(pat)
? 46 === caml_string_get(pat, 0) ? dir : cst
: cst
: dir;
try{
var
entries = runtime.caml_sys_read_directory(dir$0),
c =
Stdlib_Array[18].call
(null,
function(acc, entry){
var
pn = caml_ml_string_length(base_pat),
sn = caml_ml_string_length(entry);
function go(pi$4, si$3){
var pi = pi$4, si = si$3;
for(;;){
if(pi === pn) return si === sn ? 1 : 0;
var c = caml_string_get(base_pat, pi);
if(42 === c){var i = si; break;}
if(63 === c){
var f = si < sn ? 1 : 0;
if(! f) return f;
var si$0 = si + 1 | 0, pi$0 = pi + 1 | 0;
pi = pi$0;
si = si$0;
}
else{
if(91 !== c){
var o = si < sn ? 1 : 0;
if(o){
var p = caml_string_get(entry, si) === c ? 1 : 0;
if(p){
var si$2 = si + 1 | 0, pi$3 = pi + 1 | 0;
pi = pi$3;
si = si$2;
continue;
}
var q = p;
}
else
var q = o;
return q;
}
var
pi$1 = pi + 1 | 0,
g = pi$1 < pn ? 1 : 0,
negate =
g ? 94 === caml_string_get(base_pat, pi$1) ? 1 : 0 : g;
if(negate)
var pi$5 = pi$1 + 1 | 0, pi$6 = pi$5;
else
var pi$6 = pi$1;
var matched = 0, pi$7 = pi$6;
for(;;){
if(pi$7 < pn && 93 !== caml_string_get(base_pat, pi$7)){
var
c1 = caml_string_get(base_pat, pi$7),
pi$8 = pi$7 + 1 | 0;
if
((pi$8 + 1 | 0) < pn
&& 45 === caml_string_get(base_pat, pi$8)){
var
c2 = caml_string_get(base_pat, pi$8 + 1 | 0),
pi$2 = pi$8 + 2 | 0,
k = si < sn;
if(k)
var
l = c1 <= caml_string_get(entry, si),
m = l ? caml_string_get(entry, si) <= c2 : l;
else
var m = k;
if(m){matched = 1; pi$7 = pi$2; continue;}
pi$7 = pi$2;
continue;
}
var
n = si < sn,
r = n ? caml_string_get(entry, si) === c1 : n;
if(r){matched = 1; pi$7 = pi$8; continue;}
pi$7 = pi$8;
continue;
}
if(pi$7 < pn)
var pi$9 = pi$7 + 1 | 0, pi$10 = pi$9;
else
var pi$10 = pi$7;
var h = matched ? 1 - negate : matched;
if(h)
var a = h;
else
var j = 1 - matched, a = j ? negate : j;
if(! a) return a;
var si$1 = si + 1 | 0;
pi = pi$10;
si = si$1;
break;
}
}
}
for(;;){
var b = i <= sn ? 1 : 0;
if(b){
var d = go(pi + 1 | 0, i);
if(! d){var i$0 = i + 1 | 0; i = i$0; continue;}
var e = d;
}
else
var e = b;
return e;
}
}
if(! go(0, 0)) return acc;
var
full =
dir$0 === cst$0
? entry
: Stdlib_Filename[4].call(null, dir$0, entry);
return [0, full, acc];
},
0,
entries),
d = Stdlib_List[59].call(null, Stdlib_String[10], c),
b = d;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Stdlib[11]) throw caml_maybe_attach_backtrace(exn, 0);
var b = 0;
}
return [6, Stdlib_List[20].call(null, function(s){return [3, s];}, b)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "file-glob: (pattern)"], 1);
});
register
("clock-seconds",
function(args){
if(args)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "clock-seconds: no args"], 1);
return [1, Unix[104].call(null, 0) | 0];
});
register
("clock-milliseconds",
function(args){
if(args)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "clock-milliseconds: no args"], 1);
return [1, Unix[104].call(null, 0) * 1000. | 0];
});
var
cst_02d = "%02d",
cst_May = "May",
bX =
[0,
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"],
bY =
[0,
"January",
"February",
"March",
"April",
cst_May,
"June",
"July",
"August",
"September",
"October",
"November",
"December"],
bZ = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d],
b0 = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d],
b1 = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d],
b2 = [0, [4, 0, [0, 2, 4], 0, 0], "%04d"],
b3 = [0, "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
b4 =
[0,
"Jan",
"Feb",
"Mar",
"Apr",
cst_May,
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"],
b5 = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d],
b6 = [0, [4, 0, [0, 1, 2], 0, 0], "%2d"],
b7 = [0, [4, 0, [0, 2, 3], 0, 0], "%03d"],
b8 = [0, [4, 0, [0, 2, 2], 0, 0], cst_02d];
register
("clock-format",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 1 === a[0]){
var b = args[2], t = a[1];
if(b){
var g = b[1];
if(typeof g === "number" || 3 !== g[0] || b[2]) break a;
}
var cst_a_b_e_H_M_S_Z_Y = "%a %b %e %H:%M:%S %Z %Y";
if(args){
var d = args[2];
if(d){
var e = d[1];
if(typeof e === "number" || ! (3 === e[0] && ! d[2]))
var fmt = cst_a_b_e_H_M_S_Z_Y;
else
var f = e[1], fmt = f;
}
else
var fmt = cst_a_b_e_H_M_S_Z_Y;
}
else
var fmt = cst_a_b_e_H_M_S_Z_Y;
var
tm = Unix[105].call(null, t),
buf = Stdlib_Buffer[1].call(null, 32),
n = caml_ml_string_length(fmt),
i = 0;
for(;;){
if(i >= n) return [3, Stdlib_Buffer[2].call(null, buf)];
if(37 === caml_string_get(fmt, i) && (i + 1 | 0) < n){
var c = caml_string_get(fmt, i + 1 | 0), switcher = c - 65 | 0;
b:
{
if(44 >= switcher >>> 0)
switch(switcher){
case 0:
var
days = caml_obj_dup(bX),
h = tm[7],
m = caml_check_bound(days, h)[h + 1];
Stdlib_Buffer[16].call(null, buf, m);
break b;
case 1:
var
mons = caml_obj_dup(bY),
j = tm[5],
o = caml_check_bound(mons, j)[j + 1];
Stdlib_Buffer[16].call(null, buf, o);
break b;
case 7:
var
p = tm[3],
q = caml_call1(Stdlib_Printf[4].call(null, bZ), p);
Stdlib_Buffer[16].call(null, buf, q);
break b;
case 12:
var
r = tm[2],
s = caml_call1(Stdlib_Printf[4].call(null, b0), r);
Stdlib_Buffer[16].call(null, buf, s);
break b;
case 18:
var
u = tm[1],
v = caml_call1(Stdlib_Printf[4].call(null, b1), u);
Stdlib_Buffer[16].call(null, buf, v);
break b;
case 24:
var
w = 1900 + tm[6] | 0,
x = caml_call1(Stdlib_Printf[4].call(null, b2), w);
Stdlib_Buffer[16].call(null, buf, x);
break b;
case 25:
Stdlib_Buffer[16].call(null, buf, "UTC"); break b;
case 32:
var
days$0 = caml_obj_dup(b3),
k = tm[7],
y = caml_check_bound(days$0, k)[k + 1];
Stdlib_Buffer[16].call(null, buf, y);
break b;
case 35:
var
A = tm[4],
B = caml_call1(Stdlib_Printf[4].call(null, b5), A);
Stdlib_Buffer[16].call(null, buf, B);
break b;
case 36:
var
C = tm[4],
D = caml_call1(Stdlib_Printf[4].call(null, b6), C);
Stdlib_Buffer[16].call(null, buf, D);
break b;
case 41:
var
E = tm[8] + 1 | 0,
F = caml_call1(Stdlib_Printf[4].call(null, b7), E);
Stdlib_Buffer[16].call(null, buf, F);
break b;
case 44:
var
G = tm[5] + 1 | 0,
H = caml_call1(Stdlib_Printf[4].call(null, b8), G);
Stdlib_Buffer[16].call(null, buf, H);
break b;
case 33:
case 39:
var
mons$0 = caml_obj_dup(b4),
l = tm[5],
z = caml_check_bound(mons$0, l)[l + 1];
Stdlib_Buffer[16].call(null, buf, z);
break b;
}
Stdlib_Buffer[12].call(null, buf, 37);
Stdlib_Buffer[12].call(null, buf, c);
}
i = i + 2 | 0;
continue;
}
var I = caml_string_get(fmt, i);
Stdlib_Buffer[12].call(null, buf, I);
var i$0 = i + 1 | 0;
i = i$0;
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "clock-format: (seconds [format])"], 1);
});
register
("jit-stats",
function(args){
var d = Stdlib_Hashtbl[1].call(null, 0, 8);
Stdlib_Hashtbl[11].call(null, d, "threshold", [2, Sx_types[43][1]]);
Stdlib_Hashtbl[11].call(null, d, "budget", [2, Sx_types[47][1]]);
var a = [2, Sx_types[50].call(null, 0)];
Stdlib_Hashtbl[11].call(null, d, "cache-size", a);
Stdlib_Hashtbl[11].call(null, d, "compiled", [2, Sx_types[44][1]]);
Stdlib_Hashtbl[11].call(null, d, "compile-failed", [2, Sx_types[45][1]]);
Stdlib_Hashtbl[11].call
(null, d, "below-threshold", [2, Sx_types[46][1]]);
Stdlib_Hashtbl[11].call(null, d, "evicted", [2, Sx_types[48][1]]);
return [7, d];
});
register
("jit-set-threshold!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
if(! args[2]){var n = a[1]; Sx_types[43][1] = n; return 0;} break;
case 2:
if(! args[2]){var n$0 = a[1]; Sx_types[43][1] = n$0 | 0; return 0;}
break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "jit-set-threshold!: (n) where n is integer"],
1);
});
register
("jit-set-budget!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 1:
if(! args[2]){var n = a[1]; Sx_types[47][1] = n; return 0;} break;
case 2:
if(! args[2]){var n$0 = a[1]; Sx_types[47][1] = n$0 | 0; return 0;}
break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "jit-set-budget!: (n) where n is integer"], 1);
});
register
("jit-reset-cache!",
function(args){
Stdlib_Queue[15].call
(null,
function(param){
var v = param[2];
if(typeof v !== "number" && 8 === v[0]){var l = v[1]; l[5] = 0; return 0;}
return 0;
},
Sx_types[49]);
Stdlib_Queue[11].call(null, Sx_types[49]);
return 0;
});
register
("jit-reset-counters!",
function(args){
Sx_types[44][1] = 0;
Sx_types[45][1] = 0;
Sx_types[46][1] = 0;
Sx_types[48][1] = 0;
return 0;
});
runtime.caml_register_global
(1082,
[0,
primitives,
sx_call_fn,
sx_trampoline_fn,
is_client,
scope_stacks,
scope_trace,
scope_log,
scope_trace_enable,
scope_trace_disable,
scope_trace_drain,
request_cookies,
scope_clear_all,
register,
is_primitive,
get_primitive,
trampoline_hook,
as_int,
all_ints,
as_number,
as_string,
as_list,
as_bool,
to_string,
gensym_counter,
rat_gcd,
make_rat,
rat_of_val,
has_rational,
has_float,
rat_add,
rat_sub,
rat_mul,
rat_div,
sx_write_val,
sx_display_val],
"Sx_primitives");
return;
}
(globalThis));
//# 12900 "../lib/.sx.objs/jsoo/default/sx.cma.js"
//# shape: Sx_runtime:[F(2),F(1),F(1),F(1),F(1),F(2),F(2),F(2),F(1),F(2),F(3),F(2),F(1),F(1),F(1),F(1),F(2),F(2),F(2),F(1),F(1),F(2),F(2),F(1),F(2),F(1),F(1),F(1),F(2),F(2),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(2),F(3),F(3),F(3),F(2),F(2),F(1),F(1),F(3),F(2),F(2),F(1),F(1),F(2),F(1),F(1),F(1),F(2),F(2),F(3),F(1),F(1),F(2),F(1),F(2),F(1)*,F(1)*,F(1),F(2),F(2),F(3),F(3),F(1),F(1),F(2),F(2),F(1)*,F(1)*,F(1)*,F(1)*,F(1)*,F(1)*,F(1),F(1)*,F(1),F(1),F(2),F(1)*,F(2),F(1),F(1)*,F(2),F(1),F(1)*,F(1),F(4),F(2),F(1),F(1),F(2),F(2),F(1),N,F(2),N,N,F(1)*,F(1),F(2),F(2),F(2),F(1)*,F(2)*,F(1)*,F(1)*,F(2),F(4),F(2),F(2),F(2),F(2)*,F(1)*,N,N,N,N,F(1),N,F(1),F(1),F(2)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_string_compare = runtime.caml_string_compare,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Hashtbl = global_data.Stdlib__Hashtbl,
Stdlib_String = global_data.Stdlib__String,
Stdlib_List = global_data.Stdlib__List,
Stdlib = global_data.Stdlib,
Sx_types = global_data.Sx_types,
Sx_primitives = global_data.Sx_primitives,
Stdlib_Array = global_data.Stdlib__Array;
function prim_call(name, args){
var match = Stdlib_Hashtbl[7].call(null, Sx_primitives[1], name);
if(match){var f = match[1]; return caml_call1(f, args);}
var a = Stdlib[28].call(null, "Unknown primitive: ", name);
throw caml_maybe_attach_backtrace([0, Sx_types[9], a], 1);
}
var cst = "";
function value_to_str(v){
if(typeof v === "number"){if(0 === v) return cst;}
else
switch(v[0]){
case 0:
return v[1] ? "true" : "false";
case 2:
var n = v[1]; return Sx_types[34].call(null, n);
case 3:
case 4:
case 5:
var s = v[1]; return s;
}
return Sx_types[112].call(null, v);
}
function sx_to_string(v){return [3, value_to_str(v)];}
function sx_str(args){
var a = Stdlib_List[20].call(null, value_to_str, args);
return Stdlib_String[7].call(null, cst, a);
}
function sx_to_list(v){
if(typeof v === "number"){if(0 === v) return 0;}
else
switch(v[0]){
case 6:
var l = v[1]; return l;
case 21:
var r = v[1]; return r[1];
}
var
a = Sx_types[57].call(null, v),
b = Stdlib[28].call(null, "Expected list, got ", a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
function sx_call(f, args){
if(typeof f !== "number")
switch(f[0]){
case 8:
return caml_call2(Sx_types[8][1], f, args);
case 13:
var k = f[1];
if(args) var x = args[1], x$0 = x; else var x$0 = 0;
return caml_call1(k, x$0);
case 14:
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"callcc continuations must be invoked through the CEK machine"],
1);
case 15:
var fn = f[2]; return caml_call1(fn, args);
case 24:
var cl = f[1]; return caml_call2(Sx_types[6][1], cl, args);
}
var nargs = Stdlib_List[1].call(null, args);
if(0 === nargs)
var args_preview = cst;
else
var
d =
Stdlib_List[20].call
(null,
function(a){
var s = Sx_types[112].call(null, a);
if(40 >= caml_ml_string_length(s)) return s;
var b = Stdlib_String[16].call(null, s, 0, 40);
return Stdlib[28].call(null, b, "..");
},
args),
s = Stdlib_String[7].call(null, ", ", d),
e = Stdlib[28].call(null, s, "]"),
args_preview = Stdlib[28].call(null, " with args=[", e);
var
a = Sx_types[112].call(null, f),
b = Stdlib[28].call(null, a, args_preview),
c = Stdlib[28].call(null, "Not callable: ", b);
throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1);
}
Sx_primitives[2][1] = sx_call;
function sx_apply(f, args_list){return sx_call(f, sx_to_list(args_list));}
var cst_eval_error = "__eval_error__", a = [0, 1];
function sx_apply_cek(f, args_list){
if(typeof f !== "number")
switch(f[0]){
case 15:
case 24:
try{var b = sx_apply(f, args_list); return b;}
catch(e$0){
var e = caml_wrap_exception(e$0);
if(e[1] === Sx_types[11]) throw caml_maybe_attach_backtrace(e, 0);
var match = caml_call1(Sx_types[16][1], e);
if(match){var marker = match[1]; return marker;}
if(e[1] !== Sx_types[9]) throw caml_maybe_attach_backtrace(e, 0);
var msg = e[2], d = Stdlib_Hashtbl[1].call(null, 0, 3);
Stdlib_Hashtbl[11].call(null, d, cst_eval_error, a);
Stdlib_Hashtbl[11].call(null, d, "message", [3, msg]);
return [7, d];
}
}
return sx_apply(f, args_list);
}
function is_eval_error(v){
if(typeof v !== "number" && 7 === v[0]){
var d = v[1], match = Stdlib_Hashtbl[7].call(null, d, cst_eval_error);
if(match){
var a = match[1];
if(typeof a !== "number" && 0 === a[0] && a[1]) return 1;
}
return 0;
}
return 0;
}
function sx_append_b(lst, item){
if(typeof lst !== "number")
switch(lst[0]){
case 6:
var items = lst[1];
return [6, Stdlib[37].call(null, items, [0, item, 0])];
case 21:
var r = lst[1];
r[1] = Stdlib[37].call(null, r[1], [0, item, 0]);
return lst;
}
var
a = Sx_types[57].call(null, lst),
b = Stdlib[28].call(null, "append!: expected list, got ", a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
var
cst_current_item = "current-item",
cst_effect_list = "effect-list",
cst_emitted = "emitted",
cst_extra = "extra",
cst_extra2 = "extra2",
cst_first_render = "first-render",
cst_frames = "frames",
cst_has_effects = "has-effects",
cst_head_name = "head-name",
cst_ho_type = "ho-type",
cst_indexed = "indexed",
cst_ip = "ip",
cst_match_val = "match-val",
cst_phase = "phase",
cst_raw_args = "raw-args",
cst_remaining = "remaining",
cst_results = "results",
cst_scheme = "scheme",
cst_sp = "sp",
cst_stack = "stack",
cst_subscribers = "subscribers",
cst_update_fn = "update-fn",
cst_value = "value";
function sx_dict_set_b(d, k, v){
if(typeof d !== "number")
switch(d[0]){
case 7:
var tbl = d[1];
if(typeof k !== "number")
switch(k[0]){
case 3:
case 5:
var key = k[1];
Stdlib_Hashtbl[11].call(null, tbl, key, v);
return v;
}
break;
case 23:
if(typeof k !== "number" && 3 === k[0]){
var
key$0 = k[1],
f = d[1],
switch$ = caml_string_compare(key$0, cst_indexed);
a:
{
b:
if(0 <= switch$){
if(0 < switch$ && key$0 !== cst_match_val && key$0 !== cst_phase){
if(key$0 !== cst_raw_args){
if(key$0 === cst_remaining){f[5] = v; return v;}
if(key$0 !== cst_results){
if(key$0 === cst_scheme) break b;
if(key$0 !== cst_subscribers){
if(key$0 === cst_update_fn) break b;
if(key$0 !== cst_value) break a;
break b;
}
}
}
f[8] = v;
return v;
}
}
else if(key$0 !== cst_current_item){
if(key$0 !== cst_effect_list && key$0 !== cst_emitted){
if(key$0 === cst_extra) break b;
if(key$0 !== cst_extra2 && key$0 !== cst_first_render){
if(key$0 === cst_has_effects) break b;
if(key$0 === cst_head_name) break b;
if(key$0 !== cst_ho_type) break a;
break b;
}
}
f[10] = v;
return v;
}
f[9] = v;
return v;
}
var
b =
Stdlib[28].call
(null, "dict-set! cek-frame: unknown field ", key$0);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
break;
case 25:
if(typeof k !== "number" && 3 === k[0]){
var key$1 = k[1], f$0 = d[1];
if(key$1 !== cst_ip){
var
c =
Stdlib[28].call
(null, "dict-set! vm-frame: unknown field ", key$1);
throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1);
}
f$0[2] = Sx_types[90].call(null, v);
return v;
}
break;
case 26:
if(typeof k !== "number" && 3 === k[0]){
var key$2 = k[1], m = d[1];
if(key$2 !== cst_frames){
if(key$2 === cst_sp){m[2] = Sx_types[90].call(null, v); return v;}
if(key$2 !== cst_stack){
var
e =
Stdlib[28].call
(null, "dict-set! vm-machine: unknown field ", key$2);
throw caml_maybe_attach_backtrace([0, Sx_types[9], e], 1);
}
if(typeof v !== "number" && 6 === v[0]) return v;
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vm: stack must be array"], 1);
}
a:
{
if(typeof v !== "number" && 6 === v[0]){
var
l = v[1],
a =
Stdlib_List[20].call
(null,
function(x){
if(typeof x !== "number" && 25 === x[0]){var f = x[1]; return f;}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "vm: frames must be vm-frame list"], 1);
},
l);
break a;
}
var a = 0;
}
m[3] = a;
return v;
}
break;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "dict-set!: expected dict and string key"], 1);
}
var
cst_body = "body",
cst_else = "else",
cst_name = "name",
cst_type = "type";
function get_val(container, key){
a:
if(typeof container === "number"){if(0 === container) return 0;}
else{
var cst_env = "env";
switch(container[0]){
case 6:
var l = container[1]; break;
case 7:
var d = container[1];
if(typeof key === "number") break a;
switch(key[0]){
case 3:
case 5:
var k = key[1]; return Sx_types[106].call(null, d, k);
default: break a;
}
case 21:
var l = container[1][1]; break;
case 22:
if(typeof key === "number") break a;
if(3 !== key[0]) break a;
var k$0 = key[1], s = container[1];
return k$0 !== "control"
? k$0
!== cst_env
? k$0
!== "kont"
? k$0
!== cst_phase
? k$0 !== cst_value ? 0 : s[5]
: [3, s[4]]
: s[3]
: s[2]
: s[1];
case 23:
if(typeof key === "number") break a;
if(3 !== key[0]) break a;
var
k$1 = key[1],
f = container[1],
switch$ = caml_string_compare(k$1, cst_head_name);
if(0 <= switch$){
if(0 >= switch$) return f[9];
var switch$0 = caml_string_compare(k$1, cst_results);
if(0 <= switch$0){
if(0 >= switch$0) return f[8];
if(k$1 === cst_scheme) return f[9];
if(k$1 === cst_subscribers) return f[8];
if(k$1 === "then") return f[4];
if(k$1 === cst_type) return [3, f[1]];
if(k$1 === cst_update_fn) return f[9];
if(k$1 === cst_value) return f[9];
if(k$1 === "winders-len") return f[9];
}
else{
if(k$1 === cst_ho_type) return f[9];
if(k$1 === cst_indexed) return f[9];
if(k$1 === cst_match_val) return f[9];
if(k$1 === cst_name) return f[3];
if(k$1 === cst_phase) return f[9];
if(k$1 === "prev-tracking") return f[9];
if(k$1 === cst_raw_args) return f[8];
if(k$1 === cst_remaining) return f[5];
}
}
else{
var switch$1 = caml_string_compare(k$1, cst_env);
if(0 <= switch$1){
if(0 >= switch$1) return f[2];
if(k$1 === "evaled") return f[7];
if(k$1 === cst_extra) return f[9];
if(k$1 === cst_extra2) return f[10];
if(k$1 === "f") return f[6];
if(k$1 === "file") return f[2];
if(k$1 === cst_first_render) return f[10];
if(k$1 === cst_has_effects) return f[9];
}
else{
if(k$1 === "after-thunk") return f[6];
if(k$1 === "args") return f[7];
if(k$1 === cst_body) return f[4];
if(k$1 === "body-result") return f[3];
if(k$1 === cst_current_item) return f[9];
if(k$1 === cst_effect_list) return f[10];
if(k$1 === cst_else) return f[3];
if(k$1 === cst_emitted) return f[10];
}
}
return 0;
case 24:
if(typeof key === "number") break a;
if(3 !== key[0]) break a;
var k$2 = key[1], cl = container[1];
if(k$2 === "vm-closure-env"){
var match$2 = cl[5];
if(! match$2) return 0;
var e = match$2[1];
return [20, e];
}
if(k$2 === "vm-code"){
var c = cl[1], match$0 = c[6];
if(match$0)
var l$1 = match$0[1], bc = l$1;
else{
var
h = Stdlib_Array[14].call(null, function(i){return [2, i];}, c[4]),
l$4 = Stdlib_Array[10].call(null, h);
c[6] = [0, l$4];
var bc = l$4;
}
var match$1 = c[7];
if(match$1)
var l$2 = match$1[1], consts = l$2;
else{
var l$3 = Stdlib_Array[10].call(null, c[5]);
c[7] = [0, l$3];
var consts = l$3;
}
var d$0 = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, d$0, "vc-bytecode", [6, bc]);
Stdlib_Hashtbl[11].call(null, d$0, "vc-constants", [6, consts]);
Stdlib_Hashtbl[11].call(null, d$0, "vc-arity", [2, c[1]]);
Stdlib_Hashtbl[11].call(null, d$0, "vc-rest-arity", [2, c[2]]);
Stdlib_Hashtbl[11].call(null, d$0, "vc-locals", [2, c[3]]);
return [7, d$0];
}
if(k$2 === "vm-globals") return [7, cl[4]];
if(k$2 !== "vm-name"){
if(k$2 !== "vm-upvalues") return 0;
var
g = Stdlib_Array[14].call(null, function(uv){return uv[1];}, cl[2]);
return [6, Stdlib_Array[10].call(null, g)];
}
var match = cl[3];
if(! match) return 0;
var n$1 = match[1];
return [3, n$1];
case 25:
if(typeof key === "number") break a;
if(3 !== key[0]) break a;
var k$3 = key[1], f$0 = container[1];
return k$3 !== "base"
? k$3
!== "closure"
? k$3
!== cst_ip
? k$3 !== "local-cells" ? 0 : 0
: [2, f$0[2]]
: [24, f$0[1]]
: [2, f$0[3]];
case 26:
if(typeof key === "number") break a;
if(3 !== key[0]) break a;
var k$4 = key[1], m = container[1];
return k$4 !== cst_frames
? k$4
!== "globals"
? k$4 !== cst_sp ? k$4 !== cst_stack ? 0 : 0 : [2, m[2]]
: [7, m[4]]
: [6,
Stdlib_List[20].call
(null, function(f){return [25, f];}, m[3])];
default: break a;
}
if(typeof key !== "number" && 2 === key[0]){
var n$0 = key[1];
try{var b = Stdlib_List[8].call(null, l, n$0 | 0); return b;}
catch(exn){return 0;}
}
if(typeof container !== "number"){
switch(container[0]){
case 6:
var l$0 = container[1]; break;
case 21:
var l$0 = container[1][1]; break;
default: break a;
}
if(typeof key !== "number" && 1 === key[0]){
var n = key[1];
try{var a = Stdlib_List[8].call(null, l$0, n); return a;}
catch(exn){return 0;}
}
}
}
return 0;
}
Sx_primitives[13].call
(null,
"get",
function(args){
if(args){
var a = args[2];
if(a){
var match = a[2], k = a[1], c = args[1];
if(! match) return get_val(c, k);
if(! match[2]){
var default$ = match[1];
try{
var v = get_val(c, k), default$0 = 0 === v ? default$ : v;
return default$0;
}
catch(exn){return default$;}
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "get: 2-3 args"], 1);
});
function prim(name){
var match = Stdlib_Hashtbl[7].call(null, Sx_primitives[1], name);
if(! match)
return function(param){
var a = Stdlib[28].call(null, "Missing prim: ", name);
throw caml_maybe_attach_backtrace([0, Sx_types[9], a], 1);};
var f = match[1];
return f;
}
function first(args){return caml_call1(prim("first"), [0, args, 0]);}
function rest(args){return caml_call1(prim("rest"), [0, args, 0]);}
function last(args){return caml_call1(prim("last"), [0, args, 0]);}
function nth(coll, i){
return caml_call1(prim("nth"), [0, coll, [0, i, 0]]);
}
function cons(x, l){return caml_call1(prim("cons"), [0, x, [0, l, 0]]);}
function append(a, b){
return caml_call1(prim("append"), [0, a, [0, b, 0]]);
}
function reverse(l){return caml_call1(prim("reverse"), [0, l, 0]);}
function flatten(l){return caml_call1(prim("flatten"), [0, l, 0]);}
function concat(a, b){
return caml_call1(prim("concat"), [0, a, [0, b, 0]]);
}
function slice(a, b){return caml_call1(prim("slice"), [0, a, [0, b, 0]]);}
function len(a){return caml_call1(prim("len"), [0, a, 0]);}
function get(a, b){return get_val(a, b);}
function sort(a){return caml_call1(prim("sort"), [0, a, 0]);}
function range(a){return caml_call1(prim("range"), [0, a, 0]);}
function unique(a){return caml_call1(prim("unique"), [0, a, 0]);}
function zip(a, b){return caml_call1(prim("zip"), [0, a, [0, b, 0]]);}
function take(a, b){return caml_call1(prim("take"), [0, a, [0, b, 0]]);}
function drop(a, b){return caml_call1(prim("drop"), [0, a, [0, b, 0]]);}
function keyword_p(a){return caml_call1(prim("keyword?"), [0, a, 0]);}
function empty_p(a){return caml_call1(prim("empty?"), [0, a, 0]);}
function number_p(a){return caml_call1(prim("number?"), [0, a, 0]);}
function string_p(a){return caml_call1(prim("string?"), [0, a, 0]);}
function boolean_p(a){return caml_call1(prim("boolean?"), [0, a, 0]);}
function list_p(a){return caml_call1(prim("list?"), [0, a, 0]);}
function dict_p(a){return caml_call1(prim("dict?"), [0, a, 0]);}
function symbol_p(a){return caml_call1(prim("symbol?"), [0, a, 0]);}
function str(args){return [3, sx_str(args)];}
function upper(a){return caml_call1(prim("upper"), [0, a, 0]);}
function upcase(a){return caml_call1(prim("upcase"), [0, a, 0]);}
function lower(a){return caml_call1(prim("lower"), [0, a, 0]);}
function downcase(a){return caml_call1(prim("downcase"), [0, a, 0]);}
function trim(a){return caml_call1(prim("trim"), [0, a, 0]);}
function split(a, b){return caml_call1(prim("split"), [0, a, [0, b, 0]]);}
function join(a, b){return caml_call1(prim("join"), [0, a, [0, b, 0]]);}
function replace(a, b, c){
return caml_call1(prim("replace"), [0, a, [0, b, [0, c, 0]]]);
}
function substring(a, b, c){
return caml_call1(prim("substring"), [0, a, [0, b, [0, c, 0]]]);
}
function assoc(d, k, v){
return caml_call1(prim("assoc"), [0, d, [0, k, [0, v, 0]]]);
}
function dissoc(d, k){
return caml_call1(prim("dissoc"), [0, d, [0, k, 0]]);
}
function merge(a, b){return caml_call1(prim("merge"), [0, a, [0, b, 0]]);}
function keys(a){return caml_call1(prim("keys"), [0, a, 0]);}
function vals(a){return caml_call1(prim("vals"), [0, a, 0]);}
function dict_set(a, b, c){
return caml_call1(prim("dict-set!"), [0, a, [0, b, [0, c, 0]]]);
}
function dict_get(a, b){
return caml_call1(prim("dict-get"), [0, a, [0, b, 0]]);
}
function dict_delete(a, b){
return caml_call1(prim("dict-delete!"), [0, a, [0, b, 0]]);
}
function abs(a){return caml_call1(prim("abs"), [0, a, 0]);}
function sqrt(a){return caml_call1(prim("sqrt"), [0, a, 0]);}
function pow(a, b){return caml_call1(prim("pow"), [0, a, [0, b, 0]]);}
function floor(a){return caml_call1(prim("floor"), [0, a, 0]);}
function ceil(a){return caml_call1(prim("ceil"), [0, a, 0]);}
function round(a){return caml_call1(prim("round"), [0, a, 0]);}
function min(a, b){return caml_call1(prim("min"), [0, a, [0, b, 0]]);}
function max(a, b){return caml_call1(prim("max"), [0, a, [0, b, 0]]);}
function clamp(a, b, c){
return caml_call1(prim("clamp"), [0, a, [0, b, [0, c, 0]]]);
}
function error(msg){
var a = value_to_str(msg);
throw caml_maybe_attach_backtrace([0, Sx_types[9], a], 1);
}
function inspect(v){return [3, Sx_types[112].call(null, v)];}
function apply(f, args){return sx_apply(f, args);}
function spread_attrs(a){
return caml_call1(prim("spread-attrs"), [0, a, 0]);
}
function sx_context(a, b){return prim_call("context", [0, a, [0, b, 0]]);}
function trampoline(v){return v;}
function type_of(v){return [3, Sx_types[57].call(null, v)];}
function unwrap_env(v){
if(typeof v === "number"){
if(0 === v) return Sx_types[20].call(null, 0);
}
else
switch(v[0]){
case 7:
var d = v[1], e = Sx_types[20].call(null, 0);
Stdlib_Hashtbl[12].call
(null,
function(k, v){Sx_types[26].call(null, e, k, v); return 0;},
d);
return e;
case 20:
var e$0 = v[1]; return e$0;
}
var
a = Sx_types[57].call(null, v),
b = Stdlib[28].call(null, "Expected env, got ", a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
function env_has(e, name){
var a = value_to_str(name), b = unwrap_env(e);
return [0, Sx_types[28].call(null, b, a)];
}
function env_get(e, name){
var a = value_to_str(name), b = unwrap_env(e);
return Sx_types[30].call(null, b, a);
}
function env_bind(e, name, v){
var a = value_to_str(name), b = unwrap_env(e);
return Sx_types[26].call(null, b, a, v);
}
function env_set(e, name, v){
var a = value_to_str(name), b = unwrap_env(e);
return Sx_types[32].call(null, b, a, v);
}
function make_env(param){return [20, Sx_types[20].call(null, 0)];}
function env_extend(e){
var a = unwrap_env(e);
return [20, Sx_types[21].call(null, a)];
}
function env_merge(a, b){
var c = unwrap_env(b), d = unwrap_env(a);
return [20, Sx_types[33].call(null, d, c)];
}
function set_lambda_name(l, n){
var a = value_to_str(n);
return Sx_types[74].call(null, l, a);
}
function is_nil(v){return [0, Sx_types[58].call(null, v)];}
function is_thunk(v){return [0, Sx_types[63].call(null, v)];}
function is_lambda(v){return [0, Sx_types[59].call(null, v)];}
function is_component(v){return [0, Sx_types[60].call(null, v)];}
function is_island(v){return [0, Sx_types[61].call(null, v)];}
function is_macro(v){return [0, Sx_types[62].call(null, v)];}
function is_signal(v){return [0, Sx_types[64].call(null, v)];}
function is_callable(v){return [0, Sx_types[66].call(null, v)];}
function is_primitive(name){
var a = value_to_str(name);
return [0, Sx_primitives[14].call(null, a)];
}
function get_primitive(name){
var a = value_to_str(name);
return Sx_primitives[15].call(null, a);
}
function for_each_indexed(fn, coll){
var a = sx_to_list(coll);
Stdlib_List[19].call
(null, function(i, x){sx_call(fn, [0, [2, i], [0, x, 0]]); return 0;}, a);
return 0;
}
var b = [0, 0], c = [0, 1];
function continuation_p(v){
if(typeof v !== "number" && 13 === v[0]) return c;
return b;
}
function make_cek_continuation(captured, rest_kont){
var data = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, data, "captured", captured);
Stdlib_Hashtbl[11].call(null, data, "rest-kont", rest_kont);
return [13, function(v){return v;}, [0, data]];
}
function continuation_data(v){
if(typeof v !== "number" && 13 === v[0]){
var match = v[2];
if(! match) return [7, Stdlib_Hashtbl[1].call(null, 0, 0)];
var d = match[1];
return [7, d];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "not a continuation"], 1);
}
var e = [0, 0], f = [0, 1];
function callcc_continuation_p(v){
if(typeof v !== "number" && 14 === v[0]) return f;
return e;
}
function make_callcc_continuation(captured, winders_len){
a:
{
if(typeof winders_len !== "number")
switch(winders_len[0]){
case 1:
var n$0 = winders_len[1], n = n$0; break a;
case 2:
var f = winders_len[1], n = f | 0; break a;
}
var n = 0;
}
return [14, sx_to_list(captured), n];
}
function callcc_continuation_data(v){
if(typeof v !== "number" && 14 === v[0]){var frames = v[1]; return [6, frames];}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "not a callcc continuation"], 1);
}
var g = [2, 0.];
function callcc_continuation_winders_le(v){
if(typeof v !== "number" && 14 === v[0]){var n = v[2]; return [2, n];}
return g;
}
function host_error(msg){
var a = value_to_str(msg);
throw caml_maybe_attach_backtrace([0, Sx_types[9], a], 1);
}
function dynamic_wind_call(before, body, after, env){
sx_call(before, 0);
var result = sx_call(body, 0);
sx_call(after, 0);
return result;
}
var cst_scope_push = "scope-push!";
function scope_push(name, value){
return prim_call(cst_scope_push, [0, name, [0, value, 0]]);
}
var cst_scope_pop = "scope-pop!";
function scope_pop(name){return prim_call(cst_scope_pop, [0, name, 0]);}
function scope_peek(name){return prim_call("scope-peek", [0, name, 0]);}
function scope_emit(name, value){
return prim_call("scope-emit!", [0, name, [0, value, 0]]);
}
function provide_push(name, value){
return prim_call(cst_scope_push, [0, name, [0, value, 0]]);
}
function provide_pop(name){return prim_call(cst_scope_pop, [0, name, 0]);}
var custom_special_forms = [7, Stdlib_Hashtbl[1].call(null, 0, 4)];
function register_special_form(name, handler){
if(7 !== custom_special_forms[0])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "custom_special_forms not a dict"], 1);
var tbl = custom_special_forms[1], a = value_to_str(name);
Stdlib_Hashtbl[11].call(null, tbl, a, handler);
return handler;
}
var h = [0, 0], i = [0, 1];
function is_else_clause(v){
if(typeof v !== "number"){
var cst_default = "default";
switch(v[0]){
case 0:
if(v[1]) return i; break;
case 4:
var
s = v[1],
a = s === cst_else ? 1 : 0,
b = a || (s === cst_default ? 1 : 0);
return [0, b];
case 5:
var
k = v[1],
c = k === cst_else ? 1 : 0,
d = c || (k === cst_default ? 1 : 0);
return [0, d];
}
}
return h;
}
function signal_value(s){
if(typeof s !== "number")
switch(s[0]){
case 7:
var d = s[1], match = Stdlib_Hashtbl[7].call(null, d, cst_value);
if(! match) return 0;
var v = match[1];
return v;
case 16:
var sig = s[1]; return sig[1];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "not a signal"], 1);
}
function signal_add_sub_b(s, f){
if(typeof s !== "number" && 7 === s[0]){
var d = s[1], match = Stdlib_Hashtbl[7].call(null, d, cst_subscribers);
if(match){
var match$0 = match[1];
if(typeof match$0 !== "number")
switch(match$0[0]){
case 6:
var
items = match$0[1],
a = [21, [0, Stdlib[37].call(null, items, [0, f, 0])]];
Stdlib_Hashtbl[11].call(null, d, cst_subscribers, a);
return 0;
case 21:
var r = match$0[1];
r[1] = Stdlib[37].call(null, r[1], [0, f, 0]);
return 0;
}
}
Stdlib_Hashtbl[11].call(null, d, cst_subscribers, [21, [0, [0, f, 0]]]);
return 0;
}
return 0;
}
function signal_remove_sub_b(s, f){
if(typeof s !== "number" && 7 === s[0]){
var d = s[1], match = Stdlib_Hashtbl[7].call(null, d, cst_subscribers);
if(match){
var match$0 = match[1];
if(typeof match$0 !== "number")
switch(match$0[0]){
case 6:
var
items = match$0[1],
a =
[6,
Stdlib_List[44].call
(null, function(x){return x !== f ? 1 : 0;}, items)];
Stdlib_Hashtbl[11].call(null, d, cst_subscribers, a);
return 0;
case 21:
var r = match$0[1];
r[1] =
Stdlib_List[44].call
(null, function(x){return x !== f ? 1 : 0;}, r[1]);
return 0;
}
}
return 0;
}
return 0;
}
function with_island_scope(register_fn, body_fn){
if(typeof body_fn !== "number" && 15 === body_fn[0]){var f = body_fn[2]; return caml_call1(f, 0);}
return 0;
}
function register_in_scope(dispose_fn){return 0;}
function component_set_param_types_b(comp, types){return 0;}
var j = [6, [0, [6, 0], [0, 0, [0, [0, 0], 0]]]];
function parse_comp_params(params){return j;}
var k = [6, [0, [6, 0], [0, 0, 0]]];
function parse_macro_params(params){return k;}
var l = [0, [6, 0], 0];
function parse_keyword_args(raw_args, env){
return [6, [0, [7, Stdlib_Hashtbl[1].call(null, 0, 0)], l]];
}
var m = [3, "handler"];
function make_handler_def(name, params, body, env){
var d = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, d, cst_type, m);
Stdlib_Hashtbl[11].call(null, d, cst_name, name);
Stdlib_Hashtbl[11].call(null, d, "params", params);
Stdlib_Hashtbl[11].call(null, d, cst_body, body);
return [7, d];
}
var n = [3, "page"];
function make_page_def(name, opts){
var d = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, d, cst_type, n);
Stdlib_Hashtbl[11].call(null, d, cst_name, name);
return [7, d];
}
var o = [2, 1.];
function sf_defhandler(args, env){
var name = first(args), rest_args = rest(args), a = nth(rest_args, o);
return make_handler_def(name, first(rest_args), a, env);
}
function strip_prefix(s, prefix){
if
(typeof s !== "number"
&& 3 === s[0] && typeof prefix !== "number" && 3 === prefix[0]){
var p = prefix[1], s$0 = s[1], pl = caml_ml_string_length(p);
if
(pl <= caml_ml_string_length(s$0)
&& Stdlib_String[16].call(null, s$0, 0, pl) === p)
return [3,
Stdlib_String[16].call
(null, s$0, pl, caml_ml_string_length(s$0) - pl | 0)];
return [3, s$0];
}
return s;
}
function debug_log(a, param){return 0;}
function mutable_list(param){return [21, [0, 0]];}
var jit_hit = [0, 0], jit_miss = [0, 0], jit_skip = [0, 0];
function jit_reset_counters(param){
jit_hit[1] = 0;
jit_miss[1] = 0;
jit_skip[1] = 0;
return 0;
}
var d = Stdlib_Hashtbl[1].call(null, 0, 1), cst_jit_skip = "__jit_skip";
Stdlib_Hashtbl[11].call(null, d, cst_jit_skip, [0, 1]);
function is_jit_skip(v){
if(typeof v !== "number" && 7 === v[0]){
var d = v[1];
return Stdlib_Hashtbl[9].call(null, d, cst_jit_skip);
}
return 0;
}
function jit_skip_p(v){return [0, is_jit_skip(v)];}
var jit_try_call_fn = [0, 0], jit_skip_sentinel = [7, d];
function jit_try_call(f, args){
var match = jit_try_call_fn[1];
if(! match){jit_skip[1]++; return jit_skip_sentinel;}
var hook = match[1];
if(typeof f !== "number" && 8 === f[0]){
var l = f[1];
if(0 !== l[4]){
a:
{
if(typeof args !== "number")
switch(args[0]){
case 6:
var arg_list = args[1]; break a;
case 21:
var arg_list = args[1][1]; break a;
}
var arg_list = 0;
}
var match$0 = caml_call2(hook, f, arg_list);
if(match$0){var result = match$0[1]; jit_hit[1]++; return result;}
jit_miss[1]++;
return jit_skip_sentinel;
}
}
jit_skip[1]++;
return jit_skip_sentinel;
}
runtime.caml_register_global
(211,
[0,
prim_call,
value_to_str,
sx_to_string,
sx_str,
sx_to_list,
sx_call,
sx_apply,
sx_apply_cek,
is_eval_error,
sx_append_b,
sx_dict_set_b,
get_val,
prim,
first,
rest,
last,
nth,
cons,
append,
reverse,
flatten,
concat,
slice,
len,
get,
sort,
range,
unique,
zip,
take,
drop,
keyword_p,
empty_p,
number_p,
string_p,
boolean_p,
list_p,
dict_p,
symbol_p,
str,
upper,
upcase,
lower,
downcase,
trim,
split,
join,
replace,
substring,
assoc,
dissoc,
merge,
keys,
vals,
dict_set,
dict_get,
dict_delete,
abs,
sqrt,
pow,
floor,
ceil,
round,
min,
max,
clamp,
error,
inspect,
apply,
spread_attrs,
sx_context,
trampoline,
type_of,
unwrap_env,
env_has,
env_get,
env_bind,
env_set,
make_env,
env_extend,
env_merge,
set_lambda_name,
is_nil,
is_thunk,
is_lambda,
is_component,
is_island,
is_macro,
is_signal,
is_callable,
is_primitive,
get_primitive,
for_each_indexed,
continuation_p,
make_cek_continuation,
continuation_data,
callcc_continuation_p,
make_callcc_continuation,
callcc_continuation_data,
callcc_continuation_winders_le,
host_error,
dynamic_wind_call,
scope_push,
scope_pop,
scope_peek,
scope_emit,
provide_push,
provide_pop,
custom_special_forms,
register_special_form,
0,
0,
is_else_clause,
signal_value,
signal_add_sub_b,
signal_remove_sub_b,
with_island_scope,
register_in_scope,
component_set_param_types_b,
parse_comp_params,
parse_macro_params,
parse_keyword_args,
make_handler_def,
make_page_def,
sf_defhandler,
strip_prefix,
debug_log,
mutable_list,
jit_try_call_fn,
jit_hit,
jit_miss,
jit_skip,
jit_reset_counters,
jit_skip_sentinel,
is_jit_skip,
jit_skip_p,
jit_try_call],
"Sx_runtime");
return;
}
(globalThis));
//# 14003 "../lib/.sx.objs/jsoo/default/sx.cma.js"
//# shape: Sx_ref:[N,F(1),N,N,N,N,F(1),F(3)*,F(3)*,F(3),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3)*,F(2)*,F(2)*,F(4)*,F(4)*,F(3)*,F(2)*,F(6)*,F(3)*,F(3)*,F(2)*,F(3)*,F(4)*,F(3),F(3),F(4)*,F(4)*,F(4)*,F(5)*,F(3)*,F(3)*,F(3)*,F(3)*,F(3)*,F(4)*,F(3)*,F(2)*,F(4)*,F(1)*,F(3)*,F(2)*,F(2)*,F(4)*,F(3)*,F(1)*,F(3)*,F(2)*,F(1)*,F(4)*,F(2)*,F(1),F(3)*,F(3)*,F(2)*,F(2)*,F(2)*,F(1)*,F(2)*,F(3)*,F(5)*,F(2),F(2),F(2),F(1),F(2),F(2),F(1),F(2),F(1),F(1),F(1),F(1),F(3),F(2),F(2),F(1),F(1),N,F(2),N,N,N,N,N,N,N,N,N,N,N,N,N,F(1),F(1),F(1),F(2),N,F(2),F(1),F(1),F(1),N,F(2),F(1),F(1),F(1),F(1),F(2),F(1),F(3),F(1),F(2),F(3),F(2),F(2),F(3),N,N,F(1),N,N,F(1),F(2),F(2),F(3),F(3),F(3),F(2),F(1),F(1),F(2),F(2),F(2),F(3),F(1),F(2),F(2),F(2),F(2),F(1),F(2),F(2),F(3),F(3),F(2),F(2),F(3),F(1),F(1),F(2),F(1),F(1),F(3),F(3),F(3),F(3),F(3),F(3),F(1),F(1),F(1),F(1),F(3),F(3),F(3),F(5),F(2),F(2),F(2),F(3),F(3),F(3),F(2),F(3),F(2),F(3),F(3),F(2),F(2),F(2),F(2),F(1),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(2),F(3),F(4),F(1),F(1)*,F(2),F(4),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(1),F(5),F(4),F(2),F(1),F(1)*,F(2),F(1),F(1),F(1),F(1),F(2),F(1),F(1),F(2),F(2),F(2),F(2),F(2),F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_equal = runtime.caml_equal,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_trampoline = runtime.caml_trampoline,
caml_trampoline_return = runtime.caml_trampoline_return,
caml_update_dummy = runtime.caml_update_dummy,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Hashtbl = global_data.Stdlib__Hashtbl,
Sx_runtime = global_data.Sx_runtime,
Sx_types = global_data.Sx_types,
Stdlib_List = global_data.Stdlib__List,
Stdlib = global_data.Stdlib,
Stdlib_Printf = global_data.Stdlib__Printf,
Stdlib_String = global_data.Stdlib__String,
Stdlib_Array = global_data.Stdlib__Array,
Sx_primitives = global_data.Sx_primitives,
trampoline_fn = [0, function(v){return v;}];
function trampoline(v){return caml_call1(trampoline_fn[1], v);}
var
protocol_registry = [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
b = [6, 0];
function seq_to_list(v){
if(typeof v === "number"){if(0 === v) return b;}
else
switch(v[0]){
case 3:
var s = v[1], chars = [0, 0];
Stdlib_String[30].call
(null,
function(c){
var a = chars[1];
chars[1] = [0, [3, Stdlib_String[1].call(null, 1, c)], a];
return 0;
},
s);
return [6, Stdlib_List[10].call(null, chars[1])];
case 6:
return v;
case 21:
var items = v[1][1]; return [6, items];
case 29:
var arr = v[1]; return [6, Stdlib_Array[10].call(null, arr)];
}
return v;
}
var cst_eval = "eval";
function make_cek_state(control, env, kont){
return [22, [0, control, env, kont, cst_eval, 0]];
}
var cst_continue = "continue";
function make_cek_value(value, env, kont){
return [22, [0, 0, env, kont, cst_continue, value]];
}
var
cst_env = "env",
cst_io_suspended = "io-suspended",
cst_kont = "kont",
cst_phase = "phase",
cst_request = "request",
c = [3, cst_io_suspended];
function make_cek_suspended(request, env, kont){
var d = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, d, cst_env, env);
Stdlib_Hashtbl[11].call(null, d, cst_kont, kont);
Stdlib_Hashtbl[11].call(null, d, cst_phase, c);
Stdlib_Hashtbl[11].call(null, d, cst_request, request);
return [7, d];
}
var
cst = "=",
d = [0, [3, cst_continue], 0],
e = [3, cst_phase],
f = [3, cst_kont];
function cek_terminal_p(state){
var
a = [0, Sx_runtime[25].call(null, state, e), d],
and = Sx_runtime[1].call(null, cst, a);
if(! Sx_types[67].call(null, and)) return and;
var b = Sx_runtime[25].call(null, state, f);
return Sx_runtime[33].call(null, b);
}
var g = [0, [3, cst_io_suspended], 0], h = [3, cst_phase];
function cek_suspended_p(state){
var a = [0, Sx_runtime[25].call(null, state, h), g];
return Sx_runtime[1].call(null, cst, a);
}
var i = [3, "control"];
function cek_control(s){return Sx_runtime[25].call(null, s, i);}
var j = [3, cst_env];
function cek_env(s){return Sx_runtime[25].call(null, s, j);}
var k = [3, cst_kont];
function cek_kont(s){return Sx_runtime[25].call(null, s, k);}
var l = [3, cst_phase];
function cek_phase(s){return Sx_runtime[25].call(null, s, l);}
var m = [3, cst_request];
function cek_io_request(s){return Sx_runtime[25].call(null, s, m);}
var cst_value = "value", n = [3, cst_value];
function cek_value(s){return Sx_runtime[25].call(null, s, n);}
var cst_if = "if";
function make_if_frame(then_expr, else_expr, env){
return [23, [0, cst_if, env, else_expr, then_expr, 0, 0, 0, 0, 0, 0]];
}
var cst_when = "when";
function make_when_frame(body_exprs, env){
return [23, [0, cst_when, env, 0, body_exprs, 0, 0, 0, 0, 0, 0]];
}
var cst_begin = "begin";
function make_begin_frame(remaining, env){
return [23, [0, cst_begin, env, 0, 0, remaining, 0, 0, 0, 0, 0]];
}
var cst_let = "let";
function make_let_frame(name, remaining, body, local){
return [23, [0, cst_let, local, name, body, remaining, 0, 0, 0, 0, 0]];
}
var cst_define = "define";
function make_define_frame(name, env, has_effects, effect_list){
return [23,
[0,
cst_define,
env,
name,
0,
0,
0,
0,
0,
has_effects,
effect_list]];
}
var cst_define_foreign = "define-foreign";
function make_define_foreign_frame(name, spec, env){
return [23, [0, cst_define_foreign, env, name, 0, 0, 0, 0, 0, 0, 0]];
}
var cst_set = "set";
function make_set_frame(name, env){
return [23, [0, cst_set, env, name, 0, 0, 0, 0, 0, 0, 0]];
}
var cst_arg = "arg";
function make_arg_frame(f, evaled, remaining, env, raw_args, head_name){
var head_name$0 = Sx_types[67].call(null, head_name) ? head_name : 0;
return [23,
[0,
cst_arg,
env,
0,
0,
remaining,
f,
evaled,
raw_args,
head_name$0,
0]];
}
function make_call_frame(f, args, env){
return [23, [0, "call", env, 0, 0, 0, f, args, 0, 0, 0]];
}
var cst_cond = "cond";
function make_cond_frame(remaining, env, scheme_p){
return [23, [0, cst_cond, env, 0, 0, remaining, 0, 0, 0, scheme_p, 0]];
}
var cst_cond_arrow = "cond-arrow";
function make_cond_arrow_frame(test_value, env){
return [23, [0, cst_cond_arrow, env, 0, 0, 0, 0, 0, 0, test_value, 0]];
}
var cst_case = "case";
function make_case_frame(match_val, remaining, env){
return [23, [0, cst_case, env, 0, 0, remaining, 0, 0, 0, match_val, 0]];
}
var cst_thread = "thread";
function make_thread_frame(remaining, env, mode, name){
return [23, [0, cst_thread, env, name, 0, remaining, 0, 0, 0, mode, 0]];
}
var
cst_list = "list",
cst_quote = "quote",
o = [0, [3, cst_list], 0],
p = [4, cst_quote],
q = [4, cst_quote];
function thread_insert_arg(form, value, fenv){
var
a = [0, Sx_runtime[73].call(null, form), o],
b = Sx_runtime[1].call(null, cst, a);
if(! Sx_types[67].call(null, b))
return eval_expr
([6, [0, form, [0, [6, [0, q, [0, value, 0]]], 0]]], fenv);
var
c = Sx_runtime[15].call(null, form),
d = Sx_runtime[18].call(null, [6, [0, p, [0, value, 0]]], c),
e = Sx_runtime[14].call(null, form);
return eval_expr(Sx_runtime[18].call(null, e, d), fenv);
}
var
cst_append = "append",
r = [0, [3, cst_list], 0],
s = [4, cst_quote],
t = [4, cst_quote];
function thread_insert_arg_last(form, value, fenv){
var
a = [0, Sx_runtime[73].call(null, form), r],
b = Sx_runtime[1].call(null, cst, a);
return Sx_types[67].call(null, b)
? eval_expr
(Sx_runtime[1].call
(null,
cst_append,
[0, form, [0, [6, [0, [6, [0, s, [0, value, 0]]], 0]], 0]]),
fenv)
: eval_expr
([6, [0, form, [0, [6, [0, t, [0, value, 0]]], 0]]], fenv);
}
var cst_map = "map", u = [0, 0];
function make_map_frame(f, remaining, results, env){
return [23, [0, cst_map, env, 0, 0, remaining, f, 0, results, u, 0]];
}
var v = [0, 1];
function make_map_indexed_frame(f, remaining, results, env){
return [23, [0, cst_map, env, 0, 0, remaining, f, 0, results, v, 0]];
}
var cst_multi_map = "multi-map";
function make_multi_map_frame(f, remaining_lists, results, env){
return [23,
[0,
cst_multi_map,
env,
0,
0,
remaining_lists,
f,
0,
results,
0,
0]];
}
var cst_filter = "filter";
function make_filter_frame(f, remaining, results, current_item, env){
return [23,
[0,
cst_filter,
env,
0,
0,
remaining,
f,
0,
results,
current_item,
0]];
}
var cst_reduce = "reduce";
function make_reduce_frame(f, remaining, env){
return [23, [0, cst_reduce, env, 0, 0, remaining, f, 0, 0, 0, 0]];
}
var cst_for_each = "for-each";
function make_for_each_frame(f, remaining, env){
return [23, [0, cst_for_each, env, 0, 0, remaining, f, 0, 0, 0, 0]];
}
var cst_some = "some";
function make_some_frame(f, remaining, env){
return [23, [0, cst_some, env, 0, 0, remaining, f, 0, 0, 0, 0]];
}
var cst_every = "every";
function make_every_frame(f, remaining, env){
return [23, [0, cst_every, env, 0, 0, remaining, f, 0, 0, 0, 0]];
}
var cst_scope = "scope";
function make_scope_frame(name, remaining, env){
return [23, [0, cst_scope, env, name, 0, remaining, 0, 0, 0, 0, 0]];
}
var cst_provide = "provide", w = [6, 0];
function make_provide_frame(name, value, remaining, env){
return [23, [0, cst_provide, env, name, 0, remaining, 0, 0, w, value, 0]];
}
var cst_bind = "bind";
function make_bind_frame(body, env, prev_tracking){
return [23, [0, cst_bind, env, 0, body, 0, 0, 0, 0, prev_tracking, 0]];
}
var cst_provide_set = "provide-set";
function make_provide_set_frame(name, env){
return [23, [0, cst_provide_set, env, name, 0, 0, 0, 0, 0, 0, 0]];
}
var cst_scope_acc = "scope-acc", x = [6, 0];
function make_scope_acc_frame(name, value, remaining, env){
var value$0 = Sx_types[67].call(null, value) ? value : 0;
return [23,
[0, cst_scope_acc, env, name, 0, remaining, 0, 0, 0, value$0, x]];
}
var cst_reset = "reset";
function make_reset_frame(env){
return [23, [0, cst_reset, env, 0, 0, 0, 0, 0, 0, 0, 0]];
}
var cst_dict = "dict";
function make_dict_frame(remaining, results, env){
return [23, [0, cst_dict, env, 0, 0, remaining, 0, 0, results, 0, 0]];
}
var cst_and = "and";
function make_and_frame(remaining, env){
return [23, [0, cst_and, env, 0, 0, remaining, 0, 0, 0, 0, 0]];
}
var cst_or = "or";
function make_or_frame(remaining, env){
return [23, [0, cst_or, env, 0, 0, remaining, 0, 0, 0, 0, 0]];
}
var cst_dynamic_wind = "dynamic-wind";
function make_dynamic_wind_frame(phase, body_thunk, after_thunk, env){
return [23,
[0, cst_dynamic_wind, env, 0, 0, 0, after_thunk, 0, 0, phase, 0]];
}
var cst_reactive_reset = "reactive-reset";
function make_reactive_reset_frame(env, update_fn, first_render_p){
return [23,
[0,
cst_reactive_reset,
env,
0,
0,
0,
0,
0,
0,
update_fn,
first_render_p]];
}
var cst_callcc = "callcc";
function make_callcc_frame(env){
return [23, [0, cst_callcc, env, 0, 0, 0, 0, 0, 0, 0, 0]];
}
var cst_wind_after = "wind-after";
function make_wind_after_frame(after_thunk, winders_len, env){
return [23,
[0,
cst_wind_after,
env,
0,
0,
0,
after_thunk,
0,
0,
winders_len,
0]];
}
var cst_wind_return = "wind-return";
function make_wind_return_frame(body_result, env){
return [23, [0, cst_wind_return, env, body_result, 0, 0, 0, 0, 0, 0, 0]];
}
var cst_deref = "deref";
function make_deref_frame(env){
return [23, [0, cst_deref, env, 0, 0, 0, 0, 0, 0, 0, 0]];
}
var cst_ho_setup = "ho-setup";
function make_ho_setup_frame(ho_type, remaining_args, evaled_args, env){
return [23,
[0,
cst_ho_setup,
env,
0,
0,
remaining_args,
0,
evaled_args,
0,
ho_type,
0]];
}
var cst_comp_trace = "comp-trace";
function make_comp_trace_frame(name, file){
return [23, [0, cst_comp_trace, file, name, 0, 0, 0, 0, 0, 0, 0]];
}
var
cst_file = "file",
cst_name = "name",
y = [6, 0],
z = [0, [3, cst_comp_trace], 0],
A = [3, cst_file],
B = [3, cst_name];
function kont_collect_comp_trace(kont$1){
var kont = kont$1;
for(;;){
var a = Sx_runtime[33].call(null, kont);
if(Sx_types[67].call(null, a)) return y;
var
frame = Sx_runtime[14].call(null, kont),
b = [0, frame_type(frame), z],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c)){
var
e = kont_collect_comp_trace(Sx_runtime[15].call(null, kont)),
d = Stdlib_Hashtbl[1].call(null, 0, 2),
f = Sx_runtime[25].call(null, frame, A);
Stdlib_Hashtbl[11].call(null, d, cst_file, f);
var g = Sx_runtime[25].call(null, frame, B);
Stdlib_Hashtbl[11].call(null, d, cst_name, g);
return Sx_runtime[18].call(null, [7, d], e);
}
var kont$0 = Sx_runtime[15].call(null, kont);
kont = kont$0;
}
}
var cst_handler = "handler";
function make_handler_frame(handlers, remaining, env){
return [23, [0, cst_handler, env, 0, 0, remaining, handlers, 0, 0, 0, 0]];
}
var cst_restart = "restart";
function make_restart_frame(restarts, remaining, env){
return [23, [0, cst_restart, env, 0, 0, remaining, restarts, 0, 0, 0, 0]];
}
var cst_signal_return = "signal-return";
function make_signal_return_frame(env, saved_kont){
return [23, [0, cst_signal_return, env, 0, 0, 0, saved_kont, 0, 0, 0, 0]];
}
var cst_raise_eval = "raise-eval";
function make_raise_eval_frame(env, continuable_p){
return [23, [0, cst_raise_eval, env, 0, 0, 0, 0, 0, 0, continuable_p, 0]];
}
var cst_raise_guard = "raise-guard";
function make_raise_guard_frame(env, saved_kont){
return [23, [0, cst_raise_guard, env, 0, 0, saved_kont, 0, 0, 0, 0, 0]];
}
var cst_perform = "perform";
function make_perform_frame(env){
return [23, [0, cst_perform, env, 0, 0, 0, 0, 0, 0, 0, 0]];
}
var cst_vm_resume = "vm-resume";
function make_vm_resume_frame(resume_fn, env){
return [23, [0, cst_vm_resume, env, 0, 0, 0, resume_fn, 0, 0, 0, 0]];
}
var cst_import = "import";
function make_import_frame(import_set, remaining_sets, env){
return [23,
[0, cst_import, env, 0, 0, remaining_sets, 0, import_set, 0, 0, 0]];
}
var cst_parameterize = "parameterize";
function make_parameterize_frame
(remaining, current_param, results, body, env){
return [23,
[0,
cst_parameterize,
env,
0,
body,
remaining,
current_param,
0,
results,
0,
0]];
}
var C = [2, 1.];
function find_matching_handler(handlers$1, condition){
var handlers = handlers$1;
for(;;){
var a = Sx_runtime[33].call(null, handlers);
if(Sx_types[67].call(null, a)) return 0;
var
pair = Sx_runtime[14].call(null, handlers),
pred = Sx_runtime[14].call(null, pair),
handler_fn = Sx_runtime[17].call(null, pair, C),
b = cek_call(pred, [6, [0, condition, 0]]);
if(Sx_types[67].call(null, b)) return handler_fn;
var handlers$0 = Sx_runtime[15].call(null, handlers);
handlers = handlers$0;
}
}
var cst_f = "f", D = [0, [3, cst_handler], 0], E = [3, cst_f];
function kont_find_handler(kont$2, condition){
var kont = kont$2;
for(;;){
var a = Sx_runtime[33].call(null, kont);
if(Sx_types[67].call(null, a)) return 0;
var
frame = Sx_runtime[14].call(null, kont),
b = [0, frame_type(frame), D],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c)){
var
match =
find_matching_handler(Sx_runtime[25].call(null, frame, E), condition),
d = Sx_runtime[83].call(null, match);
if(! Sx_types[67].call(null, d)) return match;
var kont$0 = Sx_runtime[15].call(null, kont);
kont = kont$0;
}
else{var kont$1 = Sx_runtime[15].call(null, kont); kont = kont$1;}
}
}
var
cst$0 = ">",
cst_after_thunk = "after-thunk",
cst_winders_len = "winders-len",
winders_ref = [],
F = [0, [3, cst_handler], 0],
G = [3, cst_f],
H = [0, [3, cst_wind_after], 0],
I = [3, cst_winders_len],
J = [6, 0],
K = [3, cst_after_thunk];
function kont_unwind_to_handler(kont$0, condition){
var kont = kont$0;
for(;;){
var a = Sx_runtime[33].call(null, kont);
if(Sx_types[67].call(null, a)){
var d = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d, cst_handler, 0);
Stdlib_Hashtbl[11].call(null, d, cst_kont, kont);
return [7, d];
}
var
frame = Sx_runtime[14].call(null, kont),
rest_k = Sx_runtime[15].call(null, kont),
b = [0, frame_type(frame), F],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c)){
var
match =
find_matching_handler(Sx_runtime[25].call(null, frame, G), condition),
e = Sx_runtime[83].call(null, match);
if(! Sx_types[67].call(null, e)){
var d$0 = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d$0, cst_handler, match);
Stdlib_Hashtbl[11].call(null, d$0, cst_kont, kont);
return [7, d$0];
}
kont = rest_k;
}
else{
var f = [0, frame_type(frame), H], g = Sx_runtime[1].call(null, cst, f);
if(Sx_types[67].call(null, g)){
var
h = [0, Sx_runtime[25].call(null, frame, I), 0],
i = [0, Sx_runtime[24].call(null, winders_ref[1]), h],
j = Sx_runtime[1].call(null, cst$0, i);
if(Sx_types[67].call(null, j))
winders_ref[1] = Sx_runtime[15].call(null, winders_ref[1]);
cek_call(Sx_runtime[25].call(null, frame, K), J);
kont = rest_k;
}
else
kont = rest_k;
}
}
}
var L = [6, 0];
function wind_escape_to(target_len){
for(;;){
var
a = [0, Sx_runtime[24].call(null, winders_ref[1]), [0, target_len, 0]],
b = Sx_runtime[1].call(null, cst$0, a);
if(! Sx_types[67].call(null, b)) return 0;
var after_thunk = Sx_runtime[14].call(null, winders_ref[1]);
winders_ref[1] = Sx_runtime[15].call(null, winders_ref[1]);
cek_call(after_thunk, L);
}
}
function find_named_restart(restarts$1, name){
var restarts = restarts$1;
for(;;){
var a = Sx_runtime[33].call(null, restarts);
if(Sx_types[67].call(null, a)) return 0;
var
entry = Sx_runtime[14].call(null, restarts),
b = [0, Sx_runtime[14].call(null, entry), [0, name, 0]],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c)) return entry;
var restarts$0 = Sx_runtime[15].call(null, restarts);
restarts = restarts$0;
}
}
var M = [0, [3, cst_restart], 0], N = [3, cst_f];
function kont_find_restart(kont$2, name){
var kont = kont$2;
for(;;){
var a = Sx_runtime[33].call(null, kont);
if(Sx_types[67].call(null, a)) return 0;
var
frame = Sx_runtime[14].call(null, kont),
b = [0, frame_type(frame), M],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c)){
var
match = find_named_restart(Sx_runtime[25].call(null, frame, N), name),
d = Sx_runtime[83].call(null, match);
if(! Sx_types[67].call(null, d))
return [6,
[0, match, [0, frame, [0, Sx_runtime[15].call(null, kont), 0]]]];
var kont$0 = Sx_runtime[15].call(null, kont);
kont = kont$0;
}
else{var kont$1 = Sx_runtime[15].call(null, kont); kont = kont$1;}
}
}
var cst_type = "type", O = [3, cst_type];
function frame_type(f){return Sx_runtime[25].call(null, f, O);}
function kont_push(frame, kont){
return Sx_runtime[18].call(null, frame, kont);
}
function kont_top(kont){return Sx_runtime[14].call(null, kont);}
function kont_pop(kont){return Sx_runtime[15].call(null, kont);}
function kont_empty_p(kont){return Sx_runtime[33].call(null, kont);}
var
captured = [6, 0],
P = [3, "shift without enclosing reset"],
Q = [0, [3, cst_reset], 0],
R = [0, [3, cst_reactive_reset], 0];
function kont_capture_to_reset(kont){
var k = kont, captured$0 = captured;
for(;;){
var a = Sx_runtime[33].call(null, k);
if(Sx_types[67].call(null, a)){
var b = Sx_runtime[2].call(null, P);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
var
frame = Sx_runtime[14].call(null, k),
c = [0, frame_type(frame), Q],
or = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, or))
var or$0 = or;
else
var
d = [0, frame_type(frame), R],
or$0 = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, or$0))
return [6, [0, captured$0, [0, Sx_runtime[15].call(null, k), 0]]];
var
captured$1 =
Sx_runtime[1].call
(null, cst_append, [0, captured$0, [0, [6, [0, frame, 0]], 0]]),
k$0 = Sx_runtime[15].call(null, k);
k = k$0;
captured$0 = captured$1;
}
}
var S = [6, 0], T = [2, 1.];
function kont_push_provides(pairs$1, env, kont$1){
var pairs = pairs$1, kont = kont$1;
for(;;){
var a = Sx_runtime[33].call(null, pairs);
if(Sx_types[67].call(null, a)) return kont;
var
pair = Sx_runtime[14].call(null, pairs),
b = Sx_runtime[17].call(null, pair, T),
c = make_provide_frame(Sx_runtime[14].call(null, pair), b, S, env),
kont$0 = Sx_runtime[18].call(null, c, kont),
pairs$0 = Sx_runtime[15].call(null, pairs);
pairs = pairs$0;
kont = kont$0;
}
}
var U = [0, [3, cst_provide], 0], V = [3, cst_name];
function kont_find_provide(kont$1, name){
var kont = kont$1;
for(;;){
var b = Sx_runtime[33].call(null, kont);
if(Sx_types[67].call(null, b)) return 0;
var
frame = Sx_runtime[14].call(null, kont),
c = [0, frame_type(frame), U],
and = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, and))
var
d = [0, Sx_runtime[25].call(null, frame, V), [0, name, 0]],
a = Sx_runtime[1].call(null, cst, d);
else
var a = and;
if(Sx_types[67].call(null, a)) return frame;
var kont$0 = Sx_runtime[15].call(null, kont);
kont = kont$0;
}
}
var W = [0, [3, cst_scope_acc], 0], X = [3, cst_name];
function kont_find_scope_acc(kont$1, name){
var kont = kont$1;
for(;;){
var b = Sx_runtime[33].call(null, kont);
if(Sx_types[67].call(null, b)) return 0;
var
frame = Sx_runtime[14].call(null, kont),
c = [0, frame_type(frame), W],
and = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, and))
var
d = [0, Sx_runtime[25].call(null, frame, X), [0, name, 0]],
a = Sx_runtime[1].call(null, cst, d);
else
var a = and;
if(Sx_types[67].call(null, a)) return frame;
var kont$0 = Sx_runtime[15].call(null, kont);
kont = kont$0;
}
}
var Y = [0, 0], Z = [0, [3, cst_reactive_reset], 0], _ = [0, 1];
function has_reactive_reset_frame_p(kont$1){
var kont = kont$1;
for(;;){
var a = Sx_runtime[33].call(null, kont);
if(Sx_types[67].call(null, a)) return Y;
var
b = [0, frame_type(Sx_runtime[14].call(null, kont)), Z],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c)) return _;
var kont$0 = Sx_runtime[15].call(null, kont);
kont = kont$0;
}
}
var
captured$0 = [6, 0],
$ = [3, "reactive deref without enclosing reactive-reset"],
aa = [0, [3, cst_reactive_reset], 0];
function kont_capture_to_reactive_reset(kont){
var k = kont, captured = captured$0;
for(;;){
var a = Sx_runtime[33].call(null, k);
if(Sx_types[67].call(null, a)){
var b = Sx_runtime[2].call(null, $);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
var
frame = Sx_runtime[14].call(null, k),
c = [0, frame_type(frame), aa],
d = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, d))
return [6,
[0, captured, [0, frame, [0, Sx_runtime[15].call(null, k), 0]]]];
var
captured$1 =
Sx_runtime[1].call
(null, cst_append, [0, captured, [0, [6, [0, frame, 0]], 0]]),
k$0 = Sx_runtime[15].call(null, k);
k = k$0;
captured = captured$1;
}
}
var custom_special_forms = [];
function register_special_form(name, handler){
return Sx_runtime[11].call(null, custom_special_forms, name, handler);
}
var cst$1 = ".", cst_join = "join", ab = [3, cst$1];
function library_name_key(spec){
var
a = Sx_runtime[5].call(null, spec),
b =
[0,
ab,
[0,
[6,
Stdlib_List[20].call
(null,
function(s){
var a = Sx_runtime[39].call(null, s);
return Sx_types[67].call(null, a)
? Sx_types[68].call(null, s)
: [3, Sx_runtime[4].call(null, [0, s, 0])];
},
a)],
0]];
return Sx_runtime[1].call(null, cst_join, b);
}
var cst_has_key = "has-key?", library_registry = [];
function library_loaded_p(spec){
var a = [0, library_registry, [0, library_name_key(spec), 0]];
return Sx_runtime[1].call(null, cst_has_key, a);
}
var cst_exports = "exports", ac = [3, cst_exports];
function library_exports(spec){
var
a = library_name_key(spec),
b = Sx_runtime[25].call(null, library_registry, a);
return Sx_runtime[25].call(null, b, ac);
}
function register_library(spec, exports){
var d = Stdlib_Hashtbl[1].call(null, 0, 1);
Stdlib_Hashtbl[11].call(null, d, cst_exports, exports);
var a = library_name_key(spec);
return Sx_runtime[11].call(null, library_registry, a, [7, d]);
}
var io_registry = [];
function io_register_b(name, spec){
return Sx_runtime[11].call(null, io_registry, name, spec);
}
function io_registered_p(name){
return Sx_runtime[1].call
(null, cst_has_key, [0, io_registry, [0, name, 0]]);
}
function io_lookup(name){
return Sx_runtime[25].call(null, io_registry, name);
}
var cst_keys = "keys";
function io_names(param){
return Sx_runtime[1].call(null, cst_keys, [0, io_registry, 0]);
}
var foreign_registry = [];
function foreign_register_b(name, spec){
return Sx_runtime[11].call(null, foreign_registry, name, spec);
}
function foreign_registered_p(name){
return Sx_runtime[1].call
(null, cst_has_key, [0, foreign_registry, [0, name, 0]]);
}
function foreign_lookup(name){
return Sx_runtime[25].call(null, foreign_registry, name);
}
function foreign_names(param){
return Sx_runtime[1].call(null, cst_keys, [0, foreign_registry, 0]);
}
var result = [6, 0], ad = [6, 0];
function foreign_parse_params(param_list){
var
a = Sx_runtime[37].call(null, param_list),
items = Sx_types[67].call(null, a) ? param_list : ad;
return foreign_parse_params_loop(items, result);
}
var cst$2 = ">=", ae = [0, [2, 2.], 0], af = [2, 1.];
function foreign_parse_kwargs_b(spec, remaining$1){
var remaining = remaining$1;
for(;;){
var
b = Sx_runtime[33].call(null, remaining),
and = [0, 1 - Sx_types[67].call(null, b)];
if(Sx_types[67].call(null, and)){
var
c = [0, Sx_runtime[24].call(null, remaining), ae],
and$0 = Sx_runtime[1].call(null, cst$2, c);
if(Sx_types[67].call(null, and$0))
var
d = Sx_runtime[14].call(null, remaining),
a = Sx_runtime[32].call(null, d);
else
var a = and$0;
}
else
var a = and;
if(! Sx_types[67].call(null, a)) return 0;
var
v = Sx_runtime[17].call(null, remaining, af),
e = Sx_runtime[32].call(null, v),
f = Sx_types[67].call(null, e) ? Sx_types[69].call(null, v) : v,
g = Sx_runtime[14].call(null, remaining),
h = Sx_types[69].call(null, g);
Sx_runtime[11].call(null, spec, h, f);
var
i = Sx_runtime[15].call(null, remaining),
remaining$0 = Sx_runtime[15].call(null, i);
remaining = remaining$0;
}
}
var
cst_method = "method",
cst_object = "object",
ag = [0, [3, cst$1], 0],
ah = [0, [2, 1.], 0],
ai = [3, cst$1];
function foreign_resolve_binding(binding_str){
var
parts = Sx_runtime[1].call(null, "split", [0, binding_str, ag]),
a = [0, Sx_runtime[24].call(null, parts), ah],
b = Sx_runtime[1].call(null, "<=", a);
if(Sx_types[67].call(null, b)){
var d = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d, cst_method, binding_str);
Stdlib_Hashtbl[11].call(null, d, cst_object, 0);
return [7, d];
}
var
method = Sx_runtime[16].call(null, parts),
c = Sx_runtime[20].call(null, parts),
e = Sx_runtime[15].call(null, c),
f = [0, ai, [0, Sx_runtime[20].call(null, e), 0]],
obj = Sx_runtime[1].call(null, cst_join, f),
d$0 = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d$0, cst_method, method);
Stdlib_Hashtbl[11].call(null, d$0, cst_object, obj);
return [7, d$0];
}
var
cst_args_got = " args, got ",
cst_got = ", got ",
cst_expected = ": expected ",
cst$3 = "<",
cst_any = "any",
cst_foreign = "foreign ",
cst_range = "range",
aj = [3, cst_args_got],
ak = [3, cst_expected],
al = [3, cst_foreign],
am = [2, 0.],
an = [3, cst_type],
ao = [0, [3, cst_any], 0],
ap = [3, cst_got],
aq = [3, "' expected "],
ar = [3, cst_name],
as = [3, ": arg '"],
at = [3, cst_foreign];
function foreign_check_args(name, params, args){
var
b = Sx_runtime[33].call(null, params),
and = [0, 1 - Sx_types[67].call(null, b)];
if(Sx_types[67].call(null, and))
var
c = [0, Sx_runtime[24].call(null, params), 0],
d = [0, Sx_runtime[24].call(null, args), c],
a = Sx_runtime[1].call(null, cst$3, d);
else
var a = and;
if(Sx_types[67].call(null, a)){
var
e = [0, aj, [0, Sx_runtime[24].call(null, args), 0]],
f =
[0, al, [0, name, [0, ak, [0, Sx_runtime[24].call(null, params), e]]]],
g = [3, Sx_runtime[4].call(null, f)],
h = Sx_runtime[2].call(null, g);
throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1);
}
var
i = [0, Sx_runtime[24].call(null, args), 0],
j = [0, Sx_runtime[24].call(null, params), i],
k = [0, am, [0, Sx_runtime[1].call(null, "min", j), 0]],
l = Sx_runtime[1].call(null, cst_range, k),
m = Sx_runtime[5].call(null, l);
Stdlib_List[18].call
(null,
function(i){
var
spec = Sx_runtime[17].call(null, params, i),
val = Sx_runtime[17].call(null, args, i),
expected = Sx_runtime[25].call(null, spec, an),
b = Sx_runtime[1].call(null, cst, [0, expected, ao]),
and = [0, 1 - Sx_types[67].call(null, b)];
if(Sx_types[67].call(null, and))
var
c = value_matches_type_p(val, expected),
a = [0, 1 - Sx_types[67].call(null, c)];
else
var a = and;
if(! Sx_types[67].call(null, a)) return 0;
var
d =
[0,
aq,
[0, expected, [0, ap, [0, Sx_runtime[73].call(null, val), 0]]]],
e =
[0,
at,
[0, name, [0, as, [0, Sx_runtime[25].call(null, spec, ar), d]]]],
f = [3, Sx_runtime[4].call(null, e)],
g = Sx_runtime[2].call(null, f);
throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1);
},
m);
return 0;
}
var
cst_rest = "&rest",
cst_ffi_args = "__ffi-args__",
cst_async = "async",
cst_fn = "fn",
cst_foreign_dispatch = "foreign-dispatch",
cst_returns = "returns",
cst_sync = "sync",
au = [3, cst_name],
av = [0, [3, cst_returns], 0],
aw = [3, cst_returns],
ax = [0, [3, "promise"], 0],
ay = [3, cst_async],
az = [0, [3, cst_async], 0],
aA = [0, [4, cst_ffi_args], 0],
aB = [4, cst_quote],
aC = [4, cst_foreign_dispatch],
aD = [4, cst_perform],
aE = [6, [0, [4, cst_rest], [0, [4, cst_ffi_args], 0]]],
aF = [4, cst_fn],
aG = [0, [4, cst_ffi_args], 0],
aH = [4, cst_quote],
aI = [4, cst_foreign_dispatch],
aJ = [6, [0, [4, cst_rest], [0, [4, cst_ffi_args], 0]]],
aK = [4, cst_fn],
aL = [3, cst_sync],
aM = [3, cst_sync];
function foreign_build_lambda(spec){
var
name = Sx_runtime[25].call(null, spec, au),
a = Sx_runtime[1].call(null, cst_has_key, [0, spec, av]);
if(Sx_types[67].call(null, a))
var
r = Sx_runtime[25].call(null, spec, aw),
b = Sx_runtime[1].call(null, cst, [0, r, ax]),
mode = Sx_types[67].call(null, b) ? ay : aL;
else
var mode = aM;
var c = Sx_runtime[1].call(null, cst, [0, mode, az]);
return Sx_types[67].call(null, c)
? [6,
[0,
aF,
[0,
aE,
[0,
[6,
[0,
aD,
[0, [6, [0, aC, [0, [6, [0, aB, [0, name, 0]]], aA]]], 0]]],
0]]]]
: [6,
[0,
aK,
[0,
aJ,
[0, [6, [0, aI, [0, [6, [0, aH, [0, name, 0]]], aG]]], 0]]]];
}
var
cst_params = "params",
aN = [2, 1.],
aO = [3, cst_name],
aP = [3, cst_params];
function sf_define_foreign(args, env){
var a = Sx_runtime[14].call(null, args), b = Sx_runtime[39].call(null, a);
if(Sx_types[67].call(null, b))
var
c = Sx_runtime[14].call(null, args),
name = Sx_types[68].call(null, c);
else
var name = Sx_runtime[14].call(null, args);
var
param_list = Sx_runtime[17].call(null, args, aN),
spec = [7, Stdlib_Hashtbl[1].call(null, 0, 0)];
Sx_runtime[11].call(null, spec, aO, name);
var d = foreign_parse_params(param_list);
Sx_runtime[11].call(null, spec, aP, d);
var e = Sx_runtime[15].call(null, args);
foreign_parse_kwargs_b(spec, Sx_runtime[15].call(null, e));
foreign_register_b(name, spec);
return spec;
}
function step_sf_define_foreign(args, env, kont){
var
spec = sf_define_foreign(args, env),
a = Sx_runtime[14].call(null, args),
b = Sx_runtime[39].call(null, a);
if(Sx_types[67].call(null, b))
var
c = Sx_runtime[14].call(null, args),
name = Sx_types[68].call(null, c);
else
var name = Sx_runtime[14].call(null, args);
var lambda_expr = foreign_build_lambda(spec);
return make_cek_state
(lambda_expr,
env,
kont_push(make_define_foreign_frame(name, spec, env), kont));
}
var
cst_concat = "concat",
cst_host_call = "host-call",
aQ = [0, [3, "'"], 0],
aR = [3, "foreign-dispatch: unknown foreign function '"],
aS = [3, cst_params],
aT = [3, "js"],
aU = [6, 0],
aV = [0, [3, ": no binding for current platform"], 0],
aW = [3, cst_foreign],
aX = [3, cst_object],
aY = [3, cst_method],
aZ = [3, cst_host_call],
a0 = [3, cst_host_call],
a1 = [3, "host-global"],
a2 = [3, cst_host_call],
a3 = [0, [3, ": host-call not available on this platform"], 0],
a4 = [3, cst_foreign];
function foreign_dispatch(name, args){
var spec = foreign_lookup(name), a = Sx_runtime[83].call(null, spec);
if(Sx_types[67].call(null, a)){
var
b = [3, Sx_runtime[4].call(null, [0, aR, [0, name, aQ]])],
c = Sx_runtime[2].call(null, b);
throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1);
}
var
params = Sx_runtime[25].call(null, spec, aS),
binding = Sx_runtime[25].call(null, spec, aT),
d = Sx_runtime[83].call(null, params),
e = Sx_types[67].call(null, d) ? aU : params;
foreign_check_args(name, e, args);
var f = Sx_runtime[83].call(null, binding);
if(Sx_types[67].call(null, f)){
var
g = [3, Sx_runtime[4].call(null, [0, aW, [0, name, aV]])],
h = Sx_runtime[2].call(null, g);
throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1);
}
var
resolved = foreign_resolve_binding(binding),
obj_name = Sx_runtime[25].call(null, resolved, aX),
method = Sx_runtime[25].call(null, resolved, aY),
i = Sx_runtime[91].call(null, aZ);
if(! Sx_types[67].call(null, i)){
var
o = [3, Sx_runtime[4].call(null, [0, a4, [0, name, a3]])],
p = Sx_runtime[2].call(null, o);
throw caml_maybe_attach_backtrace([0, Sx_types[9], p], 1);
}
var j = Sx_runtime[83].call(null, obj_name);
if(Sx_types[67].call(null, j)){
var
k =
Sx_runtime[1].call
(null, cst_concat, [0, [6, [0, 0, [0, method, 0]]], [0, args, 0]]),
l = Sx_runtime[92].call(null, a0);
return Sx_runtime[7].call(null, l, k);
}
var
obj = cek_call(Sx_runtime[92].call(null, a1), [6, [0, obj_name, 0]]),
m =
Sx_runtime[1].call
(null, cst_concat, [0, [6, [0, obj, [0, method, 0]]], [0, args, 0]]),
n = Sx_runtime[92].call(null, a2);
return Sx_runtime[7].call(null, n, m);
}
var
cst_as = "as",
a5 = [0, [3, cst_as], 0],
a6 = [0, [2, 2.], 0],
a7 = [2, 1.];
function foreign_parse_params_loop(items$1, acc$2){
var items = items$1, acc = acc$2;
for(;;){
var b = Sx_runtime[33].call(null, items);
if(Sx_types[67].call(null, b)) return acc;
var
item = Sx_runtime[14].call(null, items),
rest_items = Sx_runtime[15].call(null, items),
c = Sx_runtime[33].call(null, rest_items),
and = [0, 1 - Sx_types[67].call(null, c)];
if(Sx_types[67].call(null, and)){
var
e = Sx_runtime[14].call(null, rest_items),
and$0 = Sx_runtime[32].call(null, e);
if(Sx_types[67].call(null, and$0)){
var
f = Sx_runtime[14].call(null, rest_items),
g = [0, Sx_types[69].call(null, f), a5],
and$1 = Sx_runtime[1].call(null, cst, g);
if(Sx_types[67].call(null, and$1))
var
h = [0, Sx_runtime[24].call(null, rest_items), a6],
a = Sx_runtime[1].call(null, cst$2, h);
else
var a = and$1;
}
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a)){
var
d = Stdlib_Hashtbl[1].call(null, 0, 2),
t = Sx_runtime[17].call(null, rest_items, a7),
i = Sx_runtime[32].call(null, t),
j =
Sx_types[67].call(null, i)
? Sx_types[69].call(null, t)
: [3, Sx_runtime[4].call(null, [0, t, 0])];
Stdlib_Hashtbl[11].call(null, d, cst_type, j);
var
k = Sx_runtime[39].call(null, item),
l =
Sx_types[67].call(null, k)
? Sx_types[68].call(null, item)
: [3, Sx_runtime[4].call(null, [0, item, 0])];
Stdlib_Hashtbl[11].call(null, d, cst_name, l);
var
acc$0 =
Sx_runtime[1].call
(null, cst_append, [0, acc, [0, [6, [0, [7, d], 0]], 0]]),
m = Sx_runtime[15].call(null, rest_items),
items$0 = Sx_runtime[15].call(null, m);
items = items$0;
acc = acc$0;
}
else{
var
n = Sx_runtime[39].call(null, item),
o =
Sx_types[67].call(null, n)
? Sx_types[68].call(null, item)
: [3, Sx_runtime[4].call(null, [0, item, 0])],
acc$1 =
Sx_runtime[1].call
(null,
cst_append,
[0,
acc,
[0, [6, [0, [23, [0, cst_any, 0, o, 0, 0, 0, 0, 0, 0, 0]], 0]], 0]]);
items = rest_items;
acc = acc$1;
}
}
}
var
cst_args = "args",
cst_op = "op",
a8 = [0, [3, "' \xe2\x80\x94 not in *io-registry*"], 0],
a9 = [3, "io: unknown operation '"],
a_ = [4, cst_perform];
function step_sf_io(args, env, kont){
var
name = Sx_runtime[14].call(null, args),
io_args = Sx_runtime[15].call(null, args),
a = io_registered_p(name),
b = [0, 1 - Sx_types[67].call(null, a)];
if(Sx_types[67].call(null, b)){
var
c = [3, Sx_runtime[4].call(null, [0, a9, [0, name, a8]])],
e = Sx_runtime[2].call(null, c);
throw caml_maybe_attach_backtrace([0, Sx_types[9], e], 1);
}
var d = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d, cst_args, io_args);
Stdlib_Hashtbl[11].call(null, d, cst_op, name);
return make_cek_state
(Sx_runtime[18].call(null, a_, [6, [0, [7, d], 0]]), env, kont);
}
var strict_ref = [];
function set_strict_b(val){strict_ref[1] = val; return 0;}
var prim_param_types_ref = [];
function set_prim_param_types_b(types){
prim_param_types_ref[1] = types;
return 0;
}
var
cst$5 = "-",
cst$4 = "?",
cst_boolean = "boolean",
cst_ends_with = "ends-with?",
cst_keyword = "keyword",
cst_lambda = "lambda",
cst_nil = "nil",
cst_number = "number",
cst_slice = "slice",
cst_string = "string",
cst_symbol = "symbol",
a$ = [0, [3, cst_any], 0],
ba = [0, 1],
bb = [0, [3, cst_number], 0],
bc = [0, [3, cst_string], 0],
bd = [0, [3, cst_boolean], 0],
be = [0, [3, cst_nil], 0],
bf = [0, [3, cst_list], 0],
bg = [0, [3, cst_dict], 0],
bh = [0, [3, cst_lambda], 0],
bi = [0, [3, cst_symbol], 0],
bj = [0, [3, cst_symbol], 0],
bk = [0, [3, cst_keyword], 0],
bl = [0, [3, cst_keyword], 0],
bm = [0, [3, cst$4], 0],
bn = [0, [2, 1.], 0],
bo = [2, 0.],
bp = [0, 1];
function value_matches_type_p(val, expected_type$1){
var expected_type = expected_type$1;
for(;;){
var a = Sx_runtime[1].call(null, cst, [0, expected_type, a$]);
if(Sx_types[67].call(null, a)) return ba;
var b = Sx_runtime[1].call(null, cst, [0, expected_type, bb]);
if(Sx_types[67].call(null, b)) return Sx_runtime[34].call(null, val);
var c = Sx_runtime[1].call(null, cst, [0, expected_type, bc]);
if(Sx_types[67].call(null, c)) return Sx_runtime[35].call(null, val);
var d = Sx_runtime[1].call(null, cst, [0, expected_type, bd]);
if(Sx_types[67].call(null, d)) return Sx_runtime[36].call(null, val);
var e = Sx_runtime[1].call(null, cst, [0, expected_type, be]);
if(Sx_types[67].call(null, e)) return Sx_runtime[83].call(null, val);
var f = Sx_runtime[1].call(null, cst, [0, expected_type, bf]);
if(Sx_types[67].call(null, f)) return Sx_runtime[37].call(null, val);
var g = Sx_runtime[1].call(null, cst, [0, expected_type, bg]);
if(Sx_types[67].call(null, g)) return Sx_runtime[38].call(null, val);
var h = Sx_runtime[1].call(null, cst, [0, expected_type, bh]);
if(Sx_types[67].call(null, h)) return Sx_runtime[85].call(null, val);
var i = Sx_runtime[1].call(null, cst, [0, expected_type, bi]);
if(Sx_types[67].call(null, i)){
var j = [0, Sx_runtime[73].call(null, val), bj];
return Sx_runtime[1].call(null, cst, j);
}
var k = Sx_runtime[1].call(null, cst, [0, expected_type, bk]);
if(Sx_types[67].call(null, k)){
var l = [0, Sx_runtime[73].call(null, val), bl];
return Sx_runtime[1].call(null, cst, l);
}
var
and = Sx_runtime[35].call(null, expected_type),
m =
Sx_types[67].call(null, and)
? Sx_runtime[1].call(null, cst_ends_with, [0, expected_type, bm])
: and;
if(! Sx_types[67].call(null, m)) return bp;
var or = Sx_runtime[83].call(null, val);
if(Sx_types[67].call(null, or)) return or;
var
n =
[0,
Sx_runtime[1].call(null, "string-length", [0, expected_type, 0]),
bn],
o =
[0,
expected_type,
[0, bo, [0, Sx_runtime[1].call(null, cst$5, n), 0]]],
expected_type$0 = Sx_runtime[1].call(null, cst_slice, o);
expected_type = expected_type$0;
}
}
var
cst$7 = " (",
cst_expected$0 = " expected ",
cst$6 = ")",
cst_Type_error = "Type error: ",
bq = [3, "positional"],
br = [3, "rest-type"],
bs = [2, 1.],
bt = [2, 1.],
bu = [0, [3, cst$6], 0],
bv = [3, cst$7],
bw = [3, cst_got],
bx = [3, " for param "],
by = [3, cst_expected$0],
bz = [3, cst_Type_error],
bA = [2, 1.],
bB = [0, [3, cst$6], 0],
bC = [3, cst$7],
bD = [3, cst_got],
bE = [3, " for rest arg "],
bF = [3, cst_expected$0],
bG = [3, cst_Type_error],
bH = [6, 0],
bI = [6, 0];
function strict_check_args(name, args){
var
and = strict_ref[1],
b = Sx_types[67].call(null, and) ? prim_param_types_ref[1] : and;
if(! Sx_types[67].call(null, b)) return 0;
var spec = Sx_runtime[25].call(null, prim_param_types_ref[1], name);
if(! Sx_types[67].call(null, spec)) return 0;
var
positional = Sx_runtime[25].call(null, spec, bq),
rest_type = Sx_runtime[25].call(null, spec, br);
if(Sx_types[67].call(null, positional)){
var
c = Sx_runtime[5].call(null, positional),
d =
[6,
Stdlib_List[21].call
(null,
function(i, p){var i$0 = [2, i]; return [6, [0, i$0, [0, p, 0]]];},
c)],
e = Sx_runtime[5].call(null, d);
Stdlib_List[18].call
(null,
function(pair){
var
idx = Sx_runtime[14].call(null, pair),
param = Sx_runtime[17].call(null, pair, bs),
p_name = Sx_runtime[14].call(null, param),
p_type = Sx_runtime[17].call(null, param, bt),
a = [0, idx, [0, Sx_runtime[24].call(null, args), 0]],
b = Sx_runtime[1].call(null, cst$3, a);
if(Sx_types[67].call(null, b)){
var
val = Sx_runtime[17].call(null, args, idx),
c = value_matches_type_p(val, p_type),
d = [0, 1 - Sx_types[67].call(null, c)];
if(Sx_types[67].call(null, d)){
var
e = [0, bv, [0, [3, Sx_runtime[4].call(null, [0, val, 0])], bu]],
f =
[0,
bz,
[0,
name,
[0,
by,
[0,
p_type,
[0,
bx,
[0, p_name, [0, bw, [0, Sx_runtime[73].call(null, val), e]]]]]]]],
g = [3, Sx_runtime[4].call(null, f)],
h = Sx_runtime[2].call(null, g);
throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1);
}
}
return 0;
},
e);
}
if(Sx_types[67].call(null, rest_type))
var
positional$0 = Sx_types[67].call(null, positional) ? positional : bI,
f = [0, Sx_runtime[24].call(null, positional$0), 0],
g = [0, Sx_runtime[24].call(null, args), f],
a = Sx_runtime[1].call(null, cst$0, g);
else
var a = rest_type;
if(! Sx_types[67].call(null, a)) return 0;
var
positional$1 = Sx_types[67].call(null, positional) ? positional : bH,
h = [0, args, [0, Sx_runtime[24].call(null, positional$1), 0]],
i = Sx_runtime[1].call(null, cst_slice, h),
j = Sx_runtime[5].call(null, i),
k =
[6,
Stdlib_List[21].call
(null,
function(i, v){var i$0 = [2, i]; return [6, [0, i$0, [0, v, 0]]];},
j)],
l = Sx_runtime[5].call(null, k);
Stdlib_List[18].call
(null,
function(pair){
var
idx = Sx_runtime[14].call(null, pair),
val = Sx_runtime[17].call(null, pair, bA),
a = value_matches_type_p(val, rest_type),
b = [0, 1 - Sx_types[67].call(null, a)];
if(! Sx_types[67].call(null, b)) return 0;
var
c = [0, bC, [0, [3, Sx_runtime[4].call(null, [0, val, 0])], bB]],
d =
[0,
bG,
[0,
name,
[0,
bF,
[0,
rest_type,
[0,
bE,
[0, idx, [0, bD, [0, Sx_runtime[73].call(null, val), c]]]]]]]],
e = [3, Sx_runtime[4].call(null, d)],
f = Sx_runtime[2].call(null, e);
throw caml_maybe_attach_backtrace([0, Sx_types[9], f], 1);
},
l);
return 0;
}
var
cst$9 = "\xce\xbb",
cst$8 = "+",
cst_index_of = "index-of",
bJ = [0, [3, cst_rest], 0],
bK = [2, 0.],
bL = [0, [2, 1.], 0],
bM = [0, 1],
bN = [6, 0],
bO = [0, 0];
function bind_lambda_params(params, args, local){
var
rest_idx = Sx_runtime[1].call(null, cst_index_of, [0, params, bJ]),
and = Sx_runtime[34].call(null, rest_idx);
if(Sx_types[67].call(null, and))
var
b = [0, rest_idx, [0, Sx_runtime[24].call(null, params), 0]],
a = Sx_runtime[1].call(null, cst$3, b);
else
var a = and;
if(! Sx_types[67].call(null, a)) return bO;
var
positional =
Sx_runtime[1].call
(null, cst_slice, [0, params, [0, bK, [0, rest_idx, 0]]]),
c = Sx_runtime[1].call(null, cst$8, [0, rest_idx, bL]),
rest_name = Sx_runtime[17].call(null, params, c);
Sx_runtime[93].call
(null,
[15,
cst$9,
function(args$0){
if(args$0){
var a = args$0[2];
if(a && ! a[2]){
var
p = a[1],
i = args$0[1],
b = [0, i, [0, Sx_runtime[24].call(null, args), 0]],
c = Sx_runtime[1].call(null, cst$3, b),
d =
Sx_types[67].call(null, c)
? Sx_runtime[17].call(null, args, i)
: 0,
e = Sx_runtime[3].call(null, p);
return Sx_runtime[77].call(null, local, e, d);
}
}
return 0;
}],
positional);
var
d = [0, Sx_runtime[24].call(null, args), [0, rest_idx, 0]],
e = Sx_runtime[1].call(null, cst$0, d),
f =
Sx_types[67].call(null, e)
? Sx_runtime[1].call(null, cst_slice, [0, args, [0, rest_idx, 0]])
: bN,
g = Sx_runtime[3].call(null, rest_name);
Sx_runtime[77].call(null, local, g, f);
return bM;
}
var
cst_expects = " expects ",
cst_zip = "zip",
bP = [3, cst_args_got],
bQ = [3, cst_expects],
bR = [3, cst_lambda],
bS = [2, 1.];
function call_lambda(f, args, caller_env){
var
params = Sx_types[70].call(null, f),
a = Sx_types[72].call(null, f),
local = Sx_runtime[81].call(null, a, caller_env),
b = bind_lambda_params(params, args, local),
c = [0, 1 - Sx_types[67].call(null, b)];
if(Sx_types[67].call(null, c)){
var
d = [0, Sx_runtime[24].call(null, params), 0],
e = [0, Sx_runtime[24].call(null, args), d],
g = Sx_runtime[1].call(null, cst$0, e);
if(Sx_types[67].call(null, g)){
var
h = [0, bP, [0, Sx_runtime[24].call(null, args), 0]],
i = [0, bQ, [0, Sx_runtime[24].call(null, params), h]],
or = Sx_types[73].call(null, f),
or$0 = Sx_types[67].call(null, or) ? or : bR,
j = [3, Sx_runtime[4].call(null, [0, or$0, i])],
k = Sx_runtime[2].call(null, j);
throw caml_maybe_attach_backtrace([0, Sx_types[9], k], 1);
}
var
l = Sx_runtime[1].call(null, cst_zip, [0, params, [0, args, 0]]),
m = Sx_runtime[5].call(null, l);
Stdlib_List[18].call
(null,
function(pair){
var
a = Sx_runtime[17].call(null, pair, bS),
b = Sx_runtime[14].call(null, pair),
c = Sx_runtime[3].call(null, b);
Sx_runtime[77].call(null, local, c, a);
return 0;
},
m);
var
n = [0, params, [0, Sx_runtime[24].call(null, args), 0]],
o = Sx_runtime[1].call(null, cst_slice, n),
p = Sx_runtime[5].call(null, o);
Stdlib_List[18].call
(null,
function(p){
var a = Sx_runtime[3].call(null, p);
Sx_runtime[77].call(null, local, a, 0);
return 0;
},
p);
}
var q = Sx_types[71].call(null, f);
return Sx_types[54].call(null, q, local);
}
var cst_children = "children", bT = [2, 1.], bU = [3, cst_children];
function call_component(comp, raw_args, env){
var
parsed = parse_keyword_args(raw_args, env),
kwargs = Sx_runtime[14].call(null, parsed),
children = Sx_runtime[17].call(null, parsed, bT),
a = Sx_types[81].call(null, comp),
local = Sx_runtime[81].call(null, a, env),
b = Sx_types[79].call(null, comp),
c = Sx_runtime[5].call(null, b);
Stdlib_List[18].call
(null,
function(p){
var
or = Sx_runtime[56].call(null, kwargs, p),
or$0 = Sx_types[67].call(null, or) ? or : 0,
a = Sx_runtime[3].call(null, p);
Sx_runtime[77].call(null, local, a, or$0);
return 0;
},
c);
var d = Sx_types[82].call(null, comp);
if(Sx_types[67].call(null, d)){
var e = Sx_runtime[3].call(null, bU);
Sx_runtime[77].call(null, local, e, children);
}
var f = Sx_types[80].call(null, comp);
return Sx_types[54].call(null, f, local);
}
var
cst_assoc = "assoc",
cst_i = "i",
cst_inc = "inc",
cst_skip = "skip",
bV = [6, 0],
bW = [2, 0.],
bX = [3, cst_i],
bY = [0, 0],
bZ = [3, cst_skip],
b0 = [3, cst_i],
b1 = [3, cst_skip],
b2 = [3, cst_i],
b3 = [0, 0],
b4 = [3, cst_skip],
b5 = [0, [3, cst_keyword], 0],
b6 = [3, cst_i],
b7 = [0, 1],
b8 = [3, cst_skip],
b9 = [3, cst_i];
function parse_keyword_args(raw_args, env){
var
kwargs = [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
a = Sx_runtime[5].call(null, raw_args),
d = Stdlib_Hashtbl[1].call(null, 0, 2),
b = Sx_runtime[2].call(null, bX);
Stdlib_Hashtbl[11].call(null, d, b, bW);
var c = Sx_runtime[2].call(null, bZ);
Stdlib_Hashtbl[11].call(null, d, c, bY);
var children = [0, bV];
Stdlib_List[26].call
(null,
function(state, arg){
var
idx = Sx_runtime[25].call(null, state, b0),
skip = Sx_runtime[25].call(null, state, b1);
if(Sx_types[67].call(null, skip)){
var
b =
[0,
state,
[0,
b4,
[0,
b3,
[0, b2, [0, Sx_runtime[1].call(null, cst_inc, [0, idx, 0]), 0]]]]];
return Sx_runtime[1].call(null, cst_assoc, b);
}
var
c = [0, Sx_runtime[73].call(null, arg), b5],
and = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, and))
var
d = [0, Sx_runtime[24].call(null, raw_args), 0],
e = [0, Sx_runtime[1].call(null, cst_inc, [0, idx, 0]), d],
a = Sx_runtime[1].call(null, cst$3, e);
else
var a = and;
if(Sx_types[67].call(null, a)){
var
f = Sx_runtime[1].call(null, cst_inc, [0, idx, 0]),
g =
trampoline(eval_expr(Sx_runtime[17].call(null, raw_args, f), env)),
h = Sx_types[69].call(null, arg);
Sx_runtime[11].call(null, kwargs, h, g);
var
i =
[0,
state,
[0,
b8,
[0,
b7,
[0, b6, [0, Sx_runtime[1].call(null, cst_inc, [0, idx, 0]), 0]]]]];
return Sx_runtime[1].call(null, cst_assoc, i);
}
var j = trampoline(eval_expr(arg, env));
children[1] = Sx_runtime[10].call(null, children[1], j);
var
k =
[0,
state,
[0, b9, [0, Sx_runtime[1].call(null, cst_inc, [0, idx, 0]), 0]]];
return Sx_runtime[1].call(null, cst_assoc, k);
},
[7, d],
a);
return [6, [0, kwargs, [0, children[1], 0]]];
}
var
cst$10 = "=>",
b_ = [0, [3, cst_list], 0],
b$ = [0, [2, 2.], 0],
ca = [0, [2, 3.], 0],
cb = [0, [3, cst_symbol], 0],
cc = [2, 1.],
cd = [0, [3, cst$10], 0],
ce = [2, 1.];
function cond_scheme_p(clauses){
var a = Sx_runtime[5].call(null, clauses);
return [0,
Stdlib_List[33].call
(null,
function(c){
var
a = [0, Sx_runtime[73].call(null, c), b_],
and = Sx_runtime[1].call(null, cst, a);
if(Sx_types[67].call(null, and)){
var
b = [0, Sx_runtime[24].call(null, c), b$],
or = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, or))
var or$0 = or;
else{
var
d = [0, Sx_runtime[24].call(null, c), ca],
and$0 = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, and$0)){
var
e = Sx_runtime[17].call(null, c, cc),
f = [0, Sx_runtime[73].call(null, e), cb],
and$1 = Sx_runtime[1].call(null, cst, f);
if(Sx_types[67].call(null, and$1))
var
g = Sx_runtime[17].call(null, c, ce),
h = [0, Sx_types[68].call(null, g), cd],
or$0 = Sx_runtime[1].call(null, cst, h);
else
var or$0 = and$1;
}
else
var or$0 = and$0;
}
}
else
var or$0 = and;
return Sx_types[67].call(null, or$0);
},
a)];
}
var
cst_else = "else",
cf = [0, [3, cst_keyword], 0],
cg = [0, [3, cst_else], 0],
ch = [0, [3, cst_symbol], 0],
ci = [0, [3, cst_else], 0],
cj = [0, [3, ":else"], 0];
function is_else_clause(test){
var
a = [0, Sx_runtime[73].call(null, test), cf],
and = Sx_runtime[1].call(null, cst, a);
if(Sx_types[67].call(null, and))
var
b = [0, Sx_types[69].call(null, test), cg],
or = Sx_runtime[1].call(null, cst, b);
else
var or = and;
if(Sx_types[67].call(null, or)) return or;
var
c = [0, Sx_runtime[73].call(null, test), ch],
and$0 = Sx_runtime[1].call(null, cst, c);
if(! Sx_types[67].call(null, and$0)) return and$0;
var
d = [0, Sx_types[68].call(null, test), ci],
or$0 = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, or$0)) return or$0;
var e = [0, Sx_types[68].call(null, test), cj];
return Sx_runtime[1].call(null, cst, e);
}
var
cst$11 = "*",
cst$12 = "/",
ck = [2, 1.],
cl = [0, [2, 2.], 0],
cm = [6, 0],
cn = [6, 0],
co = [0, [3, cst_list], 0],
cp = [0, [2, 2.], 0],
cq = [0, [3, cst_symbol], 0],
cr = [2, 1.],
cs = [0, [2, 1.], 0],
ct = [3, cst_begin],
cu = [0, [2, 2.], 0],
cv = [2, 0.],
cw = [0, [3, cst_symbol], 0],
cx = [0, [2, 2.], 0],
cy = [0, [2, 2.], 0],
cz = [0, [2, 2.], 0],
cA = [0, [2, 2.], 0];
function sf_named_let(args, env){
var
b = Sx_runtime[14].call(null, args),
loop_name = Sx_types[68].call(null, b),
bindings = Sx_runtime[17].call(null, args, ck),
body = Sx_runtime[1].call(null, cst_slice, [0, args, cl]),
c = Sx_runtime[14].call(null, bindings),
d = [0, Sx_runtime[73].call(null, c), co],
and = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, and))
var
e = Sx_runtime[14].call(null, bindings),
f = [0, Sx_runtime[24].call(null, e), cp],
a = Sx_runtime[1].call(null, cst, f);
else
var a = and;
var params = [0, cm], inits = [0, cn];
if(Sx_types[67].call(null, a)){
var g = Sx_runtime[5].call(null, bindings);
Stdlib_List[18].call
(null,
function(binding){
var
b = Sx_runtime[14].call(null, binding),
c = [0, Sx_runtime[73].call(null, b), cq],
d = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, d))
var
e = Sx_runtime[14].call(null, binding),
a = Sx_types[68].call(null, e);
else
var a = Sx_runtime[14].call(null, binding);
params[1] = Sx_runtime[10].call(null, params[1], a);
var f = Sx_runtime[17].call(null, binding, cr);
inits[1] = Sx_runtime[10].call(null, inits[1], f);
return 0;
},
g);
}
else{
var
o = [0, Sx_runtime[24].call(null, bindings), cu],
p = [0, cv, [0, Sx_runtime[1].call(null, cst$12, o), 0]],
q = Sx_runtime[1].call(null, cst_range, p),
r = Sx_runtime[5].call(null, q);
Stdlib_List[26].call
(null,
function(acc, pair_idx){
var
b = Sx_runtime[1].call(null, cst$11, [0, pair_idx, cx]),
c = Sx_runtime[17].call(null, bindings, b),
d = [0, Sx_runtime[73].call(null, c), cw],
e = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, e))
var
f = Sx_runtime[1].call(null, cst$11, [0, pair_idx, cy]),
g = Sx_runtime[17].call(null, bindings, f),
a = Sx_types[68].call(null, g);
else
var
k = Sx_runtime[1].call(null, cst$11, [0, pair_idx, cA]),
a = Sx_runtime[17].call(null, bindings, k);
params[1] = Sx_runtime[10].call(null, params[1], a);
var
h = [0, Sx_runtime[1].call(null, cst$11, [0, pair_idx, cz]), 0],
i = Sx_runtime[1].call(null, cst_inc, h),
j = Sx_runtime[17].call(null, bindings, i);
inits[1] = Sx_runtime[10].call(null, inits[1], j);
return 0;
},
0,
r);
}
var
h = [0, Sx_runtime[24].call(null, body), cs],
i = Sx_runtime[1].call(null, cst, h);
if(Sx_types[67].call(null, i))
var loop_body = Sx_runtime[14].call(null, body);
else
var
n = Sx_types[55].call(null, ct),
loop_body = Sx_runtime[18].call(null, n, body);
var
loop_fn = Sx_types[42].call(null, params[1], loop_body, env),
j = Sx_runtime[3].call(null, loop_name);
Sx_runtime[82].call(null, loop_fn, j);
var
k = Sx_runtime[3].call(null, loop_name),
l = Sx_types[72].call(null, loop_fn);
Sx_runtime[77].call(null, l, k, loop_fn);
var
m = Sx_runtime[5].call(null, inits[1]),
init_vals =
[6,
Stdlib_List[20].call
(null, function(e){return trampoline(eval_expr(e, env));}, m)];
return cek_call(loop_fn, init_vals);
}
var
cB = [0, [2, 1.], 0],
cC = [0, [3, cst_symbol], 0],
cD = [0, [3, cst_list], 0],
cE = [0, [2, 3.], 0],
cF = [0, [3, cst_keyword], 0],
cG = [2, 1.],
cH = [0, [3, cst_as], 0],
cI = [2, 1.],
cJ = [3, cst_begin];
function sf_lambda(args, env){
var
params_expr = Sx_runtime[14].call(null, args),
body_exprs = Sx_runtime[15].call(null, args),
a = [0, Sx_runtime[24].call(null, body_exprs), cB],
b = Sx_runtime[1].call(null, cst, a);
if(Sx_types[67].call(null, b))
var body = Sx_runtime[14].call(null, body_exprs);
else
var
d = Sx_types[55].call(null, cJ),
body = Sx_runtime[18].call(null, d, body_exprs);
var
c = Sx_runtime[5].call(null, params_expr),
param_names =
[6,
Stdlib_List[20].call
(null,
function(p){
var
b = [0, Sx_runtime[73].call(null, p), cC],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c)) return Sx_types[68].call(null, p);
var
d = [0, Sx_runtime[73].call(null, p), cD],
and = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, and)){
var
e = [0, Sx_runtime[24].call(null, p), cE],
and$0 = Sx_runtime[1].call(null, cst, e);
if(Sx_types[67].call(null, and$0)){
var
f = Sx_runtime[17].call(null, p, cG),
g = [0, Sx_runtime[73].call(null, f), cF],
and$1 = Sx_runtime[1].call(null, cst, g);
if(Sx_types[67].call(null, and$1))
var
h = Sx_runtime[17].call(null, p, cI),
i = [0, Sx_types[69].call(null, h), cH],
a = Sx_runtime[1].call(null, cst, i);
else
var a = and$1;
}
else
var a = and$0;
}
else
var a = and;
if(! Sx_types[67].call(null, a)) return p;
var j = Sx_runtime[14].call(null, p);
return Sx_types[68].call(null, j);
},
c)];
return Sx_types[42].call(null, param_names, body, env);
}
var
cst_current_file = "*current-file*",
cst_effect_annotations = "*effect-annotations*",
cst_effects = "effects",
cst$13 = "~",
cK = [2, 1.],
cL = [3, cst$13],
cM = [2, 1.],
cN = [2, 2.],
cO = [3, "auto"],
cP = [3, "affinity"],
cQ = [3, cst_effects],
cR = [0, [3, cst_list], 0],
cS = [0, [3, cst_symbol], 0],
cT = [3, cst_effect_annotations],
cU = [3, cst_effect_annotations],
cV = [3, cst_effect_annotations],
cW = [3, cst_current_file],
cX = [3, cst_current_file];
function sf_defcomp(args, env){
var
name_sym = Sx_runtime[14].call(null, args),
params_raw = Sx_runtime[17].call(null, args, cK),
body = Sx_runtime[16].call(null, args),
a = Sx_types[68].call(null, name_sym),
comp_name = Sx_runtime[126].call(null, a, cL),
parsed = parse_comp_params(params_raw),
params = Sx_runtime[14].call(null, parsed),
has_children = Sx_runtime[17].call(null, parsed, cM),
param_types = Sx_runtime[17].call(null, parsed, cN),
affinity = defcomp_kwarg(args, cP, cO),
comp =
Sx_types[51].call
(null, comp_name, params, has_children, body, env, affinity),
effects = defcomp_kwarg(args, cQ, 0),
b = Sx_runtime[83].call(null, param_types),
and = [0, 1 - Sx_types[67].call(null, b)];
if(Sx_types[67].call(null, and)){
var c = Sx_runtime[1].call(null, cst_keys, [0, param_types, 0]);
Sx_runtime[33].call(null, c);
}
var
d = Sx_runtime[83].call(null, effects),
e = [0, 1 - Sx_types[67].call(null, d)];
if(Sx_types[67].call(null, e)){
var
f = [0, Sx_runtime[73].call(null, effects), cR],
g = Sx_runtime[1].call(null, cst, f);
if(Sx_types[67].call(null, g))
var
h = Sx_runtime[5].call(null, effects),
effect_list =
[6,
Stdlib_List[20].call
(null,
function(e){
var
a = [0, Sx_runtime[73].call(null, e), cS],
b = Sx_runtime[1].call(null, cst, a);
return Sx_types[67].call(null, b)
? Sx_types[68].call(null, e)
: [3, Sx_runtime[4].call(null, [0, e, 0])];
},
h)];
else
var
effect_list =
[6, [0, [3, Sx_runtime[4].call(null, [0, effects, 0])], 0]];
var
i = Sx_runtime[75].call(null, env, cT),
effect_anns =
Sx_types[67].call(null, i)
? Sx_runtime[76].call(null, env, cU)
: [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
j = Sx_types[68].call(null, name_sym);
Sx_runtime[11].call(null, effect_anns, j, effect_list);
var k = Sx_runtime[3].call(null, cV);
Sx_runtime[77].call(null, env, k, effect_anns);
}
var l = Sx_runtime[75].call(null, env, cW);
if(Sx_types[67].call(null, l)){
var m = Sx_runtime[76].call(null, env, cX);
Sx_types[78].call(null, comp, m);
}
var
n = Sx_types[68].call(null, name_sym),
o = Sx_runtime[3].call(null, n);
Sx_runtime[77].call(null, env, o, comp);
return comp;
}
var
cY = [0, [2, 1.], 0],
cZ = [0, [2, 1.], 0],
c0 = [2, 2.],
c1 = [0, [3, cst_keyword], 0],
c2 = [0, [2, 1.], 0],
c3 = [0, [2, 1.], 0],
c4 = [0, [3, cst_keyword], 0];
function defcomp_kwarg(args, key, default$){
var
a = [0, Sx_runtime[24].call(null, args), cY],
end = Sx_runtime[1].call(null, cst$5, a),
result = [0, default$],
b = Sx_runtime[1].call(null, cst_range, [0, c0, [0, end, cZ]]),
c = Sx_runtime[5].call(null, b);
Stdlib_List[18].call
(null,
function(i){
var
b = Sx_runtime[17].call(null, args, i),
c = [0, Sx_runtime[73].call(null, b), c1],
and = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, and)){
var
d = Sx_runtime[17].call(null, args, i),
e = [0, Sx_types[69].call(null, d), [0, key, 0]],
and$0 = Sx_runtime[1].call(null, cst, e);
if(Sx_types[67].call(null, and$0))
var
f = [0, Sx_runtime[1].call(null, cst$8, [0, i, c2]), [0, end, 0]],
a = Sx_runtime[1].call(null, cst$3, f);
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a)){
var
g = Sx_runtime[1].call(null, cst$8, [0, i, c3]),
val = Sx_runtime[17].call(null, args, g),
h = [0, Sx_runtime[73].call(null, val), c4],
j = Sx_runtime[1].call(null, cst, h),
k = Sx_types[67].call(null, j) ? Sx_types[69].call(null, val) : val;
result[1] = k;
}
return 0;
},
c);
return result[1];
}
var
c5 = [6, 0],
c6 = [0, 0],
c7 = [0, 0],
c8 = [0, [3, cst_list], 0],
c9 = [0, [2, 3.], 0],
c_ = [0, [3, cst_symbol], 0],
c$ = [0, [3, cst_keyword], 0],
da = [2, 1.],
db = [0, [3, cst_as], 0],
dc = [2, 1.],
dd = [2, 2.],
de = [0, [3, cst_symbol], 0],
df = [0, [3, cst_symbol], 0],
dg = [0, [3, "&key"], 0],
dh = [0, 1],
di = [0, [3, cst_rest], 0],
dj = [0, 1],
dk = [0, [3, "&children"], 0],
dl = [0, 1];
function parse_comp_params(params_expr){
var
param_types = [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
a = Sx_runtime[5].call(null, params_expr),
params = [0, c5],
has_children = [0, c6],
in_key = [0, c7];
Stdlib_List[18].call
(null,
function(p){
var
b = [0, Sx_runtime[73].call(null, p), c8],
and = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, and)){
var
c = [0, Sx_runtime[24].call(null, p), c9],
and$0 = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, and$0)){
var
d = Sx_runtime[14].call(null, p),
e = [0, Sx_runtime[73].call(null, d), c_],
and$1 = Sx_runtime[1].call(null, cst, e);
if(Sx_types[67].call(null, and$1)){
var
f = Sx_runtime[17].call(null, p, da),
g = [0, Sx_runtime[73].call(null, f), c$],
and$2 = Sx_runtime[1].call(null, cst, g);
if(Sx_types[67].call(null, and$2))
var
h = Sx_runtime[17].call(null, p, dc),
i = [0, Sx_types[69].call(null, h), db],
a = Sx_runtime[1].call(null, cst, i);
else
var a = and$2;
}
else
var a = and$1;
}
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a)){
var
j = Sx_runtime[14].call(null, p),
name = Sx_types[68].call(null, j),
ptype = Sx_runtime[17].call(null, p, dd),
k = [0, Sx_runtime[73].call(null, ptype), de],
l = Sx_runtime[1].call(null, cst, k),
type_val =
Sx_types[67].call(null, l) ? Sx_types[68].call(null, ptype) : ptype,
m = [0, 1 - Sx_types[67].call(null, has_children[1])];
if(Sx_types[67].call(null, m)){
params[1] = Sx_runtime[10].call(null, params[1], name);
Sx_runtime[11].call(null, param_types, name, type_val);
}
}
else{
var
n = [0, Sx_runtime[73].call(null, p), df],
o = Sx_runtime[1].call(null, cst, n);
if(Sx_types[67].call(null, o)){
var
name$0 = Sx_types[68].call(null, p),
q = Sx_runtime[1].call(null, cst, [0, name$0, dg]);
if(Sx_types[67].call(null, q))
in_key[1] = dh;
else{
var r = Sx_runtime[1].call(null, cst, [0, name$0, di]);
if(Sx_types[67].call(null, r))
has_children[1] = dj;
else{
var s = Sx_runtime[1].call(null, cst, [0, name$0, dk]);
if(Sx_types[67].call(null, s))
has_children[1] = dl;
else if(! Sx_types[67].call(null, has_children[1]))
if(Sx_types[67].call(null, in_key[1]))
params[1] = Sx_runtime[10].call(null, params[1], name$0);
else
params[1] = Sx_runtime[10].call(null, params[1], name$0);
}
}
}
}
return 0;
},
a);
return [6, [0, params[1], [0, has_children[1], [0, param_types, 0]]]];
}
var
dm = [2, 1.],
dn = [0, [2, 2.], 0],
dp = [0, [2, 1.], 0],
dq = [3, cst$13],
dr = [2, 1.],
ds = [3, cst_current_file],
dt = [3, cst_current_file],
du = [3, cst_begin];
function sf_defisland(args, env){
var
name_sym = Sx_runtime[14].call(null, args),
params_raw = Sx_runtime[17].call(null, args, dm),
body_exprs = Sx_runtime[1].call(null, cst_slice, [0, args, dn]),
a = [0, Sx_runtime[24].call(null, body_exprs), dp],
b = Sx_runtime[1].call(null, cst, a);
if(Sx_types[67].call(null, b))
var body = Sx_runtime[14].call(null, body_exprs);
else
var
h = Sx_types[55].call(null, du),
body = Sx_runtime[18].call(null, h, body_exprs);
var
c = Sx_types[68].call(null, name_sym),
comp_name = Sx_runtime[126].call(null, c, dq),
parsed = parse_comp_params(params_raw),
params = Sx_runtime[14].call(null, parsed),
has_children = Sx_runtime[17].call(null, parsed, dr),
island =
Sx_types[52].call(null, comp_name, params, has_children, body, env),
d = Sx_runtime[75].call(null, env, ds);
if(Sx_types[67].call(null, d)){
var e = Sx_runtime[76].call(null, env, dt);
Sx_types[78].call(null, island, e);
}
var
f = Sx_types[68].call(null, name_sym),
g = Sx_runtime[3].call(null, f);
Sx_runtime[77].call(null, env, g, island);
return island;
}
var dv = [0, [2, 2.], 0], dw = [2, 1.];
function defio_parse_kwargs_b(spec, remaining$1){
var remaining = remaining$1;
for(;;){
var
b = Sx_runtime[33].call(null, remaining),
and = [0, 1 - Sx_types[67].call(null, b)];
if(Sx_types[67].call(null, and)){
var
c = [0, Sx_runtime[24].call(null, remaining), dv],
and$0 = Sx_runtime[1].call(null, cst$2, c);
if(Sx_types[67].call(null, and$0))
var
d = Sx_runtime[14].call(null, remaining),
a = Sx_runtime[32].call(null, d);
else
var a = and$0;
}
else
var a = and;
if(! Sx_types[67].call(null, a)) return 0;
var
e = Sx_runtime[17].call(null, remaining, dw),
f = Sx_runtime[14].call(null, remaining),
g = Sx_types[69].call(null, f);
Sx_runtime[11].call(null, spec, g, e);
var
h = Sx_runtime[15].call(null, remaining),
remaining$0 = Sx_runtime[15].call(null, h);
remaining = remaining$0;
}
}
var dx = [3, cst_name];
function sf_defio(args, env){
var
name = Sx_runtime[14].call(null, args),
spec = [7, Stdlib_Hashtbl[1].call(null, 0, 0)];
Sx_runtime[11].call(null, spec, dx, name);
defio_parse_kwargs_b(spec, Sx_runtime[15].call(null, args));
io_register_b(name, spec);
return spec;
}
var dy = [2, 1.], dz = [2, 2.], dA = [2, 1.];
function sf_defmacro(args, env){
var
name_sym = Sx_runtime[14].call(null, args),
params_raw = Sx_runtime[17].call(null, args, dy),
body = Sx_runtime[17].call(null, args, dz),
parsed = parse_macro_params(params_raw),
params = Sx_runtime[14].call(null, parsed),
rest_param = Sx_runtime[17].call(null, parsed, dA),
a = Sx_types[68].call(null, name_sym),
mac = Sx_types[53].call(null, params, rest_param, body, env, a),
b = Sx_types[68].call(null, name_sym),
c = Sx_runtime[3].call(null, b);
Sx_runtime[77].call(null, env, c, mac);
return mac;
}
var
cst_in_rest = "in-rest",
dB = [6, 0],
dC = [0, 0],
dD = [3, cst_in_rest],
dE = [0, [3, cst_symbol], 0],
dF = [0, [3, cst_rest], 0],
dG = [0, [3, cst_in_rest], [0, [0, 1], 0]],
dH = [3, cst_in_rest],
dI = [0, [3, cst_symbol], 0],
dJ = [0, [3, cst_symbol], 0];
function parse_macro_params(params_expr){
var
a = Sx_runtime[5].call(null, params_expr),
d = Stdlib_Hashtbl[1].call(null, 0, 1),
b = Sx_runtime[2].call(null, dD);
Stdlib_Hashtbl[11].call(null, d, b, dC);
var params = [0, dB], rest_param = [0, 0];
Stdlib_List[26].call
(null,
function(state, p){
var
b = [0, Sx_runtime[73].call(null, p), dE],
and = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, and))
var
c = [0, Sx_types[68].call(null, p), dF],
a = Sx_runtime[1].call(null, cst, c);
else
var a = and;
if(Sx_types[67].call(null, a))
return Sx_runtime[1].call(null, cst_assoc, [0, state, dG]);
var d = Sx_runtime[25].call(null, state, dH);
if(Sx_types[67].call(null, d)){
var
e = [0, Sx_runtime[73].call(null, p), dI],
f = Sx_runtime[1].call(null, cst, e),
g = Sx_types[67].call(null, f) ? Sx_types[68].call(null, p) : p;
rest_param[1] = g;
return state;
}
var
h = [0, Sx_runtime[73].call(null, p), dJ],
i = Sx_runtime[1].call(null, cst, h),
j = Sx_types[67].call(null, i) ? Sx_types[68].call(null, p) : p;
params[1] = Sx_runtime[10].call(null, params[1], j);
return state;
},
[7, d],
a);
return [6, [0, params[1], [0, rest_param[1], 0]]];
}
var
dK = [0, [3, cst_list], 0],
dL = [6, 0],
dM = [0, [3, cst_symbol], 0],
dN = [0, [3, "unquote"], 0],
dO = [2, 1.],
dP = [6, 0],
dQ = [0, [3, cst_list], 0],
dR = [0, [2, 2.], 0],
dS = [0, [3, cst_symbol], 0],
dT = [0, [3, "splice-unquote"], 0],
dU = [2, 1.],
dV = [0, [3, cst_list], 0];
function qq_expand(template, env){
var
b = [0, Sx_runtime[73].call(null, template), dK],
c = Sx_runtime[1].call(null, cst, b),
d = [0, 1 - Sx_types[67].call(null, c)];
if(Sx_types[67].call(null, d)) return template;
var e = Sx_runtime[33].call(null, template);
if(Sx_types[67].call(null, e)) return dL;
var
head = Sx_runtime[14].call(null, template),
f = [0, Sx_runtime[73].call(null, head), dM],
and = Sx_runtime[1].call(null, cst, f);
if(Sx_types[67].call(null, and))
var
g = [0, Sx_types[68].call(null, head), dN],
a = Sx_runtime[1].call(null, cst, g);
else
var a = and;
if(Sx_types[67].call(null, a))
return trampoline
(eval_expr(Sx_runtime[17].call(null, template, dO), env));
var h = Sx_runtime[5].call(null, template);
return Stdlib_List[26].call
(null,
function(result, item){
var
b = [0, Sx_runtime[73].call(null, item), dQ],
and = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, and)){
var
c = [0, Sx_runtime[24].call(null, item), dR],
and$0 = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, and$0)){
var
d = Sx_runtime[14].call(null, item),
e = [0, Sx_runtime[73].call(null, d), dS],
and$1 = Sx_runtime[1].call(null, cst, e);
if(Sx_types[67].call(null, and$1))
var
f = Sx_runtime[14].call(null, item),
g = [0, Sx_types[68].call(null, f), dT],
a = Sx_runtime[1].call(null, cst, g);
else
var a = and$1;
}
else
var a = and$0;
}
else
var a = and;
if(! Sx_types[67].call(null, a)){
var k = [0, result, [0, [6, [0, qq_expand(item, env), 0]], 0]];
return Sx_runtime[1].call(null, cst_concat, k);
}
var
spliced =
trampoline
(eval_expr(Sx_runtime[17].call(null, item, dU), env)),
h = [0, Sx_runtime[73].call(null, spliced), dV],
i = Sx_runtime[1].call(null, cst, h);
if(Sx_types[67].call(null, i))
return Sx_runtime[1].call
(null, cst_concat, [0, result, [0, spliced, 0]]);
var j = Sx_runtime[83].call(null, spliced);
return Sx_types[67].call(null, j)
? result
: Sx_runtime
[1].call
(null,
cst_concat,
[0, result, [0, [6, [0, spliced, 0]], 0]]);
},
dP,
h);
}
var
cst_dec = "dec",
dW = [6, 0],
dX = [6, 0],
dY = [0, [3, cst_list], 0],
dZ = [0, [2, 2.], 0],
d0 = [0, [3, cst_symbol], 0],
d1 = [2, 1.],
d2 = [2, 1.],
d3 = [2, 0.],
d4 = [0, [2, 2.], 0],
d5 = [2, 0.],
d6 = [0, [3, cst_symbol], 0],
d7 = [0, [2, 2.], 0],
d8 = [0, [2, 2.], 0],
d9 = [0, [2, 2.], 0],
d_ = [0, [2, 2.], 0];
function sf_letrec(args, env){
var
bindings = Sx_runtime[14].call(null, args),
body = Sx_runtime[15].call(null, args),
local = Sx_runtime[80].call(null, env),
b = Sx_runtime[14].call(null, bindings),
c = [0, Sx_runtime[73].call(null, b), dY],
and = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, and))
var
d = Sx_runtime[14].call(null, bindings),
e = [0, Sx_runtime[24].call(null, d), dZ],
a = Sx_runtime[1].call(null, cst, e);
else
var a = and;
var names = [0, dW], val_exprs = [0, dX];
if(Sx_types[67].call(null, a)){
var f = Sx_runtime[5].call(null, bindings);
Stdlib_List[18].call
(null,
function(binding){
var
a = Sx_runtime[14].call(null, binding),
b = [0, Sx_runtime[73].call(null, a), d0],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c))
var
d = Sx_runtime[14].call(null, binding),
vname = Sx_types[68].call(null, d);
else
var vname = Sx_runtime[14].call(null, binding);
names[1] = Sx_runtime[10].call(null, names[1], vname);
var e = Sx_runtime[17].call(null, binding, d1);
val_exprs[1] = Sx_runtime[10].call(null, val_exprs[1], e);
var f = Sx_runtime[3].call(null, vname);
Sx_runtime[77].call(null, local, f, 0);
return 0;
},
f);
}
else{
var
p = [0, Sx_runtime[24].call(null, bindings), d4],
q = [0, d5, [0, Sx_runtime[1].call(null, cst$12, p), 0]],
r = Sx_runtime[1].call(null, cst_range, q),
s = Sx_runtime[5].call(null, r);
Stdlib_List[26].call
(null,
function(acc, pair_idx){
var
a = Sx_runtime[1].call(null, cst$11, [0, pair_idx, d7]),
b = Sx_runtime[17].call(null, bindings, a),
c = [0, Sx_runtime[73].call(null, b), d6],
d = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, d))
var
e = Sx_runtime[1].call(null, cst$11, [0, pair_idx, d8]),
f = Sx_runtime[17].call(null, bindings, e),
vname = Sx_types[68].call(null, f);
else
var
j = Sx_runtime[1].call(null, cst$11, [0, pair_idx, d_]),
vname = Sx_runtime[17].call(null, bindings, j);
var
g = [0, Sx_runtime[1].call(null, cst$11, [0, pair_idx, d9]), 0],
h = Sx_runtime[1].call(null, cst_inc, g),
val_expr = Sx_runtime[17].call(null, bindings, h);
names[1] = Sx_runtime[10].call(null, names[1], vname);
val_exprs[1] = Sx_runtime[10].call(null, val_exprs[1], val_expr);
var i = Sx_runtime[3].call(null, vname);
return Sx_runtime[77].call(null, local, i, 0);
},
0,
s);
}
var
g = Sx_runtime[5].call(null, val_exprs[1]),
values =
[6,
Stdlib_List[20].call
(null, function(e){return trampoline(eval_expr(e, local));}, g)],
h = Sx_runtime[1].call(null, cst_zip, [0, names[1], [0, values, 0]]),
i = Sx_runtime[5].call(null, h);
Stdlib_List[18].call
(null,
function(pair){
var
a = Sx_runtime[17].call(null, pair, d2),
b = Sx_runtime[14].call(null, pair),
c = Sx_runtime[3].call(null, b);
Sx_runtime[77].call(null, local, c, a);
return 0;
},
i);
var j = Sx_runtime[5].call(null, values);
Stdlib_List[18].call
(null,
function(val){
var a = Sx_runtime[85].call(null, val);
if(Sx_types[67].call(null, a)){
var b = Sx_runtime[5].call(null, names[1]);
Stdlib_List[18].call
(null,
function(n){
var
a = Sx_runtime[76].call(null, local, n),
b = Sx_runtime[3].call(null, n),
c = Sx_types[72].call(null, val);
Sx_runtime[77].call(null, c, b, a);
return 0;
},
b);
}
return 0;
},
j);
var
k = [0, Sx_runtime[24].call(null, body), 0],
l = [0, body, [0, d3, [0, Sx_runtime[1].call(null, cst_dec, k), 0]]],
m = Sx_runtime[1].call(null, cst_slice, l),
n = Sx_runtime[5].call(null, m);
Stdlib_List[18].call
(null, function(e){trampoline(eval_expr(e, local)); return 0;}, n);
var o = Sx_runtime[16].call(null, body);
return Sx_types[54].call(null, o, local);
}
function step_sf_letrec(args, env, kont){
var thk = sf_letrec(args, env), a = Sx_types[89].call(null, thk);
return make_cek_state(Sx_types[88].call(null, thk), a, kont);
}
var d$ = [2, 1.], ea = [2, 2.], eb = [6, 0], ec = [6, 0], ed = [6, 0];
function step_sf_dynamic_wind(args, env, kont){
var
before = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
body = trampoline(eval_expr(Sx_runtime[17].call(null, args, d$), env)),
after = trampoline(eval_expr(Sx_runtime[17].call(null, args, ea), env));
cek_call(before, eb);
var winders_len = Sx_runtime[24].call(null, winders_ref[1]);
winders_ref[1] = Sx_runtime[18].call(null, after, winders_ref[1]);
return continue_with_call
(body,
ed,
env,
ec,
kont_push(make_wind_after_frame(after, winders_len, env), kont));
}
var
ee = [0, [2, 1.], 0],
ef = [0, [2, 2.], 0],
eg = [0, [3, cst_keyword], 0],
eh = [0, [3, cst_value], 0],
ei = [2, 1.],
ej = [0, [2, 2.], 0];
function sf_scope(args, env){
var
name = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
rest = Sx_runtime[1].call(null, cst_slice, [0, args, ee]),
b = [0, Sx_runtime[24].call(null, rest), ef],
and = Sx_runtime[1].call(null, cst$2, b);
if(Sx_types[67].call(null, and)){
var
c = Sx_runtime[14].call(null, rest),
d = [0, Sx_runtime[73].call(null, c), eg],
and$0 = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, and$0))
var
e = Sx_runtime[14].call(null, rest),
f = [0, Sx_types[69].call(null, e), eh],
a = Sx_runtime[1].call(null, cst, f);
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a))
var
g = trampoline(eval_expr(Sx_runtime[17].call(null, rest, ei), env)),
body_exprs = Sx_runtime[1].call(null, cst_slice, [0, rest, ej]),
val = g;
else
var body_exprs = rest, val = 0;
Sx_runtime[103].call(null, name, val);
var h = Sx_runtime[5].call(null, body_exprs), result = [0, 0];
Stdlib_List[18].call
(null,
function(e){result[1] = trampoline(eval_expr(e, env)); return 0;},
h);
Sx_runtime[104].call(null, name);
return result[1];
}
var ek = [2, 1.], el = [0, [2, 2.], 0];
function sf_provide(args, env){
var
name = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
val = trampoline(eval_expr(Sx_runtime[17].call(null, args, ek), env)),
body_exprs = Sx_runtime[1].call(null, cst_slice, [0, args, el]);
Sx_runtime[103].call(null, name, val);
var a = Sx_runtime[5].call(null, body_exprs), result = [0, 0];
Stdlib_List[18].call
(null,
function(e){result[1] = trampoline(eval_expr(e, env)); return 0;},
a);
Sx_runtime[104].call(null, name);
return result[1];
}
var
cst_sr_literals = "__sr-literals",
cst_sr_rules = "__sr-rules",
cst_syntax_rules_body = "__syntax-rules-body__",
em = [0, [3, cst_syntax_rules_body], 0],
en = [3, cst_sr_rules],
eo = [3, cst_sr_literals],
ep = [2, 1.],
eq = [2, 1.];
function expand_macro(mac, raw_args, env){
var
body = Sx_types[86].call(null, mac),
and = Sx_runtime[39].call(null, body);
if(Sx_types[67].call(null, and))
var
b = [0, Sx_types[68].call(null, body), em],
a = Sx_runtime[1].call(null, cst, b);
else
var a = and;
if(Sx_types[67].call(null, a)){
var
closure = Sx_types[87].call(null, mac),
c = Sx_runtime[76].call(null, closure, en);
return syntax_rules_expand
(Sx_runtime[76].call(null, closure, eo), c, raw_args);
}
var
d = Sx_types[87].call(null, mac),
local = Sx_runtime[81].call(null, d, env),
e = Sx_types[84].call(null, mac),
f = Sx_runtime[5].call(null, e),
g =
[6,
Stdlib_List[21].call
(null,
function(i, p){var i$0 = [2, i]; return [6, [0, p, [0, i$0, 0]]];},
f)],
h = Sx_runtime[5].call(null, g);
Stdlib_List[18].call
(null,
function(pair){
var
b = [0, Sx_runtime[24].call(null, raw_args), 0],
c = [0, Sx_runtime[17].call(null, pair, ep), b],
d = Sx_runtime[1].call(null, cst$3, c);
if(Sx_types[67].call(null, d))
var
e = Sx_runtime[17].call(null, pair, eq),
a = Sx_runtime[17].call(null, raw_args, e);
else
var a = 0;
var
f = Sx_runtime[14].call(null, pair),
g = Sx_runtime[3].call(null, f);
Sx_runtime[77].call(null, local, g, a);
return 0;
},
h);
var i = Sx_types[85].call(null, mac);
if(Sx_types[67].call(null, i)){
var
j = Sx_types[84].call(null, mac),
k = [0, raw_args, [0, Sx_runtime[24].call(null, j), 0]],
l = Sx_runtime[1].call(null, cst_slice, k),
m = Sx_types[85].call(null, mac),
n = Sx_runtime[3].call(null, m);
Sx_runtime[77].call(null, local, n, l);
}
return trampoline(eval_expr(Sx_types[86].call(null, mac), local));
}
function cek_step_loop(state$1){
var state = state$1;
for(;;){
var
or = cek_terminal_p(state),
or$0 = Sx_types[67].call(null, or) ? or : cek_suspended_p(state);
if(Sx_types[67].call(null, or$0)) return state;
var state$0 = cek_step(state);
state = state$0;
}
}
var
cst_IO_suspension_in_non_IO_co = "IO suspension in non-IO context",
er = [3, cst_IO_suspension_in_non_IO_co];
function cek_run(state){
var final = cek_step_loop(state), a = cek_suspended_p(final);
if(! Sx_types[67].call(null, a)) return cek_value(final);
var b = Sx_runtime[2].call(null, er);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
function cek_resume(suspended_state, result){
var a = cek_kont(suspended_state);
return cek_step_loop(make_cek_value(result, cek_env(suspended_state), a));
}
var es = [0, [3, cst_eval], 0];
function cek_step(state){
var a = [0, cek_phase(state), es], b = Sx_runtime[1].call(null, cst, a);
return Sx_types[67].call(null, b)
? step_eval(state)
: step_continue(state);
}
var
cst_starts_with = "starts-with?",
et = [3, cst_number],
eu = [3, cst_string],
ev = [3, cst_boolean],
ew = [3, cst_nil],
ex = [3, cst_symbol],
ey = [0, [3, cst$13], 0],
ez = [0, [3, "true"], 0],
eA = [0, 1],
eB = [0, [3, "false"], 0],
eC = [0, 0],
eD = [0, [3, cst_nil], 0],
eE = [3, "Undefined symbol: "],
eF = [3, cst_keyword],
eG = [3, cst_dict],
eH = [6, 0],
eI = [3, cst_list],
eJ = [6, 0];
function step_eval(state){
var
expr = cek_control(state),
env = cek_env(state),
kont = cek_kont(state),
match_val = Sx_runtime[73].call(null, expr);
if(caml_equal(match_val, et)) return make_cek_value(expr, env, kont);
if(caml_equal(match_val, eu)) return make_cek_value(expr, env, kont);
if(caml_equal(match_val, ev)) return make_cek_value(expr, env, kont);
if(caml_equal(match_val, ew)) return make_cek_value(0, env, kont);
if(! caml_equal(match_val, ex)){
if(caml_equal(match_val, eF))
return make_cek_value(Sx_types[69].call(null, expr), env, kont);
if(caml_equal(match_val, eG)){
var
ks = Sx_runtime[1].call(null, cst_keys, [0, expr, 0]),
h = Sx_runtime[33].call(null, ks);
if(Sx_types[67].call(null, h))
return make_cek_value
([7, Stdlib_Hashtbl[1].call(null, 0, 0)], env, kont);
var
first_key = Sx_runtime[14].call(null, ks),
i = Sx_runtime[15].call(null, ks),
j = Sx_runtime[5].call(null, i),
remaining_entries = [0, eH];
Stdlib_List[18].call
(null,
function(k){
var a = [6, [0, k, [0, Sx_runtime[25].call(null, expr, k), 0]]];
remaining_entries[1] =
Sx_runtime[10].call(null, remaining_entries[1], a);
return 0;
},
j);
var
k =
kont_push
(make_dict_frame
(remaining_entries[1], [6, [0, [6, [0, first_key, 0]], 0]], env),
kont);
return make_cek_state
(Sx_runtime[25].call(null, expr, first_key), env, k);
}
if(! caml_equal(match_val, eI)) return make_cek_value(expr, env, kont);
var l = Sx_runtime[33].call(null, expr);
return Sx_types[67].call(null, l)
? make_cek_value(eJ, env, kont)
: step_eval_list(expr, env, kont);
}
var
name = Sx_types[68].call(null, expr),
a = Sx_runtime[75].call(null, env, name);
if(Sx_types[67].call(null, a))
var val = Sx_runtime[76].call(null, env, name);
else{
var b = Sx_runtime[91].call(null, name);
if(Sx_types[67].call(null, b))
var val = Sx_runtime[92].call(null, name);
else{
var c = Sx_runtime[1].call(null, cst, [0, name, ez]);
if(Sx_types[67].call(null, c))
var val = eA;
else{
var d = Sx_runtime[1].call(null, cst, [0, name, eB]);
if(Sx_types[67].call(null, d))
var val = eC;
else{
var e = Sx_runtime[1].call(null, cst, [0, name, eD]);
if(! Sx_types[67].call(null, e)){
var
f = [3, Sx_runtime[4].call(null, [0, eE, [0, name, 0]])],
g = Sx_runtime[2].call(null, f);
throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1);
}
var val = 0;
}
}
}
}
var and = Sx_runtime[83].call(null, val);
if(Sx_types[67].call(null, and))
Sx_runtime[1].call(null, cst_starts_with, [0, name, ey]);
return make_cek_value(val, env, kont);
}
var eK = [0, 0];
function step_sf_raise(args, env, kont){
var a = kont_push(make_raise_eval_frame(env, eK), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var
cst$14 = "_",
cst_guard_k = "__guard-k",
cst_guard_result = "__guard-result",
cst_call_cc = "call/cc",
cst_first = "first",
cst_handler_bind = "handler-bind",
cst_raise = "raise",
eL = [3, "__guard-reraise__"],
eM =
[0,
[6,
[0,
[4, cst_raise],
[0,
[6, [0, [4, "nth"], [0, [4, cst_guard_result], [0, [2, 1.], 0]]]],
0]]],
[0, [4, cst_guard_result], 0]],
eN = [4, cst_quote],
eO = [6, [0, [4, cst_first], [0, [4, cst_guard_result], 0]]],
eP = [4, cst],
eQ =
[6,
[0,
[4, cst],
[0,
[6, [0, [4, "len"], [0, [4, cst_guard_result], 0]]],
[0, [2, 2.], 0]]]],
eR = [6, [0, [4, "list?"], [0, [4, cst_guard_result], 0]]],
eS = [4, cst_and],
eT = [4, cst_if],
eU = [4, cst_begin],
eV = [4, cst_guard_k],
eW = [4, cst_quote],
eX = [4, cst_list],
eY = [4, cst_else],
eZ = [4, cst_cond],
e0 = [4, cst_guard_k],
e1 = [4, cst_fn],
e2 = [6, [0, [0, 1], 0]],
e3 = [6, [0, [4, cst$14], 0]],
e4 = [4, cst_fn],
e5 = [4, cst_handler_bind],
e6 = [6, [0, [4, cst_guard_k], 0]],
e7 = [4, cst_fn],
e8 = [4, cst_call_cc],
e9 = [4, cst_guard_result],
e_ = [4, cst_let];
function step_sf_guard$0(counter, args, env, kont){
var
var_clauses = Sx_runtime[14].call(null, args),
body = Sx_runtime[15].call(null, args),
var$ = Sx_runtime[14].call(null, var_clauses),
clauses = Sx_runtime[15].call(null, var_clauses),
sentinel = Sx_types[55].call(null, eL),
b =
[6, [0, [6, [0, eV, [0, Sx_runtime[18].call(null, eU, body), 0]]], 0]],
c =
Sx_runtime[1].call
(null,
cst_append,
[0,
clauses,
[0,
[6,
[0,
[6,
[0,
eY,
[0,
[6,
[0, eX, [0, [6, [0, eW, [0, sentinel, 0]]], [0, var$, 0]]]],
0]]],
0]],
0]]),
d = [6, [0, [6, [0, e0, [0, Sx_runtime[18].call(null, eZ, c), 0]]], 0]],
e = Sx_runtime[18].call(null, [6, [0, var$, 0]], d),
f = [0, Sx_runtime[18].call(null, e1, e), 0],
g = Sx_runtime[18].call(null, e3, e2),
h = [6, [0, [6, [0, Sx_runtime[18].call(null, e4, g), f]], 0]],
i = Sx_runtime[18].call(null, h, b),
j = [6, [0, Sx_runtime[18].call(null, e5, i), 0]],
k = Sx_runtime[18].call(null, e6, j),
l = [6, [0, Sx_runtime[18].call(null, e7, k), 0]],
a =
[6,
[0,
e_,
[0,
[6, [0, [6, [0, e9, [0, Sx_runtime[18].call(null, e8, l), 0]]], 0]],
[0,
[6,
[0,
eT,
[0,
[6,
[0,
eS,
[0,
eR,
[0,
eQ,
[0,
[6,
[0, eP, [0, eO, [0, [6, [0, eN, [0, sentinel, 0]]], 0]]]],
0]]]]],
eM]]],
0]]]];
return counter < 50
? step_eval_list$0(counter + 1 | 0, a, env, kont)
: caml_trampoline_return(step_eval_list$0, [0, a, env, kont]);
}
function step_sf_guard(args, env, kont){
return caml_trampoline(step_sf_guard$0(0, args, env, kont));
}
function step_sf_callcc(args, env, kont){
var a = kont_push(make_callcc_frame(env), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
function step_sf_case(args, env, kont){
var
a =
kont_push
(make_case_frame(0, Sx_runtime[15].call(null, args), env), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var e$ = [2, 1.], fa = [4, cst_begin];
function step_sf_let_match(args, env, kont){
var
pattern = Sx_runtime[14].call(null, args),
expr = Sx_runtime[17].call(null, args, e$),
a = Sx_runtime[15].call(null, args),
body = Sx_runtime[15].call(null, a);
return step_sf_match
([6,
[0,
expr,
[0,
[6, [0, pattern, [0, Sx_runtime[18].call(null, fa, body), 0]]],
0]]],
env,
kont);
}
var
cst_do_loop = "__do-loop",
cst_emitted = "emitted",
cst_every$0 = "every?",
cst_map_indexed = "map-indexed",
cst_peek = "peek",
cst_syntax_rules = "syntax-rules",
render_check = 0,
render_fn = 0,
fb = [0, [3, cst_symbol], 0],
fc = [6, 0],
fd = [6, 0],
fe = [0, [3, cst_symbol], 0],
ff = [0, [3, cst_if], 0],
fg = [0, [3, cst_when], 0],
fh = [0, [3, cst_cond], 0],
fi = [0, [3, cst_case], 0],
fj = [0, [3, cst_and], 0],
fk = [0, [3, cst_or], 0],
fl = [0, [3, cst_let], 0],
fm = [0, [3, "let*"], 0],
fn = [0, [3, cst_lambda], 0],
fo = [0, [3, cst_fn], 0],
fp = [0, [3, cst_define], 0],
fq = [0, [3, "defcomp"], 0],
fr = [0, [3, "defisland"], 0],
fs = [0, [3, "defmacro"], 0],
ft = [0, [3, "defio"], 0],
fu = [0, [3, cst_define_foreign], 0],
fv = [0, [3, "io"], 0],
fw = [0, [3, cst_begin], 0],
fx = [0, [3, "do"], 0],
fy = [2, 1.],
fz = [2, 1.],
fA = [0, [2, 2.], 0],
fB = [2, 2.],
fC = [4, cst_do_loop],
fD = [4, cst_begin],
fE = [4, cst_if],
fF = [2, 1.],
fG = [4, cst_do_loop],
fH = [4, cst_let],
fI = [4, cst_begin],
fJ = [0, [3, "guard"], 0],
fK = [0, [3, cst_quote], 0],
fL = [0, [3, "quasiquote"], 0],
fM = [0, [3, "->"], 0],
fN = [0, [3, "->>"], 0],
fO = [0, [3, "|>"], 0],
fP = [0, [3, "as->"], 0],
fQ = [0, [3, "set!"], 0],
fR = [0, [3, "letrec"], 0],
fS = [0, [3, cst_reset], 0],
fT = [0, [3, "shift"], 0],
fU = [0, [3, cst_deref], 0],
fV = [0, [3, cst_scope], 0],
fW = [0, [3, cst_provide], 0],
fX = [0, [3, cst_peek], 0],
fY = [0, [3, "provide!"], 0],
fZ = [0, [3, "context"], 0],
f0 = [0, [3, cst_bind], 0],
f1 = [0, [3, "emit!"], 0],
f2 = [0, [3, cst_emitted], 0],
f3 = [0, [3, cst_handler_bind], 0],
f4 = [0, [3, "restart-case"], 0],
f5 = [0, [3, "signal-condition"], 0],
f6 = [0, [3, "invoke-restart"], 0],
f7 = [0, [3, "match"], 0],
f8 = [0, [3, "let-match"], 0],
f9 = [0, [3, cst_dynamic_wind], 0],
f_ = [0, [3, cst_map], 0],
f$ = [0, [3, cst_map_indexed], 0],
ga = [0, [3, cst_filter], 0],
gb = [0, [3, cst_reduce], 0],
gc = [0, [3, cst_some], 0],
gd = [0, [3, cst_every$0], 0],
ge = [0, [3, cst_for_each], 0],
gf = [0, [3, cst_raise], 0],
gg = [0, [3, "raise-continuable"], 0],
gh = [0, 1],
gi = [0, [3, cst_call_cc], 0],
gj = [0, [3, "call-with-current-continuation"], 0],
gk = [0, [3, cst_perform], 0],
gl = [0, [3, "define-library"], 0],
gm = [0, [3, cst_import], 0],
gn = [0, [3, "define-record-type"], 0],
go = [0, [3, "define-protocol"], 0],
gp = [0, [3, "implement"], 0],
gq = [0, [3, cst_parameterize], 0],
gr = [0, [3, cst_syntax_rules], 0],
gs = [0, [3, "define-syntax"], 0],
gt = [0, [3, cst_lambda], 0],
gu = [0, [3, cst_list], 0];
function step_eval_list$0(counter, expr$1, env, kont){
var expr = expr$1;
for(;;){
var
head = Sx_runtime[14].call(null, expr),
args = Sx_runtime[15].call(null, expr),
e = [0, Sx_runtime[73].call(null, head), fb],
or = Sx_runtime[1].call(null, cst, e);
if(Sx_types[67].call(null, or))
var or$0 = or;
else{
var
aY = [0, Sx_runtime[73].call(null, head), gt],
or$1 = Sx_runtime[1].call(null, cst, aY);
if(Sx_types[67].call(null, or$1))
var or$0 = or$1;
else
var
aZ = [0, Sx_runtime[73].call(null, head), gu],
or$0 = Sx_runtime[1].call(null, cst, aZ);
}
var f = [0, 1 - Sx_types[67].call(null, or$0)];
if(Sx_types[67].call(null, f)){
var g = Sx_runtime[33].call(null, expr);
if(Sx_types[67].call(null, g)) return make_cek_value(fc, env, kont);
var
h =
kont_push
(make_map_frame(0, Sx_runtime[15].call(null, expr), fd, env), kont);
return make_cek_state(Sx_runtime[14].call(null, expr), env, h);
}
var
i = [0, Sx_runtime[73].call(null, head), fe],
j = Sx_runtime[1].call(null, cst, i);
if(! Sx_types[67].call(null, j))
return step_eval_call(head, args, env, kont);
var
match_val = Sx_types[68].call(null, head),
k = Sx_runtime[1].call(null, cst, [0, match_val, ff]);
if(Sx_types[67].call(null, k)) return step_sf_if(args, env, kont);
var l = Sx_runtime[1].call(null, cst, [0, match_val, fg]);
if(Sx_types[67].call(null, l)) return step_sf_when(args, env, kont);
var m = Sx_runtime[1].call(null, cst, [0, match_val, fh]);
if(Sx_types[67].call(null, m)) return step_sf_cond(args, env, kont);
var n = Sx_runtime[1].call(null, cst, [0, match_val, fi]);
if(Sx_types[67].call(null, n)) return step_sf_case(args, env, kont);
var o = Sx_runtime[1].call(null, cst, [0, match_val, fj]);
if(Sx_types[67].call(null, o)) return step_sf_and(args, env, kont);
var p = Sx_runtime[1].call(null, cst, [0, match_val, fk]);
if(Sx_types[67].call(null, p)) return step_sf_or(args, env, kont);
var q = Sx_runtime[1].call(null, cst, [0, match_val, fl]);
if(Sx_types[67].call(null, q)) return step_sf_let(args, env, kont);
var r = Sx_runtime[1].call(null, cst, [0, match_val, fm]);
if(Sx_types[67].call(null, r)) return step_sf_let(args, env, kont);
var s = Sx_runtime[1].call(null, cst, [0, match_val, fn]);
if(Sx_types[67].call(null, s)) return step_sf_lambda(args, env, kont);
var t = Sx_runtime[1].call(null, cst, [0, match_val, fo]);
if(Sx_types[67].call(null, t)) return step_sf_lambda(args, env, kont);
var u = Sx_runtime[1].call(null, cst, [0, match_val, fp]);
if(Sx_types[67].call(null, u)) return step_sf_define(args, env, kont);
var v = Sx_runtime[1].call(null, cst, [0, match_val, fq]);
if(Sx_types[67].call(null, v))
return make_cek_value(sf_defcomp(args, env), env, kont);
var w = Sx_runtime[1].call(null, cst, [0, match_val, fr]);
if(Sx_types[67].call(null, w))
return make_cek_value(sf_defisland(args, env), env, kont);
var x = Sx_runtime[1].call(null, cst, [0, match_val, fs]);
if(Sx_types[67].call(null, x))
return make_cek_value(sf_defmacro(args, env), env, kont);
var y = Sx_runtime[1].call(null, cst, [0, match_val, ft]);
if(Sx_types[67].call(null, y))
return make_cek_value(sf_defio(args, env), env, kont);
var z = Sx_runtime[1].call(null, cst, [0, match_val, fu]);
if(Sx_types[67].call(null, z))
return step_sf_define_foreign(args, env, kont);
var A = Sx_runtime[1].call(null, cst, [0, match_val, fv]);
if(Sx_types[67].call(null, A)) return step_sf_io(args, env, kont);
var B = Sx_runtime[1].call(null, cst, [0, match_val, fw]);
if(Sx_types[67].call(null, B)) return step_sf_begin(args, env, kont);
var C = Sx_runtime[1].call(null, cst, [0, match_val, fx]);
if(! Sx_types[67].call(null, C)) break;
var
D = Sx_runtime[33].call(null, args),
and = [0, 1 - Sx_types[67].call(null, D)];
if(Sx_types[67].call(null, and)){
var
E = Sx_runtime[14].call(null, args),
and$0 = Sx_runtime[37].call(null, E);
if(Sx_types[67].call(null, and$0)){
var
F = Sx_runtime[14].call(null, args),
G = Sx_runtime[33].call(null, F),
and$1 = [0, 1 - Sx_types[67].call(null, G)];
if(Sx_types[67].call(null, and$1))
var
H = Sx_runtime[14].call(null, args),
I = Sx_runtime[14].call(null, H),
a = Sx_runtime[37].call(null, I);
else
var a = and$1;
}
else
var a = and$0;
}
else
var a = and;
if(! Sx_types[67].call(null, a)) return step_sf_begin(args, env, kont);
var
bindings = Sx_runtime[14].call(null, args),
test_clause = Sx_runtime[17].call(null, args, fy),
J = Sx_runtime[15].call(null, args),
body = Sx_runtime[15].call(null, J),
K = Sx_runtime[5].call(null, bindings);
Stdlib_List[20].call
(null, function(b){return Sx_runtime[14].call(null, b);}, K);
var L = Sx_runtime[5].call(null, bindings);
Stdlib_List[20].call
(null, function(b){return Sx_runtime[17].call(null, b, fz);}, L);
var
M = Sx_runtime[5].call(null, bindings),
steps =
[6,
Stdlib_List[20].call
(null,
function(b){
var
a = [0, Sx_runtime[24].call(null, b), fA],
c = Sx_runtime[1].call(null, cst$0, a);
return Sx_types[67].call(null, c)
? Sx_runtime[17].call(null, b, fB)
: Sx_runtime[14].call(null, b);
},
M)],
test = Sx_runtime[14].call(null, test_clause),
result = Sx_runtime[15].call(null, test_clause),
N = [0, body, [0, [6, [0, Sx_runtime[18].call(null, fC, steps), 0]], 0]],
O = Sx_runtime[1].call(null, cst_append, N),
P = [6, [0, Sx_runtime[18].call(null, fD, O), 0]],
Q = Sx_runtime[33].call(null, result),
R =
Sx_types[67].call(null, Q) ? 0 : Sx_runtime[18].call(null, fI, result),
S = Sx_runtime[18].call(null, R, P),
T = Sx_runtime[18].call(null, test, S),
U = [6, [0, Sx_runtime[18].call(null, fE, T), 0]],
V = Sx_runtime[5].call(null, bindings),
W =
[6,
Stdlib_List[20].call
(null,
function(b){
var a = [0, Sx_runtime[17].call(null, b, fF), 0];
return [6, [0, Sx_runtime[14].call(null, b), a]];
},
V)],
X = Sx_runtime[18].call(null, W, U),
Y = Sx_runtime[18].call(null, fG, X),
expr$0 = Sx_runtime[18].call(null, fH, Y);
expr = expr$0;
}
var Z = Sx_runtime[1].call(null, cst, [0, match_val, fJ]);
if(Sx_types[67].call(null, Z))
return counter < 50
? step_sf_guard$0(counter + 1 | 0, args, env, kont)
: caml_trampoline_return(step_sf_guard$0, [0, args, env, kont]);
var _ = Sx_runtime[1].call(null, cst, [0, match_val, fK]);
if(Sx_types[67].call(null, _)){
var
$ = Sx_runtime[33].call(null, args),
aa = Sx_types[67].call(null, $) ? 0 : Sx_runtime[14].call(null, args);
return make_cek_value(aa, env, kont);
}
var ab = Sx_runtime[1].call(null, cst, [0, match_val, fL]);
if(Sx_types[67].call(null, ab))
return make_cek_value
(qq_expand(Sx_runtime[14].call(null, args), env), env, kont);
var ac = Sx_runtime[1].call(null, cst, [0, match_val, fM]);
if(Sx_types[67].call(null, ac))
return step_sf_thread_first(args, env, kont);
var ad = Sx_runtime[1].call(null, cst, [0, match_val, fN]);
if(Sx_types[67].call(null, ad))
return step_sf_thread_last(args, env, kont);
var ae = Sx_runtime[1].call(null, cst, [0, match_val, fO]);
if(Sx_types[67].call(null, ae))
return step_sf_thread_last(args, env, kont);
var af = Sx_runtime[1].call(null, cst, [0, match_val, fP]);
if(Sx_types[67].call(null, af)) return step_sf_thread_as(args, env, kont);
var ag = Sx_runtime[1].call(null, cst, [0, match_val, fQ]);
if(Sx_types[67].call(null, ag)) return step_sf_set_b(args, env, kont);
var ah = Sx_runtime[1].call(null, cst, [0, match_val, fR]);
if(Sx_types[67].call(null, ah)) return step_sf_letrec(args, env, kont);
var ai = Sx_runtime[1].call(null, cst, [0, match_val, fS]);
if(Sx_types[67].call(null, ai)) return step_sf_reset(args, env, kont);
var aj = Sx_runtime[1].call(null, cst, [0, match_val, fT]);
if(Sx_types[67].call(null, aj)) return step_sf_shift(args, env, kont);
var ak = Sx_runtime[1].call(null, cst, [0, match_val, fU]);
if(Sx_types[67].call(null, ak)) return step_sf_deref(args, env, kont);
var al = Sx_runtime[1].call(null, cst, [0, match_val, fV]);
if(Sx_types[67].call(null, al)) return step_sf_scope(args, env, kont);
var am = Sx_runtime[1].call(null, cst, [0, match_val, fW]);
if(Sx_types[67].call(null, am)) return step_sf_provide(args, env, kont);
var an = Sx_runtime[1].call(null, cst, [0, match_val, fX]);
if(Sx_types[67].call(null, an)) return step_sf_peek(args, env, kont);
var ao = Sx_runtime[1].call(null, cst, [0, match_val, fY]);
if(Sx_types[67].call(null, ao)) return step_sf_provide_b(args, env, kont);
var ap = Sx_runtime[1].call(null, cst, [0, match_val, fZ]);
if(Sx_types[67].call(null, ap)) return step_sf_context(args, env, kont);
var aq = Sx_runtime[1].call(null, cst, [0, match_val, f0]);
if(Sx_types[67].call(null, aq)) return step_sf_bind(args, env, kont);
var ar = Sx_runtime[1].call(null, cst, [0, match_val, f1]);
if(Sx_types[67].call(null, ar)) return step_sf_emit(args, env, kont);
var as = Sx_runtime[1].call(null, cst, [0, match_val, f2]);
if(Sx_types[67].call(null, as)) return step_sf_emitted(args, env, kont);
var at = Sx_runtime[1].call(null, cst, [0, match_val, f3]);
if(Sx_types[67].call(null, at))
return step_sf_handler_bind(args, env, kont);
var au = Sx_runtime[1].call(null, cst, [0, match_val, f4]);
if(Sx_types[67].call(null, au))
return step_sf_restart_case(args, env, kont);
var av = Sx_runtime[1].call(null, cst, [0, match_val, f5]);
if(Sx_types[67].call(null, av)) return step_sf_signal(args, env, kont);
var aw = Sx_runtime[1].call(null, cst, [0, match_val, f6]);
if(Sx_types[67].call(null, aw))
return step_sf_invoke_restart(args, env, kont);
var ax = Sx_runtime[1].call(null, cst, [0, match_val, f7]);
if(Sx_types[67].call(null, ax)) return step_sf_match(args, env, kont);
var ay = Sx_runtime[1].call(null, cst, [0, match_val, f8]);
if(Sx_types[67].call(null, ay)) return step_sf_let_match(args, env, kont);
var az = Sx_runtime[1].call(null, cst, [0, match_val, f9]);
if(Sx_types[67].call(null, az))
return step_sf_dynamic_wind(args, env, kont);
var aA = Sx_runtime[1].call(null, cst, [0, match_val, f_]);
if(Sx_types[67].call(null, aA)) return step_ho_map(args, env, kont);
var aB = Sx_runtime[1].call(null, cst, [0, match_val, f$]);
if(Sx_types[67].call(null, aB))
return step_ho_map_indexed(args, env, kont);
var aC = Sx_runtime[1].call(null, cst, [0, match_val, ga]);
if(Sx_types[67].call(null, aC)) return step_ho_filter(args, env, kont);
var aD = Sx_runtime[1].call(null, cst, [0, match_val, gb]);
if(Sx_types[67].call(null, aD)) return step_ho_reduce(args, env, kont);
var aE = Sx_runtime[1].call(null, cst, [0, match_val, gc]);
if(Sx_types[67].call(null, aE)) return step_ho_some(args, env, kont);
var aF = Sx_runtime[1].call(null, cst, [0, match_val, gd]);
if(Sx_types[67].call(null, aF)) return step_ho_every(args, env, kont);
var aG = Sx_runtime[1].call(null, cst, [0, match_val, ge]);
if(Sx_types[67].call(null, aG)) return step_ho_for_each(args, env, kont);
var aH = Sx_runtime[1].call(null, cst, [0, match_val, gf]);
if(Sx_types[67].call(null, aH)) return step_sf_raise(args, env, kont);
var aI = Sx_runtime[1].call(null, cst, [0, match_val, gg]);
if(Sx_types[67].call(null, aI)){
var aJ = kont_push(make_raise_eval_frame(env, gh), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, aJ);
}
var aK = Sx_runtime[1].call(null, cst, [0, match_val, gi]);
if(Sx_types[67].call(null, aK)) return step_sf_callcc(args, env, kont);
var aL = Sx_runtime[1].call(null, cst, [0, match_val, gj]);
if(Sx_types[67].call(null, aL)) return step_sf_callcc(args, env, kont);
var aM = Sx_runtime[1].call(null, cst, [0, match_val, gk]);
if(Sx_types[67].call(null, aM)) return step_sf_perform(args, env, kont);
var aN = Sx_runtime[1].call(null, cst, [0, match_val, gl]);
if(Sx_types[67].call(null, aN))
return step_sf_define_library(args, env, kont);
var aO = Sx_runtime[1].call(null, cst, [0, match_val, gm]);
if(Sx_types[67].call(null, aO)) return step_sf_import(args, env, kont);
var aP = Sx_runtime[1].call(null, cst, [0, match_val, gn]);
if(Sx_types[67].call(null, aP))
return make_cek_value(sf_define_record_type(args, env), env, kont);
var aQ = Sx_runtime[1].call(null, cst, [0, match_val, go]);
if(Sx_types[67].call(null, aQ))
return make_cek_value(sf_define_protocol(args, env), env, kont);
var aR = Sx_runtime[1].call(null, cst, [0, match_val, gp]);
if(Sx_types[67].call(null, aR))
return make_cek_value(sf_implement(args, env), env, kont);
var aS = Sx_runtime[1].call(null, cst, [0, match_val, gq]);
if(Sx_types[67].call(null, aS))
return step_sf_parameterize(args, env, kont);
var aT = Sx_runtime[1].call(null, cst, [0, match_val, gr]);
if(Sx_types[67].call(null, aT))
return make_cek_value(sf_syntax_rules(args, env), env, kont);
var aU = Sx_runtime[1].call(null, cst, [0, match_val, gs]);
if(Sx_types[67].call(null, aU)) return step_sf_define(args, env, kont);
var
and$2 =
Sx_runtime[1].call
(null, cst_has_key, [0, custom_special_forms, [0, match_val, 0]]);
if(Sx_types[67].call(null, and$2))
var
aV = Sx_runtime[75].call(null, env, match_val),
b = [0, 1 - Sx_types[67].call(null, aV)];
else
var b = and$2;
if(Sx_types[67].call(null, b))
return make_cek_value
(cek_call
(Sx_runtime[25].call(null, custom_special_forms, match_val),
[6, [0, args, [0, env, 0]]]),
env,
kont);
var and$3 = Sx_runtime[75].call(null, env, match_val);
if(Sx_types[67].call(null, and$3))
var
aW = Sx_runtime[76].call(null, env, match_val),
c = Sx_runtime[88].call(null, aW);
else
var c = and$3;
if(Sx_types[67].call(null, c)){
var mac = Sx_runtime[76].call(null, env, match_val);
return make_cek_state(expand_macro(mac, args, env), env, kont);
}
if(Sx_types[67].call(null, render_check))
var
aX = Sx_runtime[75].call(null, env, match_val),
and$4 = [0, 1 - Sx_types[67].call(null, aX)],
d =
Sx_types[67].call(null, and$4)
? cek_call(render_check, [6, [0, expr, [0, env, 0]]])
: and$4;
else
var d = render_check;
return Sx_types[67].call(null, d)
? make_cek_value
(cek_call(render_fn, [6, [0, expr, [0, env, 0]]]), env, kont)
: step_eval_call(head, args, env, kont);
}
function step_eval_list(expr, env, kont){
return caml_trampoline(step_eval_list$0(0, expr, env, kont));
}
var
gv = [6, 0],
gw = [0, [3, cst_provide], 0],
gx = [3, cst_value],
gy = [6, 0],
gz = [6, 0],
gA = [3, cst_name],
gB = [3, cst_env];
function kont_extract_provides(kont){
var a = Sx_runtime[33].call(null, kont);
if(Sx_types[67].call(null, a)) return gv;
var
frame = Sx_runtime[14].call(null, kont),
rest_frames = kont_extract_provides(Sx_runtime[15].call(null, kont)),
b = [0, frame_type(frame), gw],
c = Sx_runtime[1].call(null, cst, b);
if(! Sx_types[67].call(null, c)) return rest_frames;
var
d = Sx_runtime[25].call(null, frame, gx),
e = Sx_runtime[25].call(null, frame, gA),
f =
[23,
[0,
cst_provide,
Sx_runtime[25].call(null, frame, gB),
e,
0,
gz,
0,
0,
gy,
d,
0]];
return Sx_runtime[18].call(null, f, rest_frames);
}
var
cst_contains = "contains?",
provide_batch_depth_ref = [],
provide_batch_queue_ref = [],
provide_subscribers_ref = [],
gC = [0, [2, 0.], 0],
gD = [6, [0, 0, 0]];
function fire_provide_subscribers(name){
var subs = Sx_runtime[25].call(null, provide_subscribers_ref[1], name);
if(Sx_types[67].call(null, subs))
var
b = Sx_runtime[33].call(null, subs),
a = [0, 1 - Sx_types[67].call(null, b)];
else
var a = subs;
if(! Sx_types[67].call(null, a)) return 0;
var
c = Sx_runtime[1].call(null, cst$0, [0, provide_batch_depth_ref[1], gC]);
if(Sx_types[67].call(null, c)){
var d = Sx_runtime[5].call(null, subs);
Stdlib_List[18].call
(null,
function(sub){
var
a =
Sx_runtime[1].call
(null, cst_contains, [0, provide_batch_queue_ref[1], [0, sub, 0]]),
b = [0, 1 - Sx_types[67].call(null, a)];
if(Sx_types[67].call(null, b))
provide_batch_queue_ref[1] =
Sx_runtime[10].call(null, provide_batch_queue_ref[1], sub);
return 0;
},
d);
return 0;
}
var e = Sx_runtime[5].call(null, subs);
Stdlib_List[18].call(null, function(sub){cek_call(sub, gD); return 0;}, e);
return 0;
}
var gE = [0, [2, 1.], 0];
function batch_begin_b(param){
provide_batch_depth_ref[1] =
Sx_runtime[1].call(null, cst$8, [0, provide_batch_depth_ref[1], gE]);
return 0;
}
var
gF = [0, [2, 1.], 0],
gG = [0, [2, 0.], 0],
gH = [6, 0],
gI = [6, [0, 0, 0]];
function batch_end_b(param){
provide_batch_depth_ref[1] =
Sx_runtime[1].call(null, cst$5, [0, provide_batch_depth_ref[1], gF]);
var
a = Sx_runtime[1].call(null, cst, [0, provide_batch_depth_ref[1], gG]);
if(! Sx_types[67].call(null, a)) return 0;
var queue = provide_batch_queue_ref[1];
provide_batch_queue_ref[1] = gH;
var b = Sx_runtime[5].call(null, queue);
Stdlib_List[18].call(null, function(sub){cek_call(sub, gI); return 0;}, b);
return 0;
}
var bind_tracking_ref = [], gJ = [6, 0];
function step_sf_bind(args, env, kont){
var body = Sx_runtime[14].call(null, args), prev = bind_tracking_ref[1];
bind_tracking_ref[1] = gJ;
return make_cek_state
(body, env, kont_push(make_bind_frame(body, env, prev), kont));
}
var gK = [6, 0];
function step_sf_parameterize(args, env, kont){
var
bindings = Sx_runtime[14].call(null, args),
body = Sx_runtime[15].call(null, args),
or = Sx_runtime[83].call(null, bindings),
or$0 =
Sx_types[67].call(null, or) ? or : Sx_runtime[33].call(null, bindings);
if(Sx_types[67].call(null, or$0)) return step_sf_begin(body, env, kont);
var
first_pair = Sx_runtime[14].call(null, bindings),
a = kont_push(make_parameterize_frame(bindings, 0, gK, body, env), kont);
return make_cek_state(Sx_runtime[14].call(null, first_pair), env, a);
}
var gL = [0, [3, cst$14], 0], gM = [2, 0.], gN = [2, 0.];
function syntax_rules_match(pattern, form, literals){
var and = Sx_runtime[39].call(null, pattern);
if(Sx_types[67].call(null, and))
var
e = [0, Sx_types[68].call(null, pattern), gL],
a = Sx_runtime[1].call(null, cst, e);
else
var a = and;
if(Sx_types[67].call(null, a))
return [7, Stdlib_Hashtbl[1].call(null, 0, 0)];
var and$0 = Sx_runtime[39].call(null, pattern);
if(Sx_types[67].call(null, and$0))
var
f = [0, literals, [0, Sx_types[68].call(null, pattern), 0]],
b = Sx_runtime[1].call(null, cst_contains, f);
else
var b = and$0;
if(Sx_types[67].call(null, b)){
var and$1 = Sx_runtime[39].call(null, form);
if(Sx_types[67].call(null, and$1))
var
g = [0, Sx_types[68].call(null, form), 0],
h = [0, Sx_types[68].call(null, pattern), g],
c = Sx_runtime[1].call(null, cst, h);
else
var c = and$1;
return Sx_types[67].call(null, c)
? [7, Stdlib_Hashtbl[1].call(null, 0, 0)]
: 0;
}
var i = Sx_runtime[39].call(null, pattern);
if(Sx_types[67].call(null, i)){
var
d = [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
j = Sx_types[68].call(null, pattern);
Sx_runtime[11].call(null, d, j, form);
return d;
}
var
and$2 = Sx_runtime[37].call(null, pattern),
k =
Sx_types[67].call(null, and$2)
? Sx_runtime[33].call(null, pattern)
: and$2;
if(Sx_types[67].call(null, k)){
var
and$3 = Sx_runtime[37].call(null, form),
l =
Sx_types[67].call(null, and$3)
? Sx_runtime[33].call(null, form)
: and$3;
return Sx_types[67].call(null, l)
? [7, Stdlib_Hashtbl[1].call(null, 0, 0)]
: 0;
}
var
and$4 = Sx_runtime[37].call(null, pattern),
m =
Sx_types[67].call(null, and$4)
? Sx_runtime[37].call(null, form)
: and$4;
if(Sx_types[67].call(null, m))
return syntax_rules_match_list(pattern, gN, form, gM, literals);
var n = Sx_runtime[1].call(null, cst, [0, pattern, [0, form, 0]]);
return Sx_types[67].call(null, n)
? [7, Stdlib_Hashtbl[1].call(null, 0, 0)]
: 0;
}
var
cst$15 = "...",
gO = [0, [2, 1.], 0],
gP = [0, [2, 1.], 0],
gQ = [0, [3, cst$15], 0],
gR = [0, [2, 1.], 0],
gS = [0, [2, 2.], 0],
gT = [0, [2, 2.], 0],
gU = [0, [2, 0.], 0],
gV = [0, 0, 0],
gW = [0, [2, 2.], 0],
gX = [0, [2, 1.], 0],
gY = [0, [2, 1.], 0];
function syntax_rules_match_list(pattern, pi, form, fi, literals){
var
plen = Sx_runtime[24].call(null, pattern),
flen = Sx_runtime[24].call(null, form),
and = Sx_runtime[1].call(null, cst$2, [0, pi, [0, plen, 0]]),
b =
Sx_types[67].call(null, and)
? Sx_runtime[1].call(null, cst$2, [0, fi, [0, flen, 0]])
: and;
if(Sx_types[67].call(null, b))
return [7, Stdlib_Hashtbl[1].call(null, 0, 0)];
var c = Sx_runtime[1].call(null, cst$2, [0, pi, [0, plen, 0]]);
if(Sx_types[67].call(null, c)) return 0;
var
d = [0, Sx_runtime[1].call(null, cst$8, [0, pi, gO]), [0, plen, 0]],
and$0 = Sx_runtime[1].call(null, cst$3, d);
if(Sx_types[67].call(null, and$0)){
var
e = Sx_runtime[1].call(null, cst$8, [0, pi, gP]),
f = Sx_runtime[17].call(null, pattern, e),
and$1 = Sx_runtime[39].call(null, f);
if(Sx_types[67].call(null, and$1))
var
g = Sx_runtime[1].call(null, cst$8, [0, pi, gR]),
h = Sx_runtime[17].call(null, pattern, g),
i = [0, Sx_types[68].call(null, h), gQ],
a = Sx_runtime[1].call(null, cst, i);
else
var a = and$1;
}
else
var a = and$0;
if(Sx_types[67].call(null, a)){
var
sub_pat = Sx_runtime[17].call(null, pattern, pi),
j = [0, plen, [0, Sx_runtime[1].call(null, cst$8, [0, pi, gS]), 0]];
Sx_runtime[1].call(null, cst$5, j);
Sx_runtime[1].call(null, cst$5, [0, flen, [0, fi, 0]]);
var
k = [0, plen, [0, Sx_runtime[1].call(null, cst$8, [0, pi, gT]), 0]],
l = [0, Sx_runtime[1].call(null, cst$5, k), 0],
m = [0, Sx_runtime[1].call(null, cst$5, [0, flen, [0, fi, 0]]), l],
n_ellipsis = Sx_runtime[1].call(null, cst$5, m),
n = Sx_runtime[1].call(null, cst$3, [0, n_ellipsis, gU]);
if(Sx_types[67].call(null, n)) return 0;
var
o =
[0,
form,
[0,
fi,
[0, Sx_runtime[1].call(null, cst$8, [0, fi, [0, n_ellipsis, 0]]), 0]]];
Sx_runtime[1].call(null, cst_slice, o);
var
p =
[0,
form,
[0,
fi,
[0, Sx_runtime[1].call(null, cst$8, [0, fi, [0, n_ellipsis, 0]]), 0]]],
q = Sx_runtime[1].call(null, cst_slice, p),
r = Sx_runtime[5].call(null, q),
sub_bindings =
[6,
Stdlib_List[20].call
(null,
function(f){return syntax_rules_match(sub_pat, f, literals);},
r)],
s = Sx_runtime[1].call(null, cst_contains, [0, sub_bindings, gV]);
if(Sx_types[67].call(null, s)) return 0;
var
t = Sx_runtime[1].call(null, cst$8, [0, fi, [0, n_ellipsis, 0]]),
rest_result =
syntax_rules_match_list
(pattern,
Sx_runtime[1].call(null, cst$8, [0, pi, gW]),
form,
t,
literals),
u = Sx_runtime[83].call(null, rest_result);
if(Sx_types[67].call(null, u)) return 0;
var
merged = [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
v = Sx_runtime[5].call(null, sub_bindings);
Stdlib_List[18].call
(null,
function(b){
var
a = Sx_runtime[1].call(null, cst_keys, [0, b, 0]),
c = Sx_runtime[5].call(null, a);
Stdlib_List[18].call
(null,
function(key){
var
existing = Sx_runtime[56].call(null, merged, key),
a = Sx_runtime[83].call(null, existing);
if(Sx_types[67].call(null, a)){
var c = [6, [0, Sx_runtime[25].call(null, b, key), 0]];
Sx_runtime[11].call(null, merged, key, c);
}
else{
var
d =
[0,
existing,
[0, [6, [0, Sx_runtime[25].call(null, b, key), 0]], 0]],
e = Sx_runtime[1].call(null, cst_append, d);
Sx_runtime[11].call(null, merged, key, e);
}
return 0;
},
c);
return 0;
},
v);
var
w = Sx_runtime[1].call(null, cst_keys, [0, rest_result, 0]),
x = Sx_runtime[5].call(null, w);
Stdlib_List[18].call
(null,
function(key){
var a = Sx_runtime[25].call(null, rest_result, key);
Sx_runtime[11].call(null, merged, key, a);
return 0;
},
x);
return merged;
}
var y = Sx_runtime[1].call(null, cst$2, [0, fi, [0, flen, 0]]);
if(Sx_types[67].call(null, y)) return 0;
var
z = Sx_runtime[17].call(null, form, fi),
sub_result =
syntax_rules_match(Sx_runtime[17].call(null, pattern, pi), z, literals),
A = Sx_runtime[83].call(null, sub_result);
if(Sx_types[67].call(null, A)) return 0;
var
B = Sx_runtime[1].call(null, cst$8, [0, fi, gX]),
rest_result$0 =
syntax_rules_match_list
(pattern,
Sx_runtime[1].call(null, cst$8, [0, pi, gY]),
form,
B,
literals),
C = Sx_runtime[83].call(null, rest_result$0);
if(Sx_types[67].call(null, C)) return 0;
var
D = Sx_runtime[1].call(null, cst_keys, [0, sub_result, 0]),
E = Sx_runtime[5].call(null, D);
Stdlib_List[18].call
(null,
function(key){
var a = Sx_runtime[25].call(null, sub_result, key);
Sx_runtime[11].call(null, rest_result$0, key, a);
return 0;
},
E);
return rest_result$0;
}
function syntax_rules_find_var(template, bindings){
var and = Sx_runtime[39].call(null, template);
if(Sx_types[67].call(null, and)){
var
b = [0, bindings, [0, Sx_types[68].call(null, template), 0]],
and$0 = Sx_runtime[1].call(null, cst_has_key, b);
if(Sx_types[67].call(null, and$0))
var
c = Sx_types[68].call(null, template),
d = Sx_runtime[25].call(null, bindings, c),
a = Sx_runtime[37].call(null, d);
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a)) return Sx_types[68].call(null, template);
var e = Sx_runtime[37].call(null, template);
if(! Sx_types[67].call(null, e)) return 0;
var f = Sx_runtime[5].call(null, template);
return Stdlib_List[26].call
(null,
function(found, t){
var a = Sx_runtime[83].call(null, found);
return Sx_types[67].call(null, a)
? syntax_rules_find_var(t, bindings)
: found;
},
0,
f);
}
var gZ = [6, 0], g0 = [6, 0];
function syntax_rules_find_all_vars(template, bindings){
var and = Sx_runtime[39].call(null, template);
if(Sx_types[67].call(null, and)){
var
b = [0, bindings, [0, Sx_types[68].call(null, template), 0]],
and$0 = Sx_runtime[1].call(null, cst_has_key, b);
if(Sx_types[67].call(null, and$0))
var
c = Sx_types[68].call(null, template),
d = Sx_runtime[25].call(null, bindings, c),
a = Sx_runtime[37].call(null, d);
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a))
return [6, [0, Sx_types[68].call(null, template), 0]];
var e = Sx_runtime[37].call(null, template);
if(! Sx_types[67].call(null, e)) return g0;
var f = Sx_runtime[5].call(null, template);
return Stdlib_List[26].call
(null,
function(acc, t){
var
a = [0, acc, [0, syntax_rules_find_all_vars(t, bindings), 0]];
return Sx_runtime[1].call(null, cst_append, a);
},
gZ,
f);
}
var g1 = [2, 0.];
function syntax_rules_instantiate(template, bindings){
var and = Sx_runtime[39].call(null, template);
if(Sx_types[67].call(null, and))
var
b = [0, bindings, [0, Sx_types[68].call(null, template), 0]],
a = Sx_runtime[1].call(null, cst_has_key, b);
else
var a = and;
if(Sx_types[67].call(null, a)){
var c = Sx_types[68].call(null, template);
return Sx_runtime[25].call(null, bindings, c);
}
var
d = Sx_runtime[37].call(null, template),
e = [0, 1 - Sx_types[67].call(null, d)];
if(Sx_types[67].call(null, e)) return template;
var f = Sx_runtime[33].call(null, template);
return Sx_types[67].call(null, f)
? template
: syntax_rules_instantiate_list(template, g1, bindings);
}
var
g2 = [6, 0],
g3 = [0, [2, 1.], 0],
g4 = [0, [2, 1.], 0],
g5 = [0, [3, cst$15], 0],
g6 = [0, [2, 1.], 0],
g7 = [0, [2, 2.], 0],
g8 = [0, [2, 2.], 0],
g9 = [0, [2, 1.], 0];
function syntax_rules_instantiate_list(template, i$1, bindings){
var i = i$1;
for(;;){
var
a = [0, i, [0, Sx_runtime[24].call(null, template), 0]],
b = Sx_runtime[1].call(null, cst$2, a);
if(Sx_types[67].call(null, b)) return g2;
var
elem = Sx_runtime[17].call(null, template, i),
c = [0, Sx_runtime[24].call(null, template), 0],
d = [0, Sx_runtime[1].call(null, cst$8, [0, i, g3]), c],
and = Sx_runtime[1].call(null, cst$3, d);
if(Sx_types[67].call(null, and)){
var
e = Sx_runtime[1].call(null, cst$8, [0, i, g4]),
f = Sx_runtime[17].call(null, template, e),
and$0 = Sx_runtime[39].call(null, f);
if(Sx_types[67].call(null, and$0))
var
g = Sx_runtime[1].call(null, cst$8, [0, i, g6]),
h = Sx_runtime[17].call(null, template, g),
j = [0, Sx_types[68].call(null, h), g5],
has_ellipsis = Sx_runtime[1].call(null, cst, j);
else
var has_ellipsis = and$0;
}
else
var has_ellipsis = and;
if(! Sx_types[67].call(null, has_ellipsis)){
var
p =
syntax_rules_instantiate_list
(template, Sx_runtime[1].call(null, cst$8, [0, i, g9]), bindings),
q = syntax_rules_instantiate(elem, bindings);
return Sx_runtime[18].call(null, q, p);
}
var
all_vars = syntax_rules_find_all_vars(elem, bindings),
k = Sx_runtime[33].call(null, all_vars);
if(! Sx_types[67].call(null, k)) break;
var i$0 = Sx_runtime[1].call(null, cst$8, [0, i, g7]);
i = i$0;
}
var
l = Sx_runtime[14].call(null, all_vars),
m = Sx_runtime[25].call(null, bindings, l),
count = Sx_runtime[24].call(null, m),
n = Sx_runtime[1].call(null, cst_range, [0, count, 0]),
o = Sx_runtime[5].call(null, n),
expanded =
[6,
Stdlib_List[20].call
(null,
function(idx){
var
b = [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
a = Sx_runtime[1].call(null, cst_keys, [0, bindings, 0]),
c = Sx_runtime[5].call(null, a);
Stdlib_List[18].call
(null,
function(key){
var a = Sx_runtime[25].call(null, bindings, key);
Sx_runtime[11].call(null, b, key, a);
return 0;
},
c);
var d = Sx_runtime[5].call(null, all_vars);
Stdlib_List[18].call
(null,
function(var_name){
var
a = Sx_runtime[25].call(null, bindings, var_name),
c = Sx_runtime[17].call(null, a, idx);
Sx_runtime[11].call(null, b, var_name, c);
return 0;
},
d);
return syntax_rules_instantiate(elem, b);
},
o)],
rest_result =
syntax_rules_instantiate_list
(template, Sx_runtime[1].call(null, cst$8, [0, i, g8]), bindings);
return Sx_runtime[1].call
(null, cst_append, [0, expanded, [0, rest_result, 0]]);
}
var g_ = [3, cst$14];
function syntax_rules_expand(literals, rules, form){
var
a = Sx_types[55].call(null, g_),
full_form = Sx_runtime[18].call(null, a, form);
return syntax_rules_try_rules(literals, rules, full_form);
}
var g$ = [3, "syntax-rules: no pattern matched for "], ha = [2, 1.];
function syntax_rules_try_rules(literals, rules$1, full_form){
var rules = rules$1;
for(;;){
var a = Sx_runtime[33].call(null, rules);
if(Sx_types[67].call(null, a)){
var
b = [0, g$, [0, Sx_runtime[68].call(null, full_form), 0]],
c = [3, Sx_runtime[4].call(null, b)],
d = Sx_runtime[2].call(null, c);
throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1);
}
var
rule = Sx_runtime[14].call(null, rules),
pattern = Sx_runtime[14].call(null, rule),
template = Sx_runtime[17].call(null, rule, ha),
bindings = syntax_rules_match(pattern, full_form, literals),
e = Sx_runtime[83].call(null, bindings),
f = [0, 1 - Sx_types[67].call(null, e)];
if(Sx_types[67].call(null, f))
return syntax_rules_instantiate(template, bindings);
var rules$0 = Sx_runtime[15].call(null, rules);
rules = rules$0;
}
}
var
hb = [3, cst_sr_literals],
hc = [3, cst_sr_rules],
hd = [3, cst_syntax_rules],
he = [4, cst_syntax_rules_body],
hf = [3, "__sr-form"],
hg = [6, 0],
hh = [6, 0];
function sf_syntax_rules(args, env){
var a = Sx_runtime[14].call(null, args), b = Sx_runtime[37].call(null, a);
if(Sx_types[67].call(null, b))
var
c = Sx_runtime[14].call(null, args),
d = Sx_runtime[5].call(null, c),
literals =
[6,
Stdlib_List[20].call
(null,
function(s){
var a = Sx_runtime[39].call(null, s);
return Sx_types[67].call(null, a)
? Sx_types[68].call(null, s)
: [3, Sx_runtime[4].call(null, [0, s, 0])];
},
d)];
else
var literals = hh;
var
rules = Sx_runtime[15].call(null, args),
closure = Sx_runtime[80].call(null, env),
e = Sx_runtime[3].call(null, hb);
Sx_runtime[77].call(null, closure, e, literals);
var f = Sx_runtime[3].call(null, hc);
Sx_runtime[77].call(null, closure, f, rules);
return Sx_types[53].call(null, hg, hf, he, closure, hd);
}
var
hi = [6, 0],
hj = [6, 0],
hk = [0, [3, "export"], 0],
hl = [0, [3, cst_import], 0],
hm = [0, [3, cst_begin], 0];
function step_sf_define_library(args, env, kont){
var
lib_spec = Sx_runtime[14].call(null, args),
decls = Sx_runtime[15].call(null, args),
lib_env = Sx_runtime[80].call(null, env),
a = Sx_runtime[5].call(null, decls),
exports = [0, hi],
body_forms = [0, hj];
Stdlib_List[18].call
(null,
function(decl){
var and = Sx_runtime[37].call(null, decl);
if(Sx_types[67].call(null, and)){
var
b = Sx_runtime[33].call(null, decl),
and$0 = [0, 1 - Sx_types[67].call(null, b)];
if(Sx_types[67].call(null, and$0))
var
c = Sx_runtime[14].call(null, decl),
a = Sx_runtime[39].call(null, c);
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a)){
var
d = Sx_runtime[14].call(null, decl),
kind = Sx_types[68].call(null, d),
e = Sx_runtime[1].call(null, cst, [0, kind, hk]);
if(Sx_types[67].call(null, e)){
var
f = Sx_runtime[15].call(null, decl),
g = Sx_runtime[5].call(null, f),
h =
[0,
[6,
Stdlib_List[20].call
(null,
function(s){
var a = Sx_runtime[39].call(null, s);
return Sx_types[67].call(null, a)
? Sx_types[68].call(null, s)
: [3, Sx_runtime[4].call(null, [0, s, 0])];
},
g)],
0];
exports[1] = Sx_runtime[1].call(null, cst_append, [0, exports[1], h]);
}
else{
var i = Sx_runtime[1].call(null, cst, [0, kind, hl]);
if(Sx_types[67].call(null, i)){
var
j = Sx_runtime[15].call(null, decl),
k = Sx_runtime[5].call(null, j);
Stdlib_List[18].call
(null,
function(import_set){
bind_import_set(import_set, lib_env);
return 0;
},
k);
}
else{
var l = Sx_runtime[1].call(null, cst, [0, kind, hm]);
if(Sx_types[67].call(null, l)){
var m = [0, Sx_runtime[15].call(null, decl), 0];
body_forms[1] =
Sx_runtime[1].call(null, cst_append, [0, body_forms[1], m]);
}
}
}
}
return 0;
},
a);
var b = Sx_runtime[5].call(null, body_forms[1]);
Stdlib_List[18].call
(null, function(form){eval_expr(form, lib_env); return 0;}, b);
var
export_dict = [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
c = Sx_runtime[5].call(null, exports[1]);
Stdlib_List[18].call
(null,
function(name){
var a = Sx_runtime[75].call(null, lib_env, name);
if(Sx_types[67].call(null, a)){
var b = Sx_runtime[76].call(null, lib_env, name);
Sx_runtime[11].call(null, export_dict, name, b);
}
return 0;
},
c);
register_library(lib_spec, export_dict);
return make_cek_value(0, env, kont);
}
var
cst_except = "except",
cst_only = "only",
cst_prefix = "prefix",
cst_rename = "rename",
hn = [0, [3, cst_only], 0],
ho = [2, 1.],
hp = [0, [3, cst_only], 0],
hq = [0, [3, cst_prefix], 0],
hr = [2, 2.],
hs = [0, [3, cst_except], 0],
ht = [0, [3, cst_prefix], 0],
hu = [0, [3, cst_rename], 0];
function bind_import_set(import_set, env){
var and = Sx_runtime[37].call(null, import_set);
if(Sx_types[67].call(null, and)){
var
b = Sx_runtime[33].call(null, import_set),
and$0 = [0, 1 - Sx_types[67].call(null, b)];
if(Sx_types[67].call(null, and$0))
var
c = Sx_runtime[14].call(null, import_set),
a = Sx_runtime[39].call(null, c);
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a))
var
d = Sx_runtime[14].call(null, import_set),
head = Sx_types[68].call(null, d);
else
var head = 0;
var or = Sx_runtime[1].call(null, cst, [0, head, hn]);
if(Sx_types[67].call(null, or))
var or$0 = or;
else{
var or$1 = Sx_runtime[1].call(null, cst, [0, head, hs]);
if(Sx_types[67].call(null, or$1))
var or$0 = or$1;
else
var
or$2 = Sx_runtime[1].call(null, cst, [0, head, ht]),
or$0 =
Sx_types[67].call(null, or$2)
? or$2
: Sx_runtime[1].call(null, cst, [0, head, hu]);
}
var
lib_spec =
Sx_types[67].call(null, or$0)
? Sx_runtime[17].call(null, import_set, ho)
: import_set,
exports = library_exports(lib_spec),
e = Sx_runtime[1].call(null, cst, [0, head, hp]);
if(Sx_types[67].call(null, e)){
var
f = Sx_runtime[15].call(null, import_set),
g = Sx_runtime[15].call(null, f),
h = Sx_runtime[5].call(null, g);
Stdlib_List[18].call
(null,
function(s){
var
a = Sx_runtime[39].call(null, s),
id =
Sx_types[67].call(null, a)
? Sx_types[68].call(null, s)
: [3, Sx_runtime[4].call(null, [0, s, 0])],
b = Sx_runtime[1].call(null, cst_has_key, [0, exports, [0, id, 0]]);
if(Sx_types[67].call(null, b)){
var
c = Sx_runtime[25].call(null, exports, id),
d = Sx_runtime[3].call(null, id);
Sx_runtime[77].call(null, env, d, c);
}
return 0;
},
h);
return 0;
}
var i = Sx_runtime[1].call(null, cst, [0, head, hq]);
if(Sx_types[67].call(null, i)){
var
j = [0, Sx_runtime[17].call(null, import_set, hr), 0],
pfx = [3, Sx_runtime[4].call(null, j)],
k = Sx_runtime[1].call(null, cst_keys, [0, exports, 0]),
l = Sx_runtime[5].call(null, k);
Stdlib_List[18].call
(null,
function(key){
var
a = Sx_runtime[25].call(null, exports, key),
b = [3, Sx_runtime[4].call(null, [0, pfx, [0, key, 0]])],
c = Sx_runtime[3].call(null, b);
Sx_runtime[77].call(null, env, c, a);
return 0;
},
l);
return 0;
}
var
m = Sx_runtime[1].call(null, cst_keys, [0, exports, 0]),
n = Sx_runtime[5].call(null, m);
Stdlib_List[18].call
(null,
function(key){
var
a = Sx_runtime[25].call(null, exports, key),
b = Sx_runtime[3].call(null, key);
Sx_runtime[77].call(null, env, b, a);
return 0;
},
n);
return 0;
}
var
hv = [0, [3, cst_only], 0],
hw = [2, 1.],
hx = [3, cst_import],
hy = [0, [3, cst_except], 0],
hz = [0, [3, cst_prefix], 0],
hA = [0, [3, cst_rename], 0];
function step_sf_import(args$0, env, kont){
var args = args$0;
for(;;){
var b = Sx_runtime[33].call(null, args);
if(Sx_types[67].call(null, b)) return make_cek_value(0, env, kont);
var
import_set = Sx_runtime[14].call(null, args),
rest_sets = Sx_runtime[15].call(null, args),
and = Sx_runtime[37].call(null, import_set);
if(Sx_types[67].call(null, and)){
var
c = Sx_runtime[33].call(null, import_set),
and$0 = [0, 1 - Sx_types[67].call(null, c)];
if(Sx_types[67].call(null, and$0))
var
e = Sx_runtime[14].call(null, import_set),
a = Sx_runtime[39].call(null, e);
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a))
var
f = Sx_runtime[14].call(null, import_set),
head = Sx_types[68].call(null, f);
else
var head = 0;
var or = Sx_runtime[1].call(null, cst, [0, head, hv]);
if(Sx_types[67].call(null, or))
var or$0 = or;
else{
var or$1 = Sx_runtime[1].call(null, cst, [0, head, hy]);
if(Sx_types[67].call(null, or$1))
var or$0 = or$1;
else
var
or$2 = Sx_runtime[1].call(null, cst, [0, head, hz]),
or$0 =
Sx_types[67].call(null, or$2)
? or$2
: Sx_runtime[1].call(null, cst, [0, head, hA]);
}
var
lib_spec =
Sx_types[67].call(null, or$0)
? Sx_runtime[17].call(null, import_set, hw)
: import_set,
g = library_loaded_p(lib_spec);
if(! Sx_types[67].call(null, g)){
var
i = kont_push(make_import_frame(import_set, rest_sets, env), kont),
d = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d, "library", lib_spec);
Stdlib_Hashtbl[11].call(null, d, cst_op, hx);
return make_cek_suspended([7, d], env, i);
}
bind_import_set(import_set, env);
var h = Sx_runtime[33].call(null, rest_sets);
if(Sx_types[67].call(null, h)) return make_cek_value(0, env, kont);
args = rest_sets;
}
}
var hB = [3, "perform requires an IO request argument"];
function step_sf_perform(args, env, kont){
var a = Sx_runtime[33].call(null, args);
if(Sx_types[67].call(null, a)){
var b = Sx_runtime[2].call(null, hB);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
var c = kont_push(make_perform_frame(env), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, c);
}
var
hC = [2, 1.],
hD = [2, 2.],
hE = [0, [2, 3.], 0],
hF = [0, [3, cst$3], 0],
hG = [0, [3, cst$0], 0],
hH = [0, [2, 1.], 0],
hI = [2, 1.],
hJ = [2, 1.],
hK = [0, [2, 3.], 0],
hL = [2, 2.];
function sf_define_record_type(args, env){
var
type_sym = Sx_runtime[14].call(null, args),
ctor_spec = Sx_runtime[17].call(null, args, hC),
pred_sym = Sx_runtime[17].call(null, args, hD),
field_specs = Sx_runtime[1].call(null, cst_slice, [0, args, hE]),
raw_name = Sx_types[68].call(null, type_sym),
and = Sx_runtime[1].call(null, cst_starts_with, [0, raw_name, hF]),
a =
Sx_types[67].call(null, and)
? Sx_runtime[1].call(null, cst_ends_with, [0, raw_name, hG])
: and;
if(Sx_types[67].call(null, a))
var
b = [0, Sx_runtime[24].call(null, raw_name), hH],
c = [0, raw_name, [0, hI, [0, Sx_runtime[1].call(null, cst$5, b), 0]]],
type_name = Sx_runtime[1].call(null, cst_slice, c);
else
var type_name = raw_name;
var
d = Sx_runtime[14].call(null, ctor_spec),
ctor_name = Sx_types[68].call(null, d),
e = Sx_runtime[15].call(null, ctor_spec),
f = Sx_runtime[5].call(null, e),
ctor_params =
[6,
Stdlib_List[20].call
(null, function(s){return Sx_types[68].call(null, s);}, f)],
pred_name = Sx_types[68].call(null, pred_sym),
g = Sx_runtime[5].call(null, field_specs),
field_names =
[6,
Stdlib_List[20].call
(null,
function(fs){
var a = Sx_runtime[14].call(null, fs);
return Sx_types[68].call(null, a);
},
g)],
rtd_uid = Sx_types[91].call(null, type_name, field_names, ctor_params),
h = Sx_types[97].call(null, rtd_uid),
i = Sx_runtime[3].call(null, ctor_name);
Sx_runtime[77].call(null, env, i, h);
var
j = Sx_types[98].call(null, rtd_uid),
k = Sx_runtime[3].call(null, pred_name);
Sx_runtime[77].call(null, env, k, j);
Sx_runtime[93].call
(null,
[15,
cst$9,
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var
fs = a[1],
idx = args[1],
b = Sx_runtime[17].call(null, fs, hJ),
accessor_name = Sx_types[68].call(null, b),
c = Sx_types[99].call(null, idx),
d = Sx_runtime[3].call(null, accessor_name);
Sx_runtime[77].call(null, env, d, c);
var
e = [0, Sx_runtime[24].call(null, fs), hK],
f = Sx_runtime[1].call(null, cst$2, e);
if(! Sx_types[67].call(null, f)) return 0;
var
g = Sx_runtime[17].call(null, fs, hL),
mutator_name = Sx_types[68].call(null, g),
h = Sx_types[100].call(null, idx),
i = Sx_runtime[3].call(null, mutator_name);
return Sx_runtime[77].call(null, env, i, h);
}
}
return 0;
}],
field_specs);
return 0;
}
var
cst_protocol_registry = "*protocol-registry*",
cst_impl = "_impl",
cst_arity = "arity",
cst_get = "get",
cst_impls = "impls",
cst_methods = "methods",
hM = [3, cst_protocol_registry],
hN = [3, "satisfies?"],
hO = [4, "type-of"],
hP = [0, [3, cst_impls], 0],
hQ = [4, cst_protocol_registry],
hR = [4, cst_get],
hS = [4, cst_get],
hT = [4, cst_get],
hU = [4, cst_get],
hV = [4, cst_impl],
hW = [0, [3, ": not implemented for this type"], 0],
hX = [3, cst$1],
hY = [4, "error"],
hZ = [6, [0, [4, "nil?"], [0, [4, cst_impl], 0]]],
h0 = [4, cst_if],
h1 = [4, cst_impl],
h2 = [4, cst_let],
h3 = [4, cst_fn];
function sf_define_protocol(args, env){
var
a = Sx_runtime[14].call(null, args),
proto_name = Sx_types[68].call(null, a),
method_specs = Sx_runtime[15].call(null, args),
b = Sx_runtime[3].call(null, hM);
Sx_runtime[77].call(null, env, b, protocol_registry);
var c = Sx_runtime[3].call(null, hN);
Sx_runtime[77].call
(null,
env,
c,
[15,
cst$9,
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var val = a[1], pname = args[1];
return satisfies_p(pname, val);
}
}
return 0;
}]);
var
d = Stdlib_Hashtbl[1].call(null, 0, 3),
e = [7, Stdlib_Hashtbl[1].call(null, 0, 0)];
Stdlib_Hashtbl[11].call(null, d, cst_impls, e);
var
f = Sx_runtime[5].call(null, method_specs),
g =
[6,
Stdlib_List[20].call
(null,
function(spec){
var
d = Stdlib_Hashtbl[1].call(null, 0, 2),
a = Sx_runtime[24].call(null, spec);
Stdlib_Hashtbl[11].call(null, d, cst_arity, a);
var
b = Sx_runtime[14].call(null, spec),
c = Sx_types[68].call(null, b);
Stdlib_Hashtbl[11].call(null, d, cst_name, c);
return [7, d];
},
f)];
Stdlib_Hashtbl[11].call(null, d, cst_methods, g);
Stdlib_Hashtbl[11].call(null, d, cst_name, proto_name);
Sx_runtime[11].call(null, protocol_registry, proto_name, [7, d]);
var h = Sx_runtime[5].call(null, method_specs);
Stdlib_List[18].call
(null,
function(spec){
var
a = Sx_runtime[14].call(null, spec),
method_name = Sx_types[68].call(null, a),
params = Sx_runtime[15].call(null, spec),
self_sym = Sx_runtime[14].call(null, params),
b = [0, Sx_runtime[18].call(null, hV, params), 0],
c =
eval_expr
([6,
[0,
h3,
[0,
params,
[0,
[6,
[0,
h2,
[0,
[6,
[0,
[6,
[0,
h1,
[0,
[6,
[0,
hU,
[0,
[6,
[0,
hT,
[0,
[6,
[0, hS, [0, [6, [0, hR, [0, hQ, [0, proto_name, 0]]]], hP]]],
[0, [6, [0, hO, [0, self_sym, 0]]], 0]]]],
[0, method_name, 0]]]],
0]]],
0]],
[0,
[6,
[0,
h0,
[0,
hZ,
[0,
[6,
[0,
hY,
[0,
[3,
Sx_runtime[4].call
(null, [0, proto_name, [0, hX, [0, method_name, hW]]])],
0]]],
b]]]],
0]]]],
0]]]],
env),
d = Sx_runtime[3].call(null, method_name);
Sx_runtime[77].call(null, env, d, c);
return 0;
},
h);
return 0;
}
var
h4 = [2, 1.],
h5 = [0, [2, 1.], 0],
h6 = [2, 1.],
h7 = [3, "Unknown protocol: "],
h8 = [3, cst_impls],
h9 = [3, cst_methods],
h_ = [3, cst_name],
h$ = [3, " in protocol "],
ia = [3, "Unknown method "],
ib = [3, cst_arity],
ic = [2, 1.],
id = [0, [2, 1.], 0],
ie = [4, cst_fn],
ig = [4, cst_begin];
function sf_implement(args, env){
var
a = Sx_runtime[14].call(null, args),
proto_name = Sx_types[68].call(null, a),
b = Sx_runtime[17].call(null, args, h4),
raw_type_name = Sx_types[68].call(null, b),
c = [0, Sx_runtime[24].call(null, raw_type_name), h5],
d =
[0, raw_type_name, [0, h6, [0, Sx_runtime[1].call(null, cst$5, c), 0]]],
type_name = Sx_runtime[1].call(null, cst_slice, d),
e = Sx_runtime[15].call(null, args),
method_defs = Sx_runtime[15].call(null, e),
proto = Sx_runtime[25].call(null, protocol_registry, proto_name),
f = Sx_runtime[83].call(null, proto);
if(Sx_types[67].call(null, f)){
var
g = [3, Sx_runtime[4].call(null, [0, h7, [0, proto_name, 0]])],
h = Sx_runtime[2].call(null, g);
throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1);
}
var
impls = Sx_runtime[25].call(null, proto, h8),
or = Sx_runtime[25].call(null, impls, type_name),
type_impls =
Sx_types[67].call(null, or)
? or
: [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
i = Sx_runtime[5].call(null, method_defs);
Stdlib_List[18].call
(null,
function(method_def){
var
a = Sx_runtime[14].call(null, method_def),
mname = Sx_types[68].call(null, a),
b = Sx_runtime[25].call(null, proto, h9),
c = Sx_runtime[5].call(null, b),
d =
[6,
Stdlib_List[44].call
(null,
function(m){
var
a = [0, Sx_runtime[25].call(null, m, h_), [0, mname, 0]],
b = Sx_runtime[1].call(null, cst, a);
return Sx_types[67].call(null, b);
},
c)],
proto_method = Sx_runtime[14].call(null, d),
e = Sx_runtime[83].call(null, proto_method);
if(Sx_types[67].call(null, e)){
var
f =
[3,
Sx_runtime[4].call
(null, [0, ia, [0, mname, [0, h$, [0, proto_name, 0]]]])],
g = Sx_runtime[2].call(null, f);
throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1);
}
var
arity = Sx_runtime[25].call(null, proto_method, ib),
params =
Sx_runtime[1].call
(null, cst_slice, [0, method_def, [0, ic, [0, arity, 0]]]),
h = [0, Sx_runtime[1].call(null, cst$8, [0, arity, id]), 0],
i = [0, Sx_runtime[24].call(null, method_def), h],
j = Sx_runtime[1].call(null, cst, i);
if(Sx_types[67].call(null, j))
var body = Sx_runtime[17].call(null, method_def, arity);
else
var
l =
Sx_runtime[1].call(null, cst_slice, [0, method_def, [0, arity, 0]]),
body = Sx_runtime[18].call(null, ig, l);
var k = eval_expr([6, [0, ie, [0, params, [0, body, 0]]]], env);
Sx_runtime[11].call(null, type_impls, mname, k);
return 0;
},
i);
Sx_runtime[11].call(null, impls, type_name, type_impls);
return 0;
}
var ih = [0, 0], ii = [0, 0], ij = [3, cst_impls];
function satisfies_p(proto_name, value){
var
a = Sx_types[96].call(null, value),
b = [0, 1 - Sx_types[67].call(null, a)];
if(Sx_types[67].call(null, b)) return ih;
var
c = Sx_runtime[39].call(null, proto_name),
d =
Sx_types[67].call(null, c)
? Sx_types[68].call(null, proto_name)
: proto_name,
proto = Sx_runtime[25].call(null, protocol_registry, d),
e = Sx_runtime[83].call(null, proto);
if(Sx_types[67].call(null, e)) return ii;
var
f = Sx_runtime[73].call(null, value),
g = Sx_runtime[25].call(null, proto, ij),
h = Sx_runtime[25].call(null, g, f),
i = Sx_runtime[83].call(null, h);
return [0, 1 - Sx_types[67].call(null, i)];
}
var
warnings = [6, 0],
ik = [0, [0, 1], 0],
il = [0, [0, 0], 0],
im = [0, [3, cst_else], 0],
io = [0, [0, 1], 0],
ip = [0, [0, 0], 0],
iq =
[0,
[6,
[0,
[3, "match may be non-exhaustive (no wildcard or :else pattern)"],
0]],
0],
ir = [3, "match on boolean missing false case"],
is = [3, "match on boolean missing true case"];
function check_match_exhaustiveness(clauses){
var
b = Sx_runtime[5].call(null, clauses),
patterns =
[6,
Stdlib_List[20].call
(null, function(c){return Sx_runtime[14].call(null, c);}, b)],
c = Sx_runtime[5].call(null, patterns),
has_wildcard =
[0,
Stdlib_List[34].call
(null,
function(p){
var and = Sx_runtime[39].call(null, p);
if(Sx_types[67].call(null, and)){
var
b = Sx_runtime[1].call(null, cst, [0, p, ik]),
and$0 = [0, 1 - Sx_types[67].call(null, b)];
if(Sx_types[67].call(null, and$0))
var
c = Sx_runtime[1].call(null, cst, [0, p, il]),
a = [0, 1 - Sx_types[67].call(null, c)];
else
var a = and$0;
}
else
var a = and;
return Sx_types[67].call(null, a);
},
c)],
d = Sx_runtime[5].call(null, patterns),
has_else =
[0,
Stdlib_List[34].call
(null,
function(p){
var a = Sx_runtime[1].call(null, cst, [0, p, im]);
return Sx_types[67].call(null, a);
},
d)],
e = Sx_runtime[5].call(null, patterns),
has_true =
[0,
Stdlib_List[34].call
(null,
function(p){
var a = Sx_runtime[1].call(null, cst, [0, p, io]);
return Sx_types[67].call(null, a);
},
e)],
f = Sx_runtime[5].call(null, patterns),
has_false =
[0,
Stdlib_List[34].call
(null,
function(p){
var a = Sx_runtime[1].call(null, cst, [0, p, ip]);
return Sx_types[67].call(null, a);
},
f)],
and = [0, 1 - Sx_types[67].call(null, has_wildcard)],
g =
Sx_types[67].call(null, and)
? [0, 1 - Sx_types[67].call(null, has_else)]
: and,
warnings$0 =
Sx_types[67].call(null, g)
? Sx_runtime[1].call(null, cst_append, [0, warnings, iq])
: warnings,
and$0 = Sx_types[67].call(null, has_true) ? has_true : has_false;
if(Sx_types[67].call(null, and$0)){
var
has_false$0 = Sx_types[67].call(null, has_true) ? has_false : has_true,
and$1 = [0, 1 - Sx_types[67].call(null, has_false$0)];
if(Sx_types[67].call(null, and$1))
var
and$2 = [0, 1 - Sx_types[67].call(null, has_wildcard)],
a =
Sx_types[67].call(null, and$2)
? [0, 1 - Sx_types[67].call(null, has_else)]
: and$2;
else
var a = and$1;
}
else
var a = and$0;
if(Sx_types[67].call(null, a))
var
h = Sx_types[67].call(null, has_true) ? ir : is,
warnings$1 =
Sx_runtime[1].call
(null, cst_append, [0, warnings$0, [0, [6, [0, h, 0]], 0]]);
else
var warnings$1 = warnings$0;
return warnings$1;
}
var it = [2, 1.];
function match_find_clause(val, clauses$1, env){
var clauses = clauses$1;
for(;;){
var a = Sx_runtime[33].call(null, clauses);
if(Sx_types[67].call(null, a)) return 0;
var
clause = Sx_runtime[14].call(null, clauses),
pattern = Sx_runtime[14].call(null, clause),
body = Sx_runtime[17].call(null, clause, it),
local = Sx_runtime[80].call(null, env),
b = match_pattern(pattern, val, local);
if(Sx_types[67].call(null, b)) return [6, [0, local, [0, body, 0]]];
var clauses$0 = Sx_runtime[15].call(null, clauses);
clauses = clauses$0;
}
}
var
cst_adt = "_adt",
cst_ctor = "_ctor",
cst_fields = "_fields",
iu = [0, [4, cst$14], 0],
iv = [0, 1],
iw = [0, [2, 2.], 0],
ix = [0, [4, cst$4], 0],
iy = [2, 1.],
iz = [0, [4, cst_quote], 0],
iA = [2, 1.],
iB = [0, 1],
iC = [3, cst_adt],
iD = [3, cst_fields],
iE = [3, cst_ctor],
iF = [2, 1.],
iG = [0, [4, cst_rest], 0],
iH = [0, [4, cst_rest], 0],
iI = [2, 0.],
iJ = [2, 0.],
iK = [2, 1.],
iL = [0, [2, 1.], 0],
iM = [0, 1],
iN = [0, 0],
iO = [2, 1.];
function match_pattern(pattern, value, env){
var e = Sx_runtime[1].call(null, cst, [0, pattern, iu]);
if(Sx_types[67].call(null, e)) return iv;
var and = Sx_runtime[37].call(null, pattern);
if(Sx_types[67].call(null, and)){
var
f = [0, Sx_runtime[24].call(null, pattern), iw],
and$0 = Sx_runtime[1].call(null, cst, f);
if(Sx_types[67].call(null, and$0))
var
g = [0, Sx_runtime[14].call(null, pattern), ix],
b = Sx_runtime[1].call(null, cst, g);
else
var b = and$0;
}
else
var b = and;
if(Sx_types[67].call(null, b)){
var pred = eval_expr(Sx_runtime[17].call(null, pattern, iy), env);
return cek_call(pred, [6, [0, value, 0]]);
}
var and$1 = Sx_runtime[37].call(null, pattern);
if(Sx_types[67].call(null, and$1)){
var
h = Sx_runtime[33].call(null, pattern),
and$2 = [0, 1 - Sx_types[67].call(null, h)];
if(Sx_types[67].call(null, and$2))
var
i = [0, Sx_runtime[14].call(null, pattern), iz],
c = Sx_runtime[1].call(null, cst, i);
else
var c = and$2;
}
else
var c = and$1;
if(Sx_types[67].call(null, c)){
var j = [0, value, [0, Sx_runtime[17].call(null, pattern, iA), 0]];
return Sx_runtime[1].call(null, cst, j);
}
var k = Sx_runtime[39].call(null, pattern);
if(Sx_types[67].call(null, k)){
var
l = Sx_types[68].call(null, pattern),
m = Sx_runtime[3].call(null, l);
Sx_runtime[77].call(null, env, m, value);
return iB;
}
var and$3 = Sx_runtime[37].call(null, pattern);
if(Sx_types[67].call(null, and$3)){
var
n = Sx_runtime[33].call(null, pattern),
and$4 = [0, 1 - Sx_types[67].call(null, n)];
if(Sx_types[67].call(null, and$4)){
var
o = Sx_runtime[14].call(null, pattern),
and$5 = Sx_runtime[39].call(null, o);
if(Sx_types[67].call(null, and$5))
var
and$6 = Sx_runtime[38].call(null, value),
a =
Sx_types[67].call(null, and$6)
? Sx_runtime[25].call(null, value, iC)
: and$6;
else
var a = and$5;
}
else
var a = and$4;
}
else
var a = and$3;
if(Sx_types[67].call(null, a)){
var
p = Sx_runtime[14].call(null, pattern),
ctor_name = Sx_types[68].call(null, p),
field_patterns = Sx_runtime[15].call(null, pattern),
fields = Sx_runtime[25].call(null, value, iD),
q = [0, Sx_runtime[25].call(null, value, iE), [0, ctor_name, 0]],
and$7 = Sx_runtime[1].call(null, cst, q);
if(! Sx_types[67].call(null, and$7)) return and$7;
var
r = [0, Sx_runtime[24].call(null, fields), 0],
s = [0, Sx_runtime[24].call(null, field_patterns), r],
and$8 = Sx_runtime[1].call(null, cst, s);
if(! Sx_types[67].call(null, and$8)) return and$8;
var
t =
Sx_runtime[1].call(null, cst_zip, [0, field_patterns, [0, fields, 0]]),
u = Sx_runtime[5].call(null, t);
return [0,
Stdlib_List[33].call
(null,
function(pair){
var
a = Sx_runtime[17].call(null, pair, iF),
b = match_pattern(Sx_runtime[14].call(null, pair), a, env);
return Sx_types[67].call(null, b);
},
u)];
}
var
and$9 = Sx_runtime[38].call(null, pattern),
v =
Sx_types[67].call(null, and$9)
? Sx_runtime[38].call(null, value)
: and$9;
if(Sx_types[67].call(null, v)){
var
w = Sx_runtime[1].call(null, cst_keys, [0, pattern, 0]),
x = Sx_runtime[5].call(null, w);
return [0,
Stdlib_List[33].call
(null,
function(k){
var
a = Sx_runtime[25].call(null, value, k),
b =
match_pattern(Sx_runtime[25].call(null, pattern, k), a, env);
return Sx_types[67].call(null, b);
},
x)];
}
var and$10 = Sx_runtime[37].call(null, pattern);
if(Sx_types[67].call(null, and$10))
var
and$11 = Sx_runtime[37].call(null, value),
d =
Sx_types[67].call(null, and$11)
? Sx_runtime[1].call(null, cst_contains, [0, pattern, iG])
: and$11;
else
var d = and$10;
if(Sx_types[67].call(null, d)){
var
rest_idx = Sx_runtime[1].call(null, cst_index_of, [0, pattern, iH]),
y = [0, Sx_runtime[24].call(null, value), [0, rest_idx, 0]],
and$12 = Sx_runtime[1].call(null, cst$2, y);
if(! Sx_types[67].call(null, and$12)) return and$12;
var
z =
[0,
Sx_runtime[1].call
(null, cst_slice, [0, value, [0, iI, [0, rest_idx, 0]]]),
0],
A =
[0,
Sx_runtime[1].call
(null, cst_slice, [0, pattern, [0, iJ, [0, rest_idx, 0]]]),
z],
B = Sx_runtime[1].call(null, cst_zip, A),
C = Sx_runtime[5].call(null, B),
and$13 =
[0,
Stdlib_List[33].call
(null,
function(pair){
var
a = Sx_runtime[17].call(null, pair, iK),
b = match_pattern(Sx_runtime[14].call(null, pair), a, env);
return Sx_types[67].call(null, b);
},
C)];
if(! Sx_types[67].call(null, and$13)) return and$13;
var
D = Sx_runtime[1].call(null, cst$8, [0, rest_idx, iL]),
rest_name = Sx_runtime[17].call(null, pattern, D),
E = Sx_runtime[1].call(null, cst_slice, [0, value, [0, rest_idx, 0]]),
F = Sx_types[68].call(null, rest_name),
G = Sx_runtime[3].call(null, F);
Sx_runtime[77].call(null, env, G, E);
return iM;
}
var
and$14 = Sx_runtime[37].call(null, pattern),
H =
Sx_types[67].call(null, and$14)
? Sx_runtime[37].call(null, value)
: and$14;
if(! Sx_types[67].call(null, H))
return Sx_runtime[1].call(null, cst, [0, pattern, [0, value, 0]]);
var
I = [0, Sx_runtime[24].call(null, value), 0],
J = [0, Sx_runtime[24].call(null, pattern), I],
K = Sx_runtime[1].call(null, cst, J),
L = [0, 1 - Sx_types[67].call(null, K)];
if(Sx_types[67].call(null, L)) return iN;
var
pairs = Sx_runtime[1].call(null, cst_zip, [0, pattern, [0, value, 0]]),
M = Sx_runtime[5].call(null, pairs);
return [0,
Stdlib_List[33].call
(null,
function(pair){
var
a = Sx_runtime[17].call(null, pair, iO),
b = match_pattern(Sx_runtime[14].call(null, pair), a, env);
return Sx_types[67].call(null, b);
},
M)];
}
var iP = [0, 0], iQ = [3, "match: no clause matched "], iR = [2, 1.];
function step_sf_match(args, env, kont){
var
val = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
clauses = Sx_runtime[15].call(null, args),
result = match_find_clause(val, clauses, env),
a = Sx_runtime[83].call(null, result);
if(Sx_types[67].call(null, a)){
var
b = kont_push(make_raise_eval_frame(env, iP), kont),
c = [0, iQ, [0, Sx_runtime[68].call(null, val), 0]];
return make_cek_value([3, Sx_runtime[4].call(null, c)], env, b);
}
var d = Sx_runtime[14].call(null, result);
return make_cek_state(Sx_runtime[17].call(null, result, iR), d, kont);
}
var iS = [2, 1.];
function step_sf_handler_bind(args, env, kont){
var
handler_specs = Sx_runtime[14].call(null, args),
body = Sx_runtime[15].call(null, args),
a = Sx_runtime[5].call(null, handler_specs),
handlers =
[6,
Stdlib_List[20].call
(null,
function(spec){
var
a =
[0,
trampoline(eval_expr(Sx_runtime[17].call(null, spec, iS), env)),
0];
return [6,
[0,
trampoline(eval_expr(Sx_runtime[14].call(null, spec), env)),
a]];
},
a)],
b = Sx_runtime[33].call(null, body);
if(Sx_types[67].call(null, b)) return make_cek_value(0, env, kont);
var
c =
kont_push
(make_handler_frame(handlers, Sx_runtime[15].call(null, body), env),
kont);
return make_cek_state(Sx_runtime[14].call(null, body), env, c);
}
var iT = [2, 2.], iU = [2, 1.], iV = [6, 0];
function step_sf_restart_case(args, env, kont){
var
body = Sx_runtime[14].call(null, args),
restart_specs = Sx_runtime[15].call(null, args),
a = Sx_runtime[5].call(null, restart_specs),
restarts =
[6,
Stdlib_List[20].call
(null,
function(spec){
var
b = [0, Sx_runtime[17].call(null, spec, iT), 0],
c = [0, Sx_runtime[17].call(null, spec, iU), b],
d = Sx_runtime[14].call(null, spec),
e = Sx_runtime[39].call(null, d);
if(Sx_types[67].call(null, e))
var
f = Sx_runtime[14].call(null, spec),
a = Sx_types[68].call(null, f);
else
var a = Sx_runtime[14].call(null, spec);
return [6, [0, a, c]];
},
a)];
return make_cek_state
(body,
env,
kont_push(make_restart_frame(restarts, iV, env), kont));
}
var iW = [3, "Unhandled condition: "];
function step_sf_signal(args, env, kont){
var
condition = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
handler_fn = kont_find_handler(kont, condition),
a = Sx_runtime[83].call(null, handler_fn);
if(! Sx_types[67].call(null, a))
return continue_with_call
(handler_fn,
[6, [0, condition, 0]],
env,
[6, [0, condition, 0]],
kont_push(make_signal_return_frame(env, kont), kont));
var
b = [0, iW, [0, Sx_runtime[68].call(null, condition), 0]],
c = [3, Sx_runtime[4].call(null, b)],
d = Sx_runtime[2].call(null, c);
throw caml_maybe_attach_backtrace([0, Sx_types[9], d], 1);
}
var
iX = [0, [2, 2.], 0],
iY = [2, 1.],
iZ = [3, "No restart named: "],
i0 = [2, 1.],
i1 = [2, 2.],
i2 = [2, 1.],
i3 = [2, 2.],
i4 = [3, cst_env];
function step_sf_invoke_restart(args, env, kont){
var a = Sx_runtime[14].call(null, args), b = Sx_runtime[39].call(null, a);
if(Sx_types[67].call(null, b))
var c = Sx_runtime[14].call(null, args), rn = Sx_types[68].call(null, c);
else
var rn = trampoline(eval_expr(Sx_runtime[14].call(null, args), env));
var
d = Sx_runtime[39].call(null, rn),
restart_name =
Sx_types[67].call(null, d) ? Sx_types[68].call(null, rn) : rn,
e = [0, Sx_runtime[24].call(null, args), iX],
f = Sx_runtime[1].call(null, cst$2, e),
restart_arg =
Sx_types[67].call(null, f)
? trampoline(eval_expr(Sx_runtime[17].call(null, args, iY), env))
: 0,
found = kont_find_restart(kont, restart_name),
g = Sx_runtime[83].call(null, found);
if(Sx_types[67].call(null, g)){
var
h = [0, iZ, [0, Sx_runtime[68].call(null, restart_name), 0]],
i = [3, Sx_runtime[4].call(null, h)],
j = Sx_runtime[2].call(null, i);
throw caml_maybe_attach_backtrace([0, Sx_types[9], j], 1);
}
var
entry = Sx_runtime[14].call(null, found),
restart_frame = Sx_runtime[17].call(null, found, i0),
rest_kont = Sx_runtime[17].call(null, found, i1),
params = Sx_runtime[17].call(null, entry, i2),
body = Sx_runtime[17].call(null, entry, i3),
k = Sx_runtime[25].call(null, restart_frame, i4),
restart_env = Sx_runtime[80].call(null, k),
l = Sx_runtime[33].call(null, params),
m = [0, 1 - Sx_types[67].call(null, l)];
if(Sx_types[67].call(null, m)){
var
n = Sx_runtime[14].call(null, params),
o = Sx_runtime[3].call(null, n);
Sx_runtime[77].call(null, restart_env, o, restart_arg);
}
return make_cek_state(body, restart_env, rest_kont);
}
var i5 = [0, [2, 2.], 0], i6 = [2, 2.], i7 = [2, 1.];
function step_sf_if(args, env, kont){
var
a = [0, Sx_runtime[24].call(null, args), i5],
b = Sx_runtime[1].call(null, cst$0, a),
c = Sx_types[67].call(null, b) ? Sx_runtime[17].call(null, args, i6) : 0,
d =
kont_push
(make_if_frame(Sx_runtime[17].call(null, args, i7), c, env), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, d);
}
function step_sf_when(args, env, kont){
var
a =
kont_push(make_when_frame(Sx_runtime[15].call(null, args), env), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var i8 = [0, [2, 1.], 0];
function step_sf_begin(args, env, kont){
var a = Sx_runtime[33].call(null, args);
if(Sx_types[67].call(null, a)) return make_cek_value(0, env, kont);
var
b = [0, Sx_runtime[24].call(null, args), i8],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c))
return make_cek_state(Sx_runtime[14].call(null, args), env, kont);
var
d =
kont_push(make_begin_frame(Sx_runtime[15].call(null, args), env), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, d);
}
var
i9 = [0, [3, cst_symbol], 0],
i_ = [0, [3, cst_list], 0],
i$ = [0, [2, 2.], 0],
ja = [0, [3, cst_list], 0],
jb = [0, [2, 2.], 0],
jc = [0, [3, cst_symbol], 0],
jd = [2, 1.],
je = [6, 0],
jf = [0, [2, 2.], 0],
jg = [2, 1.],
jh = [0, [2, 2.], 0],
ji = [0, [2, 2.], 0],
jj = [2, 1.];
function step_sf_let(args, env, kont){
var
c = Sx_runtime[14].call(null, args),
d = [0, Sx_runtime[73].call(null, c), i9],
e = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, e))
return make_cek_value(sf_named_let(args, env), env, kont);
var
bindings = Sx_runtime[14].call(null, args),
body = Sx_runtime[15].call(null, args),
local = Sx_runtime[80].call(null, env),
f = Sx_runtime[33].call(null, bindings);
if(Sx_types[67].call(null, f)) return step_sf_begin(body, local, kont);
var
g = Sx_runtime[14].call(null, bindings),
h = [0, Sx_runtime[73].call(null, g), i_],
and = Sx_runtime[1].call(null, cst, h);
if(Sx_types[67].call(null, and))
var
i = Sx_runtime[14].call(null, bindings),
j = [0, Sx_runtime[24].call(null, i), i$],
a = Sx_runtime[1].call(null, cst, j);
else
var a = and;
if(Sx_types[67].call(null, a))
var first_binding = Sx_runtime[14].call(null, bindings);
else
var
x = [0, Sx_runtime[17].call(null, bindings, jj), 0],
first_binding = [6, [0, Sx_runtime[14].call(null, bindings), x]];
var
k = Sx_runtime[14].call(null, bindings),
l = [0, Sx_runtime[73].call(null, k), ja],
and$0 = Sx_runtime[1].call(null, cst, l);
if(Sx_types[67].call(null, and$0))
var
m = Sx_runtime[14].call(null, bindings),
n = [0, Sx_runtime[24].call(null, m), jb],
b = Sx_runtime[1].call(null, cst, n);
else
var b = and$0;
if(Sx_types[67].call(null, b))
var rest_bindings = Sx_runtime[15].call(null, bindings);
else{
var
t = [0, Sx_runtime[24].call(null, bindings), jf],
u = [0, jg, [0, Sx_runtime[1].call(null, cst$12, t), 0]],
v = Sx_runtime[1].call(null, cst_range, u),
w = Sx_runtime[5].call(null, v),
pairs = [0, je];
Stdlib_List[26].call
(null,
function(acc, i){
var
a = [0, Sx_runtime[1].call(null, cst$11, [0, i, jh]), 0],
b = Sx_runtime[1].call(null, cst_inc, a),
c = [0, Sx_runtime[17].call(null, bindings, b), 0],
d = Sx_runtime[1].call(null, cst$11, [0, i, ji]),
e = [6, [0, Sx_runtime[17].call(null, bindings, d), c]];
pairs[1] = Sx_runtime[10].call(null, pairs[1], e);
return 0;
},
0,
w);
var rest_bindings = pairs[1];
}
var
o = Sx_runtime[14].call(null, first_binding),
p = [0, Sx_runtime[73].call(null, o), jc],
q = Sx_runtime[1].call(null, cst, p);
if(Sx_types[67].call(null, q))
var
r = Sx_runtime[14].call(null, first_binding),
vname = Sx_types[68].call(null, r);
else
var vname = Sx_runtime[14].call(null, first_binding);
var
s = kont_push(make_let_frame(vname, rest_bindings, body, local), kont);
return make_cek_state
(Sx_runtime[17].call(null, first_binding, jd), local, s);
}
var
jk = [0, [2, 4.], 0],
jl = [0, [3, cst_keyword], 0],
jm = [2, 1.],
jn = [0, [3, cst_effects], 0],
jo = [2, 1.],
jp = [0, [2, 4.], 0],
jq = [0, [3, cst_keyword], 0],
jr = [2, 1.],
js = [0, [3, cst_effects], 0],
jt = [2, 1.],
ju = [2, 3.],
jv = [0, [2, 4.], 0],
jw = [0, [3, cst_keyword], 0],
jx = [2, 1.],
jy = [0, [3, cst_effects], 0],
jz = [2, 1.],
jA = [2, 2.],
jB = [2, 1.],
jC = [4, cst_fn];
function step_sf_define(args, env, kont){
var match = Sx_runtime[14].call(null, args);
if(typeof match === "number" || ! (6 === match[0]))
var args$0 = args;
else{
var match$0 = match[1];
if(match$0)
var
params = match$0[2],
fn_name = match$0[1],
s = Sx_runtime[15].call(null, args),
body_parts = Sx_runtime[5].call(null, s),
args$0 =
[6, [0, fn_name, [0, [6, [0, jC, [0, [6, params], body_parts]]], 0]]];
else
var args$0 = args;
}
var
name_sym = Sx_runtime[14].call(null, args$0),
c = [0, Sx_runtime[24].call(null, args$0), jk],
and = Sx_runtime[1].call(null, cst$2, c);
if(Sx_types[67].call(null, and)){
var
d = Sx_runtime[17].call(null, args$0, jm),
e = [0, Sx_runtime[73].call(null, d), jl],
and$0 = Sx_runtime[1].call(null, cst, e);
if(Sx_types[67].call(null, and$0))
var
f = Sx_runtime[17].call(null, args$0, jo),
g = [0, Sx_types[69].call(null, f), jn],
has_effects = Sx_runtime[1].call(null, cst, g);
else
var has_effects = and$0;
}
else
var has_effects = and;
var
h = [0, Sx_runtime[24].call(null, args$0), jp],
and$1 = Sx_runtime[1].call(null, cst$2, h);
if(Sx_types[67].call(null, and$1)){
var
i = Sx_runtime[17].call(null, args$0, jr),
j = [0, Sx_runtime[73].call(null, i), jq],
and$2 = Sx_runtime[1].call(null, cst, j);
if(Sx_types[67].call(null, and$2))
var
k = Sx_runtime[17].call(null, args$0, jt),
l = [0, Sx_types[69].call(null, k), js],
a = Sx_runtime[1].call(null, cst, l);
else
var a = and$2;
}
else
var a = and$1;
var
val_idx = Sx_types[67].call(null, a) ? ju : jB,
m = [0, Sx_runtime[24].call(null, args$0), jv],
and$3 = Sx_runtime[1].call(null, cst$2, m);
if(Sx_types[67].call(null, and$3)){
var
n = Sx_runtime[17].call(null, args$0, jx),
o = [0, Sx_runtime[73].call(null, n), jw],
and$4 = Sx_runtime[1].call(null, cst, o);
if(Sx_types[67].call(null, and$4))
var
p = Sx_runtime[17].call(null, args$0, jz),
q = [0, Sx_types[69].call(null, p), jy],
b = Sx_runtime[1].call(null, cst, q);
else
var b = and$4;
}
else
var b = and$3;
var
effect_list =
Sx_types[67].call(null, b) ? Sx_runtime[17].call(null, args$0, jA) : 0,
r =
kont_push
(make_define_frame
(Sx_types[68].call(null, name_sym), env, has_effects, effect_list),
kont);
return make_cek_state(Sx_runtime[17].call(null, args$0, val_idx), env, r);
}
var jD = [2, 1.];
function step_sf_set_b(args, env, kont){
var
a = Sx_runtime[14].call(null, args),
b = kont_push(make_set_frame(Sx_types[68].call(null, a), env), kont);
return make_cek_state(Sx_runtime[17].call(null, args, jD), env, b);
}
var jE = [0, 1];
function step_sf_and(args, env, kont){
var a = Sx_runtime[33].call(null, args);
if(Sx_types[67].call(null, a)) return make_cek_value(jE, env, kont);
var
b = kont_push(make_and_frame(Sx_runtime[15].call(null, args), env), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, b);
}
var jF = [0, 0];
function step_sf_or(args, env, kont){
var a = Sx_runtime[33].call(null, args);
if(Sx_types[67].call(null, a)) return make_cek_value(jF, env, kont);
var
b = kont_push(make_or_frame(Sx_runtime[15].call(null, args), env), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, b);
}
var
jG = [2, 1.],
jH = [0, 1],
jI = [0, [2, 2.], 0],
jJ = [2, 1.],
jK = [0, 0];
function step_sf_cond(args, env, kont){
var scheme_p = cond_scheme_p(args);
if(Sx_types[67].call(null, scheme_p)){
var a = Sx_runtime[33].call(null, args);
if(Sx_types[67].call(null, a)) return make_cek_value(0, env, kont);
var
clause = Sx_runtime[14].call(null, args),
test = Sx_runtime[14].call(null, clause),
b = is_else_clause(test);
return Sx_types[67].call(null, b)
? make_cek_state
(Sx_runtime[17].call(null, clause, jG), env, kont)
: make_cek_state
(test, env, kont_push(make_cond_frame(args, env, jH), kont));
}
var
c = [0, Sx_runtime[24].call(null, args), jI],
d = Sx_runtime[1].call(null, cst$3, c);
if(Sx_types[67].call(null, d)) return make_cek_value(0, env, kont);
var test$0 = Sx_runtime[14].call(null, args), e = is_else_clause(test$0);
return Sx_types[67].call(null, e)
? make_cek_state(Sx_runtime[17].call(null, args, jJ), env, kont)
: make_cek_state
(test$0, env, kont_push(make_cond_frame(args, env, jK), kont));
}
var jL = [3, cst_first];
function step_sf_thread_first(args, env, kont){
var
a =
kont_push
(make_thread_frame(Sx_runtime[15].call(null, args), env, jL, 0), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var cst_last = "last", jM = [3, cst_last];
function step_sf_thread_last(args, env, kont){
var
a =
kont_push
(make_thread_frame(Sx_runtime[15].call(null, args), env, jM, 0), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var jN = [2, 1.], jO = [3, cst_as];
function step_sf_thread_as(args, env, kont){
var
init = Sx_runtime[14].call(null, args),
name = Sx_runtime[17].call(null, args, jN),
a = Sx_runtime[15].call(null, args),
forms = Sx_runtime[15].call(null, a);
return make_cek_state
(init,
env,
kont_push(make_thread_frame(forms, env, jO, name), kont));
}
function step_sf_lambda(args, env, kont){
return make_cek_value(sf_lambda(args, env), env, kont);
}
var
jP = [0, [2, 1.], 0],
jQ = [0, [2, 2.], 0],
jR = [0, [3, cst_keyword], 0],
jS = [0, [3, cst_value], 0],
jT = [2, 1.],
jU = [0, [2, 2.], 0];
function step_sf_scope(args, env, kont){
var
name = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
rest_args = Sx_runtime[1].call(null, cst_slice, [0, args, jP]),
b = [0, Sx_runtime[24].call(null, rest_args), jQ],
and = Sx_runtime[1].call(null, cst$2, b);
if(Sx_types[67].call(null, and)){
var
c = Sx_runtime[14].call(null, rest_args),
d = [0, Sx_runtime[73].call(null, c), jR],
and$0 = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, and$0))
var
e = Sx_runtime[14].call(null, rest_args),
f = [0, Sx_types[69].call(null, e), jS],
a = Sx_runtime[1].call(null, cst, f);
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a))
var
g = trampoline(eval_expr(Sx_runtime[17].call(null, rest_args, jT), env)),
body = Sx_runtime[1].call(null, cst_slice, [0, rest_args, jU]),
val = g;
else
var body = rest_args, val = 0;
var h = Sx_runtime[33].call(null, body);
if(Sx_types[67].call(null, h)) return make_cek_value(0, env, kont);
var
i =
kont_push
(make_scope_acc_frame(name, val, Sx_runtime[15].call(null, body), env),
kont);
return make_cek_state(Sx_runtime[14].call(null, body), env, i);
}
var jV = [2, 1.], jW = [0, [2, 2.], 0];
function step_sf_provide(args, env, kont){
var
name = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
val = trampoline(eval_expr(Sx_runtime[17].call(null, args, jV), env)),
body = Sx_runtime[1].call(null, cst_slice, [0, args, jW]);
Sx_runtime[103].call(null, name, val);
var a = Sx_runtime[33].call(null, body);
if(Sx_types[67].call(null, a)){
Sx_runtime[104].call(null, name);
return make_cek_value(0, env, kont);
}
var
b =
kont_push
(make_provide_frame(name, val, Sx_runtime[15].call(null, body), env),
kont);
return make_cek_state(Sx_runtime[14].call(null, body), env, b);
}
var jX = [0, [2, 2.], 0], jY = [2, 1.], jZ = [3, cst_value];
function step_sf_context(args, env, kont){
var
name = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
a = [0, Sx_runtime[24].call(null, args), jX],
b = Sx_runtime[1].call(null, cst$2, a),
default_val =
Sx_types[67].call(null, b)
? trampoline(eval_expr(Sx_runtime[17].call(null, args, jY), env))
: 0,
frame = kont_find_provide(kont, name);
if(Sx_types[67].call(null, bind_tracking_ref[1])){
var
c =
Sx_runtime[1].call
(null, cst_contains, [0, bind_tracking_ref[1], [0, name, 0]]),
d = [0, 1 - Sx_types[67].call(null, c)];
if(Sx_types[67].call(null, d))
bind_tracking_ref[1] =
Sx_runtime[10].call(null, bind_tracking_ref[1], name);
}
var
sv = Sx_runtime[105].call(null, name),
e = Sx_runtime[83].call(null, sv),
f =
Sx_types[67].call(null, e)
? Sx_types
[67].call
(null, frame)
? Sx_runtime[25].call(null, frame, jZ)
: default_val
: sv;
return make_cek_value(f, env, kont);
}
var
j0 = [0, [2, 2.], 0],
j1 = [2, 1.],
j2 = [3, cst_value],
j3 = [3, cst_peek],
j4 = [3, cst_peek];
function step_sf_peek(args, env, kont){
var
name = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
b = [0, Sx_runtime[24].call(null, args), j0],
c = Sx_runtime[1].call(null, cst$2, b),
default_val =
Sx_types[67].call(null, c)
? trampoline(eval_expr(Sx_runtime[17].call(null, args, j1), env))
: 0,
frame = kont_find_provide(kont, name);
if(Sx_types[67].call(null, frame))
var a = Sx_runtime[25].call(null, frame, j2);
else{
var d = Sx_runtime[75].call(null, env, j3);
if(Sx_types[67].call(null, d))
var
e = Sx_runtime[76].call(null, env, j4),
a = Sx_runtime[7].call(null, e, [6, [0, name, [0, default_val, 0]]]);
else
var a = default_val;
}
return make_cek_value(a, env, kont);
}
var j5 = [2, 1.];
function step_sf_provide_b(args, env, kont){
var
name = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
a = kont_push(make_provide_set_frame(name, env), kont);
return make_cek_state(Sx_runtime[17].call(null, args, j5), env, a);
}
var
cst_scope_emit = "scope-emit!",
j6 = [2, 1.],
j7 = [3, cst_emitted],
j8 = [3, cst_emitted],
j9 = [3, cst_scope_emit],
j_ = [3, cst_scope_emit];
function step_sf_emit(args, env, kont){
var
name = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
val = trampoline(eval_expr(Sx_runtime[17].call(null, args, j6), env)),
frame = kont_find_scope_acc(kont, name);
if(Sx_types[67].call(null, frame)){
var
a = [0, Sx_runtime[25].call(null, frame, j7), [0, [6, [0, val, 0]], 0]],
b = Sx_runtime[1].call(null, cst_append, a);
Sx_runtime[11].call(null, frame, j8, b);
return make_cek_value(0, env, kont);
}
var c = Sx_runtime[75].call(null, env, j9);
if(Sx_types[67].call(null, c)){
var d = Sx_runtime[76].call(null, env, j_);
Sx_runtime[7].call(null, d, [6, [0, name, [0, val, 0]]]);
}
return make_cek_value(0, env, kont);
}
var
j$ = [3, cst_emitted],
ka = [3, cst_emitted],
kb = [3, cst_emitted],
kc = [6, 0];
function step_sf_emitted(args, env, kont){
var
name = trampoline(eval_expr(Sx_runtime[14].call(null, args), env)),
frame = kont_find_scope_acc(kont, name);
if(Sx_types[67].call(null, frame))
var a = Sx_runtime[25].call(null, frame, j$);
else{
var b = Sx_runtime[75].call(null, env, ka);
if(Sx_types[67].call(null, b))
var
c = Sx_runtime[76].call(null, env, kb),
a = Sx_runtime[7].call(null, c, [6, [0, name, 0]]);
else
var a = kc;
}
return make_cek_value(a, env, kont);
}
function step_sf_reset(args, env, kont){
var a = kont_push(make_reset_frame(env), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var kd = [2, 1.], ke = [2, 1.];
function step_sf_shift(args, env, kont){
var
a = Sx_runtime[14].call(null, args),
k_name = Sx_types[68].call(null, a),
body = Sx_runtime[17].call(null, args, kd),
captured_result = kont_capture_to_reset(kont),
captured = Sx_runtime[14].call(null, captured_result),
rest_kont = Sx_runtime[17].call(null, captured_result, ke),
k = Sx_runtime[95].call(null, captured, rest_kont),
shift_env = Sx_runtime[80].call(null, env),
b = Sx_runtime[3].call(null, k_name);
Sx_runtime[77].call(null, shift_env, b, k);
return make_cek_state(body, shift_env, rest_kont);
}
function step_sf_deref(args, env, kont){
var a = kont_push(make_deref_frame(env), kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var kf = [6, 0], kg = [6, 0];
function cek_call(f, args){
var
b = Sx_runtime[83].call(null, args),
a = Sx_types[67].call(null, b) ? kf : args,
c = Sx_runtime[83].call(null, f);
if(Sx_types[67].call(null, c)) return 0;
var
or = Sx_runtime[85].call(null, f),
or$0 = Sx_types[67].call(null, or) ? or : Sx_runtime[90].call(null, f);
return Sx_types[67].call(null, or$0)
? cek_run
(continue_with_call(f, a, Sx_runtime[79].call(null, 0), a, kg))
: 0;
}
var
cst_update_fn = "update-fn",
kh = [2, 1.],
ki = [2, 2.],
kj = [3, cst_update_fn],
kk = [0, 0];
function reactive_shift_deref(sig, env, kont){
var
scan_result = kont_capture_to_reactive_reset(kont),
captured_frames = Sx_runtime[14].call(null, scan_result),
reset_frame = Sx_runtime[17].call(null, scan_result, kh),
remaining_kont = Sx_runtime[17].call(null, scan_result, ki),
update_fn = Sx_runtime[25].call(null, reset_frame, kj),
subscriber =
[15,
cst$9,
function(args){
var a = Sx_runtime[5].call(null, 0);
Stdlib_List[18].call(null, function(d){cek_call(d, 0); return 0;}, a);
var
new_reset = make_reactive_reset_frame(env, update_fn, kk),
new_kont =
Sx_runtime[1].call
(null,
cst_concat,
[0,
captured_frames,
[0, [6, [0, new_reset, 0]], [0, remaining_kont, 0]]]);
return Sx_runtime[117].call
(null,
[15,
cst$9,
function(args){
if(args && ! args[2]){
var d = args[1];
Sx_runtime[10].call(null, 0, d);
return 0;
}
return 0;
}],
[15,
cst$9,
function(args){
return cek_run
(make_cek_value
(Sx_runtime[114].call(null, sig), env, new_kont));
}]);
}];
Sx_runtime[115].call(null, sig, subscriber);
var
initial_kont =
Sx_runtime[1].call
(null,
cst_concat,
[0,
captured_frames,
[0, [6, [0, reset_frame, 0]], [0, remaining_kont, 0]]]);
return make_cek_value(Sx_runtime[114].call(null, sig), env, initial_kont);
}
var kl = [0, [3, cst_symbol], 0], km = [6, 0];
function step_eval_call(head, args, env, kont){
var
a = [0, Sx_runtime[73].call(null, head), kl],
b = Sx_runtime[1].call(null, cst, a),
hname = Sx_types[67].call(null, b) ? Sx_types[68].call(null, head) : 0;
return make_cek_state
(head,
env,
kont_push(make_arg_frame(0, km, args, env, args, hname), kont));
}
var
kn = [0, [3, cst_map], 0],
ko = [0, [3, cst_map_indexed], 0],
kp = [0, [3, cst_filter], 0],
kq = [0, [3, cst_reduce], 0],
kr = [0, [3, cst_some], 0],
ks = [0, [3, cst_every$0], 0],
kt = [0, [3, cst_for_each], 0];
function ho_form_name_p(name){
var or = Sx_runtime[1].call(null, cst, [0, name, kn]);
if(Sx_types[67].call(null, or)) return or;
var or$0 = Sx_runtime[1].call(null, cst, [0, name, ko]);
if(Sx_types[67].call(null, or$0)) return or$0;
var or$1 = Sx_runtime[1].call(null, cst, [0, name, kp]);
if(Sx_types[67].call(null, or$1)) return or$1;
var or$2 = Sx_runtime[1].call(null, cst, [0, name, kq]);
if(Sx_types[67].call(null, or$2)) return or$2;
var or$3 = Sx_runtime[1].call(null, cst, [0, name, kr]);
if(Sx_types[67].call(null, or$3)) return or$3;
var or$4 = Sx_runtime[1].call(null, cst, [0, name, ks]);
return Sx_types[67].call(null, or$4)
? or$4
: Sx_runtime[1].call(null, cst, [0, name, kt]);
}
function ho_fn_p(v){
var or = Sx_runtime[90].call(null, v);
return Sx_types[67].call(null, or) ? or : Sx_runtime[85].call(null, v);
}
var ku = [0, [3, cst_reduce], 0], kv = [2, 1.], kw = [2, 2.], kx = [2, 1.];
function ho_swap_args(ho_type, evaled){
var c = Sx_runtime[1].call(null, cst, [0, ho_type, ku]);
if(Sx_types[67].call(null, c)){
var
a = Sx_runtime[14].call(null, evaled),
b = Sx_runtime[17].call(null, evaled, kv),
d = ho_fn_p(a),
and = [0, 1 - Sx_types[67].call(null, d)],
e = Sx_types[67].call(null, and) ? ho_fn_p(b) : and;
return Sx_types[67].call(null, e)
? [6,
[0, b, [0, Sx_runtime[17].call(null, evaled, kw), [0, a, 0]]]]
: evaled;
}
var
a$0 = Sx_runtime[14].call(null, evaled),
b$0 = Sx_runtime[17].call(null, evaled, kx),
f = ho_fn_p(a$0),
and$0 = [0, 1 - Sx_types[67].call(null, f)],
g = Sx_types[67].call(null, and$0) ? ho_fn_p(b$0) : and$0;
return Sx_types[67].call(null, g) ? [6, [0, b$0, [0, a$0, 0]]] : evaled;
}
var
ky = [0, [3, cst_map], 0],
kz = [0, [2, 2.], 0],
kA = [6, 0],
kB = [6, 0],
kC = [6, 0],
kD = [2, 1.],
kE = [6, 0],
kF = [6, 0],
kG = [6, 0],
kH = [0, [3, cst_map_indexed], 0],
kI = [2, 1.],
kJ = [6, 0],
kK = [6, 0],
kL = [6, 0],
kM = [2, 0.],
kN = [0, [3, cst_filter], 0],
kO = [2, 1.],
kP = [6, 0],
kQ = [6, 0],
kR = [6, 0],
kS = [0, [3, cst_reduce], 0],
kT = [2, 1.],
kU = [2, 2.],
kV = [6, 0],
kW = [0, [3, cst_some], 0],
kX = [2, 1.],
kY = [0, 0],
kZ = [6, 0],
k0 = [0, [3, cst_every], 0],
k1 = [2, 1.],
k2 = [0, 1],
k3 = [6, 0],
k4 = [0, [3, cst_for_each], 0],
k5 = [2, 1.],
k6 = [6, 0],
k7 = [3, "Unknown HO type: "];
function ho_setup_dispatch(ho_type, evaled, env, kont){
var
ordered = ho_swap_args(ho_type, evaled),
f = Sx_runtime[14].call(null, ordered),
a = Sx_runtime[1].call(null, cst, [0, ho_type, ky]);
if(Sx_types[67].call(null, a)){
var
b = [0, Sx_runtime[24].call(null, ordered), kz],
c = Sx_runtime[1].call(null, cst$0, b);
if(Sx_types[67].call(null, c)){
var
colls = Sx_runtime[15].call(null, ordered),
d = Sx_runtime[5].call(null, colls),
e =
[0,
Stdlib_List[34].call
(null,
function(c){
var a = Sx_runtime[33].call(null, c);
return Sx_types[67].call(null, a);
},
d)];
if(Sx_types[67].call(null, e)) return make_cek_value(kA, env, kont);
var
g = Sx_runtime[5].call(null, colls),
heads =
[6,
Stdlib_List[20].call
(null, function(c){return Sx_runtime[14].call(null, c);}, g)],
h = Sx_runtime[5].call(null, colls),
tails =
[6,
Stdlib_List[20].call
(null, function(c){return Sx_runtime[15].call(null, c);}, h)];
return continue_with_call
(f,
heads,
env,
kC,
kont_push(make_multi_map_frame(f, tails, kB, env), kont));
}
var
coll = seq_to_list(Sx_runtime[17].call(null, ordered, kD)),
i = Sx_runtime[33].call(null, coll);
if(Sx_types[67].call(null, i)) return make_cek_value(kE, env, kont);
var
j =
kont_push
(make_map_frame(f, Sx_runtime[15].call(null, coll), kF, env), kont);
return continue_with_call
(f, [6, [0, Sx_runtime[14].call(null, coll), 0]], env, kG, j);
}
var k = Sx_runtime[1].call(null, cst, [0, ho_type, kH]);
if(Sx_types[67].call(null, k)){
var
coll$0 = seq_to_list(Sx_runtime[17].call(null, ordered, kI)),
l = Sx_runtime[33].call(null, coll$0);
if(Sx_types[67].call(null, l)) return make_cek_value(kJ, env, kont);
var
m =
kont_push
(make_map_indexed_frame
(f, Sx_runtime[15].call(null, coll$0), kK, env),
kont);
return continue_with_call
(f,
[6, [0, kM, [0, Sx_runtime[14].call(null, coll$0), 0]]],
env,
kL,
m);
}
var n = Sx_runtime[1].call(null, cst, [0, ho_type, kN]);
if(Sx_types[67].call(null, n)){
var
coll$1 = seq_to_list(Sx_runtime[17].call(null, ordered, kO)),
o = Sx_runtime[33].call(null, coll$1);
if(Sx_types[67].call(null, o)) return make_cek_value(kP, env, kont);
var
p = Sx_runtime[14].call(null, coll$1),
q =
kont_push
(make_filter_frame(f, Sx_runtime[15].call(null, coll$1), kQ, p, env),
kont);
return continue_with_call
(f, [6, [0, Sx_runtime[14].call(null, coll$1), 0]], env, kR, q);
}
var r = Sx_runtime[1].call(null, cst, [0, ho_type, kS]);
if(Sx_types[67].call(null, r)){
var
init = Sx_runtime[17].call(null, ordered, kT),
coll$2 = seq_to_list(Sx_runtime[17].call(null, ordered, kU)),
s = Sx_runtime[33].call(null, coll$2);
if(Sx_types[67].call(null, s)) return make_cek_value(init, env, kont);
var
t =
kont_push
(make_reduce_frame(f, Sx_runtime[15].call(null, coll$2), env), kont);
return continue_with_call
(f,
[6, [0, init, [0, Sx_runtime[14].call(null, coll$2), 0]]],
env,
kV,
t);
}
var u = Sx_runtime[1].call(null, cst, [0, ho_type, kW]);
if(Sx_types[67].call(null, u)){
var
coll$3 = seq_to_list(Sx_runtime[17].call(null, ordered, kX)),
v = Sx_runtime[33].call(null, coll$3);
if(Sx_types[67].call(null, v)) return make_cek_value(kY, env, kont);
var
w =
kont_push
(make_some_frame(f, Sx_runtime[15].call(null, coll$3), env), kont);
return continue_with_call
(f, [6, [0, Sx_runtime[14].call(null, coll$3), 0]], env, kZ, w);
}
var x = Sx_runtime[1].call(null, cst, [0, ho_type, k0]);
if(Sx_types[67].call(null, x)){
var
coll$4 = seq_to_list(Sx_runtime[17].call(null, ordered, k1)),
y = Sx_runtime[33].call(null, coll$4);
if(Sx_types[67].call(null, y)) return make_cek_value(k2, env, kont);
var
z =
kont_push
(make_every_frame(f, Sx_runtime[15].call(null, coll$4), env), kont);
return continue_with_call
(f, [6, [0, Sx_runtime[14].call(null, coll$4), 0]], env, k3, z);
}
var A = Sx_runtime[1].call(null, cst, [0, ho_type, k4]);
if(! Sx_types[67].call(null, A)){
var
D = [3, Sx_runtime[4].call(null, [0, k7, [0, ho_type, 0]])],
E = Sx_runtime[2].call(null, D);
throw caml_maybe_attach_backtrace([0, Sx_types[9], E], 1);
}
var
coll$5 = seq_to_list(Sx_runtime[17].call(null, ordered, k5)),
B = Sx_runtime[33].call(null, coll$5);
if(Sx_types[67].call(null, B)) return make_cek_value(0, env, kont);
var
C =
kont_push
(make_for_each_frame(f, Sx_runtime[15].call(null, coll$5), env), kont);
return continue_with_call
(f, [6, [0, Sx_runtime[14].call(null, coll$5), 0]], env, k6, C);
}
var k8 = [6, 0], k9 = [3, cst_map];
function step_ho_map(args, env, kont){
var
a =
kont_push
(make_ho_setup_frame(k9, Sx_runtime[15].call(null, args), k8, env),
kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var k_ = [6, 0], k$ = [3, cst_map_indexed];
function step_ho_map_indexed(args, env, kont){
var
a =
kont_push
(make_ho_setup_frame(k$, Sx_runtime[15].call(null, args), k_, env),
kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var la = [6, 0], lb = [3, cst_filter];
function step_ho_filter(args, env, kont){
var
a =
kont_push
(make_ho_setup_frame(lb, Sx_runtime[15].call(null, args), la, env),
kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var lc = [6, 0], ld = [3, cst_reduce];
function step_ho_reduce(args, env, kont){
var
a =
kont_push
(make_ho_setup_frame(ld, Sx_runtime[15].call(null, args), lc, env),
kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var le = [6, 0], lf = [3, cst_some];
function step_ho_some(args, env, kont){
var
a =
kont_push
(make_ho_setup_frame(lf, Sx_runtime[15].call(null, args), le, env),
kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var lg = [6, 0], lh = [3, cst_every];
function step_ho_every(args, env, kont){
var
a =
kont_push
(make_ho_setup_frame(lh, Sx_runtime[15].call(null, args), lg, env),
kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var li = [6, 0], lj = [3, cst_for_each];
function step_ho_for_each(args, env, kont){
var
a =
kont_push
(make_ho_setup_frame(lj, Sx_runtime[15].call(null, args), li, env),
kont);
return make_cek_state(Sx_runtime[14].call(null, args), env, a);
}
var
cst_vm_suspended = "__vm_suspended",
cst_body = "body",
cst_evaled = "evaled",
cst_match_val = "match-val",
cst_remaining = "remaining",
cst_results = "results",
cst_resume = "resume",
cst_scheme = "scheme",
cst_subscribers = "subscribers",
last_error_kont_ref = [0, 0],
lk = [0, [3, cst_if], 0],
ll = [3, cst_env],
lm = [3, "then"],
ln = [3, cst_else],
lo = [3, cst_env],
lp = [3, cst_else],
lq = [0, [3, cst_when], 0],
lr = [3, cst_body],
ls = [3, cst_env],
lt = [0, [2, 1.], 0],
lu = [0, [3, cst_begin], 0],
lv = [3, cst_remaining],
lw = [3, cst_env],
lx = [0, [2, 1.], 0],
ly = [0, [3, cst_let], 0],
lz = [3, cst_name],
lA = [3, cst_remaining],
lB = [3, cst_body],
lC = [3, cst_env],
lD = [0, [3, cst_symbol], 0],
lE = [2, 1.],
lF = [0, [3, cst_define], 0],
lG = [3, cst_name],
lH = [3, cst_env],
lI = [3, "has-effects"],
lJ = [3, "effect-list"],
lK = [0, [3, cst_symbol], 0],
lL = [3, cst_effect_annotations],
lM = [3, cst_effect_annotations],
lN = [3, cst_effect_annotations],
lO = [0, [3, cst_define_foreign], 0],
lP = [3, cst_name],
lQ = [3, cst_env],
lR = [0, [3, cst_set], 0],
lS = [3, cst_name],
lT = [3, cst_env],
lU = [0, [3, cst_and], 0],
lV = [3, cst_remaining],
lW = [0, [2, 1.], 0],
lX = [3, cst_env],
lY = [3, cst_env],
lZ = [0, [3, cst_or], 0],
l0 = [3, cst_remaining],
l1 = [0, 0],
l2 = [0, [2, 1.], 0],
l3 = [3, cst_env],
l4 = [3, cst_env],
l5 = [0, [3, cst_cond], 0],
l6 = [3, cst_remaining],
l7 = [3, cst_env],
l8 = [3, cst_scheme],
l9 = [0, [2, 2.], 0],
l_ = [0, [3, cst_symbol], 0],
l$ = [2, 1.],
ma = [0, [3, cst$10], 0],
mb = [2, 1.],
mc = [2, 2.],
md = [2, 1.],
me = [2, 1.],
mf = [0, 1],
mg = [2, 1.],
mh = [2, 2.],
mi = [0, [2, 2.], 0],
mj = [2, 1.],
mk = [0, 0],
ml = [0, [3, cst_case], 0],
mm = [3, cst_match_val],
mn = [3, cst_remaining],
mo = [3, cst_env],
mp = [0, [3, cst_thread], 0],
mq = [3, cst_remaining],
mr = [3, cst_env],
ms = [3, "extra"],
mt = [3, cst_name],
mu = [0, [3, cst_as], 0],
mv = [0, [3, cst_list], 0],
mw = [0, [3, cst_symbol], 0],
mx = [4, cst_quote],
my = [0, [3, cst_last], 0],
mz = [0, [3, cst_arg], 0],
mA = [3, cst_f],
mB = [3, cst_evaled],
mC = [3, cst_remaining],
mD = [3, cst_env],
mE = [3, "raw-args"],
mF = [3, "head-name"],
mG = [6, 0],
mH = [6, 0],
mI = [6, 0],
mJ = [0, [3, cst_dict], 0],
mK = [3, cst_remaining],
mL = [3, cst_results],
mM = [3, cst_env],
mN = [2, 0.],
mO = [2, 1.],
mP = [2, 1.],
mQ = [0, [3, cst_ho_setup], 0],
mR = [3, "ho-type"],
mS = [3, cst_remaining],
mT = [3, cst_evaled],
mU = [3, cst_env],
mV = [0, [3, cst_reset], 0],
mW = [0, [3, cst_deref], 0],
mX = [3, cst_env],
mY = [3, "sx-reactive"],
mZ = [3, "deps"],
m0 = [3, "notify"],
m1 = [0, [3, cst_reactive_reset], 0],
m2 = [3, cst_update_fn],
m3 = [3, "first-render"],
m4 = [0, [3, cst_scope], 0],
m5 = [3, cst_name],
m6 = [3, cst_remaining],
m7 = [3, cst_env],
m8 = [0, [3, cst_provide], 0],
m9 = [3, cst_remaining],
m_ = [3, cst_env],
m$ = [3, cst_name],
na = [3, cst_value],
nb = [3, cst_name],
nc = [3, cst_subscribers],
nd = [3, cst_subscribers],
ne = [0, [3, cst_bind], 0],
nf = [3, cst_body],
ng = [3, cst_env],
nh = [3, "prev-tracking"],
ni = [6, 0],
nj = [6, 0],
nk = [0, [3, cst_provide_set], 0],
nl = [3, cst_name],
nm = [3, cst_env],
nn = [3, cst_value],
no = [3, cst_value],
np = [0, [3, cst_scope_acc], 0],
nq = [3, cst_remaining],
nr = [3, cst_env],
ns = [3, cst_value],
nt = [3, cst_name],
nu = [3, cst_emitted],
nv = [3, cst_emitted],
nw = [0, [3, cst_map], 0],
nx = [3, cst_f],
ny = [3, cst_remaining],
nz = [3, cst_results],
nA = [3, "indexed"],
nB = [3, cst_env],
nC = [6, 0],
nD = [0, [3, cst_filter], 0],
nE = [3, cst_f],
nF = [3, cst_remaining],
nG = [3, cst_results],
nH = [3, "current-item"],
nI = [3, cst_env],
nJ = [6, 0],
nK = [0, [3, cst_reduce], 0],
nL = [3, cst_f],
nM = [3, cst_remaining],
nN = [3, cst_env],
nO = [6, 0],
nP = [0, [3, cst_for_each], 0],
nQ = [3, cst_f],
nR = [3, cst_remaining],
nS = [3, cst_env],
nT = [6, 0],
nU = [0, [3, cst_some], 0],
nV = [3, cst_f],
nW = [3, cst_remaining],
nX = [3, cst_env],
nY = [0, 0],
nZ = [6, 0],
n0 = [0, [3, cst_every], 0],
n1 = [3, cst_f],
n2 = [3, cst_remaining],
n3 = [3, cst_env],
n4 = [0, 0],
n5 = [0, 1],
n6 = [6, 0],
n7 = [0, [3, cst_handler], 0],
n8 = [3, cst_remaining],
n9 = [3, cst_env],
n_ = [3, cst_f],
n$ = [0, [3, cst_restart], 0],
oa = [0, [3, cst_signal_return], 0],
ob = [3, "saved-kont"],
oc = [3, cst_env],
od = [0, [3, cst_comp_trace], 0],
oe = [0, [3, cst_cond_arrow], 0],
of = [3, cst_match_val],
og = [3, cst_env],
oh = [0, [3, cst_wind_after], 0],
oi = [3, cst_after_thunk],
oj = [3, cst_winders_len],
ok = [3, cst_env],
ol = [6, 0],
om = [6, 0],
on = [0, [3, cst_wind_return], 0],
oo = [3, cst_env],
op = [3, "body-result"],
oq = [0, [3, cst_raise_eval], 0],
or = [3, cst_env],
os = [3, cst_scheme],
ot = [3, cst_handler],
ou = [3, cst_kont],
ov = [3, "Unhandled exception: "],
ow = [0, [3, cst_raise_guard], 0],
ox = [3, "exception handler returned from non-continuable raise"],
oy = [0, [3, cst_multi_map], 0],
oz = [3, cst_f],
oA = [3, cst_remaining],
oB = [3, cst_results],
oC = [3, cst_env],
oD = [6, 0],
oE = [0, [3, cst_callcc], 0],
oF = [3, cst_env],
oG = [0, [3, cst_vm_resume], 0],
oH = [3, cst_f],
oI = [3, cst_vm_suspended],
oJ = [3, cst_env],
oK = [3, cst_resume],
oL = [3, cst_env],
oM = [3, cst_request],
oN = [3, cst_env],
oO = [0, [3, cst_perform], 0],
oP = [3, cst_env],
oQ = [0, [3, cst_import], 0],
oR = [3, cst_args],
oS = [3, cst_remaining],
oT = [3, cst_env],
oU = [0, [3, cst_parameterize], 0],
oV = [3, cst_remaining],
oW = [3, cst_f],
oX = [3, cst_results],
oY = [3, cst_body],
oZ = [3, cst_env],
o0 = [2, 1.],
o1 = [0, [2, 1.], 0],
o2 = [4, cst_begin],
o3 = [3, "Unknown frame type: "];
function step_continue(state){
var
converted_val = cek_value(state),
env = cek_env(state),
kont = cek_kont(state),
i = kont_empty_p(kont);
if(Sx_types[67].call(null, i)) return state;
var
frame = kont_top(kont),
rest_k = kont_pop(kont),
match_val = frame_type(frame),
j = Sx_runtime[1].call(null, cst, [0, match_val, lk]);
if(Sx_types[67].call(null, j)){
if(Sx_types[67].call(null, converted_val))
var
l = Sx_runtime[83].call(null, converted_val),
c = [0, 1 - Sx_types[67].call(null, l)];
else
var c = converted_val;
if(Sx_types[67].call(null, c)){
var m = Sx_runtime[25].call(null, frame, ll);
return make_cek_state(Sx_runtime[25].call(null, frame, lm), m, rest_k);
}
var
n = Sx_runtime[25].call(null, frame, ln),
o = Sx_runtime[83].call(null, n);
if(Sx_types[67].call(null, o)) return make_cek_value(0, env, rest_k);
var p = Sx_runtime[25].call(null, frame, lo);
return make_cek_state(Sx_runtime[25].call(null, frame, lp), p, rest_k);
}
var q = Sx_runtime[1].call(null, cst, [0, match_val, lq]);
if(Sx_types[67].call(null, q)){
if(Sx_types[67].call(null, converted_val))
var
r = Sx_runtime[83].call(null, converted_val),
e = [0, 1 - Sx_types[67].call(null, r)];
else
var e = converted_val;
if(! Sx_types[67].call(null, e)) return make_cek_value(0, env, rest_k);
var
body = Sx_runtime[25].call(null, frame, lr),
fenv = Sx_runtime[25].call(null, frame, ls),
s = Sx_runtime[33].call(null, body);
if(Sx_types[67].call(null, s)) return make_cek_value(0, fenv, rest_k);
var
t = [0, Sx_runtime[24].call(null, body), lt],
u = Sx_runtime[1].call(null, cst, t);
if(Sx_types[67].call(null, u))
return make_cek_state(Sx_runtime[14].call(null, body), fenv, rest_k);
var
v =
kont_push
(make_begin_frame(Sx_runtime[15].call(null, body), fenv), rest_k);
return make_cek_state(Sx_runtime[14].call(null, body), fenv, v);
}
var w = Sx_runtime[1].call(null, cst, [0, match_val, lu]);
if(Sx_types[67].call(null, w)){
var
remaining = Sx_runtime[25].call(null, frame, lv),
fenv$0 = Sx_runtime[25].call(null, frame, lw),
x = Sx_runtime[33].call(null, remaining);
if(Sx_types[67].call(null, x))
return make_cek_value(converted_val, fenv$0, rest_k);
var
y = [0, Sx_runtime[24].call(null, remaining), lx],
z = Sx_runtime[1].call(null, cst, y);
if(Sx_types[67].call(null, z))
return make_cek_state
(Sx_runtime[14].call(null, remaining), fenv$0, rest_k);
var
A =
kont_push
(make_begin_frame(Sx_runtime[15].call(null, remaining), fenv$0),
rest_k);
return make_cek_state(Sx_runtime[14].call(null, remaining), fenv$0, A);
}
var B = Sx_runtime[1].call(null, cst, [0, match_val, ly]);
if(Sx_types[67].call(null, B)){
var
name = Sx_runtime[25].call(null, frame, lz),
remaining$0 = Sx_runtime[25].call(null, frame, lA),
body$0 = Sx_runtime[25].call(null, frame, lB),
local = Sx_runtime[25].call(null, frame, lC),
C = Sx_runtime[3].call(null, name);
Sx_runtime[77].call(null, local, C, converted_val);
var D = Sx_runtime[33].call(null, remaining$0);
if(Sx_types[67].call(null, D))
return step_sf_begin(body$0, local, rest_k);
var
next_binding = Sx_runtime[14].call(null, remaining$0),
E = Sx_runtime[14].call(null, next_binding),
F = [0, Sx_runtime[73].call(null, E), lD],
G = Sx_runtime[1].call(null, cst, F);
if(Sx_types[67].call(null, G))
var
H = Sx_runtime[14].call(null, next_binding),
vname = Sx_types[68].call(null, H);
else
var vname = Sx_runtime[14].call(null, next_binding);
var
I =
kont_push
(make_let_frame
(vname, Sx_runtime[15].call(null, remaining$0), body$0, local),
rest_k);
return make_cek_state
(Sx_runtime[17].call(null, next_binding, lE), local, I);
}
var J = Sx_runtime[1].call(null, cst, [0, match_val, lF]);
if(Sx_types[67].call(null, J)){
var
name$0 = Sx_runtime[25].call(null, frame, lG),
fenv$1 = Sx_runtime[25].call(null, frame, lH),
has_effects = Sx_runtime[25].call(null, frame, lI),
effect_list = Sx_runtime[25].call(null, frame, lJ),
and = Sx_runtime[85].call(null, converted_val);
if(Sx_types[67].call(null, and))
var
K = Sx_types[73].call(null, converted_val),
g = Sx_runtime[83].call(null, K);
else
var g = and;
if(Sx_types[67].call(null, g)){
var L = Sx_runtime[3].call(null, name$0);
Sx_runtime[82].call(null, converted_val, L);
}
var M = Sx_runtime[3].call(null, name$0);
Sx_runtime[77].call(null, fenv$1, M, converted_val);
if(Sx_types[67].call(null, has_effects)){
var
N = Sx_runtime[5].call(null, effect_list),
effect_names =
[6,
Stdlib_List[20].call
(null,
function(e){
var
a = [0, Sx_runtime[73].call(null, e), lK],
b = Sx_runtime[1].call(null, cst, a);
return Sx_types[67].call(null, b)
? Sx_types[68].call(null, e)
: e;
},
N)],
O = Sx_runtime[75].call(null, fenv$1, lL),
effect_anns =
Sx_types[67].call(null, O)
? Sx_runtime[76].call(null, fenv$1, lM)
: [7, Stdlib_Hashtbl[1].call(null, 0, 0)];
Sx_runtime[11].call(null, effect_anns, name$0, effect_names);
var P = Sx_runtime[3].call(null, lN);
Sx_runtime[77].call(null, fenv$1, P, effect_anns);
}
return make_cek_value(converted_val, fenv$1, rest_k);
}
var Q = Sx_runtime[1].call(null, cst, [0, match_val, lO]);
if(Sx_types[67].call(null, Q)){
var
name$1 = Sx_runtime[25].call(null, frame, lP),
fenv$2 = Sx_runtime[25].call(null, frame, lQ),
and$0 = Sx_runtime[85].call(null, converted_val);
if(Sx_types[67].call(null, and$0))
var
R = Sx_types[73].call(null, converted_val),
h = Sx_runtime[83].call(null, R);
else
var h = and$0;
if(Sx_types[67].call(null, h)){
var S = Sx_runtime[3].call(null, name$1);
Sx_runtime[82].call(null, converted_val, S);
}
var T = Sx_runtime[3].call(null, name$1);
Sx_runtime[77].call(null, fenv$2, T, converted_val);
return make_cek_value(converted_val, fenv$2, rest_k);
}
var U = Sx_runtime[1].call(null, cst, [0, match_val, lR]);
if(Sx_types[67].call(null, U)){
var
name$2 = Sx_runtime[25].call(null, frame, lS),
fenv$3 = Sx_runtime[25].call(null, frame, lT),
V = Sx_runtime[3].call(null, name$2);
Sx_runtime[78].call(null, fenv$3, V, converted_val);
return make_cek_value(converted_val, env, rest_k);
}
var W = Sx_runtime[1].call(null, cst, [0, match_val, lU]);
if(Sx_types[67].call(null, W)){
var X = [0, 1 - Sx_types[67].call(null, converted_val)];
if(Sx_types[67].call(null, X))
return make_cek_value(converted_val, env, rest_k);
var
remaining$1 = Sx_runtime[25].call(null, frame, lV),
Y = Sx_runtime[33].call(null, remaining$1);
if(Sx_types[67].call(null, Y))
return make_cek_value(converted_val, env, rest_k);
var
Z = [0, Sx_runtime[24].call(null, remaining$1), lW],
_ = Sx_runtime[1].call(null, cst, Z);
if(Sx_types[67].call(null, _))
var rest_k$0 = rest_k;
else
var
aa = Sx_runtime[25].call(null, frame, lY),
rest_k$0 =
kont_push
(make_and_frame(Sx_runtime[15].call(null, remaining$1), aa), rest_k);
var $ = Sx_runtime[25].call(null, frame, lX);
return make_cek_state
(Sx_runtime[14].call(null, remaining$1), $, rest_k$0);
}
var ab = Sx_runtime[1].call(null, cst, [0, match_val, lZ]);
if(Sx_types[67].call(null, ab)){
if(Sx_types[67].call(null, converted_val))
return make_cek_value(converted_val, env, rest_k);
var
remaining$2 = Sx_runtime[25].call(null, frame, l0),
ac = Sx_runtime[33].call(null, remaining$2);
if(Sx_types[67].call(null, ac)) return make_cek_value(l1, env, rest_k);
var
ad = [0, Sx_runtime[24].call(null, remaining$2), l2],
ae = Sx_runtime[1].call(null, cst, ad);
if(Sx_types[67].call(null, ae))
var rest_k$1 = rest_k;
else
var
ag = Sx_runtime[25].call(null, frame, l4),
rest_k$1 =
kont_push
(make_or_frame(Sx_runtime[15].call(null, remaining$2), ag), rest_k);
var af = Sx_runtime[25].call(null, frame, l3);
return make_cek_state
(Sx_runtime[14].call(null, remaining$2), af, rest_k$1);
}
var ah = Sx_runtime[1].call(null, cst, [0, match_val, l5]);
if(Sx_types[67].call(null, ah)){
var
remaining$3 = Sx_runtime[25].call(null, frame, l6),
fenv$4 = Sx_runtime[25].call(null, frame, l7),
scheme_p = Sx_runtime[25].call(null, frame, l8);
if(! Sx_types[67].call(null, scheme_p)){
if(Sx_types[67].call(null, converted_val))
return make_cek_state
(Sx_runtime[17].call(null, remaining$3, mg), fenv$4, rest_k);
var
aq =
[0,
remaining$3,
[0, mh, [0, Sx_runtime[24].call(null, remaining$3), 0]]],
next = Sx_runtime[1].call(null, cst_slice, aq),
ar = [0, Sx_runtime[24].call(null, next), mi],
as = Sx_runtime[1].call(null, cst$3, ar);
if(Sx_types[67].call(null, as))
return make_cek_value(0, fenv$4, rest_k);
var
next_test$0 = Sx_runtime[14].call(null, next),
at = is_else_clause(next_test$0);
return Sx_types[67].call(null, at)
? make_cek_state
(Sx_runtime[17].call(null, next, mj), fenv$4, rest_k)
: make_cek_state
(next_test$0,
fenv$4,
kont_push(make_cond_frame(next, fenv$4, mk), rest_k));
}
if(! Sx_types[67].call(null, converted_val)){
var
next_clauses = Sx_runtime[15].call(null, remaining$3),
ao = Sx_runtime[33].call(null, next_clauses);
if(Sx_types[67].call(null, ao))
return make_cek_value(0, fenv$4, rest_k);
var
next_clause = Sx_runtime[14].call(null, next_clauses),
next_test = Sx_runtime[14].call(null, next_clause),
ap = is_else_clause(next_test);
return Sx_types[67].call(null, ap)
? make_cek_state
(Sx_runtime[17].call(null, next_clause, me), fenv$4, rest_k)
: make_cek_state
(next_test,
fenv$4,
kont_push(make_cond_frame(next_clauses, fenv$4, mf), rest_k));
}
var
clause = Sx_runtime[14].call(null, remaining$3),
ai = [0, Sx_runtime[24].call(null, clause), l9],
and$1 = Sx_runtime[1].call(null, cst$0, ai);
if(Sx_types[67].call(null, and$1)){
var
aj = Sx_runtime[17].call(null, clause, l$),
ak = [0, Sx_runtime[73].call(null, aj), l_],
and$2 = Sx_runtime[1].call(null, cst, ak);
if(Sx_types[67].call(null, and$2))
var
al = Sx_runtime[17].call(null, clause, mb),
am = [0, Sx_types[68].call(null, al), ma],
b = Sx_runtime[1].call(null, cst, am);
else
var b = and$2;
}
else
var b = and$1;
if(! Sx_types[67].call(null, b))
return make_cek_state
(Sx_runtime[17].call(null, clause, md), fenv$4, rest_k);
var an = kont_push(make_cond_arrow_frame(converted_val, fenv$4), rest_k);
return make_cek_state(Sx_runtime[17].call(null, clause, mc), fenv$4, an);
}
var au = Sx_runtime[1].call(null, cst, [0, match_val, ml]);
if(Sx_types[67].call(null, au)){
var
match_val$0 = Sx_runtime[25].call(null, frame, mm),
remaining$4 = Sx_runtime[25].call(null, frame, mn),
fenv$5 = Sx_runtime[25].call(null, frame, mo),
av = Sx_runtime[83].call(null, match_val$0);
return Sx_types[67].call(null, av)
? sf_case_step_loop(converted_val, remaining$4, fenv$5, rest_k)
: sf_case_step_loop(match_val$0, remaining$4, fenv$5, rest_k);
}
var aw = Sx_runtime[1].call(null, cst, [0, match_val, mp]);
if(Sx_types[67].call(null, aw)){
var
remaining$5 = Sx_runtime[25].call(null, frame, mq),
fenv$6 = Sx_runtime[25].call(null, frame, mr),
mode = Sx_runtime[25].call(null, frame, ms),
bind_name = Sx_runtime[25].call(null, frame, mt),
ax = Sx_runtime[33].call(null, remaining$5);
if(Sx_types[67].call(null, ax))
return make_cek_value(converted_val, fenv$6, rest_k);
var
form = Sx_runtime[14].call(null, remaining$5),
rest_forms = Sx_runtime[15].call(null, remaining$5),
ay = Sx_runtime[15].call(null, remaining$5),
az = Sx_runtime[33].call(null, ay),
new_kont =
Sx_types[67].call(null, az)
? rest_k
: kont_push
(make_thread_frame
(Sx_runtime[15].call(null, remaining$5), fenv$6, mode, bind_name),
rest_k),
aA = Sx_runtime[1].call(null, cst, [0, mode, mu]);
if(Sx_types[67].call(null, aA)){
var
new_env = Sx_runtime[80].call(null, fenv$6),
aB = Sx_types[68].call(null, bind_name),
aC = Sx_runtime[3].call(null, aB);
Sx_runtime[77].call(null, new_env, aC, converted_val);
return make_cek_state(form, new_env, new_kont);
}
var
aD = [0, Sx_runtime[73].call(null, form), mv],
and$3 = Sx_runtime[1].call(null, cst, aD);
if(Sx_types[67].call(null, and$3)){
var
aE = Sx_runtime[33].call(null, form),
and$4 = [0, 1 - Sx_types[67].call(null, aE)];
if(Sx_types[67].call(null, and$4)){
var
aF = Sx_runtime[14].call(null, form),
aG = [0, Sx_runtime[73].call(null, aF), mw],
and$5 = Sx_runtime[1].call(null, cst, aG);
if(Sx_types[67].call(null, and$5))
var
aH = Sx_runtime[14].call(null, form),
a = ho_form_name_p(Sx_types[68].call(null, aH));
else
var a = and$5;
}
else
var a = and$4;
}
else
var a = and$3;
if(Sx_types[67].call(null, a)){
var
aI = Sx_runtime[15].call(null, form),
aJ = Sx_runtime[18].call(null, [6, [0, mx, [0, converted_val, 0]]], aI),
aK = Sx_runtime[14].call(null, form);
return make_cek_state
(Sx_runtime[18].call(null, aK, aJ), fenv$6, new_kont);
}
var aL = Sx_runtime[1].call(null, cst, [0, mode, my]);
if(Sx_types[67].call(null, aL)){
var
result = thread_insert_arg_last(form, converted_val, fenv$6),
aM = Sx_runtime[33].call(null, rest_forms);
return Sx_types[67].call(null, aM)
? make_cek_value(result, fenv$6, rest_k)
: make_cek_value
(result,
fenv$6,
kont_push
(make_thread_frame(rest_forms, fenv$6, mode, bind_name),
rest_k));
}
var
result$0 = thread_insert_arg(form, converted_val, fenv$6),
aN = Sx_runtime[33].call(null, rest_forms);
return Sx_types[67].call(null, aN)
? make_cek_value(result$0, fenv$6, rest_k)
: make_cek_value
(result$0,
fenv$6,
kont_push
(make_thread_frame(rest_forms, fenv$6, mode, bind_name),
rest_k));
}
var aO = Sx_runtime[1].call(null, cst, [0, match_val, mz]);
if(Sx_types[67].call(null, aO)){
var
f = Sx_runtime[25].call(null, frame, mA),
evaled = Sx_runtime[25].call(null, frame, mB),
remaining$6 = Sx_runtime[25].call(null, frame, mC),
fenv$7 = Sx_runtime[25].call(null, frame, mD),
raw_args = Sx_runtime[25].call(null, frame, mE),
hname = Sx_runtime[25].call(null, frame, mF),
aP = Sx_runtime[83].call(null, f);
if(Sx_types[67].call(null, aP)){
var
and$6 = strict_ref[1],
hname$0 = Sx_types[67].call(null, and$6) ? hname : and$6;
if(Sx_types[67].call(null, hname$0)) strict_check_args(hname, mG);
var aQ = Sx_runtime[33].call(null, remaining$6);
if(Sx_types[67].call(null, aQ))
return continue_with_call(converted_val, mH, fenv$7, raw_args, rest_k);
var
aR =
kont_push
(make_arg_frame
(converted_val,
mI,
Sx_runtime[15].call(null, remaining$6),
fenv$7,
raw_args,
hname),
rest_k);
return make_cek_state
(Sx_runtime[14].call(null, remaining$6), fenv$7, aR);
}
var
new_evaled =
Sx_runtime[1].call
(null, cst_append, [0, evaled, [0, [6, [0, converted_val, 0]], 0]]),
aS = Sx_runtime[33].call(null, remaining$6);
if(! Sx_types[67].call(null, aS)){
var
aT =
kont_push
(make_arg_frame
(f,
new_evaled,
Sx_runtime[15].call(null, remaining$6),
fenv$7,
raw_args,
hname),
rest_k);
return make_cek_state
(Sx_runtime[14].call(null, remaining$6), fenv$7, aT);
}
var
and$7 = strict_ref[1],
hname$1 = Sx_types[67].call(null, and$7) ? hname : and$7;
if(Sx_types[67].call(null, hname$1))
strict_check_args(hname, new_evaled);
return continue_with_call(f, new_evaled, fenv$7, raw_args, rest_k);
}
var aU = Sx_runtime[1].call(null, cst, [0, match_val, mJ]);
if(Sx_types[67].call(null, aU)){
var
remaining$7 = Sx_runtime[25].call(null, frame, mK),
results = Sx_runtime[25].call(null, frame, mL),
fenv$8 = Sx_runtime[25].call(null, frame, mM),
last_result = Sx_runtime[16].call(null, results),
aV =
[0,
[6,
[0,
[6,
[0, Sx_runtime[14].call(null, last_result), [0, converted_val, 0]]],
0]],
0],
aW = [0, Sx_runtime[24].call(null, results), 0],
aX =
[0, results, [0, mN, [0, Sx_runtime[1].call(null, cst_dec, aW), 0]]],
aY = [0, Sx_runtime[1].call(null, cst_slice, aX), aV],
completed = Sx_runtime[1].call(null, cst_append, aY),
aZ = Sx_runtime[33].call(null, remaining$7);
if(Sx_types[67].call(null, aZ)){
var
d = [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
a0 = Sx_runtime[5].call(null, completed);
Stdlib_List[18].call
(null,
function(pair){
var
a = Sx_runtime[17].call(null, pair, mO),
b = Sx_runtime[14].call(null, pair);
Sx_runtime[11].call(null, d, b, a);
return 0;
},
a0);
return make_cek_value(d, fenv$8, rest_k);
}
var
next_entry = Sx_runtime[14].call(null, remaining$7),
a1 =
[0,
completed,
[0,
[6, [0, [6, [0, Sx_runtime[14].call(null, next_entry), 0]], 0]],
0]],
a2 = Sx_runtime[1].call(null, cst_append, a1),
a3 =
kont_push
(make_dict_frame(Sx_runtime[15].call(null, remaining$7), a2, fenv$8),
rest_k);
return make_cek_state
(Sx_runtime[17].call(null, next_entry, mP), fenv$8, a3);
}
var a4 = Sx_runtime[1].call(null, cst, [0, match_val, mQ]);
if(Sx_types[67].call(null, a4)){
var
ho_type = Sx_runtime[25].call(null, frame, mR),
remaining$8 = Sx_runtime[25].call(null, frame, mS),
a5 =
[0,
Sx_runtime[25].call(null, frame, mT),
[0, [6, [0, converted_val, 0]], 0]],
evaled$0 = Sx_runtime[1].call(null, cst_append, a5),
fenv$9 = Sx_runtime[25].call(null, frame, mU),
a6 = Sx_runtime[33].call(null, remaining$8);
if(Sx_types[67].call(null, a6))
return ho_setup_dispatch(ho_type, evaled$0, fenv$9, rest_k);
var
a7 =
kont_push
(make_ho_setup_frame
(ho_type, Sx_runtime[15].call(null, remaining$8), evaled$0, fenv$9),
rest_k);
return make_cek_state(Sx_runtime[14].call(null, remaining$8), fenv$9, a7);
}
var a8 = Sx_runtime[1].call(null, cst, [0, match_val, mV]);
if(Sx_types[67].call(null, a8))
return make_cek_value(converted_val, env, rest_k);
var a9 = Sx_runtime[1].call(null, cst, [0, match_val, mW]);
if(Sx_types[67].call(null, a9)){
var
fenv$10 = Sx_runtime[25].call(null, frame, mX),
a_ = Sx_runtime[89].call(null, converted_val),
a$ = [0, 1 - Sx_types[67].call(null, a_)];
if(Sx_types[67].call(null, a$))
return make_cek_value(converted_val, fenv$10, rest_k);
var ba = has_reactive_reset_frame_p(rest_k);
if(Sx_types[67].call(null, ba))
return reactive_shift_deref(converted_val, fenv$10, rest_k);
var ctx = Sx_runtime[71].call(null, mY, 0);
if(Sx_types[67].call(null, ctx)){
var
dep_list = Sx_runtime[25].call(null, ctx, mZ),
notify_fn = Sx_runtime[25].call(null, ctx, m0),
bb =
Sx_runtime[1].call
(null, cst_contains, [0, dep_list, [0, converted_val, 0]]),
bc = [0, 1 - Sx_types[67].call(null, bb)];
if(Sx_types[67].call(null, bc)){
Sx_runtime[10].call(null, dep_list, converted_val);
Sx_runtime[115].call(null, converted_val, notify_fn);
}
}
return make_cek_value
(Sx_runtime[114].call(null, converted_val), fenv$10, rest_k);
}
var bd = Sx_runtime[1].call(null, cst, [0, match_val, m1]);
if(Sx_types[67].call(null, bd)){
var
update_fn = Sx_runtime[25].call(null, frame, m2),
first_p = Sx_runtime[25].call(null, frame, m3),
be =
Sx_types[67].call(null, update_fn)
? [0, 1 - Sx_types[67].call(null, first_p)]
: update_fn;
if(Sx_types[67].call(null, be))
cek_call(update_fn, [6, [0, converted_val, 0]]);
return make_cek_value(converted_val, env, rest_k);
}
var bf = Sx_runtime[1].call(null, cst, [0, match_val, m4]);
if(Sx_types[67].call(null, bf)){
var
name$3 = Sx_runtime[25].call(null, frame, m5),
remaining$9 = Sx_runtime[25].call(null, frame, m6),
fenv$11 = Sx_runtime[25].call(null, frame, m7),
bg = Sx_runtime[33].call(null, remaining$9);
if(Sx_types[67].call(null, bg)){
Sx_runtime[104].call(null, name$3);
return make_cek_value(converted_val, fenv$11, rest_k);
}
var
bh =
kont_push
(make_scope_frame
(name$3, Sx_runtime[15].call(null, remaining$9), fenv$11),
rest_k);
return make_cek_state
(Sx_runtime[14].call(null, remaining$9), fenv$11, bh);
}
var bi = Sx_runtime[1].call(null, cst, [0, match_val, m8]);
if(Sx_types[67].call(null, bi)){
var
remaining$10 = Sx_runtime[25].call(null, frame, m9),
fenv$12 = Sx_runtime[25].call(null, frame, m_),
bj = Sx_runtime[33].call(null, remaining$10);
if(Sx_types[67].call(null, bj)){
var bk = Sx_runtime[25].call(null, frame, m$);
Sx_runtime[104].call(null, bk);
return make_cek_value(converted_val, fenv$12, rest_k);
}
var
bl = Sx_runtime[15].call(null, remaining$10),
bm = Sx_runtime[25].call(null, frame, na),
new_frame =
make_provide_frame
(Sx_runtime[25].call(null, frame, nb), bm, bl, fenv$12),
bn = Sx_runtime[25].call(null, frame, nc);
Sx_runtime[11].call(null, new_frame, nd, bn);
var bo = kont_push(new_frame, rest_k);
return make_cek_state
(Sx_runtime[14].call(null, remaining$10), fenv$12, bo);
}
var bp = Sx_runtime[1].call(null, cst, [0, match_val, ne]);
if(Sx_types[67].call(null, bp)){
var
tracked = bind_tracking_ref[1],
body$1 = Sx_runtime[25].call(null, frame, nf),
fenv$13 = Sx_runtime[25].call(null, frame, ng),
prev = Sx_runtime[25].call(null, frame, nh);
bind_tracking_ref[1] = prev;
var
subscriber =
[15,
cst$9,
function(args){
if(args && ! args[2])
return cek_run(make_cek_state(body$1, fenv$13, ni));
return 0;
}],
bq = Sx_runtime[5].call(null, tracked);
Stdlib_List[18].call
(null,
function(name){
var
existing =
Sx_runtime[25].call(null, provide_subscribers_ref[1], name),
existing$0 = Sx_types[67].call(null, existing) ? existing : nj,
a =
Sx_runtime[1].call
(null,
cst_append,
[0, existing$0, [0, [6, [0, subscriber, 0]], 0]]);
Sx_runtime[11].call(null, provide_subscribers_ref[1], name, a);
return 0;
},
bq);
return make_cek_value(converted_val, fenv$13, rest_k);
}
var br = Sx_runtime[1].call(null, cst, [0, match_val, nk]);
if(Sx_types[67].call(null, br)){
var
name$4 = Sx_runtime[25].call(null, frame, nl),
fenv$14 = Sx_runtime[25].call(null, frame, nm),
target = kont_find_provide(rest_k, name$4),
old_val =
Sx_types[67].call(null, target)
? Sx_runtime[25].call(null, target, nn)
: Sx_runtime[105].call(null, name$4);
if(Sx_types[67].call(null, target))
Sx_runtime[11].call(null, target, no, converted_val);
Sx_runtime[104].call(null, name$4);
Sx_runtime[103].call(null, name$4, converted_val);
var
bs = Sx_runtime[1].call(null, cst, [0, old_val, [0, converted_val, 0]]),
bt = [0, 1 - Sx_types[67].call(null, bs)];
if(Sx_types[67].call(null, bt)) fire_provide_subscribers(name$4);
return make_cek_value(converted_val, fenv$14, rest_k);
}
var bu = Sx_runtime[1].call(null, cst, [0, match_val, np]);
if(Sx_types[67].call(null, bu)){
var
remaining$11 = Sx_runtime[25].call(null, frame, nq),
fenv$15 = Sx_runtime[25].call(null, frame, nr),
bv = Sx_runtime[33].call(null, remaining$11);
if(Sx_types[67].call(null, bv))
return make_cek_value(converted_val, fenv$15, rest_k);
var
bw = Sx_runtime[15].call(null, remaining$11),
bx = Sx_runtime[25].call(null, frame, ns),
new_frame$0 =
make_scope_acc_frame
(Sx_runtime[25].call(null, frame, nt), bx, bw, fenv$15),
by = Sx_runtime[25].call(null, frame, nu);
Sx_runtime[11].call(null, new_frame$0, nv, by);
var bz = kont_push(new_frame$0, rest_k);
return make_cek_state
(Sx_runtime[14].call(null, remaining$11), fenv$15, bz);
}
var bA = Sx_runtime[1].call(null, cst, [0, match_val, nw]);
if(Sx_types[67].call(null, bA)){
var
f$0 = Sx_runtime[25].call(null, frame, nx),
remaining$12 = Sx_runtime[25].call(null, frame, ny),
results$0 = Sx_runtime[25].call(null, frame, nz),
indexed = Sx_runtime[25].call(null, frame, nA),
fenv$16 = Sx_runtime[25].call(null, frame, nB),
new_results =
Sx_runtime[1].call
(null,
cst_append,
[0, results$0, [0, [6, [0, converted_val, 0]], 0]]),
bB = Sx_runtime[33].call(null, remaining$12);
if(Sx_types[67].call(null, bB))
return make_cek_value(new_results, fenv$16, rest_k);
if(Sx_types[67].call(null, indexed))
var
bC = [0, Sx_runtime[14].call(null, remaining$12), 0],
call_args = [6, [0, Sx_runtime[24].call(null, new_results), bC]];
else
var call_args = [6, [0, Sx_runtime[14].call(null, remaining$12), 0]];
var
next_frame =
Sx_types[67].call(null, indexed)
? make_map_indexed_frame
(f$0,
Sx_runtime[15].call(null, remaining$12),
new_results,
fenv$16)
: make_map_frame
(f$0,
Sx_runtime[15].call(null, remaining$12),
new_results,
fenv$16);
return continue_with_call
(f$0, call_args, fenv$16, nC, kont_push(next_frame, rest_k));
}
var bD = Sx_runtime[1].call(null, cst, [0, match_val, nD]);
if(Sx_types[67].call(null, bD)){
var
f$1 = Sx_runtime[25].call(null, frame, nE),
remaining$13 = Sx_runtime[25].call(null, frame, nF),
results$1 = Sx_runtime[25].call(null, frame, nG),
current_item = Sx_runtime[25].call(null, frame, nH),
fenv$17 = Sx_runtime[25].call(null, frame, nI),
new_results$0 =
Sx_types[67].call(null, converted_val)
? Sx_runtime
[1].call
(null,
cst_append,
[0, results$1, [0, [6, [0, current_item, 0]], 0]])
: results$1,
bE = Sx_runtime[33].call(null, remaining$13);
if(Sx_types[67].call(null, bE))
return make_cek_value(new_results$0, fenv$17, rest_k);
var
bF = Sx_runtime[14].call(null, remaining$13),
bG =
kont_push
(make_filter_frame
(f$1,
Sx_runtime[15].call(null, remaining$13),
new_results$0,
bF,
fenv$17),
rest_k);
return continue_with_call
(f$1,
[6, [0, Sx_runtime[14].call(null, remaining$13), 0]],
fenv$17,
nJ,
bG);
}
var bH = Sx_runtime[1].call(null, cst, [0, match_val, nK]);
if(Sx_types[67].call(null, bH)){
var
f$2 = Sx_runtime[25].call(null, frame, nL),
remaining$14 = Sx_runtime[25].call(null, frame, nM),
fenv$18 = Sx_runtime[25].call(null, frame, nN),
bI = Sx_runtime[33].call(null, remaining$14);
if(Sx_types[67].call(null, bI))
return make_cek_value(converted_val, fenv$18, rest_k);
var
bJ =
kont_push
(make_reduce_frame
(f$2, Sx_runtime[15].call(null, remaining$14), fenv$18),
rest_k);
return continue_with_call
(f$2,
[6,
[0,
converted_val,
[0, Sx_runtime[14].call(null, remaining$14), 0]]],
fenv$18,
nO,
bJ);
}
var bK = Sx_runtime[1].call(null, cst, [0, match_val, nP]);
if(Sx_types[67].call(null, bK)){
var
f$3 = Sx_runtime[25].call(null, frame, nQ),
remaining$15 = Sx_runtime[25].call(null, frame, nR),
fenv$19 = Sx_runtime[25].call(null, frame, nS),
bL = Sx_runtime[33].call(null, remaining$15);
if(Sx_types[67].call(null, bL))
return make_cek_value(0, fenv$19, rest_k);
var
bM =
kont_push
(make_for_each_frame
(f$3, Sx_runtime[15].call(null, remaining$15), fenv$19),
rest_k);
return continue_with_call
(f$3,
[6, [0, Sx_runtime[14].call(null, remaining$15), 0]],
fenv$19,
nT,
bM);
}
var bN = Sx_runtime[1].call(null, cst, [0, match_val, nU]);
if(Sx_types[67].call(null, bN)){
var
f$4 = Sx_runtime[25].call(null, frame, nV),
remaining$16 = Sx_runtime[25].call(null, frame, nW),
fenv$20 = Sx_runtime[25].call(null, frame, nX);
if(Sx_types[67].call(null, converted_val))
return make_cek_value(converted_val, fenv$20, rest_k);
var bO = Sx_runtime[33].call(null, remaining$16);
if(Sx_types[67].call(null, bO))
return make_cek_value(nY, fenv$20, rest_k);
var
bP =
kont_push
(make_some_frame
(f$4, Sx_runtime[15].call(null, remaining$16), fenv$20),
rest_k);
return continue_with_call
(f$4,
[6, [0, Sx_runtime[14].call(null, remaining$16), 0]],
fenv$20,
nZ,
bP);
}
var bQ = Sx_runtime[1].call(null, cst, [0, match_val, n0]);
if(Sx_types[67].call(null, bQ)){
var
f$5 = Sx_runtime[25].call(null, frame, n1),
remaining$17 = Sx_runtime[25].call(null, frame, n2),
fenv$21 = Sx_runtime[25].call(null, frame, n3),
bR = [0, 1 - Sx_types[67].call(null, converted_val)];
if(Sx_types[67].call(null, bR))
return make_cek_value(n4, fenv$21, rest_k);
var bS = Sx_runtime[33].call(null, remaining$17);
if(Sx_types[67].call(null, bS))
return make_cek_value(n5, fenv$21, rest_k);
var
bT =
kont_push
(make_every_frame
(f$5, Sx_runtime[15].call(null, remaining$17), fenv$21),
rest_k);
return continue_with_call
(f$5,
[6, [0, Sx_runtime[14].call(null, remaining$17), 0]],
fenv$21,
n6,
bT);
}
var bU = Sx_runtime[1].call(null, cst, [0, match_val, n7]);
if(Sx_types[67].call(null, bU)){
var
remaining$18 = Sx_runtime[25].call(null, frame, n8),
fenv$22 = Sx_runtime[25].call(null, frame, n9),
bV = Sx_runtime[33].call(null, remaining$18);
if(Sx_types[67].call(null, bV))
return make_cek_value(converted_val, fenv$22, rest_k);
var
bW = Sx_runtime[15].call(null, remaining$18),
bX =
kont_push
(make_handler_frame
(Sx_runtime[25].call(null, frame, n_), bW, fenv$22),
rest_k);
return make_cek_state
(Sx_runtime[14].call(null, remaining$18), fenv$22, bX);
}
var bY = Sx_runtime[1].call(null, cst, [0, match_val, n$]);
if(Sx_types[67].call(null, bY))
return make_cek_value(converted_val, env, rest_k);
var bZ = Sx_runtime[1].call(null, cst, [0, match_val, oa]);
if(Sx_types[67].call(null, bZ)){
var saved_kont = Sx_runtime[25].call(null, frame, ob);
return make_cek_value
(converted_val, Sx_runtime[25].call(null, frame, oc), saved_kont);
}
var b0 = Sx_runtime[1].call(null, cst, [0, match_val, od]);
if(Sx_types[67].call(null, b0))
return make_cek_value(converted_val, env, rest_k);
var b1 = Sx_runtime[1].call(null, cst, [0, match_val, oe]);
if(Sx_types[67].call(null, b1)){
var
test_value = Sx_runtime[25].call(null, frame, of),
fenv$23 = Sx_runtime[25].call(null, frame, og);
return continue_with_call
(converted_val,
[6, [0, test_value, 0]],
fenv$23,
[6, [0, test_value, 0]],
rest_k);
}
var b2 = Sx_runtime[1].call(null, cst, [0, match_val, oh]);
if(Sx_types[67].call(null, b2)){
var
after_thunk = Sx_runtime[25].call(null, frame, oi),
winders_len = Sx_runtime[25].call(null, frame, oj),
fenv$24 = Sx_runtime[25].call(null, frame, ok),
b3 = [0, Sx_runtime[24].call(null, winders_ref[1]), [0, winders_len, 0]],
b4 = Sx_runtime[1].call(null, cst$0, b3);
if(Sx_types[67].call(null, b4))
winders_ref[1] = Sx_runtime[15].call(null, winders_ref[1]);
return continue_with_call
(after_thunk,
om,
fenv$24,
ol,
kont_push
(make_wind_return_frame(converted_val, fenv$24), rest_k));
}
var b5 = Sx_runtime[1].call(null, cst, [0, match_val, on]);
if(Sx_types[67].call(null, b5)){
var b6 = Sx_runtime[25].call(null, frame, oo);
return make_cek_value(Sx_runtime[25].call(null, frame, op), b6, rest_k);
}
var b7 = Sx_runtime[1].call(null, cst, [0, match_val, oq]);
if(Sx_types[67].call(null, b7)){
var
fenv$25 = Sx_runtime[25].call(null, frame, or),
continuable_p = Sx_runtime[25].call(null, frame, os),
unwind_result = kont_unwind_to_handler(rest_k, converted_val),
handler_fn = Sx_runtime[25].call(null, unwind_result, ot),
unwound_k = Sx_runtime[25].call(null, unwind_result, ou),
b8 = Sx_runtime[83].call(null, handler_fn);
if(Sx_types[67].call(null, b8)){
last_error_kont_ref[1] = unwound_k;
var
b9 = [0, ov, [0, Sx_runtime[68].call(null, converted_val), 0]],
b_ = [3, Sx_runtime[4].call(null, b9)];
return Sx_runtime[101].call(null, b_);
}
var
b$ =
Sx_types[67].call(null, continuable_p)
? kont_push(make_signal_return_frame(fenv$25, unwound_k), unwound_k)
: kont_push(make_raise_guard_frame(fenv$25, unwound_k), unwound_k);
return continue_with_call
(handler_fn,
[6, [0, converted_val, 0]],
fenv$25,
[6, [0, converted_val, 0]],
b$);
}
var ca = Sx_runtime[1].call(null, cst, [0, match_val, ow]);
if(Sx_types[67].call(null, ca)){
last_error_kont_ref[1] = rest_k;
return Sx_runtime[101].call(null, ox);
}
var cb = Sx_runtime[1].call(null, cst, [0, match_val, oy]);
if(Sx_types[67].call(null, cb)){
var
f$6 = Sx_runtime[25].call(null, frame, oz),
remaining$19 = Sx_runtime[25].call(null, frame, oA),
cc =
[0,
Sx_runtime[25].call(null, frame, oB),
[0, [6, [0, converted_val, 0]], 0]],
new_results$1 = Sx_runtime[1].call(null, cst_append, cc),
fenv$26 = Sx_runtime[25].call(null, frame, oC),
cd = Sx_runtime[5].call(null, remaining$19),
ce =
[0,
Stdlib_List[34].call
(null,
function(c){
var a = Sx_runtime[33].call(null, c);
return Sx_types[67].call(null, a);
},
cd)];
if(Sx_types[67].call(null, ce))
return make_cek_value(new_results$1, fenv$26, rest_k);
var
cf = Sx_runtime[5].call(null, remaining$19),
heads =
[6,
Stdlib_List[20].call
(null, function(c){return Sx_runtime[14].call(null, c);}, cf)],
cg = Sx_runtime[5].call(null, remaining$19),
tails =
[6,
Stdlib_List[20].call
(null, function(c){return Sx_runtime[15].call(null, c);}, cg)];
return continue_with_call
(f$6,
heads,
fenv$26,
oD,
kont_push
(make_multi_map_frame(f$6, tails, new_results$1, fenv$26),
rest_k));
}
var ch = Sx_runtime[1].call(null, cst, [0, match_val, oE]);
if(Sx_types[67].call(null, ch)){
var
ci = Sx_runtime[24].call(null, winders_ref[1]),
k = Sx_runtime[98].call(null, rest_k, ci);
return continue_with_call
(converted_val,
[6, [0, k, 0]],
Sx_runtime[25].call(null, frame, oF),
[6, [0, k, 0]],
rest_k);
}
var cj = Sx_runtime[1].call(null, cst, [0, match_val, oG]);
if(Sx_types[67].call(null, cj)){
var
resume_fn = Sx_runtime[25].call(null, frame, oH),
result$1 =
Sx_runtime[7].call(null, resume_fn, [6, [0, converted_val, 0]]),
and$8 = Sx_runtime[38].call(null, result$1),
ck =
Sx_types[67].call(null, and$8)
? Sx_runtime[25].call(null, result$1, oI)
: and$8;
if(! Sx_types[67].call(null, ck))
return make_cek_value
(result$1, Sx_runtime[25].call(null, frame, oN), rest_k);
var
cl = Sx_runtime[25].call(null, frame, oJ),
cm =
kont_push
(make_vm_resume_frame(Sx_runtime[25].call(null, result$1, oK), cl),
rest_k),
cn = Sx_runtime[25].call(null, frame, oL);
return make_cek_suspended
(Sx_runtime[25].call(null, result$1, oM), cn, cm);
}
var co = Sx_runtime[1].call(null, cst, [0, match_val, oO]);
if(Sx_types[67].call(null, co))
return make_cek_suspended
(converted_val, Sx_runtime[25].call(null, frame, oP), rest_k);
var cp = Sx_runtime[1].call(null, cst, [0, match_val, oQ]);
if(Sx_types[67].call(null, cp)){
var
import_set = Sx_runtime[25].call(null, frame, oR),
remaining_sets = Sx_runtime[25].call(null, frame, oS),
fenv$27 = Sx_runtime[25].call(null, frame, oT);
bind_import_set(import_set, fenv$27);
var cq = Sx_runtime[33].call(null, remaining_sets);
return Sx_types[67].call(null, cq)
? make_cek_value(0, fenv$27, rest_k)
: step_sf_import(remaining_sets, fenv$27, rest_k);
}
var cr = Sx_runtime[1].call(null, cst, [0, match_val, oU]);
if(! Sx_types[67].call(null, cr)){
last_error_kont_ref[1] = rest_k;
var
cA = [3, Sx_runtime[4].call(null, [0, o3, [0, match_val, 0]])],
cB = Sx_runtime[2].call(null, cA);
throw caml_maybe_attach_backtrace([0, Sx_types[9], cB], 1);
}
var
remaining$20 = Sx_runtime[25].call(null, frame, oV),
current_param = Sx_runtime[25].call(null, frame, oW),
results$2 = Sx_runtime[25].call(null, frame, oX),
body$2 = Sx_runtime[25].call(null, frame, oY),
fenv$28 = Sx_runtime[25].call(null, frame, oZ),
cs = Sx_runtime[83].call(null, current_param);
if(Sx_types[67].call(null, cs)){
var
ct = Sx_runtime[14].call(null, remaining$20),
val_expr = Sx_runtime[17].call(null, ct, o0);
return make_cek_state
(val_expr,
fenv$28,
kont_push
(make_parameterize_frame
(remaining$20, converted_val, results$2, body$2, fenv$28),
rest_k));
}
var
cu =
[0,
results$2,
[0,
[6,
[0,
[6,
[0,
Sx_types[102].call(null, current_param),
[0, converted_val, 0]]],
0]],
0]],
new_results$2 = Sx_runtime[1].call(null, cst_append, cu),
rest_bindings = Sx_runtime[15].call(null, remaining$20),
cv = Sx_runtime[33].call(null, rest_bindings);
if(Sx_types[67].call(null, cv)){
var
cw = [0, Sx_runtime[24].call(null, body$2), o1],
cx = Sx_runtime[1].call(null, cst, cw),
body_expr =
Sx_types[67].call(null, cx)
? Sx_runtime[14].call(null, body$2)
: Sx_runtime[18].call(null, o2, body$2),
provide_kont = kont_push_provides(new_results$2, fenv$28, rest_k);
return make_cek_state(body_expr, fenv$28, provide_kont);
}
var
cy =
kont_push
(make_parameterize_frame
(rest_bindings, 0, new_results$2, body$2, fenv$28),
rest_k),
cz = Sx_runtime[14].call(null, rest_bindings);
return make_cek_state(Sx_runtime[14].call(null, cz), fenv$28, cy);
}
var
o4 = [3, cst_value],
o5 = [3, "captured"],
o6 = [0, 0],
o7 = [3, "message"],
o8 = [3, cst_vm_suspended],
o9 = [3, cst_resume],
o_ = [3, cst_request],
o$ = [3, cst_args_got],
pa = [3, cst_expects],
pb = [3, cst_lambda],
pc = [2, 1.],
pd = [3, cst_vm_suspended],
pe = [3, cst_resume],
pf = [3, cst_request],
pg = [2, 1.],
ph = [3, cst_children],
pi = [3, "Not callable: "];
function continue_with_call(f, args, env, raw_args, kont){
var b = Sx_types[101].call(null, f);
if(Sx_types[67].call(null, b)){
var
uid = Sx_types[102].call(null, f),
frame = kont_find_provide(kont, uid),
c =
Sx_types[67].call(null, frame)
? Sx_runtime[25].call(null, frame, o4)
: Sx_types[103].call(null, f);
return make_cek_value(c, env, kont);
}
var d = Sx_runtime[97].call(null, f);
if(Sx_types[67].call(null, d)){
var
e = Sx_runtime[33].call(null, args),
arg = Sx_types[67].call(null, e) ? 0 : Sx_runtime[14].call(null, args),
captured = Sx_runtime[99].call(null, f),
w_len = Sx_runtime[100].call(null, f);
wind_escape_to(w_len);
return make_cek_value(arg, env, captured);
}
var g = Sx_runtime[94].call(null, f);
if(Sx_types[67].call(null, g)){
var
h = Sx_runtime[33].call(null, args),
arg$0 = Sx_types[67].call(null, h) ? 0 : Sx_runtime[14].call(null, args),
cont_data = Sx_runtime[96].call(null, f),
captured$0 = Sx_runtime[25].call(null, cont_data, o5),
result = cek_run(make_cek_value(arg$0, env, captured$0));
return make_cek_value(result, env, kont);
}
var and = Sx_runtime[90].call(null, f);
if(Sx_types[67].call(null, and)){
var
i = Sx_runtime[85].call(null, f),
and$0 = [0, 1 - Sx_types[67].call(null, i)];
if(Sx_types[67].call(null, and$0)){
var
j = Sx_runtime[86].call(null, f),
and$1 = [0, 1 - Sx_types[67].call(null, j)];
if(Sx_types[67].call(null, and$1))
var
k = Sx_runtime[87].call(null, f),
a = [0, 1 - Sx_types[67].call(null, k)];
else
var a = and$1;
}
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a)){
var
result$0 = Sx_runtime[8].call(null, f, args),
l = [0, Sx_runtime[9].call(null, result$0)];
if(Sx_types[67].call(null, l)){
var m = kont_push(make_raise_eval_frame(env, o6), kont);
return make_cek_value(Sx_runtime[25].call(null, result$0, o7), env, m);
}
var
and$2 = Sx_runtime[38].call(null, result$0),
n =
Sx_types[67].call(null, and$2)
? Sx_runtime[25].call(null, result$0, o8)
: and$2;
if(! Sx_types[67].call(null, n))
return make_cek_value(result$0, env, kont);
var
o =
kont_push
(make_vm_resume_frame(Sx_runtime[25].call(null, result$0, o9), env),
kont);
return make_cek_suspended
(Sx_runtime[25].call(null, result$0, o_), env, o);
}
var p = Sx_runtime[85].call(null, f);
if(! Sx_types[67].call(null, p)){
var
or$1 = Sx_runtime[86].call(null, f),
or$2 =
Sx_types[67].call(null, or$1) ? or$1 : Sx_runtime[87].call(null, f);
if(! Sx_types[67].call(null, or$2)){
var
P = [0, pi, [0, Sx_runtime[68].call(null, f), 0]],
Q = [3, Sx_runtime[4].call(null, P)],
R = Sx_runtime[2].call(null, Q);
throw caml_maybe_attach_backtrace([0, Sx_types[9], R], 1);
}
var
parsed = parse_keyword_args(raw_args, env),
kwargs = Sx_runtime[14].call(null, parsed),
children = Sx_runtime[17].call(null, parsed, pg),
I = Sx_types[81].call(null, f),
local$0 = Sx_runtime[81].call(null, I, env),
J = Sx_types[79].call(null, f),
K = Sx_runtime[5].call(null, J);
Stdlib_List[18].call
(null,
function(p){
var
or = Sx_runtime[56].call(null, kwargs, p),
or$0 = Sx_types[67].call(null, or) ? or : 0,
a = Sx_runtime[3].call(null, p);
Sx_runtime[77].call(null, local$0, a, or$0);
return 0;
},
K);
var L = Sx_types[82].call(null, f);
if(Sx_types[67].call(null, L)){
var M = Sx_runtime[3].call(null, ph);
Sx_runtime[77].call(null, local$0, M, children);
}
var
N = Sx_types[76].call(null, f),
O =
kont_push(make_comp_trace_frame(Sx_types[75].call(null, f), N), kont);
return make_cek_state(Sx_types[80].call(null, f), local$0, O);
}
var
params = Sx_types[70].call(null, f),
q = Sx_types[72].call(null, f),
local = Sx_runtime[81].call(null, q, env),
r = bind_lambda_params(params, args, local),
s = [0, 1 - Sx_types[67].call(null, r)];
if(Sx_types[67].call(null, s)){
var
t = [0, Sx_runtime[24].call(null, params), 0],
u = [0, Sx_runtime[24].call(null, args), t],
v = Sx_runtime[1].call(null, cst$0, u);
if(Sx_types[67].call(null, v)){
var
w = [0, o$, [0, Sx_runtime[24].call(null, args), 0]],
x = [0, pa, [0, Sx_runtime[24].call(null, params), w]],
or = Sx_types[73].call(null, f),
or$0 = Sx_types[67].call(null, or) ? or : pb,
y = [3, Sx_runtime[4].call(null, [0, or$0, x])],
z = Sx_runtime[2].call(null, y);
throw caml_maybe_attach_backtrace([0, Sx_types[9], z], 1);
}
var
A = Sx_runtime[1].call(null, cst_zip, [0, params, [0, args, 0]]),
B = Sx_runtime[5].call(null, A);
Stdlib_List[18].call
(null,
function(pair){
var
a = Sx_runtime[17].call(null, pair, pc),
b = Sx_runtime[14].call(null, pair),
c = Sx_runtime[3].call(null, b);
Sx_runtime[77].call(null, local, c, a);
return 0;
},
B);
var
C = [0, params, [0, Sx_runtime[24].call(null, args), 0]],
D = Sx_runtime[1].call(null, cst_slice, C),
E = Sx_runtime[5].call(null, D);
Stdlib_List[18].call
(null,
function(p){
var a = Sx_runtime[3].call(null, p);
Sx_runtime[77].call(null, local, a, 0);
return 0;
},
E);
}
var
jit_result = Sx_runtime[137].call(null, f, args),
F = Sx_runtime[136].call(null, jit_result);
if(Sx_types[67].call(null, F))
return make_cek_state(Sx_types[71].call(null, f), local, kont);
var
and$3 = Sx_runtime[38].call(null, jit_result),
G =
Sx_types[67].call(null, and$3)
? Sx_runtime[25].call(null, jit_result, pd)
: and$3;
if(! Sx_types[67].call(null, G))
return make_cek_value(jit_result, local, kont);
var
H =
kont_push
(make_vm_resume_frame(Sx_runtime[25].call(null, jit_result, pe), env),
kont);
return make_cek_suspended
(Sx_runtime[25].call(null, jit_result, pf), env, H);
}
var pj = [0, [2, 2.], 0], pk = [2, 1.], pl = [0, [2, 2.], 0];
function sf_case_step_loop(match_val, clauses$1, env, kont){
var clauses = clauses$1;
for(;;){
var
a = [0, Sx_runtime[24].call(null, clauses), pj],
b = Sx_runtime[1].call(null, cst$3, a);
if(Sx_types[67].call(null, b)) return make_cek_value(0, env, kont);
var
test = Sx_runtime[14].call(null, clauses),
body = Sx_runtime[17].call(null, clauses, pk),
c = is_else_clause(test);
if(Sx_types[67].call(null, c)) return make_cek_state(body, env, kont);
var
test_val = trampoline(eval_expr(test, env)),
d = Sx_runtime[1].call(null, cst, [0, match_val, [0, test_val, 0]]);
if(Sx_types[67].call(null, d)) return make_cek_state(body, env, kont);
var clauses$0 = Sx_runtime[1].call(null, cst_slice, [0, clauses, pl]);
clauses = clauses$0;
}
}
var pm = [6, 0];
function eval_expr_cek(expr, env){
return cek_run(make_cek_state(expr, env, pm));
}
function trampoline_cek(val){
var a = Sx_runtime[84].call(null, val);
if(! Sx_types[67].call(null, a)) return val;
var b = Sx_types[89].call(null, val);
return eval_expr_cek(Sx_types[88].call(null, val), b);
}
function make_coroutine(thunk){
return [23, [0, "coroutine", 0, 0, 0, 0, 0, 0, 0, 0, 0]];
}
var pn = [6, 0];
function eval_expr(expr, env){
return cek_run(make_cek_state(expr, env, pn));
}
caml_update_dummy
(custom_special_forms, [7, Stdlib_Hashtbl[1].call(null, 0, 0)]);
caml_update_dummy(bind_tracking_ref, [0, 0]);
caml_update_dummy(provide_batch_depth_ref, [0, [2, 0.]]);
caml_update_dummy(provide_batch_queue_ref, [0, [6, 0]]);
caml_update_dummy
(provide_subscribers_ref, [0, [7, Stdlib_Hashtbl[1].call(null, 0, 0)]]);
var provide_subscribers = [];
caml_update_dummy
(provide_subscribers, [7, Stdlib_Hashtbl[1].call(null, 0, 0)]);
caml_update_dummy(winders_ref, [0, [6, 0]]);
caml_update_dummy
(library_registry, [7, Stdlib_Hashtbl[1].call(null, 0, 0)]);
caml_update_dummy(io_registry, [7, Stdlib_Hashtbl[1].call(null, 0, 0)]);
caml_update_dummy
(foreign_registry, [7, Stdlib_Hashtbl[1].call(null, 0, 0)]);
caml_update_dummy(strict_ref, [0, [0, 0]]);
caml_update_dummy(prim_param_types_ref, [0, 0]);
trampoline_fn[1] =
function(v){
if(typeof v !== "number" && 12 === v[0]){
var env = v[2], expr = v[1];
return eval_expr(expr, [20, env]);
}
return v;
};
Sx_primitives[3][1] = trampoline_fn[1];
function cek_run_iterative(state){
var s = [0, state];
try{
for(;;){
var match = cek_terminal_p(s[1]);
a:
{
if(typeof match !== "number" && 0 === match[0] && match[1]){var a = 1; break a;}
var a = 0;
}
if(! a){
var match$1 = cek_suspended_p(s[1]);
a:
{
if(typeof match$1 !== "number" && 0 === match$1[0] && match$1[1]){var b = 1; break a;}
var b = 0;
}
if(! b){s[1] = cek_step(s[1]); continue;}
}
var match$0 = cek_suspended_p(s[1]);
if(typeof match$0 !== "number" && 0 === match$0[0] && match$0[1])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_IO_suspension_in_non_IO_co], 1);
var c = cek_value(s[1]);
return c;
}
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sx_types[9]) throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2];
last_error_kont_ref[1] = cek_kont(s[1]);
throw caml_maybe_attach_backtrace([0, Sx_types[9], msg], 1);
}
}
var cst$16 = "", a = [6, 0];
function collect_comp_trace(kont){
var k = kont, trace = 0;
for(;;){
a:
{
if(typeof k !== "number" && 6 === k[0] && k[1]){var c = 1; break a;}
var c = 0;
}
if(! c) return Stdlib_List[10].call(null, trace);
if(typeof k === "number" || ! (6 === k[0]))
k = a;
else{
var match = k[1];
if(match){
var rest = match[2], frame = match[1];
if(typeof frame === "number")
var trace$0 = trace;
else
switch(frame[0]){
case 7:
var
d = frame[1],
match$0 = Stdlib_Hashtbl[7].call(null, d, cst_type);
a:
{
if(match$0){
var b = match$0[1];
if
(typeof b !== "number" && 3 === b[0] && b[1] === cst_comp_trace){var e = 1; break a;}
}
var e = 0;
}
if(e){
var
match$1 = Stdlib_Hashtbl[7].call(null, d, cst_name),
cst = cst$4;
if(match$1){
var match$2 = match$1[1];
if(typeof match$2 === "number" || ! (3 === match$2[0]))
var name = cst;
else
var s$0 = match$2[1], name = s$0;
}
else
var name = cst;
var
match$3 = Stdlib_Hashtbl[7].call(null, d, cst_file),
cst$0 = cst$16;
if(match$3){
var match$4 = match$3[1];
if(typeof match$4 === "number" || ! (3 === match$4[0]))
var file = cst$0;
else
var s = match$4[1], file = s;
}
else
var file = cst$0;
var trace$0 = [0, [0, name, file], trace];
}
else
var trace$0 = trace;
break;
case 23:
var f = frame[1];
if(f[1] === cst_comp_trace){
var match$5 = f[3];
if(typeof match$5 === "number" || ! (3 === match$5[0]))
var name$0 = cst$4;
else
var s$2 = match$5[1], name$0 = s$2;
var match$6 = f[2], cst$1 = cst$16;
if(typeof match$6 === "number")
var file$0 = 0 === match$6 ? cst$16 : cst$1;
else if(3 === match$6[0])
var s$1 = match$6[1], file$0 = s$1;
else
var file$0 = cst$1;
var trace$0 = [0, [0, name$0, file$0], trace];
}
else
var trace$0 = trace;
break;
default: var trace$0 = trace;
}
k = [6, rest];
trace = trace$0;
}
else
k = a;
}
}
}
function format_comp_trace(trace){
if(! trace) return cst$16;
var
lines =
Stdlib_List[21].call
(null,
function(i, param){
var
file = param[2],
name = param[1],
prefix = 0 === i ? " in " : " called from ";
if(file === cst$16){
var a = Stdlib[28].call(null, cst$13, name);
return Stdlib[28].call(null, prefix, a);
}
var
b = Stdlib[28].call(null, file, cst$6),
c = Stdlib[28].call(null, cst$7, b),
d = Stdlib[28].call(null, name, c),
e = Stdlib[28].call(null, cst$13, d);
return Stdlib[28].call(null, prefix, e);
},
trace),
cst = "\n",
a = Stdlib_String[7].call(null, cst, lines);
return Stdlib[28].call(null, cst, a);
}
function enhance_error_with_trace(msg){
var trace = collect_comp_trace(last_error_kont_ref[1]);
last_error_kont_ref[1] = 0;
var a = format_comp_trace(trace);
return Stdlib[28].call(null, msg, a);
}
var
po = [0, 0],
pp = [0, 0],
pq =
[0,
[2,
0,
[11, cst_expected, [4, 0, 0, 0, [11, cst_args_got, [4, 0, 0, 0, 0]]]]],
"%s: expected %d args, got %d"],
pr = [0, 1],
ps = [0, 0],
pt = [0, 0];
function sf_define_type(args, env_val){
a:
{
if(typeof args !== "number" && 6 === args[0]){var l = args[1], items = l; break a;}
var items = 0;
}
var
type_sym = Stdlib_List[8].call(null, items, 0),
type_name = Sx_types[35].call(null, type_sym),
ctor_specs = Stdlib_List[7].call(null, items);
function env_bind_v(k, v){
Sx_runtime[77].call(null, env_val, [3, k], v);
return 0;
}
var
cst_adt_registry = "*adt-registry*",
a = Sx_runtime[75].call(null, env_val, [3, cst_adt_registry]);
if(1 - Sx_types[67].call(null, a))
env_bind_v(cst_adt_registry, [7, Stdlib_Hashtbl[1].call(null, 0, 8)]);
var
registry = Sx_runtime[76].call(null, env_val, [3, cst_adt_registry]),
ctor_names =
Stdlib_List[20].call
(null,
function(spec){
if(typeof spec !== "number" && 6 === spec[0]){
var match = spec[1];
if(match){
var sym = match[1];
return [3, Sx_types[35].call(null, sym)];
}
}
return 0;
},
ctor_specs);
if(typeof registry !== "number" && 7 === registry[0]){
var d = registry[1];
Stdlib_Hashtbl[11].call(null, d, type_name, [6, ctor_names]);
}
var
cst_type = "_type",
b =
[15,
Stdlib[28].call(null, type_name, cst$4),
function(pargs){
if(pargs && ! pargs[2]){
var v = pargs[1];
if(typeof v !== "number" && 7 === v[0]){
var d = v[1], b = Stdlib_Hashtbl[9].call(null, d, cst_adt);
a:
if(b){
var match = Stdlib_Hashtbl[7].call(null, d, cst_type);
if(match){
var match$0 = match[1];
if(typeof match$0 !== "number" && 3 === match$0[0]){
var t = match$0[1], a = t === type_name ? 1 : 0;
break a;
}
}
var a = 0;
}
else
var a = b;
return [0, a];
}
return pp;
}
return po;
}];
env_bind_v(Stdlib[28].call(null, type_name, cst$4), b);
Stdlib_List[18].call
(null,
function(spec){
if(typeof spec !== "number" && 6 === spec[0]){
var match = spec[1];
if(match){
var
fields = match[2],
sym = match[1],
cn = Sx_types[35].call(null, sym),
field_names = Stdlib_List[20].call(null, Sx_types[35], fields),
arity = Stdlib_List[1].call(null, fields);
env_bind_v
(cn,
[15,
cn,
function(ctor_args){
if(Stdlib_List[1].call(null, ctor_args) !== arity){
var
a = Stdlib_List[1].call(null, ctor_args),
b = caml_call3(Stdlib_Printf[4].call(null, pq), cn, arity, a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
var d = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, d, cst_adt, pr);
Stdlib_Hashtbl[11].call(null, d, cst_type, [3, type_name]);
Stdlib_Hashtbl[11].call(null, d, cst_ctor, [3, cn]);
Stdlib_Hashtbl[11].call(null, d, cst_fields, [6, ctor_args]);
return [7, d];
}]);
var
a =
[15,
Stdlib[28].call(null, cn, cst$4),
function(pargs){
if(pargs && ! pargs[2]){
var v = pargs[1];
if(typeof v !== "number" && 7 === v[0]){
var d = v[1], b = Stdlib_Hashtbl[9].call(null, d, cst_adt);
a:
if(b){
var match = Stdlib_Hashtbl[7].call(null, d, cst_ctor);
if(match){
var match$0 = match[1];
if(typeof match$0 !== "number" && 3 === match$0[0]){var c = match$0[1], a = c === cn ? 1 : 0; break a;
}
}
var a = 0;
}
else
var a = b;
return [0, a];
}
return pt;
}
return ps;
}];
env_bind_v(Stdlib[28].call(null, cn, cst$4), a);
return Stdlib_List[19].call
(null,
function(idx, fname){
var
a = Stdlib[28].call(null, cst$5, fname),
b =
[15,
Stdlib[28].call(null, cn, a),
function(pargs){
if(pargs && ! pargs[2]){
var v = pargs[1];
if(typeof v !== "number" && 7 === v[0]){
var
d = v[1],
match = Stdlib_Hashtbl[7].call(null, d, cst_fields);
if(match){
var match$0 = match[1];
if(typeof match$0 !== "number" && 6 === match$0[0]){
var fs = match$0[1];
if(idx < Stdlib_List[1].call(null, fs))
return Stdlib_List[8].call(null, fs, idx);
var
k = Stdlib[28].call(null, fname, ": index out of bounds"),
l = Stdlib[28].call(null, cst$5, k),
m = Stdlib[28].call(null, cn, l);
throw caml_maybe_attach_backtrace([0, Sx_types[9], m], 1);
}
}
var
h = Stdlib[28].call(null, fname, ": not an ADT"),
i = Stdlib[28].call(null, cst$5, h),
j = Stdlib[28].call(null, cn, i);
throw caml_maybe_attach_backtrace([0, Sx_types[9], j], 1);
}
var
e = Stdlib[28].call(null, fname, ": not a dict"),
f = Stdlib[28].call(null, cst$5, e),
g = Stdlib[28].call(null, cn, f);
throw caml_maybe_attach_backtrace([0, Sx_types[9], g], 1);
}
var
a = Stdlib[28].call(null, fname, ": expected 1 arg"),
b = Stdlib[28].call(null, cst$5, a),
c = Stdlib[28].call(null, cn, b);
throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1);
}],
c = Stdlib[28].call(null, cst$5, fname);
return env_bind_v(Stdlib[28].call(null, cn, c), b);
},
field_names);
}
}
return 0;
},
ctor_specs);
return 0;
}
var cst_define_type = "define-type";
register_special_form
([3, cst_define_type],
[15,
cst_define_type,
function(call_args){
if(call_args){
var a = call_args[2];
if(a && ! a[2]){
var env = a[1], args = call_args[1];
return sf_define_type(args, env);
}
}
return 0;
}]);
var cst_list$0 = "_list", cst_values = "_values", pu = [0, 1];
function make_values_dict(vs){
var d = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d, cst_values, pu);
Stdlib_Hashtbl[11].call(null, d, cst_list$0, [6, vs]);
return [7, d];
}
function values_to_list(result){
if(typeof result !== "number" && 7 === result[0]){
var d = result[1], match = Stdlib_Hashtbl[7].call(null, d, cst_values);
a:
{
if(match){
var a = match[1];
if(typeof a !== "number" && 0 === a[0] && a[1]){var b = 1; break a;}
}
var b = 0;
}
if(b){
var match$0 = Stdlib_Hashtbl[7].call(null, d, cst_list$0);
if(match$0){
var match$1 = match$0[1];
if(typeof match$1 !== "number" && 6 === match$1[0]){var l = match$1[1]; return l;}
}
return [0, result, 0];
}
}
return [0, result, 0];
}
function sf_let_values(args, env_val){
a:
{
if(typeof args !== "number" && 6 === args[0]){var l$0 = args[1], items = l$0; break a;}
var items = 0;
}
var match = Stdlib_List[9].call(null, items, 0);
a:
{
if(match){
var match$0 = match[1];
if(typeof match$0 !== "number" && 6 === match$0[0]){var l = match$0[1], clauses = l; break a;}
}
var clauses = 0;
}
var
body =
1 < Stdlib_List[1].call(null, items)
? Stdlib_List[7].call(null, items)
: 0,
local_env = Sx_runtime[80].call(null, env_val);
Stdlib_List[18].call
(null,
function(clause){
a:
{
if(typeof clause !== "number" && 6 === clause[0]){
var b = clause[1];
if(b){
var match$0 = b[1];
if(typeof match$0 !== "number" && 6 === match$0[0]){var ns = match$0[1], names = ns; break a;}
}
}
var names = 0;
}
a:
{
if(typeof clause !== "number" && 6 === clause[0]){
var a = clause[1];
if(a){
var match = a[2];
if(match){var e = match[1], val_expr = e; break a;}
}
}
var val_expr = 0;
}
var
result = eval_expr(val_expr, local_env),
vs = values_to_list(result);
return Stdlib_List[19].call
(null,
function(idx, name){
a:
{
if(typeof name !== "number" && name[0] - 3 >>> 0 < 2){var s = name[1], n = s; break a;}
var n = Sx_types[35].call(null, name);
}
var
v =
idx < Stdlib_List[1].call(null, vs)
? Stdlib_List[8].call(null, vs, idx)
: 0;
Sx_runtime[77].call(null, local_env, [3, n], v);
return 0;
},
names);
},
clauses);
var last_val = [0, 0];
Stdlib_List[18].call
(null,
function(e){last_val[1] = eval_expr(e, local_env); return 0;},
body);
return last_val[1];
}
function sf_define_values(args, env_val){
a:
{
if(typeof args !== "number" && 6 === args[0]){var l$0 = args[1], items = l$0; break a;}
var items = 0;
}
var match = Stdlib_List[9].call(null, items, 0);
a:
{
if(match){
var match$0 = match[1];
if(typeof match$0 !== "number" && 6 === match$0[0]){var l = match$0[1], names = l; break a;}
}
var names = 0;
}
var match$1 = Stdlib_List[9].call(null, items, 1);
if(match$1) var e = match$1[1], val_expr = e; else var val_expr = 0;
var result = eval_expr(val_expr, env_val), vs = values_to_list(result);
Stdlib_List[19].call
(null,
function(idx, name){
a:
{
if(typeof name !== "number" && name[0] - 3 >>> 0 < 2){var s = name[1], n = s; break a;}
var n = Sx_types[35].call(null, name);
}
var
v =
idx < Stdlib_List[1].call(null, vs)
? Stdlib_List[8].call(null, vs, idx)
: 0;
Sx_runtime[77].call(null, env_val, [3, n], v);
return 0;
},
names);
return 0;
}
var cst_let_values = "let-values";
register_special_form
([3, cst_let_values],
[15,
cst_let_values,
function(call_args){
if(call_args){
var a = call_args[2];
if(a && ! a[2]){
var env = a[1], args = call_args[1];
return sf_let_values(args, env);
}
}
return 0;
}]);
var cst_define_values = "define-values";
register_special_form
([3, cst_define_values],
[15,
cst_define_values,
function(call_args){
if(call_args){
var a = call_args[2];
if(a && ! a[2]){
var env = a[1], args = call_args[1];
return sf_define_values(args, env);
}
}
return 0;
}]);
var
cst_iterative = "_iterative",
cst_promise = "_promise",
cst_forced = "forced",
cst_thunk = "thunk",
pv = [0, 1],
pw = [0, 0],
px = [0, 1];
function make_promise_dict(opt, thunk){
var iterative = opt ? opt[1] : 0, d = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, d, cst_promise, pv);
Stdlib_Hashtbl[11].call(null, d, cst_forced, pw);
Stdlib_Hashtbl[11].call(null, d, cst_thunk, thunk);
Stdlib_Hashtbl[11].call(null, d, cst_value, 0);
if(iterative) Stdlib_Hashtbl[11].call(null, d, cst_iterative, px);
return [7, d];
}
var py = [6, 0];
function sf_delay(args, env_val){
a:
{
if(typeof args !== "number" && 6 === args[0]){
var match = args[1];
if(match){var e = match[1], expr = e; break a;}
}
var expr = 0;
}
var thunk = Sx_types[42].call(null, py, expr, env_val);
return make_promise_dict(0, thunk);
}
var pz = [6, 0], pA = [0, 1];
function sf_delay_force(args, env_val){
a:
{
if(typeof args !== "number" && 6 === args[0]){
var match = args[1];
if(match){var e = match[1], expr = e; break a;}
}
var expr = 0;
}
var thunk = Sx_types[42].call(null, pz, expr, env_val);
return make_promise_dict(pA, thunk);
}
function is_promise(v){
if(typeof v !== "number" && 7 === v[0]){
var d = v[1], match = Stdlib_Hashtbl[7].call(null, d, cst_promise);
if(match){
var a = match[1];
if(typeof a !== "number" && 0 === a[0] && a[1]) return 1;
}
return 0;
}
return 0;
}
var pB = [6, 0], pC = [0, 1];
function force_promise(p){
if(! is_promise(p)) return p;
if(typeof p !== "number" && 7 === p[0]){
var d = p[1], match = Stdlib_Hashtbl[7].call(null, d, cst_forced);
if(match){
var a = match[1];
if(typeof a !== "number" && 0 === a[0] && a[1]){
var match$2 = Stdlib_Hashtbl[7].call(null, d, cst_value);
if(! match$2) return 0;
var v = match$2[1];
return v;
}
}
var match$0 = Stdlib_Hashtbl[7].call(null, d, cst_thunk);
if(match$0) var t = match$0[1], thunk = t; else var thunk = 0;
var
result = cek_call(thunk, pB),
match$1 = Stdlib_Hashtbl[7].call(null, d, cst_iterative);
a:
{
if(match$1){
var b = match$1[1];
if(typeof b !== "number" && 0 === b[0] && b[1]){var iterative = 1; break a;}
}
var iterative = 0;
}
var
final_val =
iterative
? is_promise(result) ? force_promise(result) : result
: result;
Stdlib_Hashtbl[11].call(null, d, cst_forced, pC);
Stdlib_Hashtbl[11].call(null, d, cst_value, final_val);
return final_val;
}
return p;
}
var cst_delay = "delay";
register_special_form
([3, cst_delay],
[15,
cst_delay,
function(call_args){
if(call_args){
var a = call_args[2];
if(a && ! a[2]){
var env = a[1], args = call_args[1];
return sf_delay(args, env);
}
}
return 0;
}]);
var cst_delay_force = "delay-force";
register_special_form
([3, cst_delay_force],
[15,
cst_delay_force,
function(call_args){
if(call_args){
var a = call_args[2];
if(a && ! a[2]){
var env = a[1], args = call_args[1];
return sf_delay_force(args, env);
}
}
return 0;
}]);
runtime.caml_register_global
(1730,
[0,
trampoline_fn,
trampoline,
[0, 0],
[0, 0],
last_error_kont_ref,
protocol_registry,
seq_to_list,
make_cek_state,
make_cek_value,
make_cek_suspended,
cek_terminal_p,
cek_suspended_p,
cek_control,
cek_env,
cek_kont,
cek_phase,
cek_io_request,
cek_value,
make_if_frame,
make_when_frame,
make_begin_frame,
make_let_frame,
make_define_frame,
make_define_foreign_frame,
make_set_frame,
make_arg_frame,
make_call_frame,
make_cond_frame,
make_cond_arrow_frame,
make_case_frame,
make_thread_frame,
thread_insert_arg,
thread_insert_arg_last,
make_map_frame,
make_map_indexed_frame,
make_multi_map_frame,
make_filter_frame,
make_reduce_frame,
make_for_each_frame,
make_some_frame,
make_every_frame,
make_scope_frame,
make_provide_frame,
make_bind_frame,
make_provide_set_frame,
make_scope_acc_frame,
make_reset_frame,
make_dict_frame,
make_and_frame,
make_or_frame,
make_dynamic_wind_frame,
make_reactive_reset_frame,
make_callcc_frame,
make_wind_after_frame,
make_wind_return_frame,
make_deref_frame,
make_ho_setup_frame,
make_comp_trace_frame,
kont_collect_comp_trace,
make_handler_frame,
make_restart_frame,
make_signal_return_frame,
make_raise_eval_frame,
make_raise_guard_frame,
make_perform_frame,
make_vm_resume_frame,
make_import_frame,
make_parameterize_frame,
find_matching_handler,
kont_find_handler,
kont_unwind_to_handler,
wind_escape_to,
find_named_restart,
kont_find_restart,
frame_type,
kont_push,
kont_top,
kont_pop,
kont_empty_p,
kont_capture_to_reset,
kont_push_provides,
kont_find_provide,
kont_find_scope_acc,
has_reactive_reset_frame_p,
kont_capture_to_reactive_reset,
custom_special_forms,
register_special_form,
render_check,
render_fn,
bind_tracking_ref,
0,
provide_batch_depth_ref,
[2, 0.],
provide_batch_queue_ref,
[6, 0],
provide_subscribers_ref,
provide_subscribers,
winders_ref,
[6, 0],
library_registry,
library_name_key,
library_loaded_p,
library_exports,
register_library,
io_registry,
io_register_b,
io_registered_p,
io_lookup,
io_names,
foreign_registry,
foreign_register_b,
foreign_registered_p,
foreign_lookup,
foreign_names,
foreign_parse_params,
foreign_parse_kwargs_b,
foreign_resolve_binding,
foreign_check_args,
foreign_build_lambda,
sf_define_foreign,
step_sf_define_foreign,
foreign_dispatch,
foreign_parse_params_loop,
step_sf_io,
strict_ref,
[0, 0],
set_strict_b,
prim_param_types_ref,
0,
set_prim_param_types_b,
value_matches_type_p,
strict_check_args,
bind_lambda_params,
call_lambda,
call_component,
parse_keyword_args,
cond_scheme_p,
is_else_clause,
sf_named_let,
sf_lambda,
sf_defcomp,
defcomp_kwarg,
parse_comp_params,
sf_defisland,
defio_parse_kwargs_b,
sf_defio,
sf_defmacro,
parse_macro_params,
qq_expand,
sf_letrec,
step_sf_letrec,
step_sf_dynamic_wind,
sf_scope,
sf_provide,
expand_macro,
cek_step_loop,
cek_run,
cek_resume,
cek_step,
step_eval,
step_sf_raise,
step_sf_guard,
step_sf_callcc,
step_sf_case,
step_sf_let_match,
step_eval_list,
kont_extract_provides,
fire_provide_subscribers,
batch_begin_b,
batch_end_b,
step_sf_bind,
step_sf_parameterize,
syntax_rules_match,
syntax_rules_match_list,
syntax_rules_find_var,
syntax_rules_find_all_vars,
syntax_rules_instantiate,
syntax_rules_instantiate_list,
syntax_rules_expand,
syntax_rules_try_rules,
sf_syntax_rules,
step_sf_define_library,
bind_import_set,
step_sf_import,
step_sf_perform,
sf_define_record_type,
sf_define_protocol,
sf_implement,
satisfies_p,
check_match_exhaustiveness,
match_find_clause,
match_pattern,
step_sf_match,
step_sf_handler_bind,
step_sf_restart_case,
step_sf_signal,
step_sf_invoke_restart,
step_sf_if,
step_sf_when,
step_sf_begin,
step_sf_let,
step_sf_define,
step_sf_set_b,
step_sf_and,
step_sf_or,
step_sf_cond,
step_sf_thread_first,
step_sf_thread_last,
step_sf_thread_as,
step_sf_lambda,
step_sf_scope,
step_sf_provide,
step_sf_context,
step_sf_peek,
step_sf_provide_b,
step_sf_emit,
step_sf_emitted,
step_sf_reset,
step_sf_shift,
step_sf_deref,
cek_call,
reactive_shift_deref,
step_eval_call,
ho_form_name_p,
ho_fn_p,
ho_swap_args,
ho_setup_dispatch,
step_ho_map,
step_ho_map_indexed,
step_ho_filter,
step_ho_reduce,
step_ho_some,
step_ho_every,
step_ho_for_each,
step_continue,
continue_with_call,
sf_case_step_loop,
eval_expr_cek,
trampoline_cek,
make_coroutine,
eval_expr,
cek_run_iterative,
collect_comp_trace,
format_comp_trace,
enhance_error_with_trace,
sf_define_type,
make_values_dict,
values_to_list,
sf_let_values,
sf_define_values,
make_promise_dict,
sf_delay,
sf_delay_force,
is_promise,
force_promise],
"Sx_ref");
return;
}
(globalThis));
//# 22691 "../lib/.sx.objs/jsoo/default/sx.cma.js"
//# shape: Sx_vm:[N,N,N,F(1)*,N,F(1)*,F(2),F(1),F(1),F(1),F(1),F(1),F(1)*,F(2),N,N,N,N,N,F(1),F(1),N,F(3),F(1),F(6),F(3),F(3),F(2),F(3),F(1),F(2),F(2),F(2),F(1)*,F(2),F(1),F(1)*,F(2),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound,
caml_make_vect = runtime.caml_make_vect,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
function caml_call4(f, a0, a1, a2, a3){
return (f.l >= 0 ? f.l : f.l = f.length) === 4
? f(a0, a1, a2, a3)
: runtime.caml_call_gen(f, [a0, a1, a2, a3]);
}
function caml_call5(f, a0, a1, a2, a3, a4){
return (f.l >= 0 ? f.l : f.l = f.length) === 5
? f(a0, a1, a2, a3, a4)
: runtime.caml_call_gen(f, [a0, a1, a2, a3, a4]);
}
function caml_call8(f, a0, a1, a2, a3, a4, a5, a6, a7){
return (f.l >= 0 ? f.l : f.l = f.length) === 8
? f(a0, a1, a2, a3, a4, a5, a6, a7)
: runtime.caml_call_gen(f, [a0, a1, a2, a3, a4, a5, a6, a7]);
}
var
dummy = 0,
global_data = runtime.caml_get_global_data(),
Stdlib_List = global_data.Stdlib__List,
Stdlib_Hashtbl = global_data.Stdlib__Hashtbl,
Sx_types = global_data.Sx_types,
Stdlib_Queue = global_data.Stdlib__Queue,
Stdlib = global_data.Stdlib,
Sx_runtime = global_data.Sx_runtime,
Sx_primitives = global_data.Sx_primitives,
Stdlib_Printf = global_data.Stdlib__Printf,
Sx_ref = global_data.Sx_ref,
Stdlib_String = global_data.Stdlib__String,
Stdlib_Array = global_data.Stdlib__Array,
Sx_parser = global_data.Sx_parser,
Stdlib_Printexc = global_data.Stdlib__Printexc,
VmSuspended = [248, "Sx_vm.VmSuspended", runtime.caml_fresh_oo_id(0)];
Sx_types[15][1] =
function(exn){
if(exn[1] !== VmSuspended) return 0;
var request = exn[2];
throw caml_maybe_attach_backtrace([0, Sx_types[11], request], 1);
};
var
jit_compile_ref = [0, function(a, param){return 0;}],
jit_failed_sentinel =
[0,
[0, -1, -1, 0, [0], [0], 0, 0],
[0],
[0, "__jit_failed__"],
Stdlib_Hashtbl[1].call(null, 0, 0),
0];
function is_jit_failed(cl){return -1 === cl[1][1] ? 1 : 0;}
function create(globals){
return [0, caml_make_vect(4096, 0), 0, 0, globals, 0, 0, 0];
}
function push(vm, v){
if(vm[1].length - 1 <= vm[2]){
var ns = caml_make_vect(vm[2] * 2 | 0, 0);
Stdlib_Array[9].call(null, vm[1], 0, ns, 0, vm[2]);
vm[1] = ns;
}
var a = vm[2];
caml_check_bound(vm[1], a)[a + 1] = v;
vm[2] = vm[2] + 1 | 0;
return 0;
}
function pop(vm){
vm[2] = vm[2] - 1 | 0;
var a = vm[2];
return caml_check_bound(vm[1], a)[a + 1];
}
function peek(vm){
var a = vm[2] - 1 | 0;
return caml_check_bound(vm[1], a)[a + 1];
}
function read_u8(f){
var a = f[2], v = caml_check_bound(f[1][1][4], a)[a + 1];
f[2] = f[2] + 1 | 0;
return v;
}
function read_u16(f){
var
a = f[2],
lo = caml_check_bound(f[1][1][4], a)[a + 1],
b = f[2] + 1 | 0,
hi = caml_check_bound(f[1][1][4], b)[b + 1];
f[2] = f[2] + 2 | 0;
return lo | hi << 8;
}
function read_i16(f){
var v = read_u16(f);
return 32768 <= v ? v - 65536 | 0 : v;
}
function closure_to_value(cl){
var match = cl[3];
function a(args){
var
a = Stdlib_List[20].call(null, Sx_runtime[2], args),
b = Stdlib_String[7].call(null, ",", a),
c = Stdlib[28].call(null, "VM_CLOSURE_CALL:", b);
throw caml_maybe_attach_backtrace([0, Sx_types[9], c], 1);
}
if(match) var n = match[1], n$0 = n; else var n$0 = "anon";
return [15, Stdlib[28].call(null, "vm:", n$0), a];
}
function parse_keyword_args(params, args){
var
a = Stdlib_List[1].call(null, params),
param_set = Stdlib_Hashtbl[1].call(null, 0, a);
Stdlib_List[18].call
(null,
function(p){return Stdlib_Hashtbl[11].call(null, param_set, p, 1);},
params);
var
kwargs = Stdlib_Hashtbl[1].call(null, 0, 8),
children = 0,
param = args;
for(;;){
if(! param) return [0, kwargs, Stdlib_List[10].call(null, children)];
var v = param[1];
if(typeof v !== "number")
switch(v[0]){
case 3:
case 5:
var k = v[1], match = param[2];
if(match){
var rest$0 = match[2], v$0 = match[1];
if(Stdlib_Hashtbl[9].call(null, param_set, k)){
Stdlib_Hashtbl[11].call(null, kwargs, k, v$0);
param = rest$0;
continue;
}
}
break;
}
var rest = param[2];
children = [0, v, children];
param = rest;
}
}
var
vm_comp_jit_count = [0, 0],
vm_comp_cek_count = [0, 0],
vm_insn_count = [0, 0],
vm_call_count = [0, 0],
vm_cek_count = [0, 0];
function vm_reset_counters(param){
vm_insn_count[1] = 0;
vm_call_count[1] = 0;
vm_cek_count[1] = 0;
vm_comp_jit_count[1] = 0;
vm_comp_cek_count[1] = 0;
return 0;
}
var
d =
[0,
[11,
"[vm-perf] insns=",
[4,
0,
0,
0,
[11,
" calls=",
[4,
0,
0,
0,
[11,
" cek_fallbacks=",
[4,
0,
0,
0,
[11,
" comp_jit=",
[4,
0,
0,
0,
[11, " comp_cek=", [4, 0, 0, 0, [12, 10, [10, 0]]]]]]]]]]]],
"[vm-perf] insns=%d calls=%d cek_fallbacks=%d comp_jit=%d comp_cek=%d\n%!"];
function vm_report_counters(param){
var
a = vm_comp_cek_count[1],
b = vm_comp_jit_count[1],
c = vm_cek_count[1],
e = vm_call_count[1],
f = vm_insn_count[1];
return caml_call5(Stdlib_Printf[3].call(null, d), f, e, c, b, a);
}
var e = [6, 0];
function push_closure_frame(vm, cl, args){
var
g = Stdlib_Hashtbl[1].call(null, 0, 4),
frame = [0, cl, 0, vm[2], g],
rest_arity = cl[1][2];
if(0 <= rest_arity){
var nargs = Stdlib_List[1].call(null, args);
a:
{
b:
{
var i = 0, param = args;
for(;;){
if(! param) break;
var remaining = param[2], a = param[1];
if(i >= rest_arity) break b;
push(vm, a);
var i$0 = i + 1 | 0;
i = i$0;
param = remaining;
}
var b = rest_arity - 1 | 0;
if(b >= i){
var for$ = i;
for(;;){
push(vm, 0);
var h = for$ + 1 | 0;
if(b === for$) break;
for$ = h;
}
}
push(vm, e);
break a;
}
push(vm, [6, [0, a, remaining]]);
}
var
used = rest_arity < nargs ? rest_arity + 1 | 0 : nargs + 1 | 0,
c = cl[1][3] - 1 | 0;
if(c >= used){
var for$0 = used;
for(;;){
push(vm, 0);
var j = for$0 + 1 | 0;
if(c === for$0) break;
for$0 = j;
}
}
}
else{
Stdlib_List[18].call(null, function(a){return push(vm, a);}, args);
var d = Stdlib_List[1].call(null, args), f = cl[1][3] - 1 | 0;
if(f >= d){
var for$1 = d;
for(;;){
push(vm, 0);
var k = for$1 + 1 | 0;
if(f === for$1) break;
for$1 = k;
}
}
}
vm[3] = [0, frame, vm[3]];
return 0;
}
var
cst_arity = "arity",
cst_bytecode = "bytecode",
cst_constants = "constants",
cst_vc_bytecode = "vc-bytecode";
function code_from_value(v){
if(typeof v !== "number" && 7 === v[0]){
var
d = v[1],
find2 =
function(k1, k2){
var r = Stdlib_Hashtbl[7].call(null, d, k1);
return r ? r : Stdlib_Hashtbl[7].call(null, d, k2);
},
match = find2(cst_bytecode, cst_vc_bytecode);
a:
{
b:
if(match){
var a = match[1];
if(typeof a !== "number"){
switch(a[0]){
case 6:
var l$0 = a[1]; break;
case 21:
var l$0 = a[1][1]; break;
default: break b;
}
var
e =
Stdlib_List[20].call
(null,
function(x){
if(typeof x !== "number")
switch(x[0]){
case 1:
var n = x[1]; return n;
case 2:
var n$0 = x[1]; return n$0 | 0;
}
return 0;
},
l$0),
bc_list = Stdlib_Array[11].call(null, e);
break a;
}
}
var bc_list = [0];
}
var match$0 = find2(cst_constants, "vc-constants");
a:
{
b:
if(match$0){
var b = match$0[1];
if(typeof b !== "number"){
switch(b[0]){
case 6:
var l = b[1]; break;
case 21:
var l = b[1][1]; break;
default: break b;
}
var entries = Stdlib_Array[11].call(null, l);
break a;
}
}
var entries = [0];
}
var
constants =
Stdlib_Array[14].call
(null,
function(entry){
a:
if(typeof entry !== "number" && 7 === entry[0]){
var ed = entry[1];
if
(!
Stdlib_Hashtbl[9].call(null, ed, cst_bytecode)
&& ! Stdlib_Hashtbl[9].call(null, ed, cst_vc_bytecode))
break a;
return entry;
}
return entry;
},
entries),
match$1 = find2(cst_arity, "vc-arity");
a:
{
if(match$1){
var match$2 = match$1[1];
if(typeof match$2 !== "number")
switch(match$2[0]){
case 1:
var n$1 = match$2[1], arity = n$1; break a;
case 2:
var n$2 = match$2[1], arity = n$2 | 0; break a;
}
}
var arity = 0;
}
var match$3 = find2("rest-arity", "vc-rest-arity");
a:
{
if(match$3){
var match$4 = match$3[1];
if(typeof match$4 !== "number")
switch(match$4[0]){
case 1:
var n = match$4[1], rest_arity = n; break a;
case 2:
var n$0 = match$4[1], rest_arity = n$0 | 0; break a;
}
}
var rest_arity = -1;
}
var len = bc_list.length - 1, i = 0, max_local = arity - 1 | 0;
for(;;){
if(i >= len){
var locals = (max_local + 1 | 0) + 16 | 0;
return [0, arity, rest_arity, locals, bc_list, constants, 0, 0];
}
var op = caml_check_bound(bc_list, i)[i + 1];
a:
{
if(16 !== op && 17 !== op) break a;
if((i + 1 | 0) < len){
var
c = i + 1 | 0,
slot = caml_check_bound(bc_list, c)[c + 1],
max_local$0 = max_local < slot ? slot : max_local;
i = i + 2 | 0;
max_local = max_local$0;
continue;
}
}
if(18 !== op && 19 !== op && 8 !== op && 33 !== op && 34 !== op){
if
(1 !== op
&&
20 !== op
&&
21 !== op
&& 32 !== op && 51 !== op && 52 !== op && 64 !== op && 65 !== op){i = i + 1 | 0; continue;}
i = i + 3 | 0;
continue;
}
i = i + 2 | 0;
}
}
return [0, 0, -1, 16, [0], [0], 0, 0];
}
var
cst$2 = ": ",
cst_JIT_compiler_not_loaded = "JIT: compiler not loaded",
cst_compile = "compile",
cst_fn = "fn",
cst_quote = "quote",
f =
[0,
[11,
"[jit-comp] FAIL ",
[2, 0, [11, cst$2, [2, 0, [12, 10, [10, 0]]]]]],
"[jit-comp] FAIL %s: %s\n%!"],
g = [0, "children", 0],
h = [4, cst_fn],
i = [4, cst_quote],
j = [4, cst_compile];
function jit_compile_comp
(name, params, has_children, body, closure, globals){
try{
try{Stdlib_Hashtbl[6].call(null, globals, cst_compile);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_JIT_compiler_not_loaded], 1);
throw caml_maybe_attach_backtrace(exn, 0);
}
var
c = has_children ? g : 0,
param_names = Stdlib[37].call(null, params, c),
param_syms =
[6,
Stdlib_List[20].call(null, function(s){return [4, s];}, param_names)],
fn_expr = [6, [0, h, [0, param_syms, [0, body, 0]]]],
k = Sx_types[20].call(null, 0),
compile_env = Sx_types[21].call(null, k);
Stdlib_Hashtbl[12].call
(null,
function(k, v){
var a = Sx_types[4].call(null, k);
return Stdlib_Hashtbl[11].call(null, compile_env[1], a, v);
},
globals);
var
result =
Sx_ref[241].call
(null,
[6, [0, j, [0, [6, [0, i, [0, fn_expr, 0]]], 0]]],
[20, compile_env]);
a:
{
if(typeof result !== "number" && 7 === result[0]){
var d = result[1];
if(Stdlib_Hashtbl[9].call(null, d, cst_bytecode)){
var outer_code = code_from_value(result), bc = outer_code[4];
if(4 <= bc.length - 1 && 51 === caml_check_bound(bc, 0)[1]){
var
l = caml_check_bound(bc, 2)[3] << 8,
idx = caml_check_bound(bc, 1)[2] | l;
if(idx < outer_code[5].length - 1){
var
inner_val = caml_check_bound(outer_code[5], idx)[idx + 1],
code = code_from_value(inner_val),
a = [0, [0, code, [0], [0, name], globals, [0, closure]]];
break a;
}
var a = 0;
break a;
}
var a = 0;
break a;
}
}
var a = 0;
}
return a;
}
catch(e$0){
var e = caml_wrap_exception(e$0), b = Stdlib_Printexc[1].call(null, e);
caml_call2(Stdlib_Printf[3].call(null, f), name, b);
return 0;
}
}
var
cst_io_suspended = "io-suspended",
cst_phase = "phase",
cst_request = "request",
active_vm = [0, 0],
k = [6, 0],
l = [3, cst_phase],
m = [3, cst_request];
function cek_call_or_suspend(vm, f, args){
vm_cek_count[1]++;
a:
{
if(typeof args === "number"){
if(0 === args){var a = 0; break a;}
}
else if(6 === args[0]){var l$0 = args[1], a = l$0; break a;}
var a = [0, args, 0];
}
var saved_active = active_vm[1];
active_vm[1] = [0, create(vm[4])];
var
b = [20, Sx_types[20].call(null, 0)],
state = Sx_ref[236].call(null, f, [6, a], b, [6, a], k),
final = Sx_ref[156].call(null, state);
active_vm[1] = saved_active;
var match = Sx_runtime[12].call(null, final, l);
if
(typeof match !== "number"
&& 3 === match[0] && match[1] === cst_io_suspended){
vm[5] = [0, final];
throw caml_maybe_attach_backtrace
([0, VmSuspended, Sx_runtime[12].call(null, final, m), vm], 1);
}
return Sx_ref[18].call(null, final);
}
function call_closure(cl, args, globals){
vm_call_count[1]++;
var prev_vm = active_vm[1], vm = create(globals);
active_vm[1] = [0, vm];
push_closure_frame(vm, cl, args);
try{run(vm);}
catch(e$0){
var e = caml_wrap_exception(e$0);
active_vm[1] = prev_vm;
throw caml_maybe_attach_backtrace(e, 0);
}
active_vm[1] = prev_vm;
return pop(vm);
}
function call_closure_reuse(cl, args){
var match = active_vm[1];
if(! match) return call_closure(cl, args, cl[4]);
var vm = match[1], saved_sp = vm[2];
push_closure_frame(vm, cl, args);
var saved_frames = Stdlib_List[7].call(null, vm[3]);
vm[3] = [0, Stdlib_List[6].call(null, vm[3]), 0];
try{run(vm);}
catch(e$0){
var e = caml_wrap_exception(e$0);
if(e[1] === VmSuspended){
vm[7] = [0, [0, saved_frames, saved_sp], vm[7]];
throw caml_maybe_attach_backtrace(e, 0);
}
vm[3] = saved_frames;
vm[2] = saved_sp;
throw caml_maybe_attach_backtrace(e, 0);
}
vm[3] = saved_frames;
return pop(vm);
}
function vm_call(vm, f, args){
if(typeof f !== "number")
switch(f[0]){
case 8:
var l = f[1], match = l[5];
if(match){
var cl = match[1];
return is_jit_failed(cl)
? push(vm, cek_call_or_suspend(vm, f, [6, args]))
: push_closure_frame(vm, cl, args);
}
if(0 === l[4]) return push(vm, cek_call_or_suspend(vm, f, [6, args]));
l[6] = l[6] + 1 | 0;
if(Sx_types[43][1] <= l[6] && 0 < Sx_types[47][1]){
l[5] = [0, jit_failed_sentinel];
var match$0 = caml_call2(jit_compile_ref[1], l, vm[4]);
if(! match$0){
Sx_types[45][1]++;
return push(vm, cek_call_or_suspend(vm, f, [6, args]));
}
var cl$0 = match$0[1];
Sx_types[44][1]++;
l[5] = [0, cl$0];
Stdlib_Queue[3].call(null, [0, l[7], [8, l]], Sx_types[49]);
for(;;){
var d = Sx_types[47][1];
if(d >= Stdlib_Queue[14].call(null, Sx_types[49]))
return push_closure_frame(vm, cl$0, args);
var match$1 = Stdlib_Queue[7].call(null, Sx_types[49])[2];
if(typeof match$1 !== "number" && 8 === match$1[0]){
var ev_l = match$1[1];
ev_l[5] = 0;
Sx_types[48][1]++;
}
}
}
Sx_types[46][1]++;
return push(vm, cek_call_or_suspend(vm, f, [6, args]));
case 9:
var
c = f[1],
match$2 = parse_keyword_args(c[2], args),
children = match$2[2],
kwargs = match$2[1],
match$3 = c[8];
if(match$3)
var
cl$1 = match$3[1],
compiled = is_jit_failed(cl$1) ? 0 : [0, cl$1];
else{
c[8] = [0, jit_failed_sentinel];
var result = jit_compile_comp(c[1], c[2], c[3], c[4], c[5], vm[4]);
if(result){
var cl$3 = result[1];
c[8] = [0, cl$3];
var compiled = result;
}
else
var compiled = result;
}
if(! compiled){
vm_cek_count[1]++;
vm_comp_cek_count[1]++;
return push(vm, cek_call_or_suspend(vm, f, [6, args]));
}
var cl$2 = compiled[1];
vm_comp_jit_count[1]++;
var
call_args =
Stdlib_List[20].call
(null,
function(p){
var match = Stdlib_Hashtbl[7].call(null, kwargs, p);
if(! match) return 0;
var v = match[1];
return v;
},
c[2]),
call_args$0 =
c[3]
? Stdlib[37].call(null, call_args, [0, [6, children], 0])
: call_args;
try{
var e = push(vm, call_closure(cl$2, call_args$0, cl$2[4]));
return e;
}
catch(exn){
vm_cek_count[1]++;
vm_comp_cek_count[1]++;
return push(vm, cek_call_or_suspend(vm, f, [6, args]));
}
case 10:
var
i = f[1],
match$4 = parse_keyword_args(i[2], args),
children$0 = match$4[2],
kwargs$0 = match$4[1],
match$5 = i[7];
if(match$5)
var
cl$4 = match$5[1],
compiled$0 = is_jit_failed(cl$4) ? 0 : [0, cl$4];
else{
i[7] = [0, jit_failed_sentinel];
var result$0 = jit_compile_comp(i[1], i[2], i[3], i[4], i[5], vm[4]);
if(result$0){
var cl$6 = result$0[1];
i[7] = [0, cl$6];
var compiled$0 = result$0;
}
else
var compiled$0 = result$0;
}
if(! compiled$0){
vm_cek_count[1]++;
vm_comp_cek_count[1]++;
return push(vm, cek_call_or_suspend(vm, f, [6, args]));
}
var cl$5 = compiled$0[1];
vm_comp_jit_count[1]++;
var
call_args$1 =
Stdlib_List[20].call
(null,
function(p){
var match = Stdlib_Hashtbl[7].call(null, kwargs$0, p);
if(! match) return 0;
var v = match[1];
return v;
},
i[2]),
call_args$2 =
i[3]
? Stdlib[37].call(null, call_args$1, [0, [6, children$0], 0])
: call_args$1;
try{
var g = push(vm, call_closure(cl$5, call_args$2, cl$5[4]));
return g;
}
catch(exn){
vm_cek_count[1]++;
vm_comp_cek_count[1]++;
return push(vm, cek_call_or_suspend(vm, f, [6, args]));
}
case 15:
var fn = f[2], result$1 = caml_call1(fn, args);
return push(vm, result$1);
case 24:
var cl$7 = f[1]; return push_closure_frame(vm, cl$7, args);
}
var
a = Sx_runtime[2].call(null, f),
b = Stdlib[28].call(null, "VM: not callable: ", a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
var
cst$1 = "",
cst_base = " (base=",
cst_at_ip = " at ip=",
cst_sp = " sp=",
cst$0 = ")\n",
cst = "?",
cst_VM_undefined = "VM undefined: ",
cst_VM_unknown_primitive = "VM: unknown primitive ",
cst_upvalue_count = "upvalue-count",
b = [6, 0],
n =
[0,
[11,
"[vm] WARN: bytecode exhausted without RETURN in ",
[2,
0,
[11,
cst_base,
[4,
0,
0,
0,
[11,
cst_sp,
[4, 0, 0, 0, [11, " frames=", [4, 0, 0, 0, [11, cst$0, [10, 0]]]]]]]]]],
"[vm] WARN: bytecode exhausted without RETURN in %s (base=%d sp=%d frames=%d)\n%!"],
o =
[0,
[11,
"VM: ",
[2,
0,
[11,
cst_at_ip,
[4,
0,
0,
0,
[11,
" op=",
[4,
0,
0,
0,
[11,
" in ",
[2,
0,
[11,
cst_base,
[4,
0,
0,
0,
[11,
cst_sp,
[4,
0,
0,
0,
[11,
" bc_len=",
[4, 0, 0, 0, [11, " consts=", [4, 0, 0, 0, [12, 41, 0]]]]]]]]]]]]]]]]],
"VM: %s at ip=%d op=%d in %s (base=%d sp=%d bc_len=%d consts=%d)"],
p =
[0,
[11,
"VM: unknown opcode ",
[4, 0, 0, 0, [11, cst_at_ip, [4, 0, 0, 0, 0]]]],
"VM: unknown opcode %d at ip=%d"],
q = [1, 0],
r =
[0,
[11,
"VM: CONST index ",
[4,
0,
0,
0,
[11, " out of bounds (pool size ", [4, 0, 0, 0, [12, 41, 0]]]]],
"VM: CONST index %d out of bounds (pool size %d)"],
s = [0, 1],
t = [0, 0],
u =
[0,
[11,
"VM: LOCAL_GET slot=",
[4,
0,
0,
0,
[11,
" base=",
[4, 0, 0, 0, [11, cst_sp, [4, 0, 0, 0, [11, " out of bounds", 0]]]]]]],
"VM: LOCAL_GET slot=%d base=%d sp=%d out of bounds"],
v =
[0,
[11,
"VM: UPVALUE_GET idx=",
[4, 0, 0, 0, [11, " out of bounds (have ", [4, 0, 0, 0, [12, 41, 0]]]]],
"VM: UPVALUE_GET idx=%d out of bounds (have %d)"],
w =
[0, [11, "Unhandled exception: ", [2, 0, 0]], "Unhandled exception: %s"],
x =
[0,
[11,
"VM: CLOSURE idx ",
[4, 0, 0, 0, [11, " >= consts ", [4, 0, 0, 0, 0]]]],
"VM: CLOSURE idx %d >= consts %d"],
y =
[0,
[2,
0,
[11,
' (in CALL_PRIM "',
[2, 0, [11, '" with ', [4, 0, 0, 0, [11, " args)", 0]]]]]],
'%s (in CALL_PRIM "%s" with %d args)'];
function run(vm){
for(;;){
if(0 === vm[3]) return 0;
var match = vm[3];
if(match){
var
rest_frames = match[2],
frame = match[1],
bc = frame[1][1][4],
consts = frame[1][1][5];
if(bc.length - 1 <= frame[2]){
var match$0 = frame[1][3];
if(match$0)
var n$0 = match$0[1], fn_name = n$0;
else
var fn_name = cst;
var
R = Stdlib_List[1].call(null, rest_frames),
S = vm[2],
T = frame[3];
caml_call4(Stdlib_Printf[3].call(null, n), fn_name, T, S, R);
var result = frame[3] < vm[2] ? pop(vm) : 0;
vm[3] = rest_frames;
vm[2] = frame[3];
if(0 !== rest_frames) push(vm, result);
}
else{
var
saved_ip = frame[2],
B = frame[2],
op = caml_check_bound(bc, B)[B + 1];
frame[2] = frame[2] + 1 | 0;
vm_insn_count[1]++;
var C = 0 === (vm_insn_count[1] & 65535);
if(C)
var D = 0 < Sx_ref[3][1], E = D ? Sx_ref[3][1] < vm_insn_count[1] : D;
else
var E = C;
if(E)
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "TIMEOUT: step limit exceeded"], 1);
try{
a:
{
if(66 <= op){
var switcher = op - 112 | 0;
if(63 >= switcher >>> 0){
var cst$0 = "-";
switch(switcher){
case 0:
var request = pop(vm);
throw caml_maybe_attach_backtrace
([0, VmSuspended, request, vm], 1);
case 16:
var
idx = read_u16(frame),
match$2 = caml_check_bound(consts, idx)[idx + 1];
if(typeof match$2 === "number" || ! (3 === match$2[0]))
var name = cst$1;
else
var s$0 = match$2[1], name = s$0;
var v$0 = peek(vm);
Stdlib_Hashtbl[11].call(null, vm[4], name, v$0);
var match$3 = Sx_types[23][1];
if(! match$3) break a;
var f = match$3[1];
caml_call2(f, name, v$0);
break a;
case 32:
var
count = read_u8(frame),
Z =
Stdlib_List[11].call
(null, count, function(param){return pop(vm);}),
parts = Stdlib_List[10].call(null, Z),
_ = Stdlib_List[20].call(null, Sx_runtime[2], parts),
s$1 = Stdlib_String[7].call(null, cst$1, _);
push(vm, [3, s$1]);
break a;
case 48:
var b$0 = pop(vm), a = pop(vm);
b:
{
if
(typeof a !== "number"
&& 2 === a[0] && typeof b$0 !== "number" && 2 === b$0[0]){
var y$0 = b$0[1], x$0 = a[1], F = [2, x$0 + y$0];
break b;
}
var
F =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "+"),
[0, a, [0, b$0, 0]]);
}
push(vm, F);
break a;
case 49:
var b$1 = pop(vm), a$0 = pop(vm);
b:
{
if
(typeof a$0 !== "number"
&& 2 === a$0[0] && typeof b$1 !== "number" && 2 === b$1[0]){
var y$1 = b$1[1], x$1 = a$0[1], G = [2, x$1 - y$1];
break b;
}
var
G =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], cst$0),
[0, a$0, [0, b$1, 0]]);
}
push(vm, G);
break a;
case 50:
var b$2 = pop(vm), a$1 = pop(vm);
b:
{
if
(typeof a$1 !== "number"
&& 2 === a$1[0] && typeof b$2 !== "number" && 2 === b$2[0]){
var y$2 = b$2[1], x$2 = a$1[1], H = [2, x$2 * y$2];
break b;
}
var
H =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "*"),
[0, a$1, [0, b$2, 0]]);
}
push(vm, H);
break a;
case 51:
var b$3 = pop(vm), a$2 = pop(vm);
b:
{
if
(typeof a$2 !== "number"
&& 2 === a$2[0] && typeof b$3 !== "number" && 2 === b$3[0]){
var y$3 = b$3[1], x$3 = a$2[1], I = [2, x$3 / y$3];
break b;
}
var
I =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "/"),
[0, a$2, [0, b$3, 0]]);
}
push(vm, I);
break a;
case 52:
var b$4 = pop(vm), a$3 = pop(vm);
push
(vm,
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "="),
[0, a$3, [0, b$4, 0]]));
break a;
case 53:
var b$5 = pop(vm), a$4 = pop(vm);
b:
{
if(typeof a$4 !== "number")
switch(a$4[0]){
case 2:
if(typeof b$5 !== "number" && 2 === b$5[0]){
var y$4 = b$5[1], x$4 = a$4[1], z = [0, x$4 < y$4 ? 1 : 0];
break b;
}
break;
case 3:
if(typeof b$5 !== "number" && 3 === b$5[0]){
var
y$5 = b$5[1],
x$5 = a$4[1],
z = [0, runtime.caml_string_lessthan(x$5, y$5)];
break b;
}
break;
}
var
z =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "<"),
[0, a$4, [0, b$5, 0]]);
}
push(vm, z);
break a;
case 54:
var b$6 = pop(vm), a$5 = pop(vm);
b:
{
if(typeof a$5 !== "number")
switch(a$5[0]){
case 2:
if(typeof b$6 !== "number" && 2 === b$6[0]){
var y$6 = b$6[1], x$6 = a$5[1], A = [0, y$6 < x$6 ? 1 : 0];
break b;
}
break;
case 3:
if(typeof b$6 !== "number" && 3 === b$6[0]){
var
y$7 = b$6[1],
x$7 = a$5[1],
A = [0, runtime.caml_string_greaterthan(x$7, y$7)];
break b;
}
break;
}
var
A =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], ">"),
[0, a$5, [0, b$6, 0]]);
}
push(vm, A);
break a;
case 55:
var v$1 = pop(vm);
push(vm, [0, 1 - Sx_types[67].call(null, v$1)]);
break a;
case 56:
var v$2 = pop(vm);
b:
{
c:
{
if(typeof v$2 !== "number"){
switch(v$2[0]){
case 3:
var s$2 = v$2[1], c = [1, caml_ml_string_length(s$2)];
break b;
case 6:
var l = v$2[1]; break;
case 7:
var d = v$2[1], c = [1, Stdlib_Hashtbl[15].call(null, d)];
break b;
case 21:
var l = v$2[1][1]; break;
default: break c;
}
var c = [1, Stdlib_List[1].call(null, l)];
break b;
}
if(0 === v$2){var c = q; break b;}
}
var
c =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "len"),
[0, v$2, 0]);
}
push(vm, c);
break a;
case 57:
var v$3 = pop(vm);
b:
{
c:
{
if(typeof v$3 === "number"){if(0 !== v$3) break c;}
else
switch(v$3[0]){
case 6:
var J = v$3[1]; if(J){var j = J[1]; break b;} break;
case 21:
var K = v$3[1][1]; if(K){var j = K[1]; break b;} break;
default: break c;
}
var j = 0;
break b;
}
var
j =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "first"),
[0, v$3, 0]);
}
push(vm, j);
break a;
case 58:
var v$4 = pop(vm);
b:
{
c:
{
if(typeof v$4 !== "number"){
switch(v$4[0]){
case 6:
var L = v$4[1];
if(! L){var g = b; break b;}
var xs = L[2];
break;
case 21:
var M = v$4[1][1];
if(! M){var g = b; break b;}
var xs = M[2];
break;
default: break c;
}
var g = [6, xs];
break b;
}
if(0 === v$4){var g = b; break b;}
}
var
g =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "rest"),
[0, v$4, 0]);
}
push(vm, g);
break a;
case 59:
var n$2 = pop(vm), coll = pop(vm);
b:
{
c:
if(typeof coll !== "number"){
switch(coll[0]){
case 3:
if(typeof n$2 === "number") break c;
if(2 !== n$2[0]) break c;
var f$0 = n$2[1], s$3 = coll[1], i = f$0 | 0;
if(0 <= i && i < caml_ml_string_length(s$3)){
var
$ = runtime.caml_string_get(s$3, i),
h = [3, Stdlib_String[1].call(null, 1, $)];
break b;
}
var h = 0;
break b;
case 6:
var l$0 = coll[1]; break;
case 21:
var l$0 = coll[1][1]; break;
default: break c;
}
if(typeof n$2 !== "number" && 2 === n$2[0]){
var f$1 = n$2[1];
try{
var aa = Stdlib_List[8].call(null, l$0, f$1 | 0), h = aa;
break b;
}
catch(exn){var h = 0; break b;}
}
}
var
h =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "nth"),
[0, coll, [0, n$2, 0]]);
}
push(vm, h);
break a;
case 60:
var coll$0 = pop(vm), x$8 = pop(vm);
b:
{
if(typeof coll$0 === "number"){
if(0 === coll$0){var m = [6, [0, x$8, 0]]; break b;}
}
else
switch(coll$0[0]){
case 6:
var l$1 = coll$0[1], m = [6, [0, x$8, l$1]]; break b;
case 21:
var l$2 = coll$0[1][1], m = [6, [0, x$8, l$2]]; break b;
}
var
m =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "cons"),
[0, x$8, [0, coll$0, 0]]);
}
push(vm, m);
break a;
case 61:
var v$5 = pop(vm);
b:
{
if(typeof v$5 !== "number" && 2 === v$5[0]){var x$9 = v$5[1], N = [2, - x$9]; break b;
}
var
N =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], cst$0),
[0, v$5, 0]);
}
push(vm, N);
break a;
case 62:
var v$6 = pop(vm);
b:
{
if(typeof v$6 !== "number" && 2 === v$6[0]){
var x$10 = v$6[1], O = [2, x$10 + 1.];
break b;
}
var
O =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "inc"),
[0, v$6, 0]);
}
push(vm, O);
break a;
case 63:
var v$7 = pop(vm);
b:
{
if(typeof v$7 !== "number" && 2 === v$7[0]){
var x$11 = v$7[1], P = [2, x$11 - 1.];
break b;
}
var
P =
caml_call1
(Stdlib_Hashtbl[6].call(null, Sx_primitives[1], "dec"),
[0, v$7, 0]);
}
push(vm, P);
break a;
}
}
}
else if(0 < op)
switch(op - 1 | 0){
case 0:
var idx$0 = read_u16(frame);
if(consts.length - 1 <= idx$0){
var
ab =
caml_call2
(Stdlib_Printf[4].call(null, r), idx$0, consts.length - 1);
throw caml_maybe_attach_backtrace([0, Sx_types[9], ab], 1);
}
push(vm, caml_check_bound(consts, idx$0)[idx$0 + 1]);
break a;
case 1:
push(vm, 0); break a;
case 2:
push(vm, s); break a;
case 3:
push(vm, t); break a;
case 4:
pop(vm); break a;
case 5:
push(vm, peek(vm)); break a;
case 6:
var a$6 = pop(vm), b$7 = pop(vm);
push(vm, a$6);
push(vm, b$7);
break a;
case 15:
var
slot = read_u8(frame),
match$4 = Stdlib_Hashtbl[7].call(null, frame[4], slot);
if(match$4)
var cell = match$4[1], v$8 = cell[1];
else{
var idx$1 = frame[3] + slot | 0;
if(vm[2] <= idx$1){
var
ac = vm[2],
ad = frame[3],
ae = caml_call3(Stdlib_Printf[4].call(null, u), slot, ad, ac);
throw caml_maybe_attach_backtrace([0, Sx_types[9], ae], 1);
}
var v$8 = caml_check_bound(vm[1], idx$1)[idx$1 + 1];
}
push(vm, v$8);
break a;
case 16:
var
slot$0 = read_u8(frame),
v$9 = peek(vm),
match$5 = Stdlib_Hashtbl[7].call(null, frame[4], slot$0);
if(match$5){var cell$0 = match$5[1]; cell$0[1] = v$9; break a;}
var Q = frame[3] + slot$0 | 0;
caml_check_bound(vm[1], Q)[Q + 1] = v$9;
break a;
case 17:
var idx$2 = read_u8(frame);
if(frame[1][2].length - 1 <= idx$2){
var
af = frame[1][2].length - 1,
ag = caml_call2(Stdlib_Printf[4].call(null, v), idx$2, af);
throw caml_maybe_attach_backtrace([0, Sx_types[9], ag], 1);
}
push(vm, caml_check_bound(frame[1][2], idx$2)[idx$2 + 1][1]);
break a;
case 18:
var idx$3 = read_u8(frame), ah = peek(vm);
caml_check_bound(frame[1][2], idx$3)[idx$3 + 1][1] = ah;
break a;
case 19:
var
idx$4 = read_u16(frame),
match$6 = caml_check_bound(consts, idx$4)[idx$4 + 1];
if(typeof match$6 === "number" || ! (3 === match$6[0]))
var name$0 = cst$1;
else
var s$4 = match$6[1], name$0 = s$4;
var id = Sx_types[4].call(null, name$0), match$7 = frame[1][5];
if(match$7){
var env = match$7[1], e = env;
for(;;)
try{
var
ai = [0, Stdlib_Hashtbl[6].call(null, e[1], id)],
found_in_env = ai;
break;
}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn$0, 0);
var match$8 = e[2];
if(! match$8){var found_in_env = 0; break;}
var p$0 = match$8[1];
e = p$0;
}
}
else
var found_in_env = 0;
if(found_in_env)
var v$10 = found_in_env[1], v$11 = v$10;
else
try{
var
an = Stdlib_Hashtbl[6].call(null, vm[4], name$0),
v$11 = an;
}
catch(exn){
var exn$1 = caml_wrap_exception(exn);
if(exn$1 !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn$1, 0);
try{var am = Sx_primitives[15].call(null, name$0), v$11 = am;}
catch(exn){
try{
var
resolve_fn =
Stdlib_Hashtbl[6].call(null, vm[4], "__resolve-symbol");
Sx_runtime[6].call(null, resolve_fn, [0, [3, name$0], 0]);
try{var al = Stdlib_Hashtbl[6].call(null, vm[4], name$0);}
catch(exn){
var exn$3 = caml_wrap_exception(exn);
if(exn$3 !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn$3, 0);
var ak = Stdlib[28].call(null, cst_VM_undefined, name$0);
throw caml_maybe_attach_backtrace([0, Sx_types[9], ak], 1);
}
var v$11 = al;
}
catch(exn){
var exn$2 = caml_wrap_exception(exn);
if(exn$2 !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn$2, 0);
var aj = Stdlib[28].call(null, cst_VM_undefined, name$0);
throw caml_maybe_attach_backtrace([0, Sx_types[9], aj], 1);
}
}
}
push(vm, v$11);
break a;
case 20:
var
idx$5 = read_u16(frame),
match$9 = caml_check_bound(consts, idx$5)[idx$5 + 1];
if(typeof match$9 === "number" || ! (3 === match$9[0]))
var name$1 = cst$1;
else
var s$5 = match$9[1], name$1 = s$5;
var match$10 = frame[1][5];
if(match$10){
var
env$0 = match$10[1],
id$0 = Sx_types[4].call(null, name$1),
e$0 = env$0;
for(;;){
if(Stdlib_Hashtbl[9].call(null, e$0[1], id$0)){
var ao = peek(vm);
Stdlib_Hashtbl[11].call(null, e$0[1], id$0, ao);
var written = 1;
break;
}
var match$11 = e$0[2];
if(! match$11){var written = 0; break;}
var p$1 = match$11[1];
e$0 = p$1;
}
}
else
var written = 0;
if(! (1 - written)) break a;
var v$12 = peek(vm);
Stdlib_Hashtbl[11].call(null, vm[4], name$1, v$12);
var match$12 = Sx_types[23][1];
if(! match$12) break a;
var f$2 = match$12[1];
caml_call2(f$2, name$1, v$12);
break a;
case 31:
var offset = read_i16(frame);
frame[2] = frame[2] + offset | 0;
break a;
case 32:
var offset$0 = read_i16(frame), v$13 = pop(vm);
if(! (1 - Sx_types[67].call(null, v$13))) break a;
frame[2] = frame[2] + offset$0 | 0;
break a;
case 33:
var offset$1 = read_i16(frame), v$14 = pop(vm);
if(! Sx_types[67].call(null, v$14)) break a;
frame[2] = frame[2] + offset$1 | 0;
break a;
case 34:
var
catch_offset = read_i16(frame),
ap = vm[2],
aq = Stdlib_List[1].call(null, vm[3]),
entry = [0, frame[2] + catch_offset | 0, aq, ap, frame];
vm[6] = [0, entry, vm[6]];
break a;
case 35:
var match$13 = vm[6];
if(! match$13) break a;
var rest = match$13[2];
vm[6] = rest;
break a;
case 36:
var exn_val = pop(vm), match$14 = vm[6];
if(! match$14){
var
as = Sx_runtime[2].call(null, exn_val),
at = caml_call1(Stdlib_Printf[4].call(null, w), as);
throw caml_maybe_attach_backtrace([0, Sx_types[9], at], 1);
}
var rest$0 = match$14[2], entry$0 = match$14[1];
vm[6] = rest$0;
for(;;){
var ar = entry$0[2];
if(ar >= Stdlib_List[1].call(null, vm[3])){
vm[2] = entry$0[3];
entry$0[4][2] = entry$0[1];
push(vm, exn_val);
break a;
}
var match$15 = vm[3];
if(match$15){var fs = match$15[2]; vm[3] = fs;}
}
break;
case 47:
var
argc = read_u8(frame),
args =
Stdlib_Array[1].call
(null, argc, function(param){return pop(vm);}),
f$3 = pop(vm),
au = Stdlib_Array[10].call(null, args),
args_list = Stdlib_List[10].call(null, au);
vm_call(vm, f$3, args_list);
break a;
case 48:
var
argc$0 = read_u8(frame),
args$0 =
Stdlib_Array[1].call
(null, argc$0, function(param){return pop(vm);}),
f$4 = pop(vm),
av = Stdlib_Array[10].call(null, args$0),
args_list$0 = Stdlib_List[10].call(null, av);
vm[3] = rest_frames;
vm[2] = frame[3];
vm_call(vm, f$4, args_list$0);
break a;
case 49:
var result$0 = pop(vm);
vm[3] = rest_frames;
vm[2] = frame[3];
push(vm, result$0);
break a;
case 50:
var idx$6 = read_u16(frame);
if(consts.length - 1 <= idx$6){
var
aw =
caml_call2
(Stdlib_Printf[4].call(null, x), idx$6, consts.length - 1);
throw caml_maybe_attach_backtrace([0, Sx_types[9], aw], 1);
}
var
code_val = caml_check_bound(consts, idx$6)[idx$6 + 1],
code = code_from_value(code_val);
b:
{
if(typeof code_val !== "number" && 7 === code_val[0]){
var
d$0 = code_val[1],
match$16 =
Stdlib_Hashtbl[7].call(null, d$0, cst_upvalue_count);
if(match$16){
var match$17 = match$16[1];
if(typeof match$17 !== "number" && 2 === match$17[0]){var n$3 = match$17[1], uv_count = n$3 | 0; break b;}
}
var uv_count = 0;
break b;
}
var uv_count = 0;
}
let frame$0 = frame;
var
upvalues =
Stdlib_Array[1].call
(null,
uv_count,
function(param){
var is_local = read_u8(frame$0), index = read_u8(frame$0);
if(1 !== is_local)
return caml_check_bound(frame$0[1][2], index)[index + 1];
var match = Stdlib_Hashtbl[7].call(null, frame$0[4], index);
if(match)
var existing = match[1], cell = existing;
else{
var
a = frame$0[3] + index | 0,
c = [0, caml_check_bound(vm[1], a)[a + 1]];
Stdlib_Hashtbl[11].call(null, frame$0[4], index, c);
var cell = c;
}
return cell;
}),
cl = [0, code, upvalues, 0, vm[4], frame[1][5]];
push(vm, [24, cl]);
break a;
case 51:
var
idx$7 = read_u16(frame),
argc$1 = read_u8(frame),
match$18 = caml_check_bound(consts, idx$7)[idx$7 + 1];
if(typeof match$18 === "number" || ! (3 === match$18[0]))
var name$2 = cst$1;
else
var s$6 = match$18[1], name$2 = s$6;
var
ax =
Stdlib_List[11].call
(null, argc$1, function(param){return pop(vm);}),
args$1 = Stdlib_List[10].call(null, ax),
args$2 =
Stdlib_List[20].call
(null,
function(v){
if(typeof v !== "number" && 12 === v[0])
return caml_call1(Sx_primitives[3][1], v);
return v;
},
args$1);
try{
try{
var
aB = Stdlib_Hashtbl[6].call(null, vm[4], name$2),
fn_val = aB;
}
catch(exn){
var exn$5 = caml_wrap_exception(exn);
if(exn$5 !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn$5, 0);
try{var aA = Sx_primitives[15].call(null, name$2), fn_val = aA;
}
catch(exn){
var
az = Stdlib[28].call(null, cst_VM_unknown_primitive, name$2);
throw caml_maybe_attach_backtrace([0, Sx_types[9], az], 1);
}
}
b:
{
if(typeof fn_val !== "number")
switch(fn_val[0]){
case 15:
var fn = fn_val[2], result$1 = caml_call1(fn, args$2);
break b;
case 8:
case 9:
case 10:
case 24:
var result$1 = Sx_ref[221].call(null, fn_val, [6, args$2]);
break b;
}
var result$1 = 0;
}
}
catch(exn){
var exn$4 = caml_wrap_exception(exn);
if(exn$4[1] !== Sx_types[9])
throw caml_maybe_attach_backtrace(exn$4, 0);
var
msg$0 = exn$4[2],
ay =
caml_call3
(Stdlib_Printf[4].call(null, y), msg$0, name$2, argc$1);
throw caml_maybe_attach_backtrace([0, Sx_types[9], ay], 1);
}
push(vm, result$1);
break a;
case 63:
var
count$0 = read_u16(frame),
aC =
Stdlib_List[11].call
(null, count$0, function(param){return pop(vm);}),
items = Stdlib_List[10].call(null, aC);
push(vm, [6, items]);
break a;
case 64:
var
count$1 = read_u16(frame),
d$1 = Stdlib_Hashtbl[1].call(null, 0, count$1);
if(count$1 >= 1){
var for$ = 1;
for(;;){
var v$15 = pop(vm), k = pop(vm);
b:
{
if(typeof k !== "number")
switch(k[0]){
case 3:
case 5:
var s$7 = k[1], key = s$7; break b;
}
var key = Sx_runtime[2].call(null, k);
}
Stdlib_Hashtbl[11].call(null, d$1, key, v$15);
var aD = for$ + 1 | 0;
if(count$1 === for$) break;
for$ = aD;
}
}
push(vm, [7, d$1]);
break a;
}
var
X = frame[2] - 1 | 0,
Y = caml_call2(Stdlib_Printf[4].call(null, p), op, X);
throw caml_maybe_attach_backtrace([0, Sx_types[9], Y], 1);
}
}
catch(exn$0){var exn = caml_wrap_exception(exn$0); break;}
}
}
}
if(exn[1] !== Stdlib[6]) throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2], match$1 = frame[1][3];
if(match$1)
var n$1 = match$1[1], fn_name$0 = n$1;
else
var fn_name$0 = cst;
var
U = vm[2],
V = frame[3],
W =
caml_call8
(Stdlib_Printf[4].call(null, o),
msg,
saved_ip,
op,
fn_name$0,
V,
U,
bc.length - 1,
consts.length - 1);
throw caml_maybe_attach_backtrace([0, Sx_types[9], W], 1);
}
var z = [3, cst_phase], A = [3, cst_request];
function resume_vm(vm, result){
var match = vm[5];
if(match){
var cek_state = match[1];
vm[5] = 0;
var
final = Sx_ref[158].call(null, cek_state, result),
match$0 = Sx_runtime[12].call(null, final, z);
if
(typeof match$0 !== "number"
&& 3 === match$0[0] && match$0[1] === cst_io_suspended){
vm[5] = [0, final];
throw caml_maybe_attach_backtrace
([0, VmSuspended, Sx_runtime[12].call(null, final, A), vm], 1);
}
push(vm, Sx_ref[18].call(null, final));
}
else
push(vm, result);
try{run(vm);}
catch(e$0){
var e = caml_wrap_exception(e$0);
if(e[1] === VmSuspended) throw caml_maybe_attach_backtrace(e, 0);
if(e[1] !== Sx_types[9]) throw caml_maybe_attach_backtrace(e, 0);
var msg = e[2], match$1 = vm[6];
if(! match$1)
throw caml_maybe_attach_backtrace([0, Sx_types[9], msg], 1);
var rest = match$1[2], entry = match$1[1];
vm[6] = rest;
for(;;){
var a = entry[2];
if(a >= Stdlib_List[1].call(null, vm[3])){
vm[2] = entry[3];
entry[4][2] = entry[1];
push(vm, [3, msg]);
run(vm);
break;
}
var match$2 = vm[3];
if(match$2){var fs = match$2[2]; vm[3] = fs;}
}
}
vm[7] = 0;
function restore_reuse(pending){
if(! pending) return;
var
rest = pending[2],
saved_frames = pending[1][1],
callback_result = pop(vm);
vm[3] = saved_frames;
push(vm, callback_result);
try{
run(vm);
var new_pending = Stdlib_List[10].call(null, vm[7]);
vm[7] = 0;
restore_reuse(Stdlib[37].call(null, new_pending, rest));
return;
}
catch(e$0){
var e = caml_wrap_exception(e$0);
if(e[1] !== VmSuspended) throw caml_maybe_attach_backtrace(e, 0);
var a = vm[7], b = Stdlib_List[10].call(null, rest);
vm[7] = Stdlib[37].call(null, b, a);
throw caml_maybe_attach_backtrace(e, 0);
}
}
var pending = Stdlib_List[10].call(null, vm[7]);
vm[7] = 0;
restore_reuse(pending);
return pop(vm);
}
var B = [0, "module"];
function execute_module(code, globals){
var
cl = [0, code, [0], B, globals, 0],
vm = create(globals),
frame = [0, cl, 0, 0, Stdlib_Hashtbl[1].call(null, 0, 4)],
a = code[3] - 1 | 0;
if(a >= 0){
var for$ = 0;
for(;;){
push(vm, 0);
var b = for$ + 1 | 0;
if(a === for$) break;
for$ = b;
}
}
vm[3] = [0, frame, 0];
run(vm);
return pop(vm);
}
function execute_module_safe(code, globals){
try{var result = execute_module(code, globals); return [0, result];}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== VmSuspended) throw caml_maybe_attach_backtrace(exn, 0);
var vm = exn[3], request = exn[2];
return [1, [0, request, vm]];
}
}
function jit_is_broken_name(n){
var b = n === "parse-bind" ? 1 : 0;
if(b)
var a = b;
else{
var c = n === "seq" ? 1 : 0;
if(c)
var a = c;
else{
var d = n === "seq2" ? 1 : 0;
if(d)
var a = d;
else{
var e = n === "many" ? 1 : 0;
if(e)
var a = e;
else{
var f = n === "many1" ? 1 : 0;
if(f)
var a = f;
else{
var g = n === "satisfy" ? 1 : 0;
if(g)
var a = g;
else{
var h = n === "fmap" ? 1 : 0;
if(h)
var a = h;
else{
var i = n === "alt" ? 1 : 0;
if(i)
var a = i;
else{
var j = n === "alt2" ? 1 : 0;
if(j)
var a = j;
else{
var k = n === "skip-left" ? 1 : 0;
if(k)
var a = k;
else{
var l = n === "skip-right" ? 1 : 0;
if(l)
var a = l;
else{
var m = n === "skip-many" ? 1 : 0;
if(m)
var a = m;
else{
var o = n === "optional" ? 1 : 0;
if(o)
var a = o;
else{
var p = n === "between" ? 1 : 0;
if(p)
var a = p;
else{
var q = n === "sep-by" ? 1 : 0;
if(q)
var a = q;
else{
var r = n === "sep-by1" ? 1 : 0;
if(r)
var a = r;
else{
var s = n === "parse-char" ? 1 : 0;
if(s)
var a = s;
else{
var t = n === "parse-string" ? 1 : 0;
if(t)
var a = t;
else{
var u = n === "lazy-parser" ? 1 : 0;
if(u)
var a = u;
else{
var v = n === "label" ? 1 : 0;
if(v)
var a = v;
else{
var w = n === "not-followed-by" ? 1 : 0;
if(w)
var a = w;
else{
var x = n === "look-ahead" ? 1 : 0;
if(x)
var a = x;
else{
var y = n === "hs-tokenize" ? 1 : 0;
if(y)
var a = y;
else{
var z = n === "hs-parse" ? 1 : 0;
if(z)
var a = z;
else{
var A = n === "hs-compile" ? 1 : 0;
if(A)
var a = A;
else{
var B = n === "hs-to-sx" ? 1 : 0;
if(B)
var a = B;
else{
var C = n === "hs-to-sx-from-source" ? 1 : 0;
if(C)
var a = C;
else{
var D = n === "eval-hs" ? 1 : 0;
if(D)
var a = D;
else{
var E = n === "eval-hs-inner" ? 1 : 0;
if(E)
var a = E;
else{
var F = n === "eval-hs-with-me" ? 1 : 0;
if(F)
var a = F;
else{
var G = n === "run-hs-fixture" ? 1 : 0;
if(G)
var a = G;
else{
var H = n === "tw-resolve-style" ? 1 : 0;
if(H)
var a = H;
else{
var I = n === "tw-resolve-layout" ? 1 : 0;
if(I)
var a = I;
else{
var J = n === "gql-ws?" ? 1 : 0;
if(J)
var a = J;
else{
var K = n === "gql-parse-tokens" ? 1 : 0;
if(K)
var a = K;
else{
var L = n === "gql-execute-operation" ? 1 : 0;
if(L)
var a = L;
else{
var M = n === "hs-repeat-times" ? 1 : 0;
if(M)
var a = M;
else{
var N = n === "hs-repeat-forever" ? 1 : 0;
if(N)
var a = N;
else{
var O = n === "hs-repeat-while" ? 1 : 0;
if(O)
var a = O;
else{
var P = n === "hs-repeat-until" ? 1 : 0;
if(P)
var a = P;
else
var
Q = n === "hs-for-each" ? 1 : 0,
a = Q || (n === "hs-put!" ? 1 : 0);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return a;
}
var
cst_jit_FAIL = "[jit] FAIL ",
jit_compiling = [0, 0],
C =
[0,
[11, cst_jit_FAIL, [2, 0, [11, cst$2, [2, 0, [12, 10, [10, 0]]]]]],
"[jit] FAIL %s: %s\n%!"],
D = [4, cst_fn],
E = [4, cst_quote],
F = [4, cst_compile],
G =
[0,
[11,
cst_jit_FAIL,
[2, 0, [11, ": compiler returned ", [2, 0, [12, 10, [10, 0]]]]]],
"[jit] FAIL %s: compiler returned %s\n%!"],
H =
[0,
[11,
cst_jit_FAIL,
[2,
0,
[11,
": closure index ",
[4,
0,
0,
0,
[11, " out of bounds (pool=", [4, 0, 0, 0, [11, cst$0, [10, 0]]]]]]]],
"[jit] FAIL %s: closure index %d out of bounds (pool=%d)\n%!"],
I =
[0,
[11,
"[jit] SKIP ",
[2,
0,
[11,
": non-closure execution failed (bc[0]=",
[4, 0, 0, 0, [11, ", len=", [4, 0, 0, 0, [11, cst$0, [10, 0]]]]]]]],
"[jit] SKIP %s: non-closure execution failed (bc[0]=%d, len=%d)\n%!"],
J =
[0,
[11,
"[jit] RESOLVED ",
[2,
0,
[11,
cst$2,
[2, 0, [11, " (bc[0]=", [4, 0, 0, 0, [11, cst$0, [10, 0]]]]]]]],
"[jit] RESOLVED %s: %s (bc[0]=%d)\n%!"];
function jit_compile_lambda(l, globals){
var match = l[4];
if(match) var n = match[1], fn_name = n; else var fn_name = "<anon>";
if(jit_compiling[1]) return 0;
if
(!
Stdlib_List[37].call(null, "&key", l[1])
&& ! Stdlib_List[37].call(null, ":as", l[1])){
if(0 !== l[4] && 0 === l[3][2]){
if(jit_is_broken_name(fn_name)) return 0;
try{
jit_compiling[1] = 1;
try{
var compile_fn = Stdlib_Hashtbl[6].call(null, globals, cst_compile);
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn !== Stdlib[8]) throw caml_maybe_attach_backtrace(exn, 0);
jit_compiling[1] = 0;
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_JIT_compiler_not_loaded], 1);
}
var
param_syms =
[6, Stdlib_List[20].call(null, function(s){return [4, s];}, l[1])],
fn_expr = [6, [0, D, [0, param_syms, [0, l[2], 0]]]];
a:
{
if(typeof compile_fn !== "number" && 8 === compile_fn[0]){
var match$1 = compile_fn[1][5];
if(match$1){
var cl = match$1[1];
if(! is_jit_failed(cl)){
var result = call_closure(cl, [0, fn_expr, 0], globals);
break a;
}
}
}
var
c = Sx_types[20].call(null, 0),
compile_env = Sx_types[21].call(null, c);
Stdlib_Hashtbl[12].call
(null,
function(k, v){
var a = Sx_types[4].call(null, k);
return Stdlib_Hashtbl[11].call(null, compile_env[1], a, v);
},
globals);
var
result =
Sx_ref[241].call
(null,
[6, [0, F, [0, [6, [0, E, [0, fn_expr, 0]]], 0]]],
[20, compile_env]);
}
jit_compiling[1] = 0;
if(0 < Stdlib_Hashtbl[15].call(null, l[3][1])){
var
merged = Stdlib_Hashtbl[4].call(null, globals),
env$1 = l[3],
env = env$1;
for(;;){
Stdlib_Hashtbl[12].call
(null,
function(id, v){
var
name = Sx_types[5].call(null, id),
a = 1 - Stdlib_Hashtbl[9].call(null, merged, name);
return a ? Stdlib_Hashtbl[11].call(null, merged, name, v) : a;
},
env[1]);
var match$0 = env[2];
if(! match$0){var effective_globals = merged; break;}
var env$0 = match$0[1];
env = env$0;
}
}
else
var effective_globals = globals;
a:
{
b:
if(typeof result !== "number" && 7 === result[0]){
var d = result[1];
if
(!
Stdlib_Hashtbl[9].call(null, d, cst_bytecode)
&& ! Stdlib_Hashtbl[9].call(null, d, cst_vc_bytecode))
break b;
var outer_code = code_from_value(result), bc = outer_code[4];
if(4 <= bc.length - 1 && 51 === caml_check_bound(bc, 0)[1]){
var
g = caml_check_bound(bc, 2)[3] << 8,
idx = caml_check_bound(bc, 1)[2] | g;
if(idx < outer_code[5].length - 1){
var
inner_val = caml_check_bound(outer_code[5], idx)[idx + 1],
code = code_from_value(inner_val),
a = [0, [0, code, [0], l[4], effective_globals, [0, l[3]]]];
break a;
}
var h = outer_code[5].length - 1;
caml_call3(Stdlib_Printf[3].call(null, H), fn_name, idx, h);
var a = 0;
break a;
}
try{
var
value = execute_module(outer_code, globals),
k = 0 < bc.length - 1 ? caml_check_bound(bc, 0)[1] : -1,
m = Sx_types[57].call(null, value);
caml_call3(Stdlib_Printf[3].call(null, J), fn_name, m, k);
var a = 0;
break a;
}
catch(exn){
var
i = bc.length - 1,
j = 0 < bc.length - 1 ? caml_check_bound(bc, 0)[1] : -1;
caml_call3(Stdlib_Printf[3].call(null, I), fn_name, j, i);
var a = 0;
break a;
}
}
var f = Sx_types[57].call(null, result);
caml_call2(Stdlib_Printf[3].call(null, G), fn_name, f);
var a = 0;
}
return a;
}
catch(e$0){
var e = caml_wrap_exception(e$0);
jit_compiling[1] = 0;
var b = Stdlib_Printexc[1].call(null, e);
caml_call2(Stdlib_Printf[3].call(null, C), fn_name, b);
return 0;
}
}
return 0;
}
return 0;
}
jit_compile_ref[1] = jit_compile_lambda;
Sx_types[6][1] = function(cl, args){return call_closure_reuse(cl, args);};
var K = [0, 1];
Sx_types[16][1] =
function(exn){
if(exn[1] !== VmSuspended) return 0;
var
vm = exn[3],
request = exn[2],
saved_cek = vm[5],
saved_reuse = vm[7],
d = Stdlib_Hashtbl[1].call(null, 0, 3);
Stdlib_Hashtbl[11].call(null, d, "__vm_suspended", K);
Stdlib_Hashtbl[11].call(null, d, cst_request, request);
Stdlib_Hashtbl[11].call
(null,
d,
"resume",
[15,
"vm-resume",
function(args){
if(args && ! args[2]){
var result = args[1];
vm[5] = saved_cek;
vm[7] = saved_reuse;
try{var a = resume_vm(vm, result); return a;}
catch(exn2$0){
var
exn2 = caml_wrap_exception(exn2$0),
match = caml_call1(Sx_types[16][1], exn2);
if(! match) throw caml_maybe_attach_backtrace(exn2, 0);
var marker = match[1];
return marker;
}
}
return 0;
}]);
return [0, [7, d]];
};
Sx_types[13][1] =
[0,
function(suspended_state){
var
request = Sx_ref[17].call(null, suspended_state),
vm = create(Sx_types[14][1]);
vm[5] = [0, suspended_state];
var match = active_vm[1];
if(match){
var active = match[1];
if(0 !== active[7]){vm[7] = active[7]; active[7] = 0;}
}
throw caml_maybe_attach_backtrace([0, VmSuspended, request, vm], 1);
}];
var L = [6, 0], M = [3, cst_phase], N = [3, cst_request];
Sx_types[8][1] =
function(f, args){
var
a = [20, Sx_types[20].call(null, 0)],
state = Sx_ref[236].call(null, f, [6, args], a, [6, args], L),
final = Sx_ref[156].call(null, state),
match = Sx_runtime[12].call(null, final, M);
if
(typeof match !== "number"
&& 3 === match[0] && match[1] === cst_io_suspended){
var vm = create(Stdlib_Hashtbl[1].call(null, 0, 0));
vm[5] = [0, final];
var match$0 = active_vm[1];
if(match$0){
var active = match$0[1];
if(0 !== active[7]){vm[7] = active[7]; active[7] = 0;}
}
throw caml_maybe_attach_backtrace
([0, VmSuspended, Sx_runtime[12].call(null, final, N), vm], 1);
}
return Sx_ref[18].call(null, final);
};
var O = [0, [11, "UNKNOWN_", [4, 0, 0, 0, 0]], "UNKNOWN_%d"];
function opcode_name(n){
if(66 <= n){
var switcher = n - 128 | 0;
if(47 >= switcher >>> 0)
switch(switcher){
case 0:
return "DEFINE";
case 16:
return "STR_CONCAT";
case 32:
return "ADD";
case 33:
return "SUB";
case 34:
return "MUL";
case 35:
return "DIV";
case 36:
return "EQ";
case 37:
return "LT";
case 38:
return "GT";
case 39:
return "NOT";
case 40:
return "LEN";
case 41:
return "FIRST";
case 42:
return "REST";
case 43:
return "NTH";
case 44:
return "CONS";
case 45:
return "NEG";
case 46:
return "INC";
case 47:
return "DEC";
}
}
else if(0 < n)
switch(n - 1 | 0){
case 0:
return "CONST";
case 1:
return "NIL";
case 2:
return "TRUE";
case 3:
return "FALSE";
case 4:
return "POP";
case 5:
return "DUP";
case 6:
return "SWAP";
case 15:
return "LOCAL_GET";
case 16:
return "LOCAL_SET";
case 17:
return "UPVALUE_GET";
case 18:
return "UPVALUE_SET";
case 19:
return "GLOBAL_GET";
case 20:
return "GLOBAL_SET";
case 31:
return "JUMP";
case 32:
return "JUMP_IF_FALSE";
case 33:
return "JUMP_IF_TRUE";
case 34:
return "PUSH_HANDLER";
case 35:
return "POP_HANDLER";
case 36:
return "RAISE";
case 47:
return "CALL";
case 48:
return "TAIL_CALL";
case 49:
return "RETURN";
case 50:
return "CLOSURE";
case 51:
return "CALL_PRIM";
case 63:
return "LIST";
case 64:
return "DICT";
}
return caml_call1(Stdlib_Printf[4].call(null, O), n);
}
function opcode_operand_size(param){
a:
{
b:
{
if(36 <= param){
if(128 !== param){
if(66 <= param){if(144 === param) break b; break a;}
if(48 > param) break a;
switch(param - 48 | 0){
case 3:
return 2;
case 4:
return 3;
case 16:
case 17: break;
case 0:
case 1:
break b;
default: break a;
}
}
}
else if(16 <= param){
if(22 <= param){if(32 <= param) return 2; break a;}
if(20 > param) break b;
}
else if(1 !== param) break a;
return 2;
}
return 1;
}
return 0;
}
var
cst_opcode = "opcode",
S = [0, 0],
T = [0, 0],
c = [2, 0.],
a = [6, 0],
P = [4, "do"],
Q = [4, cst_quote],
R = [0, "trace"],
U = [0, 1],
V = [0, 0];
function trace_run(src, globals){
try{var compile_fn = Stdlib_Hashtbl[6].call(null, globals, cst_compile);}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn === Stdlib[8])
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "trace: compiler not loaded"], 1);
throw caml_maybe_attach_backtrace(exn, 0);
}
var exprs = Sx_parser[17].call(null, src);
a:
{
if(exprs && ! exprs[2]){var e = exprs[1], expr = e; break a;}
var expr = [6, [0, P, exprs]];
}
var
quoted = [6, [0, Q, [0, expr, 0]]],
K = [20, Sx_types[20].call(null, 0)],
code_val =
Sx_ref[241].call(null, [6, [0, compile_fn, [0, quoted, 0]]], K),
code = code_from_value(code_val),
cl = [0, code, [0], R, globals, 0],
vm = create(globals),
frame0 = [0, cl, 0, 0, Stdlib_Hashtbl[1].call(null, 0, 4)],
m = code[3] - 1 | 0;
if(m >= 0){
var for$0 = 0;
for(;;){
push(vm, 0);
var ao = for$0 + 1 | 0;
if(m === for$0) break;
for$0 = ao;
}
}
vm[3] = [0, frame0, 0];
var trace = [0, 0];
try{
var steps = [0, 0];
for(;;){
if(0 !== vm[3] && steps[1] < 10000){
var match = vm[3];
if(! match) continue;
var frame = match[1], bc = frame[1][1][4];
if(bc.length - 1 <= frame[2]){vm[3] = 0; continue;}
var
o = frame[2],
op = caml_check_bound(bc, o)[o + 1],
L = Stdlib[16].call(null, 5, vm[2]),
stack_snap =
Stdlib_List[11].call
(null,
L,
function(i){
var
a = (vm[2] - 1 | 0) - i | 0,
v = caml_check_bound(vm[1], a)[a + 1];
return [3, Sx_types[112].call(null, v)];
}),
entry = Stdlib_Hashtbl[1].call(null, 0, 4),
M = [3, opcode_name(op)];
Stdlib_Hashtbl[11].call(null, entry, cst_opcode, M);
Stdlib_Hashtbl[11].call(null, entry, "stack", [6, stack_snap]);
var N = [2, Stdlib_List[1].call(null, vm[3])];
Stdlib_Hashtbl[11].call(null, entry, "depth", N);
trace[1] = [0, [7, entry], trace[1]];
steps[1]++;
frame[2] = frame[2] + 1 | 0;
var rest_frames = Stdlib_List[7].call(null, vm[3]);
try{
if(66 <= op){
var switcher = op - 128 | 0;
if(47 >= switcher >>> 0)
switch(switcher){
case 0:
var
idx = read_u16(frame),
match$0 = caml_check_bound(frame[1][1][5], idx)[idx + 1];
if(typeof match$0 === "number" || ! (3 === match$0[0]))
var name = cst$1;
else
var s = match$0[1], name = s;
var O = peek(vm);
Stdlib_Hashtbl[11].call(null, vm[4], name, O);
break;
case 16:
var
count = read_u8(frame),
W =
Stdlib_List[11].call
(null, count, function(param){return pop(vm);}),
parts = Stdlib_List[10].call(null, W),
X = Stdlib_List[20].call(null, Sx_runtime[2], parts);
push(vm, [3, Stdlib_String[7].call(null, cst$1, X)]);
break;
case 32:
var b = pop(vm), a$0 = pop(vm);
a:
{
if
(typeof a$0 !== "number"
&& 2 === a$0[0] && typeof b !== "number" && 2 === b[0]){var y = b[1], x = a$0[1], p = [2, x + y]; break a;}
var p = 0;
}
push(vm, p);
break;
case 33:
var b$0 = pop(vm), a$1 = pop(vm);
a:
{
if
(typeof a$1 !== "number"
&& 2 === a$1[0] && typeof b$0 !== "number" && 2 === b$0[0]){
var y$0 = b$0[1], x$0 = a$1[1], q = [2, x$0 - y$0];
break a;
}
var q = 0;
}
push(vm, q);
break;
case 34:
var b$1 = pop(vm), a$2 = pop(vm);
a:
{
if
(typeof a$2 !== "number"
&& 2 === a$2[0] && typeof b$1 !== "number" && 2 === b$1[0]){
var y$1 = b$1[1], x$1 = a$2[1], t = [2, x$1 * y$1];
break a;
}
var t = 0;
}
push(vm, t);
break;
case 35:
var b$2 = pop(vm), a$3 = pop(vm);
a:
{
if
(typeof a$3 !== "number"
&& 2 === a$3[0] && typeof b$2 !== "number" && 2 === b$2[0]){
var y$2 = b$2[1], x$2 = a$3[1], u = [2, x$2 / y$2];
break a;
}
var u = 0;
}
push(vm, u);
break;
case 36:
var b$3 = pop(vm), a$4 = pop(vm);
push(vm, [0, runtime.caml_equal(a$4, b$3)]);
break;
case 37:
var b$4 = pop(vm), a$5 = pop(vm);
if
(typeof a$5 === "number"
||
!
(2 === a$5[0]
&& ! (typeof b$4 === "number" || ! (2 === b$4[0]))))
var w = S;
else
var y$3 = b$4[1], x$3 = a$5[1], w = [0, x$3 < y$3 ? 1 : 0];
push(vm, w);
break;
case 38:
var b$5 = pop(vm), a$6 = pop(vm);
if
(typeof a$6 === "number"
||
!
(2 === a$6[0]
&& ! (typeof b$5 === "number" || ! (2 === b$5[0]))))
var z = T;
else
var y$4 = b$5[1], x$4 = a$6[1], z = [0, y$4 < x$4 ? 1 : 0];
push(vm, z);
break;
case 39:
var v = pop(vm);
push(vm, [0, 1 - Sx_types[67].call(null, v)]);
break;
case 40:
var v$0 = pop(vm);
a:
if(typeof v$0 === "number")
var h = c;
else{
switch(v$0[0]){
case 3:
var s$0 = v$0[1], h = [2, caml_ml_string_length(s$0)];
break a;
case 6:
var l = v$0[1]; break;
case 21:
var l = v$0[1][1]; break;
default: var h = c; break a;
}
var h = [2, Stdlib_List[1].call(null, l)];
}
push(vm, h);
break;
case 41:
var v$1 = pop(vm);
a:
{
if(typeof v$1 !== "number")
switch(v$1[0]){
case 6:
var A = v$1[1]; if(A){var i = A[1]; break a;} break;
case 21:
var B = v$1[1][1]; if(B){var i = B[1]; break a;} break;
}
var i = 0;
}
push(vm, i);
break;
case 42:
var v$2 = pop(vm);
a:
if(typeof v$2 === "number")
var g = a;
else{
switch(v$2[0]){
case 6:
var C = v$2[1];
if(! C){var g = a; break a;}
var xs = C[2];
break;
case 21:
var D = v$2[1][1];
if(! D){var g = a; break a;}
var xs = D[2];
break;
default: var g = a; break a;
}
var g = [6, xs];
}
push(vm, g);
break;
case 43:
var n = pop(vm), coll = pop(vm);
a:
{
b:
if(typeof coll !== "number"){
switch(coll[0]){
case 6:
var l$0 = coll[1]; break;
case 21:
var l$0 = coll[1][1]; break;
default: break b;
}
if(typeof n !== "number" && 2 === n[0]){
var f = n[1];
try{
var Y = Stdlib_List[8].call(null, l$0, f | 0), j = Y;
break a;
}
catch(exn){var j = 0; break a;}
}
}
var j = 0;
}
push(vm, j);
break;
case 44:
var coll$0 = pop(vm), x$5 = pop(vm);
a:
{
if(typeof coll$0 !== "number" && 6 === coll$0[0]){
var l$1 = coll$0[1], E = [6, [0, x$5, l$1]];
break a;
}
var E = [6, [0, x$5, 0]];
}
push(vm, E);
break;
case 45:
var v$3 = pop(vm);
a:
{
if(typeof v$3 !== "number" && 2 === v$3[0]){var x$6 = v$3[1], F = [2, - x$6]; break a;
}
var F = 0;
}
push(vm, F);
break;
case 46:
var v$4 = pop(vm);
a:
{
if(typeof v$4 !== "number" && 2 === v$4[0]){
var x$7 = v$4[1], G = [2, x$7 + 1.];
break a;
}
var G = 0;
}
push(vm, G);
break;
case 47:
var v$5 = pop(vm);
a:
{
if(typeof v$5 !== "number" && 2 === v$5[0]){
var x$8 = v$5[1], H = [2, x$8 - 1.];
break a;
}
var H = 0;
}
push(vm, H);
break;
}
}
else if(0 < op)
switch(op - 1 | 0){
case 0:
var idx$0 = read_u16(frame);
push(vm, caml_check_bound(frame[1][1][5], idx$0)[idx$0 + 1]);
break;
case 1:
push(vm, 0); break;
case 2:
push(vm, U); break;
case 3:
push(vm, V); break;
case 4:
pop(vm); break;
case 5:
push(vm, peek(vm)); break;
case 6:
var a$7 = pop(vm), b$6 = pop(vm);
push(vm, a$7);
push(vm, b$6);
break;
case 15:
var
slot = read_u8(frame),
match$1 = Stdlib_Hashtbl[7].call(null, frame[4], slot);
if(match$1)
var cell = match$1[1], v$6 = cell[1];
else
var
I = frame[3] + slot | 0,
v$6 = caml_check_bound(vm[1], I)[I + 1];
push(vm, v$6);
break;
case 16:
var
slot$0 = read_u8(frame),
v$7 = peek(vm),
match$2 = Stdlib_Hashtbl[7].call(null, frame[4], slot$0);
if(match$2){
var cell$0 = match$2[1];
cell$0[1] = v$7;
}
else{
var J = frame[3] + slot$0 | 0;
caml_check_bound(vm[1], J)[J + 1] = v$7;
}
break;
case 17:
var idx$1 = read_u8(frame);
push(vm, caml_check_bound(frame[1][2], idx$1)[idx$1 + 1][1]);
break;
case 18:
var idx$2 = read_u8(frame), Z = peek(vm);
caml_check_bound(frame[1][2], idx$2)[idx$2 + 1][1] = Z;
break;
case 19:
var
idx$3 = read_u16(frame),
match$3 = caml_check_bound(frame[1][1][5], idx$3)[idx$3 + 1];
if(typeof match$3 === "number" || ! (3 === match$3[0]))
var name$0 = cst$1;
else
var s$1 = match$3[1], name$0 = s$1;
try{
var aa = Stdlib_Hashtbl[6].call(null, vm[4], name$0), v$8 = aa;
}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0 !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn$0, 0);
try{var $ = Sx_primitives[15].call(null, name$0), v$8 = $;}
catch(exn){
var _ = Stdlib[28].call(null, cst_VM_undefined, name$0);
throw caml_maybe_attach_backtrace([0, Sx_types[9], _], 1);
}
}
push(vm, v$8);
break;
case 20:
var
idx$4 = read_u16(frame),
match$4 = caml_check_bound(frame[1][1][5], idx$4)[idx$4 + 1];
if(typeof match$4 === "number" || ! (3 === match$4[0]))
var name$1 = cst$1;
else
var s$2 = match$4[1], name$1 = s$2;
var ab = peek(vm);
Stdlib_Hashtbl[11].call(null, vm[4], name$1, ab);
break;
case 31:
var offset = read_i16(frame);
frame[2] = frame[2] + offset | 0;
break;
case 32:
var offset$0 = read_i16(frame), v$9 = pop(vm);
if(1 - Sx_types[67].call(null, v$9))
frame[2] = frame[2] + offset$0 | 0;
break;
case 33:
var offset$1 = read_i16(frame), v$10 = pop(vm);
if(Sx_types[67].call(null, v$10))
frame[2] = frame[2] + offset$1 | 0;
break;
case 34:
var
catch_offset = read_i16(frame),
ac = vm[6],
ad = vm[2],
ae = Stdlib_List[1].call(null, vm[3]);
vm[6] = [0, [0, frame[2] + catch_offset | 0, ae, ad, frame], ac];
break;
case 35:
var match$5 = vm[6];
if(match$5){var r = match$5[2]; vm[6] = r;}
break;
case 36:
var exn_val = pop(vm), match$6 = vm[6];
if(match$6){
var rest = match$6[2], entry$0 = match$6[1];
vm[6] = rest;
for(;;){
var af = entry$0[2];
if(af >= Stdlib_List[1].call(null, vm[3])){
vm[2] = entry$0[3];
entry$0[4][2] = entry$0[1];
push(vm, exn_val);
break;
}
var match$7 = vm[3];
if(match$7){var fs = match$7[2]; vm[3] = fs;}
}
}
else
vm[3] = 0;
break;
case 47:
var
argc = read_u8(frame),
args =
Stdlib_Array[1].call
(null, argc, function(param){return pop(vm);}),
f$0 = pop(vm),
ag = Stdlib_Array[10].call(null, args);
vm_call(vm, f$0, Stdlib_List[10].call(null, ag));
break;
case 48:
var
argc$0 = read_u8(frame),
args$0 =
Stdlib_Array[1].call
(null, argc$0, function(param){return pop(vm);}),
f$1 = pop(vm);
vm[3] = rest_frames;
vm[2] = frame[3];
var ah = Stdlib_Array[10].call(null, args$0);
vm_call(vm, f$1, Stdlib_List[10].call(null, ah));
break;
case 49:
var result = pop(vm);
vm[3] = rest_frames;
vm[2] = frame[3];
push(vm, result);
break;
case 50:
var
idx$5 = read_u16(frame),
code_val2 = caml_check_bound(frame[1][1][5], idx$5)[idx$5 + 1];
a:
{
if(typeof code_val2 !== "number" && 7 === code_val2[0]){
var
d = code_val2[1],
match$8 = Stdlib_Hashtbl[7].call(null, d, cst_upvalue_count);
if(match$8){
var match$9 = match$8[1];
if(typeof match$9 !== "number" && 2 === match$9[0]){var n$0 = match$9[1], uv_count = n$0 | 0; break a;
}
}
var uv_count = 0;
break a;
}
var uv_count = 0;
}
let frame$0 = frame;
var
upvalues =
Stdlib_Array[1].call
(null,
uv_count,
function(param){
var is_local = read_u8(frame$0), index = read_u8(frame$0);
if(1 !== is_local)
return caml_check_bound(frame$0[1][2], index)[index + 1];
var match = Stdlib_Hashtbl[7].call(null, frame$0[4], index);
if(match)
var existing = match[1], cell = existing;
else{
var
a = frame$0[3] + index | 0,
c = [0, caml_check_bound(vm[1], a)[a + 1]];
Stdlib_Hashtbl[11].call(null, frame$0[4], index, c);
var cell = c;
}
return cell;
}),
inner_code = code_from_value(code_val2),
c$0 = [0, inner_code, upvalues, 0, vm[4], frame[1][5]];
push(vm, [24, c$0]);
break;
case 51:
var
idx$6 = read_u16(frame),
argc$1 = read_u8(frame),
match$10 = caml_check_bound(frame[1][1][5], idx$6)[idx$6 + 1];
if(typeof match$10 === "number" || ! (3 === match$10[0]))
var name$2 = cst$1;
else
var s$3 = match$10[1], name$2 = s$3;
var
ai =
Stdlib_List[11].call
(null, argc$1, function(param){return pop(vm);}),
args$1 = Stdlib_List[10].call(null, ai);
try{var al = Sx_primitives[15].call(null, name$2), fn_val = al;}
catch(exn){
try{
var
ak = Stdlib_Hashtbl[6].call(null, vm[4], name$2),
fn_val = ak;
}
catch(exn){
var exn$1 = caml_wrap_exception(exn);
if(exn$1 !== Stdlib[8])
throw caml_maybe_attach_backtrace(exn$1, 0);
var
aj = Stdlib[28].call(null, cst_VM_unknown_primitive, name$2);
throw caml_maybe_attach_backtrace([0, Sx_types[9], aj], 1);
}
}
if(typeof fn_val !== "number" && 15 === fn_val[0]){
var fn = fn_val[2];
push(vm, caml_call1(fn, args$1));
break;
}
push(vm, 0);
break;
case 63:
var
count$0 = read_u16(frame),
am =
Stdlib_List[11].call
(null, count$0, function(param){return pop(vm);}),
items = Stdlib_List[10].call(null, am);
push(vm, [6, items]);
break;
case 64:
var
count$1 = read_u16(frame),
d$0 = Stdlib_Hashtbl[1].call(null, 0, count$1);
if(count$1 >= 1){
var for$ = 1;
for(;;){
var v$11 = pop(vm), k = pop(vm);
a:
{
if(typeof k !== "number")
switch(k[0]){
case 3:
case 5:
var s$4 = k[1], key = s$4; break a;
}
var key = Sx_runtime[2].call(null, k);
}
Stdlib_Hashtbl[11].call(null, d$0, key, v$11);
var an = for$ + 1 | 0;
if(count$1 === for$) break;
for$ = an;
}
}
push(vm, [7, d$0]);
break;
}
continue;
}
catch(e){vm[3] = 0; continue;}
}
break;
}
}
catch(exn){}
return [6, Stdlib_List[10].call(null, trace[1])];
}
function disassemble(code){
var
bc = code[4],
len = bc.length - 1,
consts = code[5],
ip$3 = 0,
instrs = 0;
for(;;){
if(ip$3 >= len) break;
var
op = caml_check_bound(bc, ip$3)[ip$3 + 1],
ip = ip$3 + 1 | 0,
name = opcode_name(op);
a:
{
var operands = 0;
b:
{
if(35 <= op){
if(128 !== op){
if(66 <= op){
if(144 === op) break b;
var operands$1 = operands, ip$4 = ip;
break a;
}
if(48 > op){var operands$1 = operands, ip$4 = ip; break a;}
switch(op - 48 | 0){
case 4:
if((ip + 2 | 0) >= len){
var operands$1 = operands, ip$4 = ip;
break a;
}
var
lo$1 = caml_check_bound(bc, ip)[ip + 1],
e = ip + 1 | 0,
hi$1 = caml_check_bound(bc, e)[e + 1],
idx$1 = lo$1 | hi$1 << 8,
f = ip + 2 | 0,
argc = caml_check_bound(bc, f)[f + 1],
ip$2 = ip + 3 | 0;
if(idx$1 < consts.length - 1){
var match$2 = caml_check_bound(consts, idx$1)[idx$1 + 1];
if(typeof match$2 === "number" || ! (3 === match$2[0]))
var prim_name = cst;
else
var s = match$2[1], prim_name = s;
}
else
var prim_name = cst;
var
operands$1 =
[0, [2, idx$1], [0, [3, prim_name], [0, [2, argc], 0]]],
ip$4 = ip$2;
break a;
case 0:
case 1:
break b;
case 3:
case 16:
case 17:
if((ip + 1 | 0) >= len){
var operands$1 = operands, ip$4 = ip;
break a;
}
var
lo$0 = caml_check_bound(bc, ip)[ip + 1],
b = ip + 1 | 0,
hi$0 = caml_check_bound(bc, b)[b + 1],
idx$0 = lo$0 | hi$0 << 8,
ip$1 = ip + 2 | 0,
c = 51 === op,
i = c ? idx$0 < consts.length - 1 : c,
operands$0 = [0, [2, idx$0], 0];
if(! i){var operands$1 = operands$0, ip$4 = ip$1; break a;}
var match = caml_check_bound(consts, idx$0)[idx$0 + 1];
c:
{
if(typeof match !== "number" && 7 === match[0]){
var
d = match[1],
match$0 = Stdlib_Hashtbl[7].call(null, d, cst_upvalue_count);
if(match$0){
var match$1 = match$0[1];
if(typeof match$1 !== "number" && 2 === match$1[0]){var n = match$1[1], uv_count = n | 0; break c;}
}
var uv_count = 0;
break c;
}
var uv_count = 0;
}
var operands$1 = operands$0, ip$4 = ip$1 + (uv_count * 2 | 0) | 0;
break a;
default: var operands$1 = operands, ip$4 = ip; break a;
}
}
}
else if(16 <= op){
if(22 <= op){
if(32 > op){var operands$1 = operands, ip$4 = ip; break a;}
if((ip + 1 | 0) < len){
var
lo$2 = caml_check_bound(bc, ip)[ip + 1],
g = ip + 1 | 0,
hi$2 = caml_check_bound(bc, g)[g + 1],
raw = lo$2 | hi$2 << 8,
signed = 32768 <= raw ? raw - 65536 | 0 : raw,
operands$1 = [0, [2, signed], 0],
ip$4 = ip + 2 | 0;
break a;
}
var operands$1 = operands, ip$4 = ip;
break a;
}
if(20 > op) break b;
}
else if(1 !== op){var operands$1 = operands, ip$4 = ip; break a;}
if((ip + 1 | 0) >= len){var operands$1 = operands, ip$4 = ip; break a;}
var
lo = caml_check_bound(bc, ip)[ip + 1],
a = ip + 1 | 0,
hi = caml_check_bound(bc, a)[a + 1],
idx = lo | hi << 8,
ip$0 = ip + 2 | 0;
if(idx < consts.length - 1)
var
h = caml_check_bound(consts, idx)[idx + 1],
const_str = Sx_types[112].call(null, h);
else
var const_str = cst;
var operands$1 = [0, [2, idx], [0, [3, const_str], 0]], ip$4 = ip$0;
break a;
}
if(ip < len)
var
v = caml_check_bound(bc, ip)[ip + 1],
operands$1 = [0, [2, v], 0],
ip$4 = ip + 1 | 0;
else
var operands$1 = operands, ip$4 = ip;
}
var entry = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, entry, "offset", [2, ip$3]);
Stdlib_Hashtbl[11].call(null, entry, cst_opcode, [3, name]);
Stdlib_Hashtbl[11].call(null, entry, "operands", [6, operands$1]);
ip$3 = ip$4;
instrs = [0, [7, entry], instrs];
}
var result = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, result, cst_arity, [2, code[1]]);
Stdlib_Hashtbl[11].call(null, result, "num_locals", [2, code[3]]);
var
j =
Stdlib_Array[14].call
(null, function(v){return [3, Sx_types[112].call(null, v)];}, consts),
k = [6, Stdlib_Array[10].call(null, j)];
Stdlib_Hashtbl[11].call(null, result, cst_constants, k);
var l = [6, Stdlib_List[10].call(null, instrs)];
Stdlib_Hashtbl[11].call(null, result, cst_bytecode, l);
return [7, result];
}
runtime.caml_register_global
(237,
[0,
VmSuspended,
jit_compile_ref,
jit_failed_sentinel,
is_jit_failed,
active_vm,
create,
push,
pop,
peek,
read_u8,
read_u16,
read_i16,
closure_to_value,
parse_keyword_args,
vm_comp_jit_count,
vm_comp_cek_count,
vm_insn_count,
vm_call_count,
vm_cek_count,
vm_reset_counters,
vm_report_counters,
jit_compiling,
push_closure_frame,
code_from_value,
jit_compile_comp,
cek_call_or_suspend,
call_closure,
call_closure_reuse,
vm_call,
run,
resume_vm,
execute_module,
execute_module_safe,
jit_is_broken_name,
jit_compile_lambda,
opcode_name,
opcode_operand_size,
trace_run,
disassemble],
"Sx_vm");
return;
}
(globalThis));
//# 25961 "../lib/.sx.objs/jsoo/default/sx.cma.js"
//# shape: Sx_vm_ref:[F(2),F(2),F(1),F(1)*,N,F(2),F(1),F(1),F(1),F(1)*,F(1)*,F(2),F(1)*,F(1)*,F(2)*,F(4),F(5),F(2),F(1),F(2),F(1),F(1),F(1),F(1),F(1),F(3),F(4),F(2),F(3),F(1),F(2),F(1),F(1),F(1),F(1),F(1)*,F(1),F(1),F(1),F(1),F(2),F(1),F(2)*,F(1),F(2),F(1),F(3),F(4),F(3),F(1)*,F(3),N,F(1)*,F(1)*,F(1)*,F(2),F(1)*,F(3),F(2),F(3),N,N,N,F(3),F(3),F(2),F(2),F(2),F(3),F(2),F(3),F(1),F(5),F(2),F(2),F(1),F(3),F(1),N,N,F(1)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_check_bound = runtime.caml_check_bound,
caml_make_vect = runtime.caml_make_vect,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Stdlib_Hashtbl = global_data.Stdlib__Hashtbl,
Sx_types = global_data.Sx_types,
Sx_runtime = global_data.Sx_runtime,
Stdlib_List = global_data.Stdlib__List,
Sx_vm = global_data.Sx_vm,
Sx_ref = global_data.Sx_ref,
Stdlib_Array = global_data.Stdlib__Array,
Stdlib = global_data.Stdlib,
cek_call = Sx_ref[221],
eval_expr = Sx_ref[241];
function trampoline(v){
if(typeof v !== "number" && 12 === v[0]){
var env = v[2], expr = v[1];
return Sx_ref[241].call(null, expr, [20, env]);
}
return v;
}
function to_ocaml_list(v){
if(typeof v === "number"){if(0 === v) return 0;}
else if(6 === v[0]){var l = v[1]; return l;}
return [0, v, 0];
}
var
str =
[15, "str", function(args){return [3, Sx_runtime[4].call(null, args)];}];
function call_primitive(name, args){
var n = Sx_types[35].call(null, name), a = to_ocaml_list(args);
return Sx_runtime[1].call(null, n, a);
}
function unwrap_vm(v){
if(typeof v !== "number" && 26 === v[0]){var m = v[1]; return m;}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "not a vm"], 1);
}
function unwrap_frame(v){
if(typeof v !== "number" && 25 === v[0]){var f = v[1]; return f;}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "not a frame"], 1);
}
function unwrap_closure(v){
if(typeof v !== "number" && 24 === v[0]){var c = v[1]; return c;}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "not a closure"], 1);
}
function make_uv_cell(v){return [0, v];}
function uv_get(c){return c[1];}
function uv_set(c, v){c[1] = v; return 0;}
function make_upvalue_cell(v){return 0;}
function uv_get$0(param){return 0;}
function uv_set_b(a, param){return 0;}
function code_from_value(v){return Sx_vm[24].call(null, v);}
function make_vm_code(arity, locals, bytecode, constants){
var d = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, d, "arity", arity);
Stdlib_Hashtbl[11].call(null, d, "bytecode", bytecode);
Stdlib_Hashtbl[11].call(null, d, "constants", constants);
return [7, d];
}
function make_vm_closure(code, upvalues, name, globals, closure_env){
a:
{
if(typeof upvalues !== "number" && 6 === upvalues[0]){
var
l = upvalues[1],
f = Stdlib_List[20].call(null, function(v){return [0, v];}, l),
uv = Stdlib_Array[11].call(null, f);
break a;
}
var uv = [0];
}
a:
{
if(typeof closure_env !== "number" && 20 === closure_env[0]){var e = closure_env[1], b = [0, e]; break a;}
var b = 0;
}
a:
{
if(typeof globals !== "number" && 7 === globals[0]){var d = globals[1], c = d; break a;}
var c = Stdlib_Hashtbl[1].call(null, 0, 0);
}
a:
{
if(typeof name === "number"){
if(0 === name){var a = 0; break a;}
}
else if(3 === name[0]){var s = name[1], a = [0, s]; break a;}
var a = 0;
}
return [24, [0, code_from_value(code), uv, a, c, b]];
}
function make_vm_frame(closure, base){
var cl = unwrap_closure(closure), a = Stdlib_Hashtbl[1].call(null, 0, 4);
return [25, [0, cl, 0, Sx_types[90].call(null, base), a]];
}
function make_vm(globals){
a:
{
if(typeof globals !== "number" && 7 === globals[0]){var d = globals[1], g = d; break a;}
var g = Stdlib_Hashtbl[1].call(null, 0, 0);
}
return [26, [0, caml_make_vect(4096, 0), 0, 0, g, 0]];
}
function vm_push(vm_val, v){
var m = unwrap_vm(vm_val);
if(m[1].length - 1 <= m[2]){
var ns = caml_make_vect(m[2] * 2 | 0, 0);
Stdlib_Array[9].call(null, m[1], 0, ns, 0, m[2]);
m[1] = ns;
}
var a = m[2];
caml_check_bound(m[1], a)[a + 1] = v;
m[2] = m[2] + 1 | 0;
return 0;
}
function vm_pop(vm_val){
var m = unwrap_vm(vm_val);
m[2] = m[2] - 1 | 0;
var a = m[2];
return caml_check_bound(m[1], a)[a + 1];
}
function vm_peek(vm_val){
var m = unwrap_vm(vm_val), a = m[2] - 1 | 0;
return caml_check_bound(m[1], a)[a + 1];
}
function frame_read_u8(frame_val){
var
f = unwrap_frame(frame_val),
a = f[2],
v = caml_check_bound(f[1][1][4], a)[a + 1];
f[2] = f[2] + 1 | 0;
return [2, v];
}
function frame_read_u16(frame_val){
var
f = unwrap_frame(frame_val),
a = f[2],
lo = caml_check_bound(f[1][1][4], a)[a + 1],
b = f[2] + 1 | 0,
hi = caml_check_bound(f[1][1][4], b)[b + 1];
f[2] = f[2] + 2 | 0;
return [2, lo | hi << 8];
}
function frame_read_i16(frame_val){
var
f = unwrap_frame(frame_val),
a = f[2],
lo = caml_check_bound(f[1][1][4], a)[a + 1],
b = f[2] + 1 | 0,
hi = caml_check_bound(f[1][1][4], b)[b + 1];
f[2] = f[2] + 2 | 0;
var v = lo | hi << 8, c = 32768 <= v ? v - 65536 | 0 : v;
return [2, c];
}
function frame_local_get(vm_val, frame_val, slot){
var
m = unwrap_vm(vm_val),
f = unwrap_frame(frame_val),
a = Sx_types[90].call(null, slot),
idx = f[3] + a | 0,
b = Sx_types[90].call(null, slot),
match = Stdlib_Hashtbl[7].call(null, f[4], b);
if(! match) return caml_check_bound(m[1], idx)[idx + 1];
var cell = match[1];
return cell[1];
}
function frame_local_set(vm_val, frame_val, slot, v){
var
m = unwrap_vm(vm_val),
f = unwrap_frame(frame_val),
s = Sx_types[90].call(null, slot),
match = Stdlib_Hashtbl[7].call(null, f[4], s);
if(match){
var cell = match[1];
cell[1] = v;
}
else{var a = f[3] + s | 0; caml_check_bound(m[1], a)[a + 1] = v;}
return 0;
}
function frame_upvalue_get(frame_val, idx){
var f = unwrap_frame(frame_val), a = Sx_types[90].call(null, idx);
return caml_check_bound(f[1][2], a)[a + 1][1];
}
function frame_upvalue_set(frame_val, idx, v){
var f = unwrap_frame(frame_val), a = Sx_types[90].call(null, idx);
caml_check_bound(f[1][2], a)[a + 1][1] = v;
return 0;
}
function frame_ip(f){var fr = unwrap_frame(f); return [2, fr[2]];}
function frame_set_ip_b(f, v){
var fr = unwrap_frame(f);
fr[2] = Sx_types[90].call(null, v);
return 0;
}
function frame_base(f){var fr = unwrap_frame(f); return [2, fr[3]];}
function frame_closure(f){var fr = unwrap_frame(f); return [24, fr[1]];}
var
cst_vc_bytecode = "vc-bytecode",
cst_vc_constants = "vc-constants",
cst_vc_locals = "vc-locals";
function closure_code(cl){
var
c = unwrap_closure(cl),
d = Stdlib_Hashtbl[1].call(null, 0, 4),
a = Stdlib_Array[14].call(null, function(i){return [2, i];}, c[1][4]),
b = [6, Stdlib_Array[10].call(null, a)];
Stdlib_Hashtbl[11].call(null, d, cst_vc_bytecode, b);
var e = [6, Stdlib_Array[10].call(null, c[1][5])];
Stdlib_Hashtbl[11].call(null, d, cst_vc_constants, e);
Stdlib_Hashtbl[11].call(null, d, "vc-arity", [2, c[1][1]]);
Stdlib_Hashtbl[11].call(null, d, cst_vc_locals, [2, c[1][3]]);
return [7, d];
}
function closure_upvalues(cl){
var
c = unwrap_closure(cl),
a = Stdlib_Array[14].call(null, function(cell){return cell[1];}, c[2]);
return [6, Stdlib_Array[10].call(null, a)];
}
function closure_env(cl){
if(typeof cl !== "number" && 24 === cl[0]){
var c = cl[1], match = c[5];
if(! match) return 0;
var e = match[1];
return [20, e];
}
return 0;
}
var a = [3, cst_vc_bytecode];
function code_bytecode(code){return Sx_runtime[12].call(null, code, a);}
var b = [3, cst_vc_constants];
function code_constants(code){return Sx_runtime[12].call(null, code, b);}
var c = [3, cst_vc_locals];
function code_locals(code){return Sx_runtime[12].call(null, code, c);}
function vm_sp(v){var m = unwrap_vm(v); return [2, m[2]];}
function vm_set_sp_b(v, s){
var m = unwrap_vm(v);
m[2] = Sx_types[90].call(null, s);
return 0;
}
function vm_stack(v){unwrap_vm(v); return 0;}
function vm_set_stack_b(v, s){return 0;}
function vm_frames(v){
var m = unwrap_vm(v);
return [6, Stdlib_List[20].call(null, function(f){return [25, f];}, m[3])];
}
function vm_set_frames_b(v, fs){
var m = unwrap_vm(v);
a:
{
if(typeof fs !== "number" && 6 === fs[0]){
var l = fs[1], a = Stdlib_List[20].call(null, unwrap_frame, l);
break a;
}
var a = 0;
}
m[3] = a;
return 0;
}
function vm_globals_ref(v){var m = unwrap_vm(v); return [7, m[4]];}
var cst_VM_undefined = "VM undefined: ";
function vm_global_get(vm_val, frame_val, name){
var
m = unwrap_vm(vm_val),
n = Sx_types[35].call(null, name),
f = unwrap_frame(frame_val),
match = f[1][5];
if(match){
var env = match[1], id = Sx_types[4].call(null, n), e = env;
for(;;){
var match$0 = Stdlib_Hashtbl[7].call(null, e[1], id);
if(match$0){var v = match$0[1], found_in_env = [0, v]; break;}
var match$1 = e[2];
if(! match$1){var found_in_env = 0; break;}
var p = match$1[1];
e = p;
}
}
else
var found_in_env = 0;
if(found_in_env){var v$0 = found_in_env[1]; return v$0;}
var match$2 = Stdlib_Hashtbl[7].call(null, m[4], n);
if(match$2){var v$1 = match$2[1]; return v$1;}
try{var c = Sx_runtime[1].call(null, n, 0); return c;}
catch(exn){
var match$3 = Sx_types[25][1];
if(! match$3){
var b = Stdlib[28].call(null, cst_VM_undefined, n);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
var hook = match$3[1], match$4 = caml_call1(hook, n);
if(match$4){var v$2 = match$4[1]; return v$2;}
var a = Stdlib[28].call(null, cst_VM_undefined, n);
throw caml_maybe_attach_backtrace([0, Sx_types[9], a], 1);
}
}
function vm_global_set(vm_val, frame_val, name, v){
var
m = unwrap_vm(vm_val),
n = Sx_types[35].call(null, name),
f = unwrap_frame(frame_val),
match = f[1][5];
if(match){
var env = match[1], id = Sx_types[4].call(null, n), e = env;
for(;;){
if(Stdlib_Hashtbl[9].call(null, e[1], id)){
Stdlib_Hashtbl[11].call(null, e[1], id, v);
var written = 1;
break;
}
var match$0 = e[2];
if(! match$0){var written = 0; break;}
var p = match$0[1];
e = p;
}
}
else
var written = 0;
if(1 - written){
Stdlib_Hashtbl[11].call(null, m[4], n, v);
var match$1 = Sx_types[23][1];
if(match$1){var f$0 = match$1[1]; caml_call2(f$0, n, v);}
}
return 0;
}
function vm_push_frame(vm_val, closure_val, args){
var
m = unwrap_vm(vm_val),
cl = unwrap_closure(closure_val),
d = Stdlib_Hashtbl[1].call(null, 0, 4),
f = [0, cl, 0, m[2], d],
arg_list = to_ocaml_list(args);
Stdlib_List[18].call
(null,
function(a){
var b = m[2];
caml_check_bound(m[1], b)[b + 1] = a;
m[2] = m[2] + 1 | 0;
return 0;
},
arg_list);
var a = Stdlib_List[1].call(null, arg_list), b = cl[1][3] - 1 | 0;
if(b >= a){
var for$ = a;
for(;;){
var c = m[2];
caml_check_bound(m[1], c)[c + 1] = 0;
m[2] = m[2] + 1 | 0;
var e = for$ + 1 | 0;
if(b === for$) break;
for$ = e;
}
}
m[3] = [0, f, m[3]];
return 0;
}
var d = [0, 0], e = [0, 1];
function vm_closure_p(v){
if(typeof v !== "number" && 24 === v[0]) return e;
return d;
}
function vm_create_closure(vm_val, frame_val, code_val){
var m = unwrap_vm(vm_val), f = unwrap_frame(frame_val);
a:
{
if(typeof code_val !== "number" && 7 === code_val[0]){
var
d = code_val[1],
match = Stdlib_Hashtbl[7].call(null, d, "upvalue-count");
if(match){
var match$0 = match[1];
if(typeof match$0 !== "number" && 2 === match$0[0]){var n = match$0[1], uv_count = n | 0; break a;}
}
var uv_count = 0;
break a;
}
var uv_count = 0;
}
var
upvalues =
Stdlib_Array[1].call
(null,
uv_count,
function(param){
var a = f[2], is_local = caml_check_bound(f[1][1][4], a)[a + 1];
f[2] = f[2] + 1 | 0;
var b = f[2], index = caml_check_bound(f[1][1][4], b)[b + 1];
f[2] = f[2] + 1 | 0;
if(1 !== is_local)
return caml_check_bound(f[1][2], index)[index + 1];
var match = Stdlib_Hashtbl[7].call(null, f[4], index);
if(match){var existing = match[1]; return existing;}
var d = f[3] + index | 0, c = [0, caml_check_bound(m[1], d)[d + 1]];
Stdlib_Hashtbl[11].call(null, f[4], index, c);
return c;
}),
code = code_from_value(code_val);
return [24, [0, code, upvalues, 0, m[4], f[1][5]]];
}
var
jit_failed_sentinel =
[0,
[0, -1, -1, 0, [0], [0], 0, 0],
[0],
[0, "__jit_failed__"],
Stdlib_Hashtbl[1].call(null, 0, 0),
0];
function is_jit_failed(cl){return -1 === cl[1][1] ? 1 : 0;}
var f = [0, 0], g = [0, 1];
function is_lambda(v){
if(typeof v !== "number" && 8 === v[0]) return g;
return f;
}
function lambda_compiled(v){
if(typeof v !== "number" && 8 === v[0]){
var l = v[1], match = l[5];
if(! match) return 0;
var c = match[1];
return [24, c];
}
return 0;
}
function lambda_set_compiled_b(v, c){
if(typeof v !== "number" && 8 === v[0]){
var l = v[1];
if(typeof c !== "number")
switch(c[0]){
case 3:
if(c[1] === "jit-failed"){l[5] = [0, jit_failed_sentinel]; return 0;}
break;
case 24:
var cl = c[1]; l[5] = [0, cl]; return 0;
}
l[5] = 0;
return 0;
}
return 0;
}
function lambda_name(v){
if(typeof v !== "number" && 8 === v[0]){
var l = v[1], match = l[4];
if(! match) return 0;
var n = match[1];
return [3, n];
}
return 0;
}
var
cst_request = "request",
h = [6, 0],
i = [3, "phase"],
j = [3, cst_request];
function cek_call_or_suspend(vm_val, f, args){
var
a = to_ocaml_list(args),
b = [20, Sx_types[20].call(null, 0)],
state = Sx_ref[236].call(null, f, [6, a], b, [6, a], h),
final = Sx_ref[156].call(null, state),
match = Sx_runtime[12].call(null, final, i);
if
(typeof match !== "number"
&& 3 === match[0] && match[1] === "io-suspended"){
var m = unwrap_vm(vm_val);
m[5] = [0, final];
var
c = Sx_vm[6].call(null, m[4]),
d = Sx_runtime[12].call(null, final, j);
throw caml_maybe_attach_backtrace([0, Sx_vm[1], d, c], 1);
}
return Sx_ref[18].call(null, final);
}
function env_walk(env, name){
if(typeof env === "number"){if(0 === env) return 0;}
else if(20 === env[0]){
var
e = env[1],
a = Sx_types[35].call(null, name),
id = Sx_types[4].call(null, a),
e$0 = e;
for(;;){
var match = Stdlib_Hashtbl[7].call(null, e$0[1], id);
if(match){var v = match[1]; return v;}
var match$0 = e$0[2];
if(! match$0) return 0;
var p = match$0[1];
e$0 = p;
}
}
return 0;
}
function env_walk_set_b(env, name, value){
if(typeof env !== "number" && 20 === env[0]){
var
e = env[1],
b = Sx_types[35].call(null, name),
id = Sx_types[4].call(null, b),
e$0 = e;
for(;;){
if(Stdlib_Hashtbl[9].call(null, e$0[1], id)){
Stdlib_Hashtbl[11].call(null, e$0[1], id, value);
var a = 1;
}
else{
var match = e$0[2];
if(match){var p = match[1]; e$0 = p; continue;}
var a = 0;
}
return a ? 0 : 0;
}
}
return 0;
}
var
vm_run_fn = [0, function(param){return 0;}],
vm_call_fn = [0, function(b, a, param){return 0;}],
active_vm = [0, 0];
function vm_call_closure(closure_val, args, globals){
unwrap_closure(closure_val);
var prev_vm = active_vm[1];
a:
{
if(typeof globals !== "number" && 7 === globals[0]){var d = globals[1], g = d; break a;}
var g = Stdlib_Hashtbl[1].call(null, 0, 0);
}
var m = [0, caml_make_vect(4096, 0), 0, 0, g, 0];
active_vm[1] = [0, m];
var vm_val = [26, m];
vm_push_frame(vm_val, closure_val, args);
try{caml_call1(vm_run_fn[1], vm_val);}
catch(e$0){
var e = caml_wrap_exception(e$0);
active_vm[1] = prev_vm;
throw caml_maybe_attach_backtrace(e, 0);
}
active_vm[1] = prev_vm;
return vm_pop(vm_val);
}
function try_jit_call(vm_val, f, args){
var m = unwrap_vm(vm_val);
if(typeof f !== "number" && 8 === f[0]){
var l = f[1], match = l[5];
if(match){
var cl = match[1];
if(is_jit_failed(cl))
return vm_push(vm_val, cek_call_or_suspend(vm_val, f, args));
try{
var a = vm_push(vm_val, vm_call_closure([24, cl], args, [7, cl[4]]));
return a;
}
catch(exn){return vm_push(vm_val, cek_call_or_suspend(vm_val, f, args));
}
}
if(0 === l[4])
return vm_push(vm_val, cek_call_or_suspend(vm_val, f, args));
l[5] = [0, jit_failed_sentinel];
var match$0 = caml_call2(Sx_vm[2][1], l, m[4]);
if(! match$0)
return vm_push(vm_val, cek_call_or_suspend(vm_val, f, args));
var cl$0 = match$0[1];
l[5] = [0, cl$0];
try{
var
b = vm_push(vm_val, vm_call_closure([24, cl$0], args, [7, cl$0[4]]));
return b;
}
catch(exn){return vm_push(vm_val, cek_call_or_suspend(vm_val, f, args));}
}
return vm_push(vm_val, cek_call_or_suspend(vm_val, f, args));
}
function collect_n_from_stack(vm_val, n){
var m = unwrap_vm(vm_val), count = Sx_types[90].call(null, n), a = 0;
if(count < 1)
var result$0 = a;
else{
var result = a, for$ = 1;
for(;;){
m[2] = m[2] - 1 | 0;
var
b = m[2],
c = [0, caml_check_bound(m[1], b)[b + 1], result],
d = for$ + 1 | 0;
if(count === for$){var result$0 = c; break;}
result = c;
for$ = d;
}
}
return [6, result$0];
}
function collect_n_pairs(vm_val, n){
var
m = unwrap_vm(vm_val),
count = Sx_types[90].call(null, n),
d = Stdlib_Hashtbl[1].call(null, 0, count);
if(count >= 1){
var for$ = 1;
for(;;){
m[2] = m[2] - 1 | 0;
var a = m[2], v = caml_check_bound(m[1], a)[a + 1];
m[2] = m[2] - 1 | 0;
var
b = m[2],
c = caml_check_bound(m[1], b)[b + 1],
k = Sx_types[35].call(null, c);
Stdlib_Hashtbl[11].call(null, d, k, v);
var e = for$ + 1 | 0;
if(count === for$) break;
for$ = e;
}
}
return [7, d];
}
function pad_n_nils(vm_val, n){
var m = unwrap_vm(vm_val), count = Sx_types[90].call(null, n);
if(count >= 1){
var for$ = 1;
for(;;){
var a = m[2];
caml_check_bound(m[1], a)[a + 1] = 0;
m[2] = m[2] + 1 | 0;
var b = for$ + 1 | 0;
if(count === for$) break;
for$ = b;
}
}
return 0;
}
var
cst = "=",
k = [0, [3, "component"], 0],
l = [3, "VM: not callable: "],
m = [0, [3, "island"], 0];
function vm_call(vm, f, args){
var a = vm_closure_p(f);
if(Sx_types[67].call(null, a)) return vm_push_frame(vm, f, args);
var b = is_lambda(f);
if(Sx_types[67].call(null, b)) return try_jit_call(vm, f, args);
var
c = [0, Sx_runtime[73].call(null, f), k],
or = Sx_runtime[1].call(null, cst, c);
if(Sx_types[67].call(null, or))
var or$0 = or;
else
var
i = [0, Sx_runtime[73].call(null, f), m],
or$0 = Sx_runtime[1].call(null, cst, i);
if(Sx_types[67].call(null, or$0))
return vm_push(vm, cek_call_or_suspend(vm, f, args));
var d = Sx_runtime[90].call(null, f);
if(Sx_types[67].call(null, d))
return vm_push(vm, Sx_runtime[7].call(null, f, args));
var
e = [0, l, [0, Sx_runtime[73].call(null, f), 0]],
g = [3, Sx_runtime[4].call(null, e)],
h = Sx_runtime[2].call(null, g);
throw caml_maybe_attach_backtrace([0, Sx_types[9], h], 1);
}
var
n = [0, [3, "for-each"], 0],
o = [0, [3, "map"], 0],
p = [0, [3, "map-indexed"], 0],
q = [0, [3, "filter"], 0],
r = [0, [3, "reduce"], 0],
s = [0, [3, "some"], 0],
t = [0, [3, "every?"], 0],
u = [3, cst_VM_undefined];
function vm_resolve_ho_form(vm, name){
var a = Sx_runtime[1].call(null, cst, [0, name, n]), cst$0 = "\xce\xbb";
if(Sx_types[67].call(null, a))
return [15,
cst$0,
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var
coll = a[1],
f = args[1],
b = Sx_runtime[5].call(null, coll);
Stdlib_List[18].call
(null,
function(x){
vm_call_external(vm, f, [6, [0, x, 0]]);
return 0;
},
b);
return 0;
}
}
return 0;
}];
var b = Sx_runtime[1].call(null, cst, [0, name, o]);
if(Sx_types[67].call(null, b))
return [15,
cst$0,
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var
coll = a[1],
f = args[1],
b = Sx_runtime[5].call(null, coll);
return [6,
Stdlib_List[20].call
(null,
function(x){return vm_call_external(vm, f, [6, [0, x, 0]]);},
b)];
}
}
return 0;
}];
var c = Sx_runtime[1].call(null, cst, [0, name, p]);
if(Sx_types[67].call(null, c))
return [15,
cst$0,
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var
coll = a[1],
f = args[1],
b = Sx_runtime[5].call(null, coll);
return [6,
Stdlib_List[21].call
(null,
function(i, x){
var i$0 = [2, i];
return vm_call_external(vm, f, [6, [0, i$0, [0, x, 0]]]);
},
b)];
}
}
return 0;
}];
var d = Sx_runtime[1].call(null, cst, [0, name, q]);
if(Sx_types[67].call(null, d))
return [15,
cst$0,
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var
coll = a[1],
f = args[1],
b = Sx_runtime[5].call(null, coll);
return [6,
Stdlib_List[44].call
(null,
function(x){
var a = vm_call_external(vm, f, [6, [0, x, 0]]);
return Sx_types[67].call(null, a);
},
b)];
}
}
return 0;
}];
var e = Sx_runtime[1].call(null, cst, [0, name, r]);
if(Sx_types[67].call(null, e))
return [15,
cst$0,
function(args){
if(args){
var a = args[2];
if(a){
var b = a[2];
if(b && ! b[2]){
var
coll = b[1],
init = a[1],
f = args[1],
c = Sx_runtime[5].call(null, coll);
return Stdlib_List[26].call
(null,
function(acc, x){
return vm_call_external(vm, f, [6, [0, acc, [0, x, 0]]]);
},
init,
c);
}
}
}
return 0;
}];
var f = Sx_runtime[1].call(null, cst, [0, name, s]);
if(Sx_types[67].call(null, f))
return [15,
cst$0,
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var
coll = a[1],
f = args[1],
b = Sx_runtime[5].call(null, coll);
return [0,
Stdlib_List[34].call
(null,
function(x){
var a = vm_call_external(vm, f, [6, [0, x, 0]]);
return Sx_types[67].call(null, a);
},
b)];
}
}
return 0;
}];
var g = Sx_runtime[1].call(null, cst, [0, name, t]);
if(Sx_types[67].call(null, g))
return [15,
cst$0,
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var
coll = a[1],
f = args[1],
b = Sx_runtime[5].call(null, coll);
return [0,
Stdlib_List[33].call
(null,
function(x){
var a = vm_call_external(vm, f, [6, [0, x, 0]]);
return Sx_types[67].call(null, a);
},
b)];
}
}
return 0;
}];
var
h = [3, Sx_runtime[4].call(null, [0, u, [0, name, 0]])],
i = Sx_runtime[2].call(null, h);
throw caml_maybe_attach_backtrace([0, Sx_types[9], i], 1);
}
function vm_call_external(vm, f, args){
var a = vm_closure_p(f);
return Sx_types[67].call(null, a)
? vm_call_closure(f, args, vm_globals_ref(vm))
: cek_call(f, args);
}
var cst_io_request = "__io_request", v = [6, 0], w = [3, cst_io_request];
function vm_run(vm){
for(;;){
var
a = vm_frames(vm),
b = Sx_runtime[33].call(null, a),
c = [0, 1 - Sx_types[67].call(null, b)];
if(! Sx_types[67].call(null, c)) return 0;
var
d = vm_frames(vm),
frame = Sx_runtime[14].call(null, d),
e = vm_frames(vm),
rest_frames = Sx_runtime[15].call(null, e),
bc = code_bytecode(closure_code(frame_closure(frame))),
consts = code_constants(closure_code(frame_closure(frame))),
f = [0, Sx_runtime[24].call(null, bc), 0],
g = [0, frame_ip(frame), f],
h = Sx_runtime[1].call(null, ">=", g);
if(Sx_types[67].call(null, h)) return vm_set_frames_b(vm, v);
vm_step(vm, frame, rest_frames, bc, consts);
var
i = vm_globals_ref(vm),
j = Sx_runtime[25].call(null, i, w),
k = Sx_runtime[83].call(null, j);
if(! Sx_types[67].call(null, k)) return 0;
}
}
var
x = [0, [2, 1.], 0],
y = [0, [2, 2.], 0],
z = [0, [2, 3.], 0],
A = [0, 1],
B = [0, [2, 4.], 0],
C = [0, 0],
D = [0, [2, 5.], 0],
E = [0, [2, 6.], 0],
F = [0, [2, 16.], 0],
G = [0, [2, 17.], 0],
H = [0, [2, 18.], 0],
I = [0, [2, 19.], 0],
J = [0, [2, 20.], 0],
K = [0, [2, 21.], 0],
L = [0, [2, 32.], 0],
M = [0, [2, 33.], 0],
N = [0, [2, 34.], 0],
O = [0, [2, 48.], 0],
P = [0, [2, 49.], 0],
Q = [0, [2, 50.], 0],
R = [0, [2, 51.], 0],
S = [0, [2, 52.], 0],
T = [0, [2, 64.], 0],
U = [0, [2, 65.], 0],
V = [0, [2, 144.], 0],
W = [0, [2, 128.], 0],
X = [0, [2, 160.], 0],
Y = [0, [2, 161.], 0],
Z = [0, [2, 162.], 0],
_ = [0, [2, 163.], 0],
$ = [0, [2, 164.], 0],
aa = [0, [2, 165.], 0],
ab = [0, [2, 166.], 0],
ac = [0, [2, 167.], 0],
ad = [0, [2, 168.], 0],
ae = [0, [2, 169.], 0],
af = [0, [2, 170.], 0],
ag = [0, [2, 171.], 0],
ah = [0, [2, 172.], 0],
ai = [0, [2, 173.], 0],
aj = [2, 0.],
ak = [0, [2, 174.], 0],
al = [0, [2, 175.], 0],
am = [0, [2, 112.], 0],
an = [3, cst_io_request],
ao = [3, "VM: unknown opcode "];
function vm_step(vm, frame, rest_frames, bc, consts){
var
op = frame_read_u8(frame),
c = Sx_runtime[1].call(null, cst, [0, op, x]);
if(Sx_types[67].call(null, c)){
var idx = frame_read_u16(frame);
return vm_push(vm, Sx_runtime[17].call(null, consts, idx));
}
var e = Sx_runtime[1].call(null, cst, [0, op, y]);
if(Sx_types[67].call(null, e)) return vm_push(vm, 0);
var g = Sx_runtime[1].call(null, cst, [0, op, z]);
if(Sx_types[67].call(null, g)) return vm_push(vm, A);
var h = Sx_runtime[1].call(null, cst, [0, op, B]);
if(Sx_types[67].call(null, h)) return vm_push(vm, C);
var i = Sx_runtime[1].call(null, cst, [0, op, D]);
if(Sx_types[67].call(null, i)) return vm_pop(vm);
var j = Sx_runtime[1].call(null, cst, [0, op, E]);
if(Sx_types[67].call(null, j)) return vm_push(vm, vm_peek(vm));
var k = Sx_runtime[1].call(null, cst, [0, op, F]);
if(Sx_types[67].call(null, k)){
var slot = frame_read_u8(frame);
return vm_push(vm, frame_local_get(vm, frame, slot));
}
var l = Sx_runtime[1].call(null, cst, [0, op, G]);
if(Sx_types[67].call(null, l)){
var slot$0 = frame_read_u8(frame);
return frame_local_set(vm, frame, slot$0, vm_peek(vm));
}
var m = Sx_runtime[1].call(null, cst, [0, op, H]);
if(Sx_types[67].call(null, m)){
var idx$0 = frame_read_u8(frame);
return vm_push(vm, frame_upvalue_get(frame, idx$0));
}
var o = Sx_runtime[1].call(null, cst, [0, op, I]);
if(Sx_types[67].call(null, o)){
var idx$1 = frame_read_u8(frame);
return frame_upvalue_set(frame, idx$1, vm_peek(vm));
}
var p = Sx_runtime[1].call(null, cst, [0, op, J]);
if(Sx_types[67].call(null, p)){
var
idx$2 = frame_read_u16(frame),
name = Sx_runtime[17].call(null, consts, idx$2);
return vm_push(vm, vm_global_get(vm, frame, name));
}
var q = Sx_runtime[1].call(null, cst, [0, op, K]);
if(Sx_types[67].call(null, q)){
var
idx$3 = frame_read_u16(frame),
name$0 = Sx_runtime[17].call(null, consts, idx$3);
return vm_global_set(vm, frame, name$0, vm_peek(vm));
}
var r = Sx_runtime[1].call(null, cst, [0, op, L]), cst$0 = "+";
if(Sx_types[67].call(null, r)){
var
offset = frame_read_i16(frame),
s = [0, frame_ip(frame), [0, offset, 0]];
return frame_set_ip_b(frame, Sx_runtime[1].call(null, cst$0, s));
}
var t = Sx_runtime[1].call(null, cst, [0, op, M]);
if(Sx_types[67].call(null, t)){
var
offset$0 = frame_read_i16(frame),
v = vm_pop(vm),
u = [0, 1 - Sx_types[67].call(null, v)];
if(! Sx_types[67].call(null, u)) return 0;
var w = [0, frame_ip(frame), [0, offset$0, 0]];
return frame_set_ip_b(frame, Sx_runtime[1].call(null, cst$0, w));
}
var ap = Sx_runtime[1].call(null, cst, [0, op, N]);
if(Sx_types[67].call(null, ap)){
var offset$1 = frame_read_i16(frame), v$0 = vm_pop(vm);
if(! Sx_types[67].call(null, v$0)) return 0;
var aq = [0, frame_ip(frame), [0, offset$1, 0]];
return frame_set_ip_b(frame, Sx_runtime[1].call(null, cst$0, aq));
}
var ar = Sx_runtime[1].call(null, cst, [0, op, O]);
if(Sx_types[67].call(null, ar)){
var
argc = frame_read_u8(frame),
args = collect_n_from_stack(vm, argc),
f = vm_pop(vm);
return vm_call(vm, f, args);
}
var as = Sx_runtime[1].call(null, cst, [0, op, P]);
if(Sx_types[67].call(null, as)){
var
argc$0 = frame_read_u8(frame),
args$0 = collect_n_from_stack(vm, argc$0),
f$0 = vm_pop(vm);
vm_set_frames_b(vm, rest_frames);
vm_set_sp_b(vm, frame_base(frame));
return vm_call(vm, f$0, args$0);
}
var at = Sx_runtime[1].call(null, cst, [0, op, Q]);
if(Sx_types[67].call(null, at)){
var result = vm_pop(vm);
vm_set_frames_b(vm, rest_frames);
vm_set_sp_b(vm, frame_base(frame));
return vm_push(vm, result);
}
var au = Sx_runtime[1].call(null, cst, [0, op, R]);
if(Sx_types[67].call(null, au)){
var
idx$4 = frame_read_u16(frame),
code_val = Sx_runtime[17].call(null, consts, idx$4),
cl = vm_create_closure(vm, frame, code_val);
return vm_push(vm, cl);
}
var av = Sx_runtime[1].call(null, cst, [0, op, S]);
if(Sx_types[67].call(null, av)){
var
idx$5 = frame_read_u16(frame),
argc$1 = frame_read_u8(frame),
name$1 = Sx_runtime[17].call(null, consts, idx$5),
args$1 = collect_n_from_stack(vm, argc$1);
return vm_push(vm, call_primitive(name$1, args$1));
}
var aw = Sx_runtime[1].call(null, cst, [0, op, T]);
if(Sx_types[67].call(null, aw)){
var
count = frame_read_u16(frame),
items = collect_n_from_stack(vm, count);
return vm_push(vm, items);
}
var ax = Sx_runtime[1].call(null, cst, [0, op, U]);
if(Sx_types[67].call(null, ax)){
var count$0 = frame_read_u16(frame), d = collect_n_pairs(vm, count$0);
return vm_push(vm, d);
}
var ay = Sx_runtime[1].call(null, cst, [0, op, V]);
if(Sx_types[67].call(null, ay)){
var
count$1 = frame_read_u8(frame),
parts = collect_n_from_stack(vm, count$1);
return vm_push(vm, Sx_runtime[7].call(null, str, parts));
}
var az = Sx_runtime[1].call(null, cst, [0, op, W]);
if(Sx_types[67].call(null, az)){
var
idx$6 = frame_read_u16(frame),
name$2 = Sx_runtime[17].call(null, consts, idx$6),
aA = vm_peek(vm),
aB = vm_globals_ref(vm);
return Sx_runtime[11].call(null, aB, name$2, aA);
}
var aC = Sx_runtime[1].call(null, cst, [0, op, X]);
if(Sx_types[67].call(null, aC)){
var b = vm_pop(vm), a = vm_pop(vm);
return vm_push(vm, Sx_runtime[1].call(null, cst$0, [0, a, [0, b, 0]]));
}
var aD = Sx_runtime[1].call(null, cst, [0, op, Y]), cst$1 = "-";
if(Sx_types[67].call(null, aD)){
var b$0 = vm_pop(vm), a$0 = vm_pop(vm);
return vm_push
(vm, Sx_runtime[1].call(null, cst$1, [0, a$0, [0, b$0, 0]]));
}
var aE = Sx_runtime[1].call(null, cst, [0, op, Z]);
if(Sx_types[67].call(null, aE)){
var b$1 = vm_pop(vm), a$1 = vm_pop(vm);
return vm_push(vm, Sx_runtime[1].call(null, "*", [0, a$1, [0, b$1, 0]]));
}
var aF = Sx_runtime[1].call(null, cst, [0, op, _]);
if(Sx_types[67].call(null, aF)){
var b$2 = vm_pop(vm), a$2 = vm_pop(vm);
return vm_push(vm, Sx_runtime[1].call(null, "/", [0, a$2, [0, b$2, 0]]));
}
var aG = Sx_runtime[1].call(null, cst, [0, op, $]);
if(Sx_types[67].call(null, aG)){
var b$3 = vm_pop(vm), a$3 = vm_pop(vm);
return vm_push(vm, Sx_runtime[1].call(null, cst, [0, a$3, [0, b$3, 0]]));
}
var aH = Sx_runtime[1].call(null, cst, [0, op, aa]);
if(Sx_types[67].call(null, aH)){
var b$4 = vm_pop(vm), a$4 = vm_pop(vm);
return vm_push(vm, Sx_runtime[1].call(null, "<", [0, a$4, [0, b$4, 0]]));
}
var aI = Sx_runtime[1].call(null, cst, [0, op, ab]);
if(Sx_types[67].call(null, aI)){
var b$5 = vm_pop(vm), a$5 = vm_pop(vm);
return vm_push(vm, Sx_runtime[1].call(null, ">", [0, a$5, [0, b$5, 0]]));
}
var aJ = Sx_runtime[1].call(null, cst, [0, op, ac]);
if(Sx_types[67].call(null, aJ)){
var aK = vm_pop(vm);
return vm_push(vm, [0, 1 - Sx_types[67].call(null, aK)]);
}
var aL = Sx_runtime[1].call(null, cst, [0, op, ad]);
if(Sx_types[67].call(null, aL)){
var aM = vm_pop(vm);
return vm_push(vm, Sx_runtime[24].call(null, aM));
}
var aN = Sx_runtime[1].call(null, cst, [0, op, ae]);
if(Sx_types[67].call(null, aN)){
var aO = vm_pop(vm);
return vm_push(vm, Sx_runtime[14].call(null, aO));
}
var aP = Sx_runtime[1].call(null, cst, [0, op, af]);
if(Sx_types[67].call(null, aP)){
var aQ = vm_pop(vm);
return vm_push(vm, Sx_runtime[15].call(null, aQ));
}
var aR = Sx_runtime[1].call(null, cst, [0, op, ag]);
if(Sx_types[67].call(null, aR)){
var n = vm_pop(vm), coll = vm_pop(vm);
return vm_push(vm, Sx_runtime[17].call(null, coll, n));
}
var aS = Sx_runtime[1].call(null, cst, [0, op, ah]);
if(Sx_types[67].call(null, aS)){
var coll$0 = vm_pop(vm), x$0 = vm_pop(vm);
return vm_push(vm, Sx_runtime[18].call(null, x$0, coll$0));
}
var aT = Sx_runtime[1].call(null, cst, [0, op, ai]);
if(Sx_types[67].call(null, aT)){
var aU = [0, aj, [0, vm_pop(vm), 0]];
return vm_push(vm, Sx_runtime[1].call(null, cst$1, aU));
}
var aV = Sx_runtime[1].call(null, cst, [0, op, ak]);
if(Sx_types[67].call(null, aV)){
var aW = [0, vm_pop(vm), 0];
return vm_push(vm, Sx_runtime[1].call(null, "inc", aW));
}
var aX = Sx_runtime[1].call(null, cst, [0, op, al]);
if(Sx_types[67].call(null, aX)){
var aY = [0, vm_pop(vm), 0];
return vm_push(vm, Sx_runtime[1].call(null, "dec", aY));
}
var aZ = Sx_runtime[1].call(null, cst, [0, op, am]);
if(Sx_types[67].call(null, aZ)){
var request = vm_pop(vm), a0 = vm_globals_ref(vm);
return Sx_runtime[11].call(null, a0, an, request);
}
var
a1 = [3, Sx_runtime[4].call(null, [0, ao, [0, op, 0]])],
a2 = Sx_runtime[2].call(null, a1);
throw caml_maybe_attach_backtrace([0, Sx_types[9], a2], 1);
}
vm_run_fn[1] = vm_run;
vm_call_fn[1] = vm_call;
var cst_vm = "vm", ap = [0, 1], aq = [3, "import"];
function check_io_suspension(globals, vm_val){
var match = Stdlib_Hashtbl[7].call(null, globals, cst_io_request);
if(match){
var req = match[1];
if(Sx_types[67].call(null, req)){
var d = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_Hashtbl[11].call(null, d, "suspended", ap);
Stdlib_Hashtbl[11].call(null, d, "op", aq);
Stdlib_Hashtbl[11].call(null, d, cst_request, req);
Stdlib_Hashtbl[11].call(null, d, cst_vm, vm_val);
return [0, [7, d]];
}
}
return 0;
}
var ar = [0, "module"];
function execute_module(code, globals){
var
cl = [0, code, [0], ar, globals, 0],
m = [0, caml_make_vect(4096, 0), 0, 0, globals, 0],
frame = [0, cl, 0, 0, Stdlib_Hashtbl[1].call(null, 0, 4)],
a = code[3] - 1 | 0;
if(a >= 0){
var for$ = 0;
for(;;){
var b = m[2];
caml_check_bound(m[1], b)[b + 1] = 0;
m[2] = m[2] + 1 | 0;
var c = for$ + 1 | 0;
if(a === for$) break;
for$ = c;
}
}
m[3] = [0, frame, 0];
var vm_val = [26, m];
vm_run(vm_val);
var match = check_io_suspension(globals, vm_val);
if(! match) return vm_pop(vm_val);
var suspension = match[1];
return suspension;
}
function resume_module(suspended){
if(typeof suspended !== "number" && 7 === suspended[0]){
var d = suspended[1], vm_val = Stdlib_Hashtbl[6].call(null, d, cst_vm);
if(typeof vm_val !== "number" && 26 === vm_val[0]){
var m = vm_val[1], globals = m[4];
Stdlib_Hashtbl[11].call(null, globals, cst_io_request, 0);
vm_push(vm_val, 0);
vm_run(vm_val);
var match = check_io_suspension(globals, vm_val);
if(! match) return vm_pop(vm_val);
var suspension = match[1];
return suspension;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "resume_module: expected VmMachine"], 1);
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "resume_module: expected suspension dict"], 1);
}
function call_closure(cl, args, globals){
return vm_call_closure([24, cl], [6, args], [7, globals]);
}
var jit_compile_ref = Sx_vm[2];
runtime.caml_register_global
(178,
[0,
cek_call,
eval_expr,
trampoline,
to_ocaml_list,
str,
call_primitive,
unwrap_vm,
unwrap_frame,
unwrap_closure,
make_uv_cell,
uv_get,
uv_set,
make_upvalue_cell,
uv_get$0,
uv_set_b,
make_vm_code,
make_vm_closure,
make_vm_frame,
make_vm,
vm_push,
vm_pop,
vm_peek,
frame_read_u8,
frame_read_u16,
frame_read_i16,
frame_local_get,
frame_local_set,
frame_upvalue_get,
frame_upvalue_set,
frame_ip,
frame_set_ip_b,
frame_base,
frame_closure,
closure_code,
closure_upvalues,
closure_env,
code_bytecode,
code_constants,
code_locals,
vm_sp,
vm_set_sp_b,
vm_stack,
vm_set_stack_b,
vm_frames,
vm_set_frames_b,
vm_globals_ref,
vm_global_get,
vm_global_set,
vm_push_frame,
vm_closure_p,
vm_create_closure,
jit_failed_sentinel,
is_jit_failed,
is_lambda,
lambda_compiled,
lambda_set_compiled_b,
lambda_name,
cek_call_or_suspend,
env_walk,
env_walk_set_b,
active_vm,
vm_run_fn,
vm_call_fn,
vm_call_closure,
try_jit_call,
collect_n_from_stack,
collect_n_pairs,
pad_n_nils,
vm_call,
vm_resolve_ho_form,
vm_call_external,
vm_run,
vm_step,
check_io_suspension,
execute_module,
resume_module,
call_closure,
code_from_value,
jit_compile_ref,
jit_failed_sentinel,
is_jit_failed],
"Sx_vm_ref");
return;
}
(globalThis));
//# 27293 "../lib/.sx.objs/jsoo/default/sx.cma.js"
//# shape: Sx_render:[F(2),F(1),F(1)*,F(1)*,F(2),F(1),F(2),F(2),F(1),F(1),F(1),F(1),F(1),N,N,N,F(2),F(2),F(3),F(2),F(1),F(3),F(2),F(1)*,N,F(1),N,N,N,N,N,N,N,N,F(1),F(1),F(1),F(1),F(1),N,F(1),N,N,F(1),F(2),F(2),F(2),F(2),F(2),F(1),F(2),F(2),F(2),F(1),F(2),F(3),F(3),F(3),F(3),F(2),F(2),F(3),F(3),F(2),F(2),F(3),F(1),F(1),F(1),F(1)]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_equal = runtime.caml_equal,
caml_list_of_js_array = runtime.caml_list_of_js_array,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_ml_string_length = runtime.caml_ml_string_length,
caml_trampoline = runtime.caml_trampoline,
caml_trampoline_return = runtime.caml_trampoline_return,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call3(f, a0, a1, a2){
return (f.l >= 0 ? f.l : f.l = f.length) === 3
? f(a0, a1, a2)
: runtime.caml_call_gen(f, [a0, a1, a2]);
}
var
global_data = runtime.caml_get_global_data(),
boolean_attrs_set =
caml_list_of_js_array
(["async",
"autofocus",
"autoplay",
"checked",
"controls",
"default",
"defer",
"disabled",
"formnovalidate",
"hidden",
"inert",
"ismap",
"loop",
"multiple",
"muted",
"nomodule",
"novalidate",
"open",
"playsinline",
"readonly",
"required",
"reversed",
"selected"]),
cst_br = "br",
cst_col = "col",
cst_filter = "filter",
cst_hr = "hr",
cst_i = "i",
cst_img = "img",
cst_input = "input",
cst_link = "link",
cst_meta = "meta",
cst_source = "source",
cst_style = "style",
cst_wbr = "wbr",
html_tags_list =
caml_list_of_js_array
(["html",
"head",
"body",
"title",
cst_meta,
cst_link,
"script",
cst_style,
"noscript",
"header",
"nav",
"main",
"section",
"article",
"aside",
"footer",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"hgroup",
"div",
"p",
"blockquote",
"pre",
"figure",
"figcaption",
"address",
cst_hr,
"ul",
"ol",
"li",
"dl",
"dt",
"dd",
"menu",
"details",
"summary",
"dialog",
"a",
"span",
"em",
"strong",
"small",
"b",
cst_i,
"u",
"s",
"sub",
"sup",
"mark",
"abbr",
"cite",
"code",
"kbd",
"samp",
"var",
"time",
cst_br,
cst_wbr,
"table",
"thead",
"tbody",
"tfoot",
"tr",
"th",
"td",
"caption",
"colgroup",
cst_col,
"form",
cst_input,
"textarea",
"select",
"option",
"optgroup",
"button",
"label",
"fieldset",
"legend",
"datalist",
"output",
cst_img,
"video",
"audio",
cst_source,
"picture",
"canvas",
"iframe",
"svg",
"path",
"circle",
"rect",
"line",
"polyline",
"polygon",
"ellipse",
"g",
"defs",
"use",
"text",
"tspan",
"clipPath",
"mask",
"pattern",
"linearGradient",
"radialGradient",
"stop",
cst_filter,
"feGaussianBlur",
"feOffset",
"feBlend",
"feColorMatrix",
"feComposite",
"feMerge",
"feMergeNode",
"feTurbulence",
"feComponentTransfer",
"feFuncR",
"feFuncG",
"feFuncB",
"feFuncA",
"feDisplacementMap",
"feFlood",
"feImage",
"feMorphology",
"feSpecularLighting",
"feDiffuseLighting",
"fePointLight",
"feSpotLight",
"feDistantLight",
"animate",
"animateTransform",
"foreignObject",
"template",
"slot"]),
void_elements_list =
caml_list_of_js_array
(["area",
"base",
cst_br,
cst_col,
"embed",
cst_hr,
cst_img,
cst_input,
cst_link,
cst_meta,
"param",
cst_source,
"track",
cst_wbr]),
cst_begin = "begin",
cst_case = "case",
cst_cond = "cond",
cst_defcomp = "defcomp",
cst_defeffect = "defeffect",
cst_define = "define",
cst_defisland = "defisland",
cst_defmacro = "defmacro",
cst_defstyle = "defstyle",
cst_deftype = "deftype",
cst_do = "do",
cst_for_each = "for-each",
cst_if = "if",
cst_let = "let",
cst_let$0 = "let*",
cst_letrec = "letrec",
cst_map = "map",
cst_map_indexed = "map-indexed",
cst_provide = "provide",
cst_scope = "scope",
cst_when = "when",
render_html_forms =
[6,
caml_list_of_js_array
([[3, cst_if],
[3, cst_when],
[3, cst_cond],
[3, cst_case],
[3, cst_let],
[3, cst_let$0],
[3, cst_letrec],
[3, cst_begin],
[3, cst_do],
[3, cst_define],
[3, cst_defcomp],
[3, cst_defmacro],
[3, cst_defisland],
[3, "defpage"],
[3, "defhandler"],
[3, "defquery"],
[3, "defaction"],
[3, "defrelation"],
[3, cst_deftype],
[3, cst_defeffect],
[3, cst_defstyle],
[3, cst_map],
[3, cst_map_indexed],
[3, cst_filter],
[3, cst_for_each],
[3, cst_scope],
[3, cst_provide]])],
Sx_runtime = global_data.Sx_runtime,
Sx_types = global_data.Sx_types,
Stdlib_Hashtbl = global_data.Stdlib__Hashtbl,
Stdlib_List = global_data.Stdlib__List,
Sx_parser = global_data.Sx_parser,
Sx_ref = global_data.Sx_ref,
Stdlib_Buffer = global_data.Stdlib__Buffer,
Stdlib_String = global_data.Stdlib__String,
Sx_vm = global_data.Sx_vm,
Stdlib_Printexc = global_data.Stdlib__Printexc;
function eval_expr(expr, env){return Sx_ref[241].call(null, expr, env);}
var cond_scheme_p = Sx_ref[137], cst$6 = "", a = [3, cst$6];
function raw_html_content(v){
if(typeof v !== "number" && 17 === v[0]){var s = v[1]; return [3, s];}
return a;
}
function make_raw_html(v){
if(typeof v !== "number" && 3 === v[0]){var s = v[1]; return [17, s];}
return 0;
}
function scope_emit(v1, v2){
return Sx_runtime[1].call(null, "scope-emit!", [0, v1, [0, v2, 0]]);
}
function init(v){return Sx_runtime[1].call(null, "init", [0, v, 0]);}
function dict_has(a, b){
return Sx_runtime[1].call(null, "dict-has?", [0, a, [0, b, 0]]);
}
function dict_get(a, b){
return Sx_runtime[1].call(null, "dict-get", [0, a, [0, b, 0]]);
}
function is_component(v){
return Sx_runtime[1].call(null, "component?", [0, v, 0]);
}
function is_island(v){
return Sx_runtime[1].call(null, "island?", [0, v, 0]);
}
function is_macro(v){return Sx_runtime[1].call(null, "macro?", [0, v, 0]);}
function is_lambda(v){
return Sx_runtime[1].call(null, "lambda?", [0, v, 0]);
}
function is_nil(v){return Sx_runtime[1].call(null, "nil?", [0, v, 0]);}
var
b = [3, cst$6],
render_html_lake_ref = [0, function(a, param){return b;}],
c = [3, cst$6],
render_html_marsh_ref = [0, function(a, param){return c;}],
d = [3, cst$6],
render_html_island_ref = [0, function(b, a, param){return d;}];
function render_html_lake(args, env){
return caml_call2(render_html_lake_ref[1], args, env);
}
function render_html_marsh(args, env){
return caml_call2(render_html_marsh_ref[1], args, env);
}
function render_html_island(comp, args, env){
return caml_call3(render_html_island_ref[1], comp, args, env);
}
var cek_call = Sx_ref[221];
function trampoline(v){
if(typeof v !== "number" && 12 === v[0]){
var env = v[2], expr = v[1];
return Sx_ref[241].call(null, expr, [20, env]);
}
return v;
}
function expand_macro(m, args_val, env){
if(typeof m !== "number" && 11 === m[0]){
var mac = m[1];
a:
{
if(typeof args_val !== "number")
switch(args_val[0]){
case 6:
var args = args_val[1]; break a;
case 21:
var args = args_val[1][1]; break a;
}
var args = 0;
}
var
local = Sx_runtime[80].call(null, [20, mac[4]]),
ps$0 = Stdlib_List[20].call(null, function(p){return [3, p];}, mac[1]);
a:
{
var ps = ps$0, as = args;
for(;;){
if(! ps){
var match = mac[2];
if(! match) break a;
var rp = match[1];
Sx_runtime[77].call(null, local, [3, rp], [6, as]);
break a;
}
var ps_rest = ps[2], p = ps[1];
if(! as) break;
var as_rest = as[2], a = as[1];
Sx_runtime[77].call(null, local, p, a);
ps = ps_rest;
as = as_rest;
}
var b = Stdlib_List[10].call(null, ps);
Stdlib_List[18].call
(null,
function(p){Sx_runtime[77].call(null, local, p, 0); return 0;},
b);
}
return Sx_ref[241].call(null, mac[3], local);
}
return 0;
}
function try_catch(try_fn, catch_fn){
try{var b = Sx_runtime[6].call(null, try_fn, 0); return b;}
catch(e$0){
var e = caml_wrap_exception(e$0);
if(e[1] === Sx_vm[1]) throw caml_maybe_attach_backtrace(e, 0);
if(e[1] === Sx_types[9]){
var msg = e[2];
return Sx_runtime[6].call(null, catch_fn, [0, [3, msg], 0]);
}
var a = [0, [3, Stdlib_Printexc[1].call(null, e)], 0];
return Sx_runtime[6].call(null, catch_fn, a);
}
}
function set_render_active_b(v){return 0;}
function is_boolean_attr(name){
return Stdlib_List[37].call(null, name, boolean_attrs_set);
}
var
html_tags_val =
[6,
Stdlib_List[20].call(null, function(s){return [3, s];}, html_tags_list)],
void_elements_val =
[6,
Stdlib_List[20].call
(null, function(s){return [3, s];}, void_elements_list)],
boolean_attrs_val =
[6,
Stdlib_List[20].call
(null, function(s){return [3, s];}, boolean_attrs_set)],
cst_amp = "&amp;",
cst_gt = "&gt;",
cst_lt = "&lt;",
cst_quot = "&quot;";
function escape_html_raw(s){
var buf = Stdlib_Buffer[1].call(null, caml_ml_string_length(s));
Stdlib_String[30].call
(null,
function(c){
if(34 === c) return Stdlib_Buffer[16].call(null, buf, cst_quot);
if(60 <= c){
if(63 > c)
switch(c - 60 | 0){
case 0:
return Stdlib_Buffer[16].call(null, buf, cst_lt);
case 2:
return Stdlib_Buffer[16].call(null, buf, cst_gt);
}
}
else if(38 === c) return Stdlib_Buffer[16].call(null, buf, cst_amp);
return Stdlib_Buffer[12].call(null, buf, c);
},
s);
return Stdlib_Buffer[2].call(null, buf);
}
function escape_html_val(v){
a:
{
if(typeof v !== "number" && 3 === v[0]){var s$0 = v[1], s = s$0; break a;}
var s = Sx_types[35].call(null, v);
}
return [3, escape_html_raw(s)];
}
function escape_attr_val(v){return escape_html_val(v);}
var cst$8 = '="', e = [3, cst$6];
function render_attrs(attrs){
if(typeof attrs !== "number" && 7 === attrs[0]){
var d = attrs[1], buf = Stdlib_Buffer[1].call(null, 64);
Stdlib_Hashtbl[12].call
(null,
function(k, v){
if(is_boolean_attr(k)){
var a = Sx_types[67].call(null, v);
return a
? (Stdlib_Buffer
[12].call
(null, buf, 32),
Stdlib_Buffer[16].call(null, buf, k))
: a;
}
var b = 0 !== v ? 1 : 0;
if(! b) return b;
Stdlib_Buffer[12].call(null, buf, 32);
Stdlib_Buffer[16].call(null, buf, k);
Stdlib_Buffer[16].call(null, buf, cst$8);
var c = escape_html_raw(Sx_types[35].call(null, v));
Stdlib_Buffer[16].call(null, buf, c);
return Stdlib_Buffer[12].call(null, buf, 34);
},
d);
return [3, Stdlib_Buffer[2].call(null, buf)];
}
return e;
}
var
f = [3, cst$6],
render_to_html_ref = [0, function(expr, env){return f;}];
function scope_emitted(name){
return Sx_runtime[1].call(null, "scope-emitted", [0, name, 0]);
}
var
cst = "=",
cst_contains = "contains?",
definition_form_extensions = [6, 0],
g = [0, [3, cst_define], 0],
h = [0, [3, cst_defcomp], 0],
i = [0, [3, cst_defisland], 0],
j = [0, [3, cst_defmacro], 0],
k = [0, [3, cst_defstyle], 0],
l = [0, [3, cst_deftype], 0],
m = [0, [3, cst_defeffect], 0];
function definition_form_p(name){
var or = Sx_runtime[1].call(null, cst, [0, name, g]);
if(Sx_types[67].call(null, or)) return or;
var or$0 = Sx_runtime[1].call(null, cst, [0, name, h]);
if(Sx_types[67].call(null, or$0)) return or$0;
var or$1 = Sx_runtime[1].call(null, cst, [0, name, i]);
if(Sx_types[67].call(null, or$1)) return or$1;
var or$2 = Sx_runtime[1].call(null, cst, [0, name, j]);
if(Sx_types[67].call(null, or$2)) return or$2;
var or$3 = Sx_runtime[1].call(null, cst, [0, name, k]);
if(Sx_types[67].call(null, or$3)) return or$3;
var or$4 = Sx_runtime[1].call(null, cst, [0, name, l]);
if(Sx_types[67].call(null, or$4)) return or$4;
var or$5 = Sx_runtime[1].call(null, cst, [0, name, m]);
return Sx_types[67].call(null, or$5)
? or$5
: Sx_runtime
[1].call
(null,
cst_contains,
[0, definition_form_extensions, [0, name, 0]]);
}
var
cst$0 = "<",
cst_assoc = "assoc",
cst_inc = "inc",
cst_keyword = "keyword",
cst_skip = "skip",
n = [6, 0],
o = [2, 0.],
p = [3, cst_i],
q = [0, 0],
r = [3, cst_skip],
s = [3, cst_skip],
t = [3, cst_i],
u = [3, cst_i],
v = [0, 0],
w = [3, cst_skip],
x = [0, [3, cst_keyword], 0],
y = [3, cst_i],
z = [3, cst_i],
A = [3, cst_i],
B = [3, cst_i],
C = [0, 1],
D = [3, cst_skip],
E = [3, cst_i],
F = [3, cst_i];
function parse_element_args(args, env){
var
attrs = [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
a = Sx_runtime[5].call(null, args),
d = Stdlib_Hashtbl[1].call(null, 0, 2),
b = Sx_runtime[2].call(null, p);
Stdlib_Hashtbl[11].call(null, d, b, o);
var c = Sx_runtime[2].call(null, r);
Stdlib_Hashtbl[11].call(null, d, c, q);
var children = [0, n];
Stdlib_List[26].call
(null,
function(state, arg){
var skip = Sx_runtime[25].call(null, state, s);
if(Sx_types[67].call(null, skip)){
var
b = [0, Sx_runtime[25].call(null, state, t), 0],
c =
[0,
state,
[0,
w,
[0, v, [0, u, [0, Sx_runtime[1].call(null, cst_inc, b), 0]]]]];
return Sx_runtime[1].call(null, cst_assoc, c);
}
var
d = [0, Sx_runtime[73].call(null, arg), x],
and = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, and))
var
e = [0, Sx_runtime[24].call(null, args), 0],
f = [0, Sx_runtime[25].call(null, state, y), 0],
g = [0, Sx_runtime[1].call(null, cst_inc, f), e],
a = Sx_runtime[1].call(null, cst$0, g);
else
var a = and;
if(Sx_types[67].call(null, a)){
var
h = [0, Sx_runtime[25].call(null, state, z), 0],
i = Sx_runtime[1].call(null, cst_inc, h),
val = trampoline(eval_expr(Sx_runtime[17].call(null, args, i), env)),
j = Sx_types[69].call(null, arg);
Sx_runtime[11].call(null, attrs, j, val);
var
k = [0, Sx_runtime[25].call(null, state, A), 0],
l =
[0,
state,
[0,
D,
[0, C, [0, B, [0, Sx_runtime[1].call(null, cst_inc, k), 0]]]]];
return Sx_runtime[1].call(null, cst_assoc, l);
}
children[1] = Sx_runtime[10].call(null, children[1], arg);
var
m = [0, Sx_runtime[25].call(null, state, E), 0],
n = [0, state, [0, F, [0, Sx_runtime[1].call(null, cst_inc, m), 0]]];
return Sx_runtime[1].call(null, cst_assoc, n);
},
[7, d],
a);
return [6, [0, attrs, [0, children[1], 0]]];
}
function eval_cond(clauses, env){
var a = cond_scheme_p(clauses);
return Sx_types[67].call(null, a)
? eval_cond_scheme(clauses, env)
: eval_cond_clojure(clauses, env);
}
var G = [2, 1.];
function eval_cond_scheme(clauses$1, env){
var clauses = clauses$1;
for(;;){
var a = Sx_runtime[33].call(null, clauses);
if(Sx_types[67].call(null, a)) return 0;
var
clause = Sx_runtime[14].call(null, clauses),
test = Sx_runtime[14].call(null, clause),
body = Sx_runtime[17].call(null, clause, G),
b = Sx_runtime[113].call(null, test);
if(Sx_types[67].call(null, b)) return body;
var c = trampoline(eval_expr(test, env));
if(Sx_types[67].call(null, c)) return body;
var clauses$0 = Sx_runtime[15].call(null, clauses);
clauses = clauses$0;
}
}
var
cst_slice = "slice",
H = [0, [2, 2.], 0],
I = [2, 1.],
J = [0, [2, 2.], 0];
function eval_cond_clojure(clauses$1, env){
var clauses = clauses$1;
for(;;){
var
a = [0, Sx_runtime[24].call(null, clauses), H],
b = Sx_runtime[1].call(null, cst$0, a);
if(Sx_types[67].call(null, b)) return 0;
var
test = Sx_runtime[14].call(null, clauses),
body = Sx_runtime[17].call(null, clauses, I),
c = Sx_runtime[113].call(null, test);
if(Sx_types[67].call(null, c)) return body;
var d = trampoline(eval_expr(test, env));
if(Sx_types[67].call(null, d)) return body;
var clauses$0 = Sx_runtime[1].call(null, cst_slice, [0, clauses, J]);
clauses = clauses$0;
}
}
var
cst$1 = ">=",
cst_list = "list",
cst_symbol = "symbol",
K = [0, [3, cst_list], 0],
L = [0, [2, 2.], 0],
M = [0, [3, cst_symbol], 0],
N = [2, 1.];
function process_bindings(bindings, env){
var
local = Sx_runtime[80].call(null, env),
a = Sx_runtime[5].call(null, bindings);
Stdlib_List[18].call
(null,
function(pair){
var
b = [0, Sx_runtime[73].call(null, pair), K],
and = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, and))
var
c = [0, Sx_runtime[24].call(null, pair), L],
a = Sx_runtime[1].call(null, cst$1, c);
else
var a = and;
if(Sx_types[67].call(null, a)){
var
d = Sx_runtime[14].call(null, pair),
e = [0, Sx_runtime[73].call(null, d), M],
f = Sx_runtime[1].call(null, cst, e);
if(Sx_types[67].call(null, f))
var
g = Sx_runtime[14].call(null, pair),
name = Sx_types[68].call(null, g);
else
var
j = [0, Sx_runtime[14].call(null, pair), 0],
name = [3, Sx_runtime[4].call(null, j)];
var
h = trampoline(eval_expr(Sx_runtime[17].call(null, pair, N), local)),
i = Sx_runtime[3].call(null, name);
Sx_runtime[77].call(null, local, i, h);
}
return 0;
},
a);
return local;
}
var
cst$4 = "-",
cst$2 = "<>",
cst$5 = ">",
cst_raw = "raw!",
cst_starts_with = "starts-with?",
cst$3 = "~",
O = [0, [3, cst_list], 0],
P = [0, 0],
Q = [0, [3, cst_symbol], 0],
R = [0, 0],
S = [0, [3, cst$2], 0],
T = [0, [3, cst_raw], 0],
U = [0, [3, cst$3], 0],
V = [0, [3, "html:"], 0],
W = [0, [2, 0.], 0],
X = [0, [3, cst$4], 0],
Y = [0, [2, 1.], 0],
Z = [0, [3, cst_keyword], 0],
_ = [2, 1.];
function is_render_expr_p(expr){
var
a = [0, Sx_runtime[73].call(null, expr), O],
b = Sx_runtime[1].call(null, cst, a),
or = [0, 1 - Sx_types[67].call(null, b)],
or$0 = Sx_types[67].call(null, or) ? or : Sx_runtime[33].call(null, expr);
if(Sx_types[67].call(null, or$0)) return P;
var
h = Sx_runtime[14].call(null, expr),
c = [0, Sx_runtime[73].call(null, h), Q],
d = Sx_runtime[1].call(null, cst, c),
e = [0, 1 - Sx_types[67].call(null, d)];
if(Sx_types[67].call(null, e)) return R;
var
n = Sx_types[68].call(null, h),
or$1 = Sx_runtime[1].call(null, cst, [0, n, S]);
if(Sx_types[67].call(null, or$1)) return or$1;
var or$2 = Sx_runtime[1].call(null, cst, [0, n, T]);
if(Sx_types[67].call(null, or$2)) return or$2;
var or$3 = Sx_runtime[1].call(null, cst_starts_with, [0, n, U]);
if(Sx_types[67].call(null, or$3)) return or$3;
var or$4 = Sx_runtime[1].call(null, cst_starts_with, [0, n, V]);
if(Sx_types[67].call(null, or$4)) return or$4;
var
or$5 =
Sx_runtime[1].call(null, cst_contains, [0, html_tags_val, [0, n, 0]]);
if(Sx_types[67].call(null, or$5)) return or$5;
var
f = [0, Sx_runtime[1].call(null, "index-of", [0, n, X]), W],
and = Sx_runtime[1].call(null, cst$5, f);
if(! Sx_types[67].call(null, and)) return and;
var
g = [0, Sx_runtime[24].call(null, expr), Y],
and$0 = Sx_runtime[1].call(null, cst$5, g);
if(! Sx_types[67].call(null, and$0)) return and$0;
var
i = Sx_runtime[17].call(null, expr, _),
j = [0, Sx_runtime[73].call(null, i), Z];
return Sx_runtime[1].call(null, cst, j);
}
var
cst_class = "class",
$ = [0, [3, cst_class], 0],
aa = [3, cst_class],
ab = [0, [3, cst$6], 0],
ac = [3, " "],
ad = [3, cst_class],
ae = [0, [3, cst_style], 0],
af = [3, cst_style],
ag = [0, [3, cst$6], 0],
ah = [3, ";"],
ai = [3, cst_style];
function merge_spread_attrs(target, spread_dict){
var
a = Sx_runtime[1].call(null, "keys", [0, spread_dict, 0]),
b = Sx_runtime[5].call(null, a);
Stdlib_List[18].call
(null,
function(key){
var
val = dict_get(spread_dict, key),
c = Sx_runtime[1].call(null, cst, [0, key, $]);
if(Sx_types[67].call(null, c)){
var existing = dict_get(target, aa);
if(Sx_types[67].call(null, existing))
var
d = Sx_runtime[1].call(null, cst, [0, existing, ab]),
a = [0, 1 - Sx_types[67].call(null, d)];
else
var a = existing;
var
e =
Sx_types[67].call(null, a)
? [3,
Sx_runtime[4].call(null, [0, existing, [0, ac, [0, val, 0]]])]
: val;
Sx_runtime[11].call(null, target, ad, e);
}
else{
var f = Sx_runtime[1].call(null, cst, [0, key, ae]);
if(Sx_types[67].call(null, f)){
var existing$0 = dict_get(target, af);
if(Sx_types[67].call(null, existing$0))
var
g = Sx_runtime[1].call(null, cst, [0, existing$0, ag]),
b = [0, 1 - Sx_types[67].call(null, g)];
else
var b = existing$0;
var
h =
Sx_types[67].call(null, b)
? [3,
Sx_runtime[4].call(null, [0, existing$0, [0, ah, [0, val, 0]]])]
: val;
Sx_runtime[11].call(null, target, ai, h);
}
else
Sx_runtime[11].call(null, target, key, val);
}
return 0;
},
b);
return 0;
}
var
cst_boolean = "boolean",
cst_element_attrs = "element-attrs",
cst_false = "false",
cst_nil = "nil",
cst_number = "number",
cst_raw_html = "raw-html",
cst_spread = "spread",
cst_string = "string",
cst_thunk = "thunk",
cst_true = "true",
aj = [3, cst_nil],
ak = [3, cst$6],
al = [3, cst_string],
am = [3, cst_number],
an = [3, cst_boolean],
ao = [3, cst_true],
ap = [3, cst_false],
aq = [3, cst_list],
ar = [3, cst$6],
as = [3, cst_symbol],
at = [3, cst_keyword],
au = [3, cst_raw_html],
av = [3, cst_spread],
aw = [3, cst_element_attrs],
ax = [3, cst$6],
ay = [3, cst_thunk];
function render_to_html$0(counter, expr$1, env$1){
var expr = expr$1, env = env$1;
for(;;){
var match_val = Sx_runtime[73].call(null, expr);
if(caml_equal(match_val, aj)) return ak;
if(caml_equal(match_val, al)) return escape_html_val(expr);
if(caml_equal(match_val, am))
return [3, Sx_runtime[4].call(null, [0, expr, 0])];
if(caml_equal(match_val, an))
return Sx_types[67].call(null, expr) ? ao : ap;
if(caml_equal(match_val, aq)){
var c = Sx_runtime[33].call(null, expr);
return Sx_types[67].call(null, c)
? ar
: counter
< 50
? render_list_to_html$0(counter + 1 | 0, expr, env)
: caml_trampoline_return
(render_list_to_html$0, [0, expr, env]);
}
if(caml_equal(match_val, as)){
var a = trampoline(eval_expr(expr, env));
return counter < 50
? render_value_to_html$0(counter + 1 | 0, a, env)
: caml_trampoline_return(render_value_to_html$0, [0, a, env]);
}
if(caml_equal(match_val, at))
return escape_html_val(Sx_types[69].call(null, expr));
if(caml_equal(match_val, au)) return raw_html_content(expr);
if(caml_equal(match_val, av)){
scope_emit(aw, Sx_runtime[70].call(null, expr));
return ax;
}
if(! caml_equal(match_val, ay)){
var b = trampoline(eval_expr(expr, env));
return counter < 50
? render_value_to_html$0(counter + 1 | 0, b, env)
: caml_trampoline_return(render_value_to_html$0, [0, b, env]);
}
var
env$0 = Sx_types[89].call(null, expr),
expr$0 = Sx_types[88].call(null, expr);
expr = expr$0;
env = env$0;
}
}
function render_to_html(expr, env){
return caml_trampoline(render_to_html$0(0, expr, env));
}
var
az = [3, cst_nil],
aA = [3, cst$6],
aB = [3, cst_string],
aC = [3, cst_number],
aD = [3, cst_boolean],
aE = [3, cst_true],
aF = [3, cst_false],
aG = [3, cst_list],
aH = [3, cst_raw_html],
aI = [3, cst_spread],
aJ = [3, cst_element_attrs],
aK = [3, cst$6],
aL = [3, cst_thunk];
function render_value_to_html$0(counter, val, env){
var match_val = Sx_runtime[73].call(null, val);
if(caml_equal(match_val, az)) return aA;
if(caml_equal(match_val, aB)) return escape_html_val(val);
if(caml_equal(match_val, aC))
return [3, Sx_runtime[4].call(null, [0, val, 0])];
if(caml_equal(match_val, aD))
return Sx_types[67].call(null, val) ? aE : aF;
if(caml_equal(match_val, aG))
return counter < 50
? render_list_to_html$0(counter + 1 | 0, val, env)
: caml_trampoline_return(render_list_to_html$0, [0, val, env]);
if(caml_equal(match_val, aH)) return raw_html_content(val);
if(caml_equal(match_val, aI)){
scope_emit(aJ, Sx_runtime[70].call(null, val));
return aK;
}
if(! caml_equal(match_val, aL))
return escape_html_val([3, Sx_runtime[4].call(null, [0, val, 0])]);
var a = Sx_types[89].call(null, val), b = Sx_types[88].call(null, val);
return counter < 50
? render_to_html$0(counter + 1 | 0, b, a)
: caml_trampoline_return(render_to_html$0, [0, b, a]);
}
function render_value_to_html(val, env){
return caml_trampoline(render_value_to_html$0(0, val, env));
}
function render_html_form_p(name){
return Sx_runtime[1].call
(null, cst_contains, [0, render_html_forms, [0, name, 0]]);
}
var
cst$7 = "\xce\xbb",
cst_div = "<\/div>",
cst_div_class_sx_render_error_ =
'<div class="sx-render-error" style="color:red;font-size:0.875rem;padding:0.5rem;border:1px solid red;border-radius:0.25rem;margin:0.5rem 0;">Render error: ',
cst_join = "join",
aM = [3, cst$6],
aN = [0, [3, cst_symbol], 0],
aO = [3, cst$6],
aP = [0, [3, cst$2], 0],
aQ = [3, cst$6],
aR = [0, [3, cst_raw], 0],
aS = [3, cst$6],
aT = [0, [3, "lake"], 0],
aU = [0, [3, "marsh"], 0],
aV = [0, [3, "error-boundary"], 0],
aW = [0, [2, 1.], 0],
aX = [0, [3, cst_div], 0],
aY = [0, [3, cst$5], [0, [3, cst_gt], 0]],
aZ = [0, [3, cst$0], [0, [3, cst_lt], 0]],
a0 = [0, [3, cst_div], 0],
a1 = [3, cst_div_class_sx_render_error_],
a2 = [0, 0, 0],
a3 = [0, [3, cst_div], 0],
a4 = [3, cst_div_class_sx_render_error_],
a5 = [3, cst$6],
a6 = [3, '<div data-sx-boundary="true">'],
a7 = [0, [3, "portal"], 0],
a8 = [3, cst$6],
a9 = [0, [3, cst$3], 0],
a_ = [0, [3, cst$3], 0],
a$ = [0, [3, " -->"], 0],
ba = [3, "<!-- unknown component: "],
bb = [0, [3, "promise-delayed"], 0];
function render_list_to_html$0(counter, expr, env){
var e = Sx_runtime[33].call(null, expr);
if(Sx_types[67].call(null, e)) return aM;
var
head = Sx_runtime[14].call(null, expr),
f = [0, Sx_runtime[73].call(null, head), aN],
g = Sx_runtime[1].call(null, cst, f),
h = [0, 1 - Sx_types[67].call(null, g)];
if(Sx_types[67].call(null, h)){
var
i = Sx_runtime[5].call(null, expr),
j =
[0,
aO,
[0,
[6,
Stdlib_List[20].call
(null, function(x){return render_value_to_html(x, env);}, i)],
0]];
return Sx_runtime[1].call(null, cst_join, j);
}
var
name = Sx_types[68].call(null, head),
args = Sx_runtime[15].call(null, expr),
k = Sx_runtime[1].call(null, cst, [0, name, aP]);
if(Sx_types[67].call(null, k)){
var
l = Sx_runtime[5].call(null, args),
m =
[0,
aQ,
[0,
[6,
Stdlib_List[20].call
(null, function(x){return render_to_html(x, env);}, l)],
0]];
return Sx_runtime[1].call(null, cst_join, m);
}
var n = Sx_runtime[1].call(null, cst, [0, name, aR]);
if(Sx_types[67].call(null, n)){
var
o = Sx_runtime[5].call(null, args),
p =
[0,
aS,
[0,
[6,
Stdlib_List[20].call
(null,
function(x){
var a = [0, trampoline(eval_expr(x, env)), 0];
return [3, Sx_runtime[4].call(null, a)];
},
o)],
0]];
return Sx_runtime[1].call(null, cst_join, p);
}
var q = Sx_runtime[1].call(null, cst, [0, name, aT]);
if(Sx_types[67].call(null, q)) return render_html_lake(args, env);
var r = Sx_runtime[1].call(null, cst, [0, name, aU]);
if(Sx_types[67].call(null, r)) return render_html_marsh(args, env);
var s = Sx_runtime[1].call(null, cst, [0, name, aV]);
if(Sx_types[67].call(null, s)){
var
t = [0, Sx_runtime[24].call(null, args), aW],
has_fallback = Sx_runtime[1].call(null, cst$5, t),
body_exprs =
Sx_types[67].call(null, has_fallback)
? Sx_runtime[15].call(null, args)
: args,
fallback_expr =
Sx_types[67].call(null, has_fallback)
? Sx_runtime[14].call(null, args)
: 0,
u =
[0,
a6,
[0,
try_catch
([15,
cst$7,
function(args){
var
a = Sx_runtime[5].call(null, body_exprs),
b =
[0,
a5,
[0,
[6,
Stdlib_List[20].call
(null, function(x){return render_to_html(x, env);}, a)],
0]];
return Sx_runtime[1].call(null, cst_join, b);
}],
[15,
cst$7,
function(args){
if(args && ! args[2]){
var
err = args[1],
b = [0, [3, Sx_runtime[4].call(null, [0, err, 0])], aZ],
cst_replace = "replace",
c = [0, Sx_runtime[1].call(null, cst_replace, b), aY],
safe_err = Sx_runtime[1].call(null, cst_replace, c);
if(Sx_types[67].call(null, fallback_expr))
var
d = is_nil(fallback_expr),
a = [0, 1 - Sx_types[67].call(null, d)];
else
var a = fallback_expr;
return Sx_types[67].call(null, a)
? try_catch
([15,
cst$7,
function(args){
return render_to_html
([6,
[0, trampoline(eval_expr(fallback_expr, env)), [0, err, a2]]],
env);
}],
[15,
cst$7,
function(args){
if(args && ! args[2])
return [3,
Sx_runtime[4].call(null, [0, a1, [0, safe_err, a0]])];
return 0;
}])
: [3, Sx_runtime[4].call(null, [0, a4, [0, safe_err, a3]])];
}
return 0;
}]),
aX]];
return [3, Sx_runtime[4].call(null, u)];
}
var
or = Sx_runtime[1].call(null, cst, [0, name, a7]),
or$0 =
Sx_types[67].call(null, or)
? or
: Sx_runtime[1].call(null, cst, [0, name, bb]);
if(Sx_types[67].call(null, or$0)){
var
v = Sx_runtime[5].call(null, args),
w =
[0,
a8,
[0,
[6,
Stdlib_List[20].call
(null, function(x){return render_to_html(x, env);}, v)],
0]];
return Sx_runtime[1].call(null, cst_join, w);
}
var
x =
Sx_runtime[1].call
(null, cst_contains, [0, html_tags_val, [0, name, 0]]);
if(Sx_types[67].call(null, x))
return render_html_element(name, args, env);
var and = Sx_runtime[1].call(null, cst_starts_with, [0, name, a9]);
if(Sx_types[67].call(null, and))
var
and$0 = Sx_runtime[75].call(null, env, name),
a =
Sx_types[67].call(null, and$0)
? is_island(Sx_runtime[76].call(null, env, name))
: and$0;
else
var a = and;
if(Sx_types[67].call(null, a))
return render_html_island
(Sx_runtime[76].call(null, env, name), args, env);
var y = Sx_runtime[1].call(null, cst_starts_with, [0, name, a_]);
if(Sx_types[67].call(null, y)){
var val = Sx_runtime[76].call(null, env, name), z = is_component(val);
if(Sx_types[67].call(null, z))
return counter < 50
? render_html_component$0(counter + 1 | 0, val, args, env)
: caml_trampoline_return
(render_html_component$0, [0, val, args, env]);
var A = is_macro(val);
if(! Sx_types[67].call(null, A))
return [3, Sx_runtime[4].call(null, [0, ba, [0, name, a$]])];
var b = expand_macro(val, args, env);
return counter < 50
? render_to_html$0(counter + 1 | 0, b, env)
: caml_trampoline_return(render_to_html$0, [0, b, env]);
}
var B = render_html_form_p(name);
if(Sx_types[67].call(null, B))
return counter < 50
? dispatch_html_form$0(counter + 1 | 0, name, expr, env)
: caml_trampoline_return
(dispatch_html_form$0, [0, name, expr, env]);
var
and$1 = Sx_runtime[75].call(null, env, name),
C =
Sx_types[67].call(null, and$1)
? is_macro(Sx_runtime[76].call(null, env, name))
: and$1;
if(Sx_types[67].call(null, C)){
var c = expand_macro(Sx_runtime[76].call(null, env, name), args, env);
return counter < 50
? render_to_html$0(counter + 1 | 0, c, env)
: caml_trampoline_return(render_to_html$0, [0, c, env]);
}
var d = trampoline(eval_expr(expr, env));
return counter < 50
? render_value_to_html$0(counter + 1 | 0, d, env)
: caml_trampoline_return(render_value_to_html$0, [0, d, env]);
}
function render_list_to_html(expr, env){
return caml_trampoline(render_list_to_html$0(0, expr, env));
}
var
body_start = [2, 3.],
bc = [0, [3, cst_if], 0],
bd = [2, 1.],
be = [2, 2.],
bf = [0, [2, 3.], 0],
bg = [2, 3.],
bh = [3, cst$6],
bi = [0, [3, cst_when], 0],
bj = [2, 1.],
bk = [3, cst$6],
bl = [0, [2, 3.], 0],
bm = [2, 2.],
bn = [2, 2.],
bo = [3, cst$6],
bp = [0, [3, cst_cond], 0],
bq = [3, cst$6],
br = [0, [3, cst_case], 0],
bs = [0, [3, cst_letrec], 0],
bt = [2, 1.],
bu = [0, [2, 2.], 0],
bv = [0, [3, cst_symbol], 0],
bw = [0, [3, cst_symbol], 0],
bx = [2, 1.],
by = [0, [2, 1.], 0],
bz = [0, [3, cst_let], 0],
bA = [2, 1.],
bB = [0, [2, 3.], 0],
bC = [2, 2.],
bD = [2, 2.],
bE = [3, cst$6],
bF = [0, [3, cst_begin], 0],
bG = [0, [2, 2.], 0],
bH = [2, 1.],
bI = [2, 1.],
bJ = [3, cst$6],
bK = [3, cst$6],
bL = [0, [3, cst_map], 0],
bM = [2, 1.],
bN = [2, 2.],
bO = [3, cst$6],
bP = [0, [3, cst_map_indexed], 0],
bQ = [2, 1.],
bR = [2, 2.],
bS = [3, cst$6],
bT = [0, [3, cst_filter], 0],
bU = [0, [3, cst_for_each], 0],
bV = [2, 1.],
bW = [2, 2.],
bX = [3, cst$6],
bY = [0, [3, cst_scope], 0],
bZ = [2, 1.],
b0 = [0, [2, 2.], 0],
b1 = [0, [2, 2.], 0],
b2 = [0, [3, cst_keyword], 0],
b3 = [0, [3, "value"], 0],
b4 = [2, 1.],
b5 = [0, [2, 2.], 0],
b6 = [0, [2, 1.], 0],
b7 = [3, cst$6],
b8 = [0, [3, cst_provide], 0],
b9 = [2, 1.],
b_ = [2, 2.],
b$ = [0, [2, 3.], 0],
ca = [0, [2, 1.], 0],
cb = [3, cst$6],
cc = [0, [3, cst_do], 0],
cd = [0, [3, cst_let$0], 0];
function dispatch_html_form$0(counter, name, expr, env){
var l = Sx_runtime[1].call(null, cst, [0, name, bc]);
if(Sx_types[67].call(null, l)){
var
cond_val =
trampoline(eval_expr(Sx_runtime[17].call(null, expr, bd), env));
if(Sx_types[67].call(null, cond_val)){
var b = Sx_runtime[17].call(null, expr, be);
return counter < 50
? render_to_html$0(counter + 1 | 0, b, env)
: caml_trampoline_return(render_to_html$0, [0, b, env]);
}
var
m = [0, Sx_runtime[24].call(null, expr), bf],
n = Sx_runtime[1].call(null, cst$5, m);
if(! Sx_types[67].call(null, n)) return bh;
var c = Sx_runtime[17].call(null, expr, bg);
return counter < 50
? render_to_html$0(counter + 1 | 0, c, env)
: caml_trampoline_return(render_to_html$0, [0, c, env]);
}
var o = Sx_runtime[1].call(null, cst, [0, name, bi]), cst_range = "range";
if(Sx_types[67].call(null, o)){
var
p = trampoline(eval_expr(Sx_runtime[17].call(null, expr, bj), env)),
q = [0, 1 - Sx_types[67].call(null, p)];
if(Sx_types[67].call(null, q)) return bk;
var
r = [0, Sx_runtime[24].call(null, expr), bl],
s = Sx_runtime[1].call(null, cst, r);
if(Sx_types[67].call(null, s)){
var d = Sx_runtime[17].call(null, expr, bm);
return counter < 50
? render_to_html$0(counter + 1 | 0, d, env)
: caml_trampoline_return(render_to_html$0, [0, d, env]);
}
var
t = [0, bn, [0, Sx_runtime[24].call(null, expr), 0]],
u = Sx_runtime[1].call(null, cst_range, t),
v = Sx_runtime[5].call(null, u),
w =
[0,
bo,
[0,
[6,
Stdlib_List[20].call
(null,
function(i){
return render_to_html(Sx_runtime[17].call(null, expr, i), env);
},
v)],
0]];
return Sx_runtime[1].call(null, cst_join, w);
}
var x = Sx_runtime[1].call(null, cst, [0, name, bp]);
if(Sx_types[67].call(null, x)){
var branch = eval_cond(Sx_runtime[15].call(null, expr), env);
return Sx_types[67].call(null, branch)
? counter
< 50
? render_to_html$0(counter + 1 | 0, branch, env)
: caml_trampoline_return(render_to_html$0, [0, branch, env])
: bq;
}
var y = Sx_runtime[1].call(null, cst, [0, name, br]);
if(Sx_types[67].call(null, y)){
var e = trampoline(eval_expr(expr, env));
return counter < 50
? render_to_html$0(counter + 1 | 0, e, env)
: caml_trampoline_return(render_to_html$0, [0, e, env]);
}
var z = Sx_runtime[1].call(null, cst, [0, name, bs]);
if(Sx_types[67].call(null, z)){
var
bindings = Sx_runtime[17].call(null, expr, bt),
body = Sx_runtime[1].call(null, cst_slice, [0, expr, bu]),
local = Sx_runtime[80].call(null, env),
A = Sx_runtime[5].call(null, bindings);
Stdlib_List[18].call
(null,
function(pair){
var
a = Sx_runtime[14].call(null, pair),
b = [0, Sx_runtime[73].call(null, a), bv],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c))
var
d = Sx_runtime[14].call(null, pair),
pname = Sx_types[68].call(null, d);
else
var
f = [0, Sx_runtime[14].call(null, pair), 0],
pname = [3, Sx_runtime[4].call(null, f)];
var e = Sx_runtime[3].call(null, pname);
Sx_runtime[77].call(null, local, e, 0);
return 0;
},
A);
var B = Sx_runtime[5].call(null, bindings);
Stdlib_List[18].call
(null,
function(pair){
var
a = Sx_runtime[14].call(null, pair),
b = [0, Sx_runtime[73].call(null, a), bw],
c = Sx_runtime[1].call(null, cst, b);
if(Sx_types[67].call(null, c))
var
d = Sx_runtime[14].call(null, pair),
pname = Sx_types[68].call(null, d);
else
var
g = [0, Sx_runtime[14].call(null, pair), 0],
pname = [3, Sx_runtime[4].call(null, g)];
var
e = trampoline(eval_expr(Sx_runtime[17].call(null, pair, bx), local)),
f = Sx_runtime[3].call(null, pname);
Sx_runtime[78].call(null, local, f, e);
return 0;
},
B);
var
C = [0, Sx_runtime[24].call(null, body), by],
D = Sx_runtime[1].call(null, cst$5, C);
if(Sx_types[67].call(null, D)){
var E = init(body), F = Sx_runtime[5].call(null, E);
Stdlib_List[18].call
(null, function(e){trampoline(eval_expr(e, local)); return 0;}, F);
}
var g = Sx_runtime[16].call(null, body);
return counter < 50
? render_to_html$0(counter + 1 | 0, g, local)
: caml_trampoline_return(render_to_html$0, [0, g, local]);
}
var
or = Sx_runtime[1].call(null, cst, [0, name, bz]),
or$0 =
Sx_types[67].call(null, or)
? or
: Sx_runtime[1].call(null, cst, [0, name, cd]);
if(Sx_types[67].call(null, or$0)){
var
local$0 = process_bindings(Sx_runtime[17].call(null, expr, bA), env),
G = [0, Sx_runtime[24].call(null, expr), bB],
H = Sx_runtime[1].call(null, cst, G);
if(Sx_types[67].call(null, H)){
var h = Sx_runtime[17].call(null, expr, bC);
return counter < 50
? render_to_html$0(counter + 1 | 0, h, local$0)
: caml_trampoline_return(render_to_html$0, [0, h, local$0]);
}
var
I = [0, bD, [0, Sx_runtime[24].call(null, expr), 0]],
J = Sx_runtime[1].call(null, cst_range, I),
K = Sx_runtime[5].call(null, J),
L =
[0,
bE,
[0,
[6,
Stdlib_List[20].call
(null,
function(i){
return render_to_html
(Sx_runtime[17].call(null, expr, i), local$0);
},
K)],
0]];
return Sx_runtime[1].call(null, cst_join, L);
}
var
or$1 = Sx_runtime[1].call(null, cst, [0, name, bF]),
or$2 =
Sx_types[67].call(null, or$1)
? or$1
: Sx_runtime[1].call(null, cst, [0, name, cc]);
if(Sx_types[67].call(null, or$2)){
var
M = [0, Sx_runtime[24].call(null, expr), bG],
N = Sx_runtime[1].call(null, cst, M);
if(Sx_types[67].call(null, N)){
var i = Sx_runtime[17].call(null, expr, bH);
return counter < 50
? render_to_html$0(counter + 1 | 0, i, env)
: caml_trampoline_return(render_to_html$0, [0, i, env]);
}
var
O = [0, bI, [0, Sx_runtime[24].call(null, expr), 0]],
P = Sx_runtime[1].call(null, cst_range, O),
Q = Sx_runtime[5].call(null, P),
R =
[0,
bJ,
[0,
[6,
Stdlib_List[20].call
(null,
function(i){
return render_to_html(Sx_runtime[17].call(null, expr, i), env);
},
Q)],
0]];
return Sx_runtime[1].call(null, cst_join, R);
}
var S = definition_form_p(name);
if(Sx_types[67].call(null, S)){
trampoline(eval_expr(expr, env));
return bK;
}
var T = Sx_runtime[1].call(null, cst, [0, name, bL]);
if(Sx_types[67].call(null, T)){
var
f = trampoline(eval_expr(Sx_runtime[17].call(null, expr, bM), env)),
coll = trampoline(eval_expr(Sx_runtime[17].call(null, expr, bN), env)),
U = Sx_runtime[5].call(null, coll),
V =
[0,
bO,
[0,
[6,
Stdlib_List[20].call
(null,
function(item){
var a = is_lambda(f);
return Sx_types[67].call(null, a)
? render_lambda_html(f, [6, [0, item, 0]], env)
: render_to_html
(Sx_runtime[7].call(null, f, [6, [0, item, 0]]), env);
},
U)],
0]];
return Sx_runtime[1].call(null, cst_join, V);
}
var W = Sx_runtime[1].call(null, cst, [0, name, bP]);
if(Sx_types[67].call(null, W)){
var
f$0 = trampoline(eval_expr(Sx_runtime[17].call(null, expr, bQ), env)),
coll$0 = trampoline(eval_expr(Sx_runtime[17].call(null, expr, bR), env)),
X = Sx_runtime[5].call(null, coll$0),
Y =
[0,
bS,
[0,
[6,
Stdlib_List[21].call
(null,
function(i, item){
var i$0 = [2, i], a = is_lambda(f$0);
return Sx_types[67].call(null, a)
? render_lambda_html(f$0, [6, [0, i$0, [0, item, 0]]], env)
: render_to_html
(Sx_runtime[7].call(null, f$0, [6, [0, i$0, [0, item, 0]]]),
env);
},
X)],
0]];
return Sx_runtime[1].call(null, cst_join, Y);
}
var Z = Sx_runtime[1].call(null, cst, [0, name, bT]);
if(Sx_types[67].call(null, Z)){
var j = trampoline(eval_expr(expr, env));
return counter < 50
? render_to_html$0(counter + 1 | 0, j, env)
: caml_trampoline_return(render_to_html$0, [0, j, env]);
}
var _ = Sx_runtime[1].call(null, cst, [0, name, bU]);
if(Sx_types[67].call(null, _)){
var
f$1 = trampoline(eval_expr(Sx_runtime[17].call(null, expr, bV), env)),
coll$1 = trampoline(eval_expr(Sx_runtime[17].call(null, expr, bW), env)),
$ = Sx_runtime[5].call(null, coll$1),
aa =
[0,
bX,
[0,
[6,
Stdlib_List[20].call
(null,
function(item){
var a = is_lambda(f$1);
return Sx_types[67].call(null, a)
? render_lambda_html(f$1, [6, [0, item, 0]], env)
: render_to_html
(Sx_runtime[7].call(null, f$1, [6, [0, item, 0]]), env);
},
$)],
0]];
return Sx_runtime[1].call(null, cst_join, aa);
}
var ab = Sx_runtime[1].call(null, cst, [0, name, bY]);
if(! Sx_types[67].call(null, ab)){
var am = Sx_runtime[1].call(null, cst, [0, name, b8]);
if(! Sx_types[67].call(null, am)){
var k = trampoline(eval_expr(expr, env));
return counter < 50
? render_value_to_html$0(counter + 1 | 0, k, env)
: caml_trampoline_return(render_value_to_html$0, [0, k, env]);
}
var
prov_name =
trampoline(eval_expr(Sx_runtime[17].call(null, expr, b9), env)),
prov_val =
trampoline(eval_expr(Sx_runtime[17].call(null, expr, b_), env)),
an = [0, Sx_runtime[24].call(null, expr), b$],
body_count = Sx_runtime[1].call(null, cst$4, an);
Sx_runtime[103].call(null, prov_name, prov_val);
var ao = Sx_runtime[1].call(null, cst, [0, body_count, ca]);
if(Sx_types[67].call(null, ao))
var
result$0 =
render_to_html(Sx_runtime[17].call(null, expr, body_start), env);
else
var
ap =
[0,
body_start,
[0,
Sx_runtime[1].call(null, "+", [0, body_start, [0, body_count, 0]]),
0]],
aq = Sx_runtime[1].call(null, cst_range, ap),
ar = Sx_runtime[5].call(null, aq),
as =
[0,
cb,
[0,
[6,
Stdlib_List[20].call
(null,
function(i){
return render_to_html(Sx_runtime[17].call(null, expr, i), env);
},
ar)],
0]],
result$0 = Sx_runtime[1].call(null, cst_join, as);
Sx_runtime[104].call(null, prov_name);
return result$0;
}
var
scope_name =
trampoline(eval_expr(Sx_runtime[17].call(null, expr, bZ), env)),
rest_args = Sx_runtime[1].call(null, cst_slice, [0, expr, b0]),
ac = [0, Sx_runtime[24].call(null, rest_args), b1],
and = Sx_runtime[1].call(null, cst$1, ac);
if(Sx_types[67].call(null, and)){
var
ad = Sx_runtime[14].call(null, rest_args),
ae = [0, Sx_runtime[73].call(null, ad), b2],
and$0 = Sx_runtime[1].call(null, cst, ae);
if(Sx_types[67].call(null, and$0))
var
af = Sx_runtime[14].call(null, rest_args),
ag = [0, Sx_types[69].call(null, af), b3],
a = Sx_runtime[1].call(null, cst, ag);
else
var a = and$0;
}
else
var a = and;
if(Sx_types[67].call(null, a))
var
ah =
trampoline(eval_expr(Sx_runtime[17].call(null, rest_args, b4), env)),
body_exprs = Sx_runtime[1].call(null, cst_slice, [0, rest_args, b5]),
scope_val = ah;
else
var body_exprs = rest_args, scope_val = 0;
Sx_runtime[103].call(null, scope_name, scope_val);
var
ai = [0, Sx_runtime[24].call(null, body_exprs), b6],
aj = Sx_runtime[1].call(null, cst, ai);
if(Sx_types[67].call(null, aj))
var result = render_to_html(Sx_runtime[14].call(null, body_exprs), env);
else
var
ak = Sx_runtime[5].call(null, body_exprs),
al =
[0,
b7,
[0,
[6,
Stdlib_List[20].call
(null, function(e){return render_to_html(e, env);}, ak)],
0]],
result = Sx_runtime[1].call(null, cst_join, al);
Sx_runtime[104].call(null, scope_name);
return result;
}
function dispatch_html_form(name, expr, env){
return caml_trampoline(dispatch_html_form$0(0, name, expr, env));
}
function render_lambda_html(f, args, env){
var
a = Sx_types[72].call(null, f),
local = Sx_runtime[81].call(null, a, env),
b = Sx_types[70].call(null, f);
Sx_runtime[93].call
(null,
[15,
cst$7,
function(args$0){
if(args$0){
var a = args$0[2];
if(a && ! a[2]){
var
p = a[1],
i = args$0[1],
b = Sx_runtime[17].call(null, args, i),
c = Sx_runtime[3].call(null, p);
return Sx_runtime[77].call(null, local, c, b);
}
}
return 0;
}],
b);
return render_to_html(Sx_types[71].call(null, f), local);
}
var
ce = [6, 0],
cf = [2, 0.],
cg = [3, cst_i],
ch = [0, 0],
ci = [3, cst_skip],
cj = [3, cst_skip],
ck = [3, cst_i],
cl = [3, cst_i],
cm = [0, 0],
cn = [3, cst_skip],
co = [0, [3, cst_keyword], 0],
cp = [3, cst_i],
cq = [3, cst_i],
cr = [3, cst_i],
cs = [3, cst_i],
ct = [0, 1],
cu = [3, cst_skip],
cv = [3, cst_i],
cw = [3, cst_i],
cx = [3, cst$6],
cy = [3, "children"];
function render_html_component$0(counter, comp, args, env){
var
kwargs = [7, Stdlib_Hashtbl[1].call(null, 0, 0)],
b = Sx_runtime[5].call(null, args),
d = Stdlib_Hashtbl[1].call(null, 0, 2),
c = Sx_runtime[2].call(null, cg);
Stdlib_Hashtbl[11].call(null, d, c, cf);
var e = Sx_runtime[2].call(null, ci);
Stdlib_Hashtbl[11].call(null, d, e, ch);
var children = [0, ce];
Stdlib_List[26].call
(null,
function(state, arg){
var skip = Sx_runtime[25].call(null, state, cj);
if(Sx_types[67].call(null, skip)){
var
b = [0, Sx_runtime[25].call(null, state, ck), 0],
c =
[0,
state,
[0,
cn,
[0, cm, [0, cl, [0, Sx_runtime[1].call(null, cst_inc, b), 0]]]]];
return Sx_runtime[1].call(null, cst_assoc, c);
}
var
d = [0, Sx_runtime[73].call(null, arg), co],
and = Sx_runtime[1].call(null, cst, d);
if(Sx_types[67].call(null, and))
var
e = [0, Sx_runtime[24].call(null, args), 0],
f = [0, Sx_runtime[25].call(null, state, cp), 0],
g = [0, Sx_runtime[1].call(null, cst_inc, f), e],
a = Sx_runtime[1].call(null, cst$0, g);
else
var a = and;
if(Sx_types[67].call(null, a)){
var
h = [0, Sx_runtime[25].call(null, state, cq), 0],
i = Sx_runtime[1].call(null, cst_inc, h),
val = trampoline(eval_expr(Sx_runtime[17].call(null, args, i), env)),
j = Sx_types[69].call(null, arg);
Sx_runtime[11].call(null, kwargs, j, val);
var
k = [0, Sx_runtime[25].call(null, state, cr), 0],
l =
[0,
state,
[0,
cu,
[0, ct, [0, cs, [0, Sx_runtime[1].call(null, cst_inc, k), 0]]]]];
return Sx_runtime[1].call(null, cst_assoc, l);
}
children[1] = Sx_runtime[10].call(null, children[1], arg);
var
m = [0, Sx_runtime[25].call(null, state, cv), 0],
n = [0, state, [0, cw, [0, Sx_runtime[1].call(null, cst_inc, m), 0]]];
return Sx_runtime[1].call(null, cst_assoc, n);
},
[7, d],
b);
var
f = Sx_types[81].call(null, comp),
local = Sx_runtime[81].call(null, f, env),
g = Sx_types[79].call(null, comp),
h = Sx_runtime[5].call(null, g);
Stdlib_List[18].call
(null,
function(p){
var
a = dict_has(kwargs, p),
b = Sx_types[67].call(null, a) ? dict_get(kwargs, p) : 0,
c = Sx_runtime[3].call(null, p);
Sx_runtime[77].call(null, local, c, b);
return 0;
},
h);
var i = Sx_types[82].call(null, comp);
if(Sx_types[67].call(null, i)){
var
j = Sx_runtime[5].call(null, children[1]),
k =
[0,
cx,
[0,
[6,
Stdlib_List[20].call
(null, function(c){return render_to_html(c, env);}, j)],
0]],
l = make_raw_html(Sx_runtime[1].call(null, cst_join, k)),
m = Sx_runtime[3].call(null, cy);
Sx_runtime[77].call(null, local, m, l);
}
var a = Sx_types[80].call(null, comp);
return counter < 50
? render_to_html$0(counter + 1 | 0, a, local)
: caml_trampoline_return(render_to_html$0, [0, a, local]);
}
function render_html_component(comp, args, env){
return caml_trampoline(render_html_component$0(0, comp, args, env));
}
var
cz = [2, 1.],
cA = [0, [3, " />"], 0],
cB = [3, cst$0],
cC = [3, cst_element_attrs],
cD = [3, cst$6],
cE = [3, cst_element_attrs],
cF = [3, cst_element_attrs],
cG = [0, [3, cst$5], 0],
cH = [3, "<\/"],
cI = [3, cst$5],
cJ = [3, cst$0];
function render_html_element(tag, args, env){
var
parsed = parse_element_args(args, env),
attrs = Sx_runtime[14].call(null, parsed),
children = Sx_runtime[17].call(null, parsed, cz),
is_void =
Sx_runtime[1].call
(null, cst_contains, [0, void_elements_val, [0, tag, 0]]);
if(Sx_types[67].call(null, is_void)){
var a = [0, cB, [0, tag, [0, render_attrs(attrs), cA]]];
return [3, Sx_runtime[4].call(null, a)];
}
Sx_runtime[103].call(null, cC, 0);
var
b = Sx_runtime[5].call(null, children),
c =
[0,
cD,
[0,
[6,
Stdlib_List[20].call
(null, function(c){return render_to_html(c, env);}, b)],
0]],
content = Sx_runtime[1].call(null, cst_join, c),
d = scope_emitted(cE),
e = Sx_runtime[5].call(null, d);
Stdlib_List[18].call
(null,
function(spread_dict){merge_spread_attrs(attrs, spread_dict); return 0;},
e);
Sx_runtime[104].call(null, cF);
var
f =
[0,
cJ,
[0,
tag,
[0,
render_attrs(attrs),
[0, cI, [0, content, [0, cH, [0, tag, cG]]]]]]];
return [3, Sx_runtime[4].call(null, f)];
}
render_to_html_ref[1] = render_to_html;
function escape_html_buf(buf, s){
var a = caml_ml_string_length(s) - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
var c = runtime.caml_string_unsafe_get(s, i);
a:
if(34 === c)
Stdlib_Buffer[16].call(null, buf, cst_quot);
else{
if(60 <= c){
if(63 > c)
switch(c - 60 | 0){
case 0:
Stdlib_Buffer[16].call(null, buf, cst_lt); break a;
case 2:
Stdlib_Buffer[16].call(null, buf, cst_gt); break a;
}
}
else if(38 === c){Stdlib_Buffer[16].call(null, buf, cst_amp); break a;}
Stdlib_Buffer[12].call(null, buf, c);
}
var b = i + 1 | 0;
if(a === i) break;
i = b;
}
}
return 0;
}
function render_attrs_buf(buf, attrs){
return Stdlib_Hashtbl[12].call
(null,
function(k, v){
if(is_boolean_attr(k)){
var a = Sx_types[67].call(null, v);
return a
? (Stdlib_Buffer
[12].call
(null, buf, 32),
Stdlib_Buffer[16].call(null, buf, k))
: a;
}
var b = 0 !== v ? 1 : 0;
return b
? (Stdlib_Buffer
[12].call
(null, buf, 32),
Stdlib_Buffer[16].call(null, buf, k),
Stdlib_Buffer[16].call(null, buf, cst$8),
escape_html_buf(buf, Sx_types[35].call(null, v)),
Stdlib_Buffer[12].call(null, buf, 34))
: b;
},
attrs);
}
function render_to_buf(buf, expr, env){
var v = caml_call2(render_to_html_ref[1], expr, [20, env]);
if(typeof v !== "number")
switch(v[0]){
case 3:
case 17:
var s = v[1]; return Stdlib_Buffer[16].call(null, buf, s);
}
var a = Sx_runtime[2].call(null, v);
return Stdlib_Buffer[16].call(null, buf, a);
}
function render_to_buffer(buf, expr, env){return render_to_buf(buf, expr, env);
}
function render_to_html_streaming(expr, env){
var v = caml_call2(render_to_html_ref[1], expr, [20, env]);
if(typeof v !== "number")
switch(v[0]){case 3:case 17: var s = v[1]; return s;}
return Sx_runtime[2].call(null, v);
}
function do_render_to_html(expr, env_val){
var v = caml_call2(render_to_html_ref[1], expr, env_val);
if(typeof v !== "number")
switch(v[0]){case 3:case 17: var s = v[1]; return s;}
return Sx_runtime[2].call(null, v);
}
var cst_render_to_html = "render-to-html";
function sx_render_to_html(render_env, expr, eval_env){
if(! Sx_types[28].call(null, render_env, cst_render_to_html))
return do_render_to_html(expr, [20, eval_env]);
var
fn = Sx_types[30].call(null, render_env, cst_render_to_html),
result =
Sx_ref[221].call(null, fn, [6, [0, expr, [0, [20, eval_env], 0]]]);
if(typeof result !== "number")
switch(result[0]){case 3:case 17: var s = result[1]; return s;}
return Sx_runtime[2].call(null, result);
}
function is_html_tag(name){
return Stdlib_List[37].call(null, name, html_tags_list);
}
function is_void(name){
return Stdlib_List[37].call(null, name, void_elements_list);
}
var cK = [3, cst$6], cL = [4, cst_do], cM = [3, cst$6], cN = [4, cst_do];
function setup_render_env(raw_env){
var env = [20, raw_env];
function bind(name, fn){
Sx_types[26].call(null, raw_env, name, [15, name, fn]);
return 0;
}
bind
("render-html",
function(args){
if(args){
var expr = args[1];
if(typeof expr !== "number" && 3 === expr[0] && ! args[2]){
var src = expr[1], exprs = Sx_parser[17].call(null, src);
if(exprs)
if(exprs[2])
var expr$0 = [6, [0, cL, exprs]];
else
var e$0 = exprs[1], expr$0 = e$0;
else
var expr$0 = 0;
return caml_call2(render_to_html_ref[1], expr$0, env);
}
var match = args[2];
if(! match) return caml_call2(render_to_html_ref[1], expr, env);
var a = match[1];
if(typeof a !== "number" && 20 === a[0] && ! match[2]){
var e = a[1];
return caml_call2(render_to_html_ref[1], expr, [20, e]);
}
}
return cK;
});
return bind
(cst_render_to_html,
function(args){
if(args){
var expr = args[1];
if(typeof expr !== "number" && 3 === expr[0] && ! args[2]){
var src = expr[1], exprs = Sx_parser[17].call(null, src);
if(exprs)
if(exprs[2])
var expr$0 = [6, [0, cN, exprs]];
else
var e$0 = exprs[1], expr$0 = e$0;
else
var expr$0 = 0;
return caml_call2(render_to_html_ref[1], expr$0, env);
}
var match = args[2];
if(! match)
return caml_call2(render_to_html_ref[1], expr, env);
var a = match[1];
if(typeof a !== "number" && 20 === a[0] && ! match[2]){
var e = a[1];
return caml_call2(render_to_html_ref[1], expr, [20, e]);
}
}
return cM;
});
}
runtime.caml_register_global
(384,
[0,
eval_expr,
cond_scheme_p,
raw_html_content,
make_raw_html,
scope_emit,
init,
dict_has,
dict_get,
is_component,
is_island,
is_macro,
is_lambda,
is_nil,
render_html_lake_ref,
render_html_marsh_ref,
render_html_island_ref,
render_html_lake,
render_html_marsh,
render_html_island,
cek_call,
trampoline,
expand_macro,
try_catch,
set_render_active_b,
boolean_attrs_set,
is_boolean_attr,
html_tags_list,
html_tags_list,
html_tags_val,
void_elements_list,
void_elements_list,
void_elements_val,
boolean_attrs_set,
boolean_attrs_val,
escape_html_raw,
escape_html_raw,
escape_html_val,
escape_attr_val,
render_attrs,
render_to_html_ref,
scope_emitted,
render_html_forms,
definition_form_extensions,
definition_form_p,
parse_element_args,
eval_cond,
eval_cond_scheme,
eval_cond_clojure,
process_bindings,
is_render_expr_p,
merge_spread_attrs,
render_to_html,
render_value_to_html,
render_html_form_p,
render_list_to_html,
dispatch_html_form,
render_lambda_html,
render_html_component,
render_html_element,
escape_html_buf,
render_attrs_buf,
render_to_buf,
render_to_buffer,
render_to_html_streaming,
do_render_to_html,
sx_render_to_html,
is_html_tag,
is_void,
escape_html_raw,
setup_render_env],
"Sx_render");
return;
}
(globalThis));
//# 15 "../.js/default/js_of_ocaml-compiler.runtime/jsoo_runtime.cma.js"
//# shape: Jsoo_runtime__Runtime_version:[N,N]
(function
(globalThis){
"use strict";
var runtime = globalThis.jsoo_runtime;
runtime.caml_register_global
(2, [0, "6.3.2", ""], "Jsoo_runtime__Runtime_version");
return;
}
(globalThis));
//# 28 "../.js/default/js_of_ocaml-compiler.runtime/jsoo_runtime.cma.js"
//# shape: Jsoo_runtime:[[],[[F(1)],N,N],[F(1),F(2),F(1),N],[],[[]],[],[]]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
global_data = runtime.caml_get_global_data(),
Assert_failure = global_data.Assert_failure,
Jsoo_runtime_Runtime_version = global_data.Jsoo_runtime__Runtime_version,
Stdlib_Callback = global_data.Stdlib__Callback,
a = [0, "lib/runtime/jsoo_runtime.ml", 166, 13];
function effects(param){
var match = runtime.caml_jsoo_flags_effects(0);
if(match === "cps") return 3356934;
if(match === "disabled") return -709493348;
if(match !== "double-translation")
throw caml_maybe_attach_backtrace([0, Assert_failure, a], 1);
return -766114909;
}
var
version = Jsoo_runtime_Runtime_version[1],
git_version = Jsoo_runtime_Runtime_version[2],
Exn = [248, "Jsoo_runtime.Error.Exn", runtime.caml_fresh_oo_id(0)];
Stdlib_Callback[2].call(null, "jsError", [0, Exn, [0]]);
var
Error =
[0,
runtime.caml_throw_js_exception,
runtime.caml_exn_with_js_backtrace,
runtime.caml_js_error_option_of_exception,
Exn];
runtime.caml_register_global
(9,
[0,
[0],
[0, [0, effects], version, git_version],
Error,
[0],
[0, [0]],
[0],
[0]],
"Jsoo_runtime");
return;
}
(globalThis));
//# 16 "../.js/default/js_of_ocaml/js_of_ocaml.cma.js"
//# shape: Js_of_ocaml__Import:[[],[F(2)*,F(2)*],[F(2),F(2),N,F(1),F(1),F(5),F(2),F(2)*,F(2)*,F(2),F(2),F(3),F(3),F(2),F(3),F(2),F(2),F(2),F(3),F(3),F(2),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(2),F(3),F(3),F(3),F(3),F(2),F(2),F(2),F(2),F(1)*,F(1)*,F(1),F(2),F(1),F(2),F(1),F(2),F(1),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(2),F(1),F(2),F(2),F(2),F(2),F(2),F(2),F(2)*],[F(1),F(1),F(1)*,F(1)*,F(2)*,F(2)*,F(1)*,F(2)*],F(2)*,F(2)*]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
global_data = runtime.caml_get_global_data(),
Stdlib_String = global_data.Stdlib__String,
Stdlib_Char = global_data.Stdlib__Char;
function max(x, y){return y <= x ? x : y;}
function min(x, y){return x <= y ? x : y;}
var
make = Stdlib_String[1],
init = Stdlib_String[2],
empty = Stdlib_String[3],
of_bytes = Stdlib_String[4],
to_bytes = Stdlib_String[5],
blit = Stdlib_String[6],
concat = Stdlib_String[7],
cat = Stdlib_String[8],
compare = Stdlib_String[10],
starts_with = Stdlib_String[11],
ends_with = Stdlib_String[12],
contains_from = Stdlib_String[13],
rcontains_from = Stdlib_String[14],
contains = Stdlib_String[15],
sub = Stdlib_String[16],
split_on_char = Stdlib_String[17],
map = Stdlib_String[18],
mapi = Stdlib_String[19],
fold_left = Stdlib_String[20],
fold_right = Stdlib_String[21],
for_all = Stdlib_String[22],
exists = Stdlib_String[23],
trim = Stdlib_String[24],
escaped = Stdlib_String[25],
uppercase_ascii = Stdlib_String[26],
lowercase_ascii = Stdlib_String[27],
capitalize_ascii = Stdlib_String[28],
uncapitalize_ascii = Stdlib_String[29],
iter = Stdlib_String[30],
iteri = Stdlib_String[31],
index_from = Stdlib_String[32],
index_from_opt = Stdlib_String[33],
rindex_from = Stdlib_String[34],
rindex_from_opt = Stdlib_String[35],
index = Stdlib_String[36],
index_opt = Stdlib_String[37],
rindex = Stdlib_String[38],
rindex_opt = Stdlib_String[39],
to_seq = Stdlib_String[40],
to_seqi = Stdlib_String[41],
of_seq = Stdlib_String[42],
get_utf_8_uchar = Stdlib_String[43],
is_valid_utf_8 = Stdlib_String[44],
get_utf_16be_uchar = Stdlib_String[45],
is_valid_utf_16be = Stdlib_String[46],
get_utf_16le_uchar = Stdlib_String[47],
is_valid_utf_16le = Stdlib_String[48],
get_uint8 = Stdlib_String[49],
get_int8 = Stdlib_String[50],
get_uint16_ne = Stdlib_String[51],
get_uint16_be = Stdlib_String[52],
get_uint16_le = Stdlib_String[53],
get_int16_ne = Stdlib_String[54],
get_int16_be = Stdlib_String[55],
get_int16_le = Stdlib_String[56],
get_int32_ne = Stdlib_String[57],
hash = Stdlib_String[58],
seeded_hash = Stdlib_String[59],
get_int32_be = Stdlib_String[60],
get_int32_le = Stdlib_String[61],
get_int64_ne = Stdlib_String[62],
get_int64_be = Stdlib_String[63],
get_int64_le = Stdlib_String[64],
equal = runtime.caml_string_equal,
chr = Stdlib_Char[1],
escaped$0 = Stdlib_Char[2],
lowercase_ascii$0 = Stdlib_Char[3],
uppercase_ascii$0 = Stdlib_Char[4],
compare$0 = Stdlib_Char[5],
seeded_hash$0 = Stdlib_Char[7],
hash$0 = Stdlib_Char[8];
function equal$0(x, y){return x === y ? 1 : 0;}
runtime.caml_register_global
(2,
[0,
[0],
[0, max, min],
[0,
make,
init,
empty,
of_bytes,
to_bytes,
blit,
concat,
cat,
compare,
starts_with,
ends_with,
contains_from,
rcontains_from,
contains,
sub,
split_on_char,
map,
mapi,
fold_left,
fold_right,
for_all,
exists,
trim,
escaped,
uppercase_ascii,
lowercase_ascii,
capitalize_ascii,
uncapitalize_ascii,
iter,
iteri,
index_from,
index_from_opt,
rindex_from,
rindex_from_opt,
index,
index_opt,
rindex,
rindex_opt,
to_seq,
to_seqi,
of_seq,
get_utf_8_uchar,
is_valid_utf_8,
get_utf_16be_uchar,
is_valid_utf_16be,
get_utf_16le_uchar,
is_valid_utf_16le,
get_uint8,
get_int8,
get_uint16_ne,
get_uint16_be,
get_uint16_le,
get_int16_ne,
get_int16_be,
get_int16_le,
get_int32_ne,
hash,
seeded_hash,
get_int32_be,
get_int32_le,
get_int64_ne,
get_int64_be,
get_int64_le,
equal],
[0,
chr,
escaped$0,
lowercase_ascii$0,
uppercase_ascii$0,
compare$0,
seeded_hash$0,
hash$0,
equal$0],
max,
min],
"Js_of_ocaml__Import");
return;
}
(globalThis));
//# 188 "../.js/default/js_of_ocaml/js_of_ocaml.cma.js"
//# shape: Js_of_ocaml__Js:[N,F(1)*,N,F(1)*,[N,F(1)*,F(2),F(2),F(1)*,F(2),F(3),F(2),F(1)*,F(1)*],[N,F(1)*,F(2),F(2),F(1)*,F(2),F(3),F(2),F(1)*,F(1)*],N,N,N,N,N,N,N,N,N,N,F(1),N,N,F(2),F(3),F(2),F(2),F(1)*,F(1)*,N,N,N,N,N,N,N,N,N,N,N,N,N,F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(3),F(3),F(2),F(1),[N],F(1),F(1),F(2),F(1),N]
(function
(globalThis){
"use strict";
var
jsoo_exports = typeof module === "object" && module.exports || globalThis,
runtime = globalThis.jsoo_runtime,
caml_js_get = runtime.caml_js_get,
caml_js_set = runtime.caml_js_set,
caml_js_wrap_callback = runtime.caml_js_wrap_callback,
caml_string_of_jsstring = runtime.caml_string_of_jsstring;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
var
global_data = runtime.caml_get_global_data(),
Js_of_ocaml_Import = global_data.Js_of_ocaml__Import,
Stdlib = global_data.Stdlib,
Jsoo_runtime = global_data.Jsoo_runtime,
Stdlib_Printexc = global_data.Stdlib__Printexc,
global = globalThis,
null$ = null,
undefined$ = undefined;
function return$(a){return a;}
function map(x, f){return x == null$ ? null$ : caml_call1(f, x);}
function bind(x, f){return x == null$ ? null$ : caml_call1(f, x);}
function test(x){return 1 - (x == null$);}
function iter(x, f){
var a = 1 - (x == null$);
return a ? caml_call1(f, x) : a;
}
function case$(x, f, g){
return x == null$ ? caml_call1(f, 0) : caml_call1(g, x);
}
function get(x, f){return x == null$ ? caml_call1(f, 0) : x;}
function option(x){if(! x) return null$; var x$0 = x[1]; return x$0;}
function to_option(x){return x == null$ ? 0 : [0, x];}
function return$0(a){return a;}
function map$0(x, f){
return x === undefined$ ? undefined$ : caml_call1(f, x);
}
function bind$0(x, f){
return x === undefined$ ? undefined$ : caml_call1(f, x);
}
function test$0(x){return 1 - (x === undefined$);}
function iter$0(x, f){
var a = 1 - (x === undefined$);
return a ? caml_call1(f, x) : a;
}
function case$0(x, f, g){
return x === undefined$ ? caml_call1(f, 0) : caml_call1(g, x);
}
function get$0(x, f){return x === undefined$ ? caml_call1(f, 0) : x;}
function option$0(x){
if(! x) return undefined$;
var x$0 = x[1];
return x$0;
}
function to_option$0(x){return x === undefined$ ? 0 : [0, x];}
function coerce(x, f, g){
var x$0 = caml_call1(f, x);
return x$0 == null$ ? caml_call1(g, x) : x$0;
}
function coerce_opt(x, f, g){
var x$0 = bind(x, f);
return x$0 == null$ ? caml_call1(g, x) : x$0;
}
var
string_constr = global.String,
regExp = global.RegExp,
object_constructor = global.Object;
function object_keys(t4){return object_constructor.keys(t4);}
var array_constructor = global.Array;
function array_map(f, t6){
var
cb =
caml_js_wrap_callback
(function(x, idx, param){return caml_call1(f, x);});
return t6.map(cb);
}
function array_mapi(f, t6){
var
cb =
caml_js_wrap_callback
(function(x, idx, param){return caml_call2(f, idx, x);});
return t6.map(cb);
}
function str_array(a){return a;}
function match_result(a){return a;}
var
date_constr = global.Date,
math = global.Math,
error_constr = global.Error,
include = Jsoo_runtime[3],
raise = include[1],
exn_with_js_backtrace = include[2],
of_exn = include[3],
Error = include[4];
function name(t11){return caml_string_of_jsstring(t11.name);}
function message(t12){return caml_string_of_jsstring(t12.message);}
function stack(t13){
var x = t13.stack, a = x == null$ ? null$ : caml_string_of_jsstring(x);
return to_option(a);
}
function to_string(t14){return caml_string_of_jsstring(t14.toString());}
function raise_js_error(e){return raise(e);}
function string_of_error(e){return to_string(e);}
var JSON = global.JSON;
function decodeURI(s){return global.decodeURI(s);}
function decodeURIComponent(s){return global.decodeURIComponent(s);}
function encodeURI(s){return global.encodeURI(s);}
function encodeURIComponent(s){return global.encodeURIComponent(s);}
function escape(s){return global.escape(s);}
function unescape(s){return global.unescape(s);}
function isNaN(i){return global.isNaN(i) | 0;}
function parseInt(s){
var s$0 = global.parseInt(s);
return isNaN(s$0) ? Stdlib[2].call(null, "parseInt") : s$0;
}
function parseFloat(s){
var s$0 = global.parseFloat(s);
return isNaN(s$0) ? Stdlib[2].call(null, "parseFloat") : s$0;
}
Stdlib_Printexc[9].call
(null,
function(e){
if(e instanceof error_constr) return [0, to_string(e)];
if(e[1] !== Error) return 0;
var e$0 = e[2];
return [0, to_string(e$0)];
});
function export_js(field, x){
var
a = caml_string_of_jsstring(typeof x),
b =
Js_of_ocaml_Import[3][64].call(null, a, "function")
? 0 < x.length ? caml_js_wrap_callback(x) : x
: x;
return jsoo_exports[field] = b;
}
function export$(field, x){
return export_js(runtime.caml_jsstring_of_string(field), x);
}
function export_all(obj){
var
keys = object_constructor.keys(obj),
t26 =
caml_js_wrap_callback
(function(key, a, param){return export_js(key, obj[key]);});
return keys.forEach(t26);
}
var
Js_of_ocaml_Js =
[0,
null$,
function(a){return a;},
undefined$,
function(a){return a;},
[0,
null$,
return$,
map,
bind,
test,
iter,
case$,
get,
option,
to_option],
[0,
undefined$,
return$0,
map$0,
bind$0,
test$0,
iter$0,
case$0,
get$0,
option$0,
to_option$0],
true,
false,
"NFD",
"NFC",
"NFKD",
"NFKC",
string_constr,
regExp,
regExp,
regExp,
object_keys,
array_constructor,
array_constructor,
caml_js_get,
caml_js_set,
array_map,
array_mapi,
str_array,
match_result,
date_constr,
date_constr,
date_constr,
date_constr,
date_constr,
date_constr,
date_constr,
date_constr,
date_constr,
math,
error_constr,
[0,
to_string,
name,
message,
stack,
raise,
exn_with_js_backtrace,
of_exn,
Error,
function(a){return a;},
function(a){return a;}],
JSON,
decodeURI,
decodeURIComponent,
encodeURI,
encodeURIComponent,
escape,
unescape,
isNaN,
parseInt,
parseFloat,
coerce,
coerce_opt,
export$,
export_all,
[0, global],
string_of_error,
raise_js_error,
exn_with_js_backtrace,
runtime.caml_js_error_of_exception,
Error];
runtime.caml_register_global(42, Js_of_ocaml_Js, "Js_of_ocaml__Js");
return;
}
(globalThis));
//# 5 ".sx_browser.eobjs/jsoo/dune__exe__Sx_browser.cmo.js"
//# shape: Dune__exe__Sx_browser:[]
(function
(globalThis){
"use strict";
var
runtime = globalThis.jsoo_runtime,
caml_int_of_string = runtime.caml_int_of_string,
caml_js_from_array = runtime.caml_js_from_array,
caml_js_wrap_callback = runtime.caml_js_wrap_callback,
caml_jsstring_of_string = runtime.caml_jsstring_of_string,
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
caml_string_of_jsstring = runtime.caml_string_of_jsstring,
caml_wrap_exception = runtime.caml_wrap_exception;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
function caml_call2(f, a0, a1){
return (f.l >= 0 ? f.l : f.l = f.length) === 2
? f(a0, a1)
: runtime.caml_call_gen(f, [a0, a1]);
}
function caml_call4(f, a0, a1, a2, a3){
return (f.l >= 0 ? f.l : f.l = f.length) === 4
? f(a0, a1, a2, a3)
: runtime.caml_call_gen(f, [a0, a1, a2, a3]);
}
function caml_call5(f, a0, a1, a2, a3, a4){
return (f.l >= 0 ? f.l : f.l = f.length) === 5
? f(a0, a1, a2, a3, a4)
: runtime.caml_call_gen(f, [a0, a1, a2, a3, a4]);
}
var
global_data = runtime.caml_get_global_data(),
Sx_vm = global_data.Sx_vm,
Sx_types = global_data.Sx_types,
Stdlib_List = global_data.Stdlib__List,
Stdlib_String = global_data.Stdlib__String,
Stdlib_Printf = global_data.Stdlib__Printf,
Stdlib = global_data.Stdlib,
Js_of_ocaml_Js = global_data.Js_of_ocaml__Js,
Stdlib_Printexc = global_data.Stdlib__Printexc,
Stdlib_Hashtbl = global_data.Stdlib__Hashtbl,
Stdlib_Array = global_data.Stdlib__Array,
Stdlib_Option = global_data.Stdlib__Option,
Sx_vm_ref = global_data.Sx_vm_ref,
Sx_ref = global_data.Sx_ref,
Sx_primitives = global_data.Sx_primitives,
Sx_runtime = global_data.Sx_runtime,
Sx_render = global_data.Sx_render,
Sx_parser = global_data.Sx_parser,
handle_table = Stdlib_Hashtbl[1].call(null, 0, 256),
next_handle = [0, 0];
function alloc_handle(v){
var id = next_handle[1];
next_handle[1]++;
Stdlib_Hashtbl[11].call(null, handle_table, id, v);
return id;
}
var
a =
[0,
[11, "Invalid SX handle: ", [4, 0, 0, 0, 0]],
"Invalid SX handle: %d"];
function get_handle(id){
var match = Stdlib_Hashtbl[7].call(null, handle_table, id);
if(match){var v = match[1]; return v;}
var b = caml_call1(Stdlib_Printf[4].call(null, a), id);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
var
alloc_host_handle =
function(){
var t = {}, n = 0;
return {put: function(obj){var id = n++; t[id] = obj; return id;},
get: function(id){return t[id];}};
}
(),
next_host_handle = [0, 0];
function host_put(obj){
var id = next_host_handle[1];
next_host_handle[1]++;
alloc_host_handle.put(obj);
return id;
}
Sx_primitives[12].call(null, 0);
var global_env = Sx_types[20].call(null, 0);
function call_sx_fn(fn, args){
var result = Sx_runtime[6].call(null, fn, args);
return caml_call1(Sx_primitives[3][1], result);
}
function tag_fn(fn, handle, type){
fn.__sx_handle = handle;
fn._type = type;
return fn;
}
var
cst_callback = " [callback ",
cst_callback_s_handle_d = " [callback %s handle=%d]",
cst_vm_pending_cek = " [vm: pending_cek=",
cst_vm_pending_cek_b_reuse_d_f =
" [vm: pending_cek=%b reuse=%d frames=[%s] sp=%d]",
cst_frames = " frames=[",
cst_handle = " handle=",
cst_reuse = " reuse=",
cst$0 = ",",
cst = "?",
cst_sx_resume = "[sx] resume: ",
cst_sp = "] sp=",
cst_host_handle = "__host_handle",
cst_dict = "dict",
cst_keyword = "keyword",
cst_list = "list",
cst_symbol = "symbol",
b =
[0,
[11,
cst_vm_pending_cek,
[9,
0,
[11,
cst_reuse,
[4,
0,
0,
0,
[11, cst_frames, [2, 0, [11, cst_sp, [4, 0, 0, 0, [12, 93, 0]]]]]]]]],
cst_vm_pending_cek_b_reuse_d_f],
c =
[0,
[11, cst_callback, [2, 0, [11, cst_handle, [4, 0, 0, 0, [12, 93, 0]]]]],
cst_callback_s_handle_d],
d =
[0,
[11, cst_callback, [2, 0, [11, cst_handle, [4, 0, 0, 0, [12, 93, 0]]]]],
cst_callback_s_handle_d];
function value_to_js(v){
a:
{
if(typeof v !== "number"){
switch(v[0]){
case 0:
var b$0 = v[1]; return ! ! b$0;
case 2:
var n = v[1]; return n;
case 4:
var s$0 = v[1];
return {_type: cst_symbol, name: caml_jsstring_of_string(s$0)};
case 5:
var k = v[1];
return {_type: cst_keyword, name: caml_jsstring_of_string(k)};
case 6:
var items = v[1]; break;
case 7:
var
d$0 = v[1],
match = Stdlib_Hashtbl[7].call(null, d$0, cst_host_handle);
if(match){
var match$0 = match[1];
if(typeof match$0 !== "number" && 2 === match$0[0]){
var n$0 = match$0[1], id = n$0 | 0;
return alloc_host_handle.get(id);
}
}
var obj = {};
obj._type = cst_dict;
Stdlib_Hashtbl[12].call
(null,
function(k, v){
return obj[caml_jsstring_of_string(k)] = value_to_js(v);
},
d$0);
return obj;
case 21:
var items = v[1][1]; break;
case 3:
case 17:
var s = v[1]; return caml_jsstring_of_string(s);
case 8:
case 13:
case 14:
case 15:
case 24:
var
handle$0 = alloc_handle(v),
inner =
caml_js_wrap_callback
(function(args_js){
try{
var arg = js_to_value(args_js);
a:
{
if(typeof arg === "number" && ! arg){var args = 0; break a;}
var args = [0, arg, 0];
}
var result = call_sx_fn(v, args), k = value_to_js(result);
return k;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sx_vm[1]){
if(exn[1] === Sx_types[9]){
var
msg = exn[2],
a = Sx_types[57].call(null, v),
fn_info =
caml_call2(Stdlib_Printf[4].call(null, c), a, handle$0),
e = Stdlib[28].call(null, msg, fn_info),
f =
caml_jsstring_of_string(Stdlib[28].call(null, "[sx] ", e));
Js_of_ocaml_Js[52][1].console.error(f);
return Js_of_ocaml_Js[1];
}
var
g = Sx_types[57].call(null, v),
fn_info$0 =
caml_call2(Stdlib_Printf[4].call(null, d), g, handle$0),
h = Stdlib_Printexc[1].call(null, exn),
i = Stdlib[28].call(null, h, fn_info$0),
j =
caml_jsstring_of_string
(Stdlib[28].call(null, "[sx] UNCAUGHT: ", i));
Js_of_ocaml_Js[52][1].console.error(j);
return Js_of_ocaml_Js[1];
}
var vm = exn[3], request = exn[2], match = Sx_vm[5][1];
if(match){
var active = match[1];
if(0 !== active[7]){
vm[7] = Stdlib[37].call(null, vm[7], active[7]);
active[7] = 0;
}
}
var
make_suspension =
function(req, v){
var obj = {};
obj.suspended = Js_of_ocaml_Js[7];
obj.request = value_to_js(req);
obj.resume =
caml_js_wrap_callback
(function(result_js){
var result = js_to_value(result_js);
try{
var h = value_to_js(Sx_vm[31].call(null, v, result));
return h;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Sx_vm[1]){
var vm2 = exn[3], req2 = exn[2];
return make_suspension(req2, vm2);
}
if(exn[1] !== Sx_types[9])
throw caml_maybe_attach_backtrace(exn, 0);
var
msg = exn[2],
a =
Stdlib_List[20].call
(null,
function(f){
var match = f[1][3];
if(! match) return cst;
var n = match[1];
return n;
},
v[3]),
vm_frame_names = Stdlib_String[7].call(null, cst$0, a),
c = v[2],
d = Stdlib_List[1].call(null, v[7]),
e = 0 !== v[5] ? 1 : 0,
extra =
caml_call4
(Stdlib_Printf[4].call(null, b), e, d, vm_frame_names, c),
f = Stdlib[28].call(null, msg, extra),
g =
caml_jsstring_of_string
(Stdlib[28].call(null, cst_sx_resume, f));
Js_of_ocaml_Js[52][1].console.error(g);
return Js_of_ocaml_Js[1];
}
});
return obj;
},
s = make_suspension(request, vm),
drive = Js_of_ocaml_Js[52][1]._driveAsync;
if(1 - (drive == Js_of_ocaml_Js[3])) drive(s);
return s;
}
});
return tag_fn
(inner,
handle$0,
caml_jsstring_of_string(Sx_types[57].call(null, v)));
default: break a;
}
var
a = Stdlib_List[20].call(null, value_to_js, items),
arr = Stdlib_Array[11].call(null, a);
return {_type: cst_list, items: caml_js_from_array(arr)};
}
if(0 === v) return Js_of_ocaml_Js[1];
}
var handle = alloc_handle(v);
return {_type: caml_jsstring_of_string(Sx_types[57].call(null, v)),
__sx_handle: handle};
}
function js_to_value(js){
if(js != Js_of_ocaml_Js[1] && js != Js_of_ocaml_Js[3]){
var ty = caml_string_of_jsstring(typeof js);
if(ty === "boolean") return [0, js | 0];
if(ty === "function"){
var h$0 = js.__sx_handle, has_host_cb = js.__host_callback | 0;
if(h$0 != Js_of_ocaml_Js[3] && ! has_host_cb)
return get_handle(h$0 | 0);
var id$0 = host_put(js), d$1 = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d$1, cst_host_handle, [2, id$0]);
return [7, d$1];
}
if(ty === "number") return [2, js];
if(ty !== "object")
return ty !== "string" ? 0 : [3, caml_string_of_jsstring(js)];
var h = js.__sx_handle;
if(h != Js_of_ocaml_Js[3]) return get_handle(h | 0);
var type_field = js._type;
if(type_field == Js_of_ocaml_Js[3]){
var t0 = Js_of_ocaml_Js[52][1], t1 = t0.Array;
if(t1.isArray(js) | 0){
var n = js.length | 0;
return [6,
Stdlib_List[11].call
(null,
n,
function(i){
var
a = Js_of_ocaml_Js[20].call(null, js, i),
b = Js_of_ocaml_Js[6][10].call(null, a);
return js_to_value(Stdlib_Option[4].call(null, b));
})];
}
var id = host_put(js), d = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d, cst_host_handle, [2, id]);
return [7, d];
}
var tag = caml_string_of_jsstring(type_field);
if(tag !== cst_dict){
if(tag === cst_keyword) return [5, caml_string_of_jsstring(js.name)];
if(tag !== cst_list)
return tag !== cst_symbol ? 0 : [4, caml_string_of_jsstring(js.name)];
var items_js = js.items, n$0 = items_js.length | 0;
return [6,
Stdlib_List[11].call
(null,
n$0,
function(i){
var
a = Js_of_ocaml_Js[20].call(null, items_js, i),
b = Js_of_ocaml_Js[6][10].call(null, a);
return js_to_value(Stdlib_Option[4].call(null, b));
})];
}
var
d$0 = Stdlib_Hashtbl[1].call(null, 0, 8),
t3 = Js_of_ocaml_Js[52][1],
t4 = t3.Object,
keys = t4.keys(js),
len = keys.length,
a = len - 1 | 0;
if(a >= 0){
var i = 0;
for(;;){
var
b = Js_of_ocaml_Js[20].call(null, keys, i),
c = Js_of_ocaml_Js[6][10].call(null, b),
k = caml_string_of_jsstring(Stdlib_Option[4].call(null, c));
if(k !== "_type"){
var e = js_to_value(js[caml_jsstring_of_string(k)]);
Stdlib_Hashtbl[11].call(null, d$0, k, e);
}
var f = i + 1 | 0;
if(a === i) break;
i = f;
}
}
return [7, d$0];
}
return 0;
}
function return_via_side_channel(v){
Js_of_ocaml_Js[52][1].__sxR = v;
return v;
}
var vm_globals = Stdlib_Hashtbl[1].call(null, 0, 512);
Sx_types[14][1] = vm_globals;
function sync_env_to_vm(param){
return Stdlib_Hashtbl[12].call
(null,
function(id, v){
var a = Sx_types[5].call(null, id);
return Stdlib_Hashtbl[11].call(null, vm_globals, a, v);
},
global_env[1]);
}
Sx_types[22][1] =
[0,
function(env, name, v){
var a = env === global_env ? 1 : 0;
return a ? Stdlib_Hashtbl[11].call(null, vm_globals, name, v) : a;
}];
Sx_types[23][1] =
[0,
function(name, v){
var a = Sx_types[4].call(null, name);
return Stdlib_Hashtbl[11].call(null, global_env[1], a, v);
}];
Sx_types[25][1] =
[0,
function(name){
var
match =
Stdlib_Hashtbl[7].call(null, Sx_primitives[1], "__resolve-symbol");
if(! match) return 0;
var resolve_fn = match[1];
try{caml_call1(resolve_fn, [0, [3, name], 0]);}catch(exn){}
var match$0 = Stdlib_Hashtbl[7].call(null, vm_globals, name);
if(match$0){var v = match$0[1]; return [0, v];}
var a = Sx_types[4].call(null, name);
return Stdlib_Hashtbl[7].call(null, global_env[1], a);
}];
var dummy = 0, cst_Parse_error = "Parse error: ";
function api_parse(src_js){
var src = caml_string_of_jsstring(src_js);
try{
var
values = Sx_parser[17].call(null, src),
b = Stdlib_List[20].call(null, value_to_js, values),
a = caml_js_from_array(Stdlib_Array[11].call(null, b));
return a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sx_types[10]) throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2];
return caml_jsstring_of_string
(Stdlib[28].call(null, cst_Parse_error, msg));
}
}
var cst_Error = "Error: ";
function api_eval(src_js){
var src = caml_string_of_jsstring(src_js);
try{
var
exprs = Sx_parser[17].call(null, src),
env = [20, global_env],
result =
Stdlib_List[26].call
(null,
function(acc, expr){return Sx_ref[241].call(null, expr, env);},
0,
exprs);
sync_env_to_vm(0);
var a = return_via_side_channel(value_to_js(result));
return a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Sx_types[9]){
var msg = exn[2];
return caml_jsstring_of_string(Stdlib[28].call(null, cst_Error, msg));
}
if(exn[1] !== Sx_types[10]) throw caml_maybe_attach_backtrace(exn, 0);
var msg$0 = exn[2];
return caml_jsstring_of_string
(Stdlib[28].call(null, cst_Parse_error, msg$0));
}
}
var
cst_Error_compile_module_not_l = "Error: compile-module not loaded",
cst_compile_module = "compile-module";
function api_eval_vm(src_js){
var src = caml_string_of_jsstring(src_js);
try{
var
exprs = Sx_parser[17].call(null, src),
match = Stdlib_Hashtbl[7].call(null, vm_globals, cst_compile_module);
if(match)
var v = match[1], compile_fn = v;
else
var
compile_fn = Sx_types[30].call(null, global_env, cst_compile_module);
var
a = Sx_runtime[6].call(null, compile_fn, [0, [6, exprs], 0]),
code_val = Sx_ref[2].call(null, a),
code = Sx_vm[24].call(null, code_val),
result = Sx_vm_ref[75].call(null, code, vm_globals);
Stdlib_Hashtbl[12].call
(null,
function(name, v){
var id = Sx_types[4].call(null, name);
if(! Stdlib_Hashtbl[9].call(null, global_env[1], id))
return Stdlib_Hashtbl[11].call(null, global_env[1], id, v);
var match = Stdlib_Hashtbl[6].call(null, global_env[1], id);
a:
{
if
(typeof match !== "number"
&& 24 === match[0] && typeof v !== "number" && 24 === v[0])
break a;
if(typeof v !== "number" && 24 === v[0]) break a;
return 0;
}
return Stdlib_Hashtbl[11].call(null, global_env[1], id, v);
},
vm_globals);
var b = return_via_side_channel(value_to_js(result));
return b;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Sx_types[9]){
var msg = exn[2];
return caml_jsstring_of_string(Stdlib[28].call(null, cst_Error, msg));
}
if(exn[1] === Sx_types[10]){
var msg$0 = exn[2];
return caml_jsstring_of_string
(Stdlib[28].call(null, cst_Parse_error, msg$0));
}
if(exn === Stdlib[8]) return cst_Error_compile_module_not_l;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
function api_eval_expr(expr_js, env_js){
var expr = js_to_value(expr_js);
try{
var result = Sx_ref[241].call(null, expr, [20, global_env]);
sync_env_to_vm(0);
var a = return_via_side_channel(value_to_js(result));
return a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sx_types[9]) throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2];
return caml_jsstring_of_string(Stdlib[28].call(null, cst_Error, msg));
}
}
var cst$3 = "", cst_import = "import", e = [0, 0], f = [6, 0];
function api_load(src_js){
var src = caml_string_of_jsstring(src_js);
try{
var
exprs = Sx_parser[17].call(null, src),
env = [20, global_env],
count = [0, 0];
Stdlib_List[18].call
(null,
function(expr){
var
state = Sx_ref[8].call(null, expr, env, f),
final = Sx_ref[156].call(null, state);
for(;;){
var b = Sx_ref[12].call(null, final);
if(! Sx_types[67].call(null, b)){
Sx_ref[18].call(null, final);
count[1]++;
return 0;
}
var request = Sx_ref[17].call(null, final);
if(typeof request === "number" || ! (7 === request[0]))
var op = cst$3;
else{
var
d$0 = request[1],
match$1 = Stdlib_Hashtbl[7].call(null, d$0, "op"),
cst = cst$3;
if(match$1){
var match$2 = match$1[1];
if(typeof match$2 === "number" || ! (3 === match$2[0]))
var op = cst;
else
var s = match$2[1], op = s;
}
else
var op = cst;
}
if(op === cst_import){
a:
{
if(typeof request !== "number" && 7 === request[0]){
var
d = request[1],
match = Stdlib_Hashtbl[7].call(null, d, "library");
if(match){var v = match[1], lib_spec = v; break a;}
var lib_spec = 0;
break a;
}
var lib_spec = 0;
}
var
key = Sx_ref[101].call(null, lib_spec),
a = Sx_ref[102].call(null, key),
match$0 = Sx_types[67].call(null, a) ? e : 0;
if(match$0)
var v$0 = match$0[1], response = v$0;
else
var response = 0;
}
else
var response = 0;
final = Sx_ref[158].call(null, final, response);
}
},
exprs);
sync_env_to_vm(0);
var a = count[1];
return a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Sx_types[9]){
var msg = exn[2];
return caml_jsstring_of_string(Stdlib[28].call(null, cst_Error, msg));
}
if(exn[1] !== Sx_types[10]) throw caml_maybe_attach_backtrace(exn, 0);
var msg$0 = exn[2];
return caml_jsstring_of_string
(Stdlib[28].call(null, cst_Parse_error, msg$0));
}
}
function sync_vm_to_env(param){
return Stdlib_Hashtbl[12].call
(null,
function(name, v){
var id = Sx_types[4].call(null, name);
if(! Stdlib_Hashtbl[9].call(null, global_env[1], id))
return Stdlib_Hashtbl[11].call(null, global_env[1], id, v);
var existing = Stdlib_Hashtbl[6].call(null, global_env[1], id);
if
(typeof existing !== "number"
&& 24 === existing[0] && typeof v !== "number" && 24 === v[0])
return Stdlib_Hashtbl[11].call(null, global_env[1], id, v);
if(typeof v !== "number" && 24 === v[0])
return Stdlib_Hashtbl[11].call(null, global_env[1], id, v);
return 0;
},
vm_globals);
}
var cst_suspended = "suspended";
function make_js_import_suspension(d){
var obj = {};
obj.suspended = Js_of_ocaml_Js[7];
obj.op = cst_import;
var match = Stdlib_Hashtbl[7].call(null, d, "request");
if(match) var v = match[1], request = v; else var request = 0;
obj.request = value_to_js(request);
obj.resume =
caml_js_wrap_callback
(function(result_js){
var resumed = Sx_vm_ref[76].call(null, [7, d]);
sync_vm_to_env(0);
if(typeof resumed !== "number" && 7 === resumed[0]){
var
d2 = resumed[1],
match = Stdlib_Hashtbl[7].call(null, d2, cst_suspended);
a:
{
if(match){
var a = match[1];
if(typeof a !== "number" && 0 === a[0] && a[1]){var b = 1; break a;}
}
var b = 0;
}
if(b) return make_js_import_suspension(d2);
}
return value_to_js(resumed);
});
return obj;
}
function api_load_module(module_js){
try{
var
code_val = js_to_value(module_js),
code = Sx_vm[24].call(null, code_val),
result = Sx_vm_ref[75].call(null, code, vm_globals);
a:
{
if(typeof result !== "number" && 7 === result[0]){
var
d = result[1],
match = Stdlib_Hashtbl[7].call(null, d, cst_suspended);
b:
{
if(match){
var a = match[1];
if(typeof a !== "number" && 0 === a[0] && a[1]){var c = 1; break b;}
}
var c = 0;
}
if(c){var b = make_js_import_suspension(d); break a;}
}
sync_vm_to_env(0);
var b = Stdlib_Hashtbl[15].call(null, vm_globals);
}
return b;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Sx_types[9]){
var msg = exn[2];
return caml_jsstring_of_string(Stdlib[28].call(null, cst_Error, msg));
}
var e = Stdlib_Printexc[1].call(null, exn);
return caml_jsstring_of_string(Stdlib[28].call(null, cst_Error, e));
}
}
var
g =
[0,
[2,
0,
[12,
32,
[2,
0,
[11,
" (env=",
[4, 0, 0, 0, [11, " vm=", [4, 0, 0, 0, [12, 41, 0]]]]]]]],
"%s %s (env=%d vm=%d)"];
function api_debug_env(name_js){
var
name = caml_string_of_jsstring(name_js),
id = Sx_types[4].call(null, name),
found_env = Stdlib_Hashtbl[7].call(null, global_env[1], id),
found_vm = Stdlib_Hashtbl[7].call(null, vm_globals, name),
total_env = Stdlib_Hashtbl[15].call(null, global_env[1]),
total_vm = Stdlib_Hashtbl[15].call(null, vm_globals);
if(found_env)
var
v = found_env[1],
a = Sx_types[57].call(null, v),
env_s = Stdlib[28].call(null, "env:", a);
else
var env_s = "env:MISSING";
if(found_vm)
var
v$0 = found_vm[1],
b = Sx_types[57].call(null, v$0),
vm_s = Stdlib[28].call(null, "vm:", b);
else
var vm_s = "vm:MISSING";
return caml_jsstring_of_string
(caml_call4
(Stdlib_Printf[4].call(null, g),
env_s,
vm_s,
total_env,
total_vm));
}
function api_compile_module(src_js){
var src = caml_string_of_jsstring(src_js);
try{
var
exprs = Sx_parser[17].call(null, src),
compile_fn = Sx_types[30].call(null, global_env, cst_compile_module),
code =
Sx_ref[241].call
(null, [6, [0, compile_fn, [0, [6, exprs], 0]]], [20, global_env]),
a = return_via_side_channel(value_to_js(code));
return a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Sx_types[9]){
var msg = exn[2];
return caml_jsstring_of_string(Stdlib[28].call(null, cst_Error, msg));
}
if(exn[1] === Sx_types[10]){
var msg$0 = exn[2];
return caml_jsstring_of_string
(Stdlib[28].call(null, cst_Parse_error, msg$0));
}
if(exn === Stdlib[8]) return cst_Error_compile_module_not_l;
throw caml_maybe_attach_backtrace(exn, 0);
}
}
var sx_render_mode = [0, 0];
function api_render_to_html(expr_js){
var expr = js_to_value(expr_js), prev = sx_render_mode[1];
sx_render_mode[1] = 1;
try{
var html = Sx_render[66].call(null, global_env, expr, global_env);
sx_render_mode[1] = prev;
var a = caml_jsstring_of_string(html);
return a;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sx_types[9]) throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2];
sx_render_mode[1] = prev;
return caml_jsstring_of_string(Stdlib[28].call(null, cst_Error, msg));
}
}
function api_stringify(v_js){
var a = js_to_value(v_js);
return caml_jsstring_of_string(Sx_types[112].call(null, a));
}
function api_type_of(v_js){
var a = js_to_value(v_js);
return caml_jsstring_of_string(Sx_types[57].call(null, a));
}
function api_inspect(v_js){
var a = js_to_value(v_js);
return caml_jsstring_of_string(Sx_types[112].call(null, a));
}
function api_engine(param){return "ocaml-vm-wasm";}
function api_register_native(name_js, callback_js){
var name = caml_string_of_jsstring(name_js);
function native_fn(args){
var
a = Stdlib_List[20].call(null, value_to_js, args),
js_args = Stdlib_Array[11].call(null, a);
return js_to_value(callback_js(caml_js_from_array(js_args)));
}
Sx_primitives[13].call(null, name, native_fn);
var v = [15, name, native_fn];
Sx_types[26].call(null, global_env, name, v);
Stdlib_Hashtbl[11].call(null, vm_globals, name, v);
return Js_of_ocaml_Js[1];
}
var
h =
[0,
[11,
cst_vm_pending_cek,
[9,
0,
[11,
cst_reuse,
[4,
0,
0,
0,
[11, cst_frames, [2, 0, [11, cst_sp, [4, 0, 0, 0, [12, 93, 0]]]]]]]]],
cst_vm_pending_cek_b_reuse_d_f];
function make_js_callFn_suspension(request, vm){
var obj = {};
obj.suspended = Js_of_ocaml_Js[7];
obj.request = value_to_js(request);
obj.resume =
caml_js_wrap_callback
(function(result_js){
var result = js_to_value(result_js);
try{
var v = Sx_vm[31].call(null, vm, result);
sync_vm_to_env(0);
var g = value_to_js(v);
return g;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] === Sx_vm[1]){
var vm2 = exn[3], req2 = exn[2];
return make_js_callFn_suspension(req2, vm2);
}
if(exn[1] !== Sx_types[9]) throw caml_maybe_attach_backtrace(exn, 0);
var
msg = exn[2],
a =
Stdlib_List[20].call
(null,
function(f){
var match = f[1][3];
if(! match) return cst;
var n = match[1];
return n;
},
vm[3]),
vm_frame_names = Stdlib_String[7].call(null, cst$0, a),
b = vm[2],
c = Stdlib_List[1].call(null, vm[7]),
d = 0 !== vm[5] ? 1 : 0,
extra =
caml_call4
(Stdlib_Printf[4].call(null, h), d, c, vm_frame_names, b),
e = Stdlib[28].call(null, msg, extra),
f = caml_jsstring_of_string(Stdlib[28].call(null, cst_sx_resume, e));
Js_of_ocaml_Js[52][1].console.error(f);
return Js_of_ocaml_Js[1];
}
});
return obj;
}
function api_call_fn(fn_js, args_js){
try{
var
fn = js_to_value(fn_js),
b =
Stdlib_Array[14].call
(null, js_to_value, runtime.caml_js_to_array(args_js)),
args = Stdlib_Array[10].call(null, b),
c = return_via_side_channel(value_to_js(call_sx_fn(fn, args)));
return c;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sx_vm[1]){
if(exn[1] === Sx_types[9]){
var
msg = exn[2],
err_obj =
{__sx_error: Js_of_ocaml_Js[7],
message: caml_jsstring_of_string(msg)};
return err_obj;
}
var
a = caml_jsstring_of_string(Stdlib_Printexc[1].call(null, exn)),
err_obj$0 = {__sx_error: Js_of_ocaml_Js[7], message: a};
return err_obj$0;
}
var vm = exn[3], request = exn[2], match = Sx_vm[5][1];
if(match){
var active = match[1];
if(0 !== active[7]){
vm[7] = Stdlib[37].call(null, vm[7], active[7]);
active[7] = 0;
}
}
sync_vm_to_env(0);
return make_js_callFn_suspension(request, vm);
}
}
function api_is_callable(fn_js){
if(fn_js != Js_of_ocaml_Js[1] && fn_js != Js_of_ocaml_Js[3]){
var h = fn_js.__sx_handle;
if(h == Js_of_ocaml_Js[3]) return ! ! 0;
var a = get_handle(h | 0);
return ! ! Sx_types[66].call(null, a);
}
return ! ! 0;
}
function api_fn_arity(fn_js){
var h = fn_js.__sx_handle;
if(h == Js_of_ocaml_Js[3]) return -1.;
var v = get_handle(h | 0);
if(typeof v !== "number" && 8 === v[0]){
var l = v[1];
return Stdlib_List[1].call(null, l[1]);
}
return -1.;
}
function bind(name, fn){
Sx_types[26].call(null, global_env, name, [15, name, fn]);
}
Sx_primitives[4][1] = 1;
var cst_cek_eval = "cek-eval";
bind
(cst_cek_eval,
function(args){
if(args){
var expr = args[1];
if(typeof expr !== "number" && 3 === expr[0] && ! args[2]){
var s = expr[1], e = Sx_parser[17].call(null, s);
if(! e) return 0;
var h = e[1];
return Sx_ref[241].call(null, h, [20, global_env]);
}
var match = args[2];
if(! match) return Sx_ref[241].call(null, expr, [20, global_env]);
if(! match[2]){
var env_val = match[1];
return Sx_ref[241].call(null, expr, env_val);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "cek-eval: expected 1-2 args"], 1);
});
bind
("eval-expr-cek",
function(args){
if(args){
var match = args[2], expr = args[1];
if(! match) return Sx_ref[241].call(null, expr, [20, global_env]);
if(! match[2]){
var e = match[1];
return Sx_ref[241].call(null, expr, e);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "eval-expr-cek: expected 1-2 args"], 1);
});
var
cst_cek_call = "cek-call",
cst_cek_call_expected_fn_args = "cek-call: expected (fn args)",
cst_cek_call_not_callable = "cek-call: not callable: ";
bind
(cst_cek_call,
function(args){
if(args){
var b = args[2];
if(b && ! b[2]){
var a = b[1], f = args[1];
if(! Sx_types[66].call(null, f)){
var
d = Sx_types[57].call(null, f),
e = Stdlib[28].call(null, cst_cek_call_not_callable, d);
throw caml_maybe_attach_backtrace([0, Sx_types[9], e], 1);
}
a:
{
if(typeof a === "number"){
if(0 === a){var arg_list = 0; break a;}
}
else if(6 === a[0]){var l = a[1], arg_list = l; break a;}
var arg_list = [0, a, 0];
}
var c = Sx_runtime[6].call(null, f, arg_list);
return Sx_ref[2].call(null, c);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_cek_call_expected_fn_args], 1);
});
bind
("sx-parse",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var src = a[1];
return [6, Sx_parser[17].call(null, src)];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sx-parse: expected string"], 1);
});
bind
("parse",
function(args){
a:
if(args){
var v = args[1];
if(typeof v !== "number")
switch(v[0]){
case 3:
case 19:
if(args[2]) break a;
var src = v[1], exprs = Sx_parser[17].call(null, src);
if(exprs && ! exprs[2]){var e = exprs[1]; return e;}
return [6, exprs];
}
if(! args[2]) return v;
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "parse: expected string"], 1);
});
bind
("sx-serialize",
function(args){
if(args && ! args[2]){
var v = args[1];
return [3, Sx_types[112].call(null, v)];
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "sx-serialize: expected 1 arg"], 1);
});
function deep_equal(a, b){
a:
if(typeof a === "number"){
if(0 === a && typeof b === "number" && ! b) return 1;
}
else{
switch(a[0]){
case 0:
if(typeof b === "number") break a;
if(0 !== b[0]) break a;
var b$0 = b[1], a$0 = a[1];
return a$0 === b$0 ? 1 : 0;
case 1:
var a$1 = a[1];
if(typeof b === "number") break a;
switch(b[0]){
case 1:
var b$1 = b[1]; return a$1 === b$1 ? 1 : 0;
case 2:
var b$2 = b[1]; return a$1 === b$2 ? 1 : 0;
default: break a;
}
case 2:
var a$2 = a[1];
if(typeof b === "number") break a;
switch(b[0]){
case 1:
var b$3 = b[1]; return a$2 === b$3 ? 1 : 0;
case 2:
var b$4 = b[1]; return a$2 === b$4 ? 1 : 0;
default: break a;
}
case 3:
if(typeof b === "number") break a;
if(3 !== b[0]) break a;
var b$5 = b[1], a$3 = a[1];
return a$3 === b$5 ? 1 : 0;
case 4:
if(typeof b === "number") break a;
if(4 !== b[0]) break a;
var b$6 = b[1], a$4 = a[1];
return a$4 === b$6 ? 1 : 0;
case 5:
if(typeof b === "number") break a;
if(5 !== b[0]) break a;
var b$7 = b[1], a$5 = a[1];
return a$5 === b$7 ? 1 : 0;
case 6:
var a$6 = a[1]; break;
case 7:
if(typeof b === "number") break a;
if(7 !== b[0]) break a;
var
b$9 = b[1],
a$7 = a[1],
ka =
Stdlib_Hashtbl[14].call
(null, function(k, param, acc){return [0, k, acc];}, a$7, 0),
kb =
Stdlib_Hashtbl[14].call
(null, function(k, param, acc){return [0, k, acc];}, b$9, 0),
f = Stdlib_List[1].call(null, kb),
d = Stdlib_List[1].call(null, ka) === f ? 1 : 0;
return d
? Stdlib_List
[33].call
(null,
function(k){
var a = Stdlib_Hashtbl[9].call(null, b$9, k);
if(! a) return a;
var b = Stdlib_Hashtbl[6].call(null, b$9, k);
return deep_equal(Stdlib_Hashtbl[6].call(null, a$7, k), b);
},
ka)
: d;
case 21:
var a$6 = a[1][1]; break;
default: break a;
}
if(typeof b !== "number"){
switch(b[0]){
case 6:
var b$8 = b[1]; break;
case 21:
var b$8 = b[1][1]; break;
default: break a;
}
var
e = Stdlib_List[1].call(null, b$8),
c = Stdlib_List[1].call(null, a$6) === e ? 1 : 0;
return c ? Stdlib_List[35].call(null, deep_equal, a$6, b$8) : c;
}
}
return 0;
}
bind
("equal?",
function(args){
if(args){
var c = args[2];
if(c && ! c[2]){
var b = c[1], a = args[1];
return [0, deep_equal(a, b)];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], "equal?: 2 args"], 1);
});
var i = [0, 1], j = [0, 1];
bind
("assert",
function(args){
if(args){
var match = args[2], cond = args[1];
if(! match){
if(1 - Sx_types[67].call(null, cond))
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "Assertion failed"], 1);
return j;
}
if(! match[2]){
var msg = match[1];
if(! (1 - Sx_types[67].call(null, cond))) return i;
var
a = Sx_types[35].call(null, msg),
b = Stdlib[28].call(null, "Assertion: ", a);
throw caml_maybe_attach_backtrace([0, Sx_types[9], b], 1);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "assert: 1-2 args"], 1);
});
var cst_error = "error", cst_ok = "ok", k = [0, 0], l = [0, 1];
bind
("try-call",
function(args){
if(args && ! args[2]){
var thunk = args[1];
try{
Sx_ref[241].call(null, [6, [0, thunk, 0]], [20, global_env]);
var d$0 = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d$0, cst_ok, l);
return [7, d$0];
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sx_types[9]) throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2], d = Stdlib_Hashtbl[1].call(null, 0, 2);
Stdlib_Hashtbl[11].call(null, d, cst_ok, k);
Stdlib_Hashtbl[11].call(null, d, cst_error, [3, msg]);
return [7, d];
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "try-call: 1 arg"], 1);
});
bind
("load-sxbc",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number" && 6 === a[0]){
var c = a[1];
if(c){
var d = c[2];
if(d){
var b = d[2];
if(b){
var e = b[2], f = b[1];
if(e){
if(args[2]) break a;
var code_form = e[1];
}
else{if(args[2]) break a; var code_form = f;}
var
cst_code = "code",
convert_code =
function(form){
if(typeof form !== "number" && 6 === form[0]){
var b = form[1];
if(b){
var c = b[1];
if(typeof c !== "number" && 4 === c[0] && c[1] === cst_code){
var
rest = b[2],
d = Stdlib_Hashtbl[1].call(null, 0, 8),
param = rest;
for(;;){
if(! param) return [7, d];
var e = param[1];
if(typeof e !== "number" && 5 === e[0]){
var a = e[1], cst_arity = "arity";
if(a !== cst_arity){
var cst_bytecode = "bytecode";
if(a !== cst_bytecode){
var cst_constants = "constants";
if(a !== cst_constants){
var cst_upvalue_count = "upvalue-count";
if(a === cst_upvalue_count){
var f = param[2];
if(f){
var match = f[1];
if(typeof match !== "number" && 2 === match[0]){
var rest$1 = f[2], n = match[1];
Stdlib_Hashtbl[11].call(null, d, cst_upvalue_count, [2, n]);
param = rest$1;
continue;
}
}
}
}
else{
var g = param[2];
if(g){
var match$0 = g[1];
if(typeof match$0 !== "number" && 6 === match$0[0]){
var
rest$2 = g[2],
consts = match$0[1],
l = [6, Stdlib_List[20].call(null, convert_const, consts)];
Stdlib_Hashtbl[11].call(null, d, cst_constants, l);
param = rest$2;
continue;
}
}
}
}
else{
var h = param[2];
if(h){
var match$1 = h[1];
if(typeof match$1 !== "number" && 6 === match$1[0]){
var rest$3 = h[2], nums = match$1[1];
Stdlib_Hashtbl[11].call(null, d, cst_bytecode, [6, nums]);
param = rest$3;
continue;
}
}
}
}
else{
var i = param[2];
if(i){
var match$2 = i[1];
if(typeof match$2 !== "number" && 2 === match$2[0]){
var rest$4 = i[2], n$0 = match$2[1];
Stdlib_Hashtbl[11].call(null, d, cst_arity, [2, n$0]);
param = rest$4;
continue;
}
}
}
}
var rest$0 = param[2];
param = rest$0;
}
}
}
}
var
j = Sx_types[57].call(null, form),
k =
Stdlib[28].call
(null, "load-sxbc: expected (code ...), got ", j);
throw caml_maybe_attach_backtrace([0, Sx_types[9], k], 1);
},
convert_const =
function(form){
if(typeof form !== "number" && 6 === form[0]){
var a = form[1];
if(a){
var b = a[1];
if(typeof b !== "number" && 4 === b[0]){
var match = b[1];
if(match === cst_code) return convert_code(form);
if(match === cst_list){
var items = a[2];
return [6, Stdlib_List[20].call(null, convert_const, items)];
}
}
}
}
return form;
},
module_val = convert_code(code_form),
code = Sx_vm[24].call(null, module_val);
try{Sx_vm[32].call(null, code, vm_globals);}catch(exn){}
sync_vm_to_env(0);
return [2, Stdlib_Hashtbl[15].call(null, vm_globals)];
}
}
}
}
}
throw caml_maybe_attach_backtrace
([0,
Sx_types[9],
"load-sxbc: expected (sxbc version hash (code ...))"],
1);
});
bind
("append!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 6:
var b = args[2];
if(b && ! b[2]){
var v = b[1], items = a[1];
return [6, Stdlib[37].call(null, items, [0, v, 0])];
}
break;
case 21:
var c = args[2];
if(c && ! c[2]){
var v$0 = c[1], r = a[1];
r[1] = Stdlib[37].call(null, r[1], [0, v$0, 0]);
return [21, r];
}
break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "append!: expected list and value"], 1);
});
bind
("remove!",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 6:
var b = args[2];
if(b && ! b[2]){
var target = b[1], items = a[1];
return [6,
Stdlib_List[44].call
(null, function(x){return x !== target ? 1 : 0;}, items)];
}
break;
case 21:
var c = args[2];
if(c && ! c[2]){
var target$0 = c[1], r = a[1];
r[1] =
Stdlib_List[44].call
(null, function(x){return x !== target$0 ? 1 : 0;}, r[1]);
return [21, r];
}
break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "append!: list and value"], 1);
});
var uw = Sx_runtime[74];
bind("make-env", function(param){return [20, Sx_types[20].call(null, 0)];});
bind("global-env", function(param){return [20, global_env];});
var cst_env_has = "env-has?";
bind
(cst_env_has,
function(args){
if(args){
var a = args[2];
if(a){
var b = a[1], e = args[1];
if(typeof b !== "number")
switch(b[0]){
case 3:
case 5:
if(! a[2]){
var k = b[1], c = uw(e);
return [0, Sx_types[28].call(null, c, k)];
}
break;
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_env_has], 1);
});
var cst_env_get = "env-get";
bind
(cst_env_get,
function(args){
if(args){
var a = args[2];
if(a){
var b = a[1], e = args[1];
if(typeof b !== "number")
switch(b[0]){
case 3:
case 5:
if(! a[2]){
var k = b[1], c = uw(e);
return Sx_types[30].call(null, c, k);
}
break;
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_env_get], 1);
});
var cst_env_bind = "env-bind!";
bind
(cst_env_bind,
function(args){
if(args){
var a = args[2];
if(a){
var b = a[1], e = args[1];
if(typeof b !== "number")
switch(b[0]){
case 3:
case 5:
var c = a[2];
if(c && ! c[2]){
var v = c[1], k = b[1], d = uw(e);
return Sx_types[26].call(null, d, k, v);
}
break;
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_env_bind], 1);
});
var cst_env_set = "env-set!";
bind
(cst_env_set,
function(args){
if(args){
var a = args[2];
if(a){
var b = a[1], e = args[1];
if(typeof b !== "number")
switch(b[0]){
case 3:
case 5:
var c = a[2];
if(c && ! c[2]){
var v = c[1], k = b[1], d = uw(e);
return Sx_types[32].call(null, d, k, v);
}
break;
}
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_env_set], 1);
});
var cst_env_extend = "env-extend";
bind
(cst_env_extend,
function(args){
if(args && ! args[2]){
var e = args[1], a = uw(e);
return [20, Sx_types[21].call(null, a)];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_env_extend], 1);
});
var cst_env_merge = "env-merge";
bind
(cst_env_merge,
function(args){
if(args){
var c = args[2];
if(c && ! c[2]){
var b = c[1], a = args[1];
return Sx_runtime[81].call(null, a, b);
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_env_merge], 1);
});
var cst_make_symbol = "make-symbol";
bind
(cst_make_symbol,
function(args){
a:
if(args){
var v = args[1];
if(typeof v !== "number" && 3 === v[0]){
if(args[2]) break a;
var s = v[1];
return [4, s];
}
if(! args[2]) return [4, Sx_types[35].call(null, v)];
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_make_symbol], 1);
});
var cst_make_keyword = "make-keyword";
bind
(cst_make_keyword,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){var s = a[1]; return [5, s];}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_make_keyword], 1);
});
var cst_keyword_name = "keyword-name";
bind
(cst_keyword_name,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 5 === a[0] && ! args[2]){var k = a[1]; return [3, k];}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_keyword_name], 1);
});
var cst_symbol_name = "symbol-name";
bind
(cst_symbol_name,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 4 === a[0] && ! args[2]){var s = a[1]; return [3, s];}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_symbol_name], 1);
});
var m = [3, cst$3];
bind
("component-name",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){var c = a[1]; return [3, c[1]];} break;
case 10:
if(! args[2]){var i = a[1]; return [3, i[1]];} break;
}
}
return m;
});
bind
("component-closure",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){var c = a[1]; return [20, c[5]];} break;
case 10:
if(! args[2]){var i = a[1]; return [20, i[5]];} break;
}
}
return [7, Stdlib_Hashtbl[1].call(null, 0, 0)];
});
bind
("component-params",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){
var c = a[1];
return [6,
Stdlib_List[20].call
(null, function(s){return [3, s];}, c[2])];
}
break;
case 10:
if(! args[2]){
var i = a[1];
return [6,
Stdlib_List[20].call
(null, function(s){return [3, s];}, i[2])];
}
break;
}
}
return 0;
});
bind
("component-body",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){var c = a[1]; return c[4];} break;
case 10:
if(! args[2]){var i = a[1]; return i[4];} break;
}
}
return 0;
});
var
cst_component_has_children = "component-has-children?",
n = [0, 0],
has_children_impl =
[15,
cst_component_has_children,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){var c = a[1]; return [0, c[3]];} break;
case 10:
if(! args[2]){var i = a[1]; return [0, i[3]];} break;
}
}
return n;
}];
Sx_types[26].call
(null, global_env, "component-has-children", has_children_impl);
Sx_types[26].call
(null, global_env, cst_component_has_children, has_children_impl);
var o = [3, "auto"], p = [3, "client"];
bind
("component-affinity",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 9:
if(! args[2]){var c = a[1]; return [3, c[6]];} break;
case 10:
if(! args[2]) return p; break;
}
}
return o;
});
bind("component-param-types", function(param){return 0;});
bind("component-set-param-types!", function(param){return 0;});
var cst_make_cek_state = "make-cek-state";
bind
(cst_make_cek_state,
function(args){
if(args){
var a = args[2];
if(a){
var b = a[2];
if(b && ! b[2]){
var k = b[1], e = a[1], c = args[1];
return Sx_ref[8].call(null, c, e, k);
}
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_make_cek_state], 1);
});
var cst_cek_step = "cek-step";
bind
(cst_cek_step,
function(args){
if(args && ! args[2]){
var s = args[1];
return Sx_ref[159].call(null, s);
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_cek_step], 1);
});
var cst_cek_phase = "cek-phase";
bind
(cst_cek_phase,
function(args){
if(args && ! args[2]){var s = args[1]; return Sx_ref[16].call(null, s);}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_cek_phase], 1);
});
var cst_cek_value = "cek-value";
bind
(cst_cek_value,
function(args){
if(args && ! args[2]){var s = args[1]; return Sx_ref[18].call(null, s);}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_cek_value], 1);
});
var cst_cek_terminal = "cek-terminal?";
bind
(cst_cek_terminal,
function(args){
if(args && ! args[2]){var s = args[1]; return Sx_ref[11].call(null, s);}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_cek_terminal], 1);
});
var cst_cek_kont = "cek-kont";
bind
(cst_cek_kont,
function(args){
if(args && ! args[2]){var s = args[1]; return Sx_ref[15].call(null, s);}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_cek_kont], 1);
});
var cst_frame_type = "frame-type";
bind
(cst_frame_type,
function(args){
if(args && ! args[2]){var f = args[1]; return Sx_ref[75].call(null, f);}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_frame_type], 1);
});
var cst_strict = "*strict*";
Sx_types[26].call(null, global_env, cst_strict, [0, 0]);
var cst_prim_param_types = "*prim-param-types*";
Sx_types[26].call(null, global_env, cst_prim_param_types, 0);
bind
("set-strict!",
function(args){
if(args && ! args[2]){
var v = args[1];
Sx_ref[125][1] = v;
Sx_types[32].call(null, global_env, cst_strict, v);
return 0;
}
return 0;
});
bind
("set-prim-param-types!",
function(args){
if(args && ! args[2]){
var v = args[1];
Sx_ref[128][1] = v;
Sx_types[32].call(null, global_env, cst_prim_param_types, v);
return 0;
}
return 0;
});
bind
("value-matches-type?",
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var t = a[1], v = args[1];
return Sx_ref[131].call(null, v, t);
}
}
return 0;
});
var cst_apply = "apply";
bind
(cst_apply,
function(args){
if(! args)
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_apply], 1);
var
rest = args[2],
f = args[1],
match = Stdlib_List[10].call(null, rest);
if(match){
var match$0 = match[1];
if(typeof match$0 === "number" || ! (6 === match$0[0]))
var all_args = rest;
else
var
prefix = match[2],
last = match$0[1],
a = Stdlib_List[10].call(null, prefix),
all_args = Stdlib[37].call(null, a, last);
}
else
var all_args = rest;
return Sx_runtime[6].call(null, f, all_args);
});
var cst_provide_push = "provide-push!";
bind
(cst_provide_push,
function(args){
if(args){
var a = args[2];
if(a && ! a[2]){
var v = a[1], n = args[1];
return Sx_runtime[107].call(null, n, v);
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_provide_push], 1);
});
var cst_provide_pop = "provide-pop!";
bind
(cst_provide_pop,
function(args){
if(args && ! args[2]){
var n = args[1];
return Sx_runtime[108].call(null, n);
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_provide_pop], 1);
});
bind
("eval-defcomp",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 6 === a[0]){
var b = a[1];
if(b && ! args[2]){
var rest = b[2];
return Sx_ref[141].call(null, [6, rest], [20, global_env]);
}
}
}
return 0;
});
bind
("eval-defisland",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 6 === a[0]){
var b = a[1];
if(b && ! args[2]){
var rest = b[2];
return Sx_ref[144].call(null, [6, rest], [20, global_env]);
}
}
}
return 0;
});
bind
("eval-defmacro",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 6 === a[0]){
var b = a[1];
if(b && ! args[2]){
var rest = b[2];
return Sx_ref[147].call(null, [6, rest], [20, global_env]);
}
}
}
return 0;
});
bind
("<>",
function(args){
var
a =
Stdlib_List[20].call
(null,
function(a){
if(typeof a === "number"){
if(0 === a) return cst$3;
}
else
switch(a[0]){
case 6:
return Sx_render[66].call(null, global_env, a, global_env);
case 3:
case 17:
var s = a[1]; return s;
}
return Sx_types[35].call(null, a);
},
args);
return [17, Stdlib_String[7].call(null, cst$3, a)];
});
bind
("raw!",
function(args){
var
a =
Stdlib_List[20].call
(null,
function(a){
if(typeof a !== "number")
switch(a[0]){case 3:case 17: var s = a[1]; return s;}
return Sx_types[35].call(null, a);
},
args);
return [17, Stdlib_String[7].call(null, cst$3, a)];
});
bind("define-page-helper", function(param){return 0;});
Sx_types[26].call(null, global_env, "__io-registry", Sx_ref[105]);
Sx_render[70].call(null, global_env);
bind("set-render-active!", function(param){return 0;});
var q = [0, 1];
bind("render-active?", function(param){return q;});
var r = [0, 0];
bind
("is-html-tag?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var s = a[1];
return [0, Sx_render[67].call(null, s)];
}
}
return r;
});
var
html_tags =
[6,
Stdlib_List[20].call(null, function(s){return [3, s];}, Sx_render[28])],
void_elements =
[6,
Stdlib_List[20].call(null, function(s){return [3, s];}, Sx_render[31])],
boolean_attrs =
[6,
Stdlib_List[20].call(null, function(s){return [3, s];}, Sx_render[33])];
Sx_types[26].call(null, global_env, "HTML_TAGS", html_tags);
Sx_types[26].call(null, global_env, "VOID_ELEMENTS", void_elements);
Sx_types[26].call(null, global_env, "BOOLEAN_ATTRS", boolean_attrs);
function eval_tag_args(raw_args, env){
var args = Sx_runtime[5].call(null, raw_args);
function process(param){
if(! param) return 0;
var kw = param[1];
if(typeof kw !== "number" && 5 === kw[0]){
var match = param[2];
if(! match) return [0, kw, 0];
var rest$0 = match[2], value = match[1], b = process(rest$0);
return [0, kw, [0, Sx_ref[241].call(null, value, env), b]];
}
var rest = param[2], a = process(rest);
return [0, Sx_ref[241].call(null, kw, env), a];
}
return process(args);
}
Stdlib_List[18].call
(null,
function(tag){
var
a =
[15,
Stdlib[28].call(null, "sf:", tag),
function(handler_args){
if(handler_args){
var a = handler_args[2];
if(a && ! a[2]){
var env = a[1], raw_args = handler_args[1];
return [6, [0, [4, tag], eval_tag_args(raw_args, env)]];
}
}
return 0;
}];
Sx_ref[87].call(null, [3, tag], a);
return 0;
},
Sx_render[28]);
var s = [4, cst_error], t = [4, cst_ok];
bind
("cek-try",
function(args){
if(args){
var match = args[2], thunk = args[1];
if(! match)
try{
var r = Sx_ref[221].call(null, thunk, 0);
return [6, [0, t, [0, r, 0]]];
}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0[1] !== Sx_types[9])
throw caml_maybe_attach_backtrace(exn$0, 0);
var msg$0 = exn$0[2];
return [6, [0, s, [0, [3, msg$0], 0]]];
}
if(! match[2]){
var handler = match[1];
try{var a = Sx_ref[221].call(null, thunk, 0); return a;}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sx_types[9]) throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2];
return Sx_ref[221].call(null, handler, [6, [0, [3, msg], 0]]);
}
}
}
return 0;
});
bind
("eval-expr",
function(args){
if(args){
var match = args[2], expr = args[1];
if(! match) return Sx_ref[241].call(null, expr, [20, global_env]);
if(! match[2]){
var e = match[1];
return Sx_ref[241].call(null, expr, e);
}
}
return 0;
});
bind
("trampoline",
function(args){
if(args && ! args[2]){
var v = args[1];
return caml_call1(Sx_primitives[3][1], v);
}
return 0;
});
bind
("expand-macro",
function(args){
if(args){
var a = args[2];
if(a){
var match = a[2], raw = a[1], mac = args[1];
if(! match) return Sx_ref[155].call(null, mac, raw, [20, global_env]);
var b = match[1];
if(typeof b !== "number" && 20 === b[0] && ! match[2]){
var e = b[1];
return Sx_ref[155].call(null, mac, raw, [20, e]);
}
}
}
return 0;
});
bind
("call-lambda",
function(args){
a:
if(args){
var b = args[2];
if(b){
var c = b[2], a = b[1], f = args[1];
if(c && c[2]) break a;
if(Sx_types[66].call(null, f)) return Sx_ref[221].call(null, f, a);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], "call-lambda: expected (fn args env?)"], 1);
});
bind
(cst_cek_call,
function(args){
if(args){
var b = args[2];
if(b && ! b[2]){
var a = b[1], f = args[1];
if(! Sx_types[66].call(null, f)){
var
d = Sx_types[57].call(null, f),
e = Stdlib[28].call(null, cst_cek_call_not_callable, d);
throw caml_maybe_attach_backtrace([0, Sx_types[9], e], 1);
}
a:
{
if(typeof a === "number"){
if(0 === a){var arg_list = 0; break a;}
}
else if(6 === a[0]){var l = a[1], arg_list = l; break a;}
var arg_list = [0, a, 0];
}
var c = Sx_runtime[6].call(null, f, arg_list);
return Sx_ref[2].call(null, c);
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_cek_call_expected_fn_args], 1);
});
bind
(cst_cek_eval,
function(args){
if(args){
var match = args[2], expr = args[1];
if(! match) return Sx_ref[241].call(null, expr, [20, global_env]);
if(! match[2]){
var e = match[1];
return Sx_ref[241].call(null, expr, e);
}
}
return 0;
});
bind
("qq-expand-runtime",
function(args){
if(args){
var match = args[2], template = args[1];
if(! match) return Sx_ref[149].call(null, template, [20, global_env]);
var a = match[1];
if(typeof a !== "number" && 20 === a[0] && ! match[2]){
var e = a[1];
return Sx_ref[149].call(null, template, [20, e]);
}
}
return 0;
});
var u = [0, 0], v = [0, 1];
bind
("thunk?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 12 === a[0] && ! args[2]) return v;
}
return u;
});
bind
("thunk-expr",
function(args){
if(args && ! args[2]){
var v = args[1];
return Sx_types[88].call(null, v);
}
return 0;
});
bind
("thunk-env",
function(args){
if(args && ! args[2]){
var v = args[1];
return Sx_types[89].call(null, v);
}
return 0;
});
var w = [0, 0], x = [0, 1];
bind
("lambda?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 8 === a[0] && ! args[2]) return x;
}
return w;
});
var y = [0, 0], z = [0, 1];
bind
("macro?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 11 === a[0] && ! args[2]) return z;
}
return y;
});
var A = [0, 0], B = [0, 1];
bind
("island?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 10 === a[0] && ! args[2]) return B;
}
return A;
});
var C = [0, 0], D = [0, 1];
bind
("component?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && a[0] - 9 >>> 0 < 2 && ! args[2]) return D;
}
return C;
});
var E = [0, 0], F = [0, 1];
bind
("callable?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 8:
case 9:
case 10:
case 15:
if(! args[2]) return F; break;
}
}
return E;
});
var G = [0, 0], H = [0, 1];
bind
("spread?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 18 === a[0] && ! args[2]) return H;
}
return G;
});
var I = [0, 0], J = [0, 1];
bind
("continuation?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 13 === a[0] && ! args[2]) return J;
}
return I;
});
var K = [6, 0];
bind
("lambda-params",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 8 === a[0] && ! args[2]){
var l = a[1];
return [6,
Stdlib_List[20].call(null, function(s){return [3, s];}, l[1])];
}
}
return K;
});
bind
("lambda-body",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 8 === a[0] && ! args[2]){var l = a[1]; return l[2];}
}
return 0;
});
bind
("lambda-closure",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 8 === a[0] && ! args[2]){var l = a[1]; return [20, l[3]];}
}
return [7, Stdlib_Hashtbl[1].call(null, 0, 0)];
});
bind
("spread-attrs",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 18 === a[0] && ! args[2]){
var pairs = a[1], d = Stdlib_Hashtbl[1].call(null, 0, 4);
Stdlib_List[18].call
(null,
function(param){
var v = param[2], k = param[1];
return Stdlib_Hashtbl[11].call(null, d, k, v);
},
pairs);
return [7, d];
}
}
return [7, Stdlib_Hashtbl[1].call(null, 0, 0)];
});
bind
("make-spread",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 7 === a[0] && ! args[2]){
var d = a[1];
return [18,
Stdlib_Hashtbl[14].call
(null,
function(k, v, acc){return [0, [0, k, v], acc];},
d,
0)];
}
}
return 0;
});
bind
("make-raw-html",
function(args){
a:
if(args){
var v = args[1];
if(typeof v !== "number" && 3 === v[0]){
if(args[2]) break a;
var s = v[1];
return [17, s];
}
if(! args[2]) return [17, Sx_types[35].call(null, v)];
}
return 0;
});
var L = [3, cst$3];
bind
("raw-html-content",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 3:
if(! args[2]){var s = a[1]; return [3, s];} break;
case 17:
if(! args[2]){var s$0 = a[1]; return [3, s$0];} break;
}
}
return L;
});
var M = [0, 1];
bind
("empty-dict?",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 7 === a[0] && ! args[2]){
var d = a[1];
return [0, 0 === Stdlib_Hashtbl[15].call(null, d) ? 1 : 0];
}
}
return M;
});
var cst_identical = "identical?";
bind
(cst_identical,
function(args){
if(args){
var c = args[2];
if(c && ! c[2]){
var b = c[1], a = args[1];
return [0, a === b ? 1 : 0];
}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_identical], 1);
});
bind
("for-each-indexed",
function(args){
a:
if(args){
var a = args[2];
if(a){
var b = a[1], fn_val = args[1];
if(typeof b !== "number"){
switch(b[0]){
case 6:
if(a[2]) break a; var items = b[1]; break;
case 21:
var c = b[1][1]; if(a[2]) break a; var items = c; break;
default: break a;
}
Stdlib_List[19].call
(null,
function(i, item){
Sx_ref[241].call
(null,
[6, [0, fn_val, [0, [2, i], [0, item, 0]]]],
[20, global_env]);
return 0;
},
items);
return 0;
}
}
}
return 0;
});
var cst_make_sx_expr = "make-sx-expr";
bind
(cst_make_sx_expr,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){var s = a[1]; return [19, s];}
}
throw caml_maybe_attach_backtrace([0, Sx_types[9], cst_make_sx_expr], 1);
});
var cst_sx_expr_source = "sx-expr-source";
bind
(cst_sx_expr_source,
function(args){
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 3:
if(! args[2]){var s = a[1]; return [3, s];} break;
case 19:
if(! args[2]){var s$0 = a[1]; return [3, s$0];} break;
}
}
throw caml_maybe_attach_backtrace
([0, Sx_types[9], cst_sx_expr_source], 1);
});
bind
("parse-int",
function(args){
a:
if(args){
var a = args[1];
if(typeof a !== "number")
switch(a[0]){
case 2:
var c = args[2], n = a[1];
if(c && c[2]) break a;
return [2, runtime.caml_round_float(n)];
case 3:
var match = args[2], s = a[1];
if(! match)
try{var e = [2, caml_int_of_string(s)]; return e;}
catch(exn){return 0;}
if(match[2]) break a;
var default_val$0 = match[1];
try{var d = [2, caml_int_of_string(s)]; return d;}
catch(exn){return default_val$0;}
}
var b = args[2];
if(b && ! b[2]){var default_val = b[1]; return default_val;}
}
return 0;
});
bind
("parse-number",
function(args){
if(args){
var a = args[1];
if(typeof a !== "number" && 3 === a[0] && ! args[2]){
var s = a[1];
try{var b = [2, runtime.caml_float_of_string(s)]; return b;}
catch(exn){return 0;}
}
}
return 0;
});
bind("query", function(param){return 0;});
bind("action", function(param){return 0;});
bind
("request-arg",
function(args){
if(args){var a = args[2]; if(a && ! a[2]){var d = a[1]; return d;}}
return 0;
});
var N = [3, "GET"];
bind("request-method", function(param){return N;});
bind("ctx", function(param){return 0;});
bind("helper", function(param){return 0;});
var
cst_bc = " (bc=",
cst_consts = " consts=",
cst_upv = " upv=",
cst$2 = ")\n",
cst$1 = ": ",
cst_jit_FAIL = "[jit] FAIL ",
cst_jit_FAIL_s_s_bc_d_consts_d =
"[jit] FAIL %s: %s (bc=%d consts=%d upv=%d)\n%!",
jit_compiling = [0, 0],
jit_enabled = [0, 0],
O =
[0,
[11,
cst_jit_FAIL,
[2,
0,
[11,
cst$1,
[2,
0,
[11,
cst_bc,
[4,
0,
0,
0,
[11,
cst_consts,
[4, 0, 0, 0, [11, cst_upv, [4, 0, 0, 0, [11, cst$2, [10, 0]]]]]]]]]]]],
cst_jit_FAIL_s_s_bc_d_consts_d],
P =
[0,
[11,
cst_jit_FAIL,
[2,
0,
[11,
cst$1,
[2,
0,
[11,
cst_bc,
[4,
0,
0,
0,
[11,
cst_consts,
[4, 0, 0, 0, [11, cst_upv, [4, 0, 0, 0, [11, cst$2, [10, 0]]]]]]]]]]]],
cst_jit_FAIL_s_s_bc_d_consts_d];
Sx_runtime[129][1] =
[0,
function(f, args){
if(typeof f !== "number" && 8 === f[0]){
var l = f[1];
if(jit_enabled[1]){
var match = l[5];
if(match){
var cl = match[1];
if(Sx_vm[4].call(null, cl)) return 0;
try{
var d = [0, Sx_vm[27].call(null, cl, args, vm_globals)];
return d;
}
catch(exn$0){
var exn = caml_wrap_exception(exn$0);
if(exn[1] !== Sx_types[9])
throw caml_maybe_attach_backtrace(exn, 0);
var msg = exn[2], match$0 = l[4];
if(match$0) var n = match$0[1], fn_name = n; else var fn_name = cst;
var
a = cl[2].length - 1,
b = cl[1][5].length - 1,
c = cl[1][4].length - 1;
caml_call5(Stdlib_Printf[3].call(null, O), fn_name, msg, c, b, a);
l[5] = [0, Sx_vm[3]];
return 0;
}
}
if(jit_compiling[1]) return 0;
jit_compiling[1] = 1;
var compiled = Sx_vm[35].call(null, l, vm_globals);
jit_compiling[1] = 0;
if(! compiled) return 0;
var cl$0 = compiled[1];
l[5] = [0, cl$0];
try{
var i = [0, Sx_vm[27].call(null, cl$0, args, vm_globals)];
return i;
}
catch(exn){
var exn$0 = caml_wrap_exception(exn);
if(exn$0[1] !== Sx_types[9])
throw caml_maybe_attach_backtrace(exn$0, 0);
var msg$0 = exn$0[2], match$1 = l[4];
if(match$1)
var n$0 = match$1[1], fn_name2 = n$0;
else
var fn_name2 = cst;
var
e = cl$0[2].length - 1,
g = cl$0[1][5].length - 1,
h = cl$0[1][4].length - 1;
caml_call5(Stdlib_Printf[3].call(null, P), fn_name2, msg$0, h, g, e);
l[5] = [0, Sx_vm[3]];
return 0;
}
}
}
return 0;
}];
var cst_enable_jit = "enable-jit!";
Sx_types[26].call
(null,
global_env,
cst_enable_jit,
[15, cst_enable_jit, function(param){jit_enabled[1] = 1; return 0;}]);
Stdlib_Hashtbl[12].call
(null,
function(name, fn){
var v = [15, name, fn];
Stdlib_Hashtbl[11].call(null, vm_globals, name, v);
var a = Sx_types[4].call(null, name);
return Stdlib_Hashtbl[11].call(null, global_env[1], a, v);
},
Sx_primitives[1]);
function wrap(fn){
return function(fn){
return function(){
globalThis.__sxR = undefined;
var r = fn.apply(null, arguments);
return globalThis.__sxR !== undefined ? globalThis.__sxR : r;};
}
(caml_js_wrap_callback(fn));
}
var sx = {};
sx.parse = caml_js_wrap_callback(api_parse);
sx.stringify = caml_js_wrap_callback(api_stringify);
sx.eval = wrap(api_eval);
sx.evalVM = wrap(api_eval_vm);
sx.evalExpr = wrap(api_eval_expr);
sx.renderToHtml = caml_js_wrap_callback(api_render_to_html);
sx.load = caml_js_wrap_callback(api_load);
sx.loadModule = caml_js_wrap_callback(api_load_module);
var in_batch = [0, 0];
sx.beginModuleLoad =
caml_js_wrap_callback
(function(param){
Stdlib_Hashtbl[2].call(null, vm_globals);
Stdlib_Hashtbl[12].call
(null,
function(id, v){
var a = Sx_types[5].call(null, id);
return Stdlib_Hashtbl[11].call(null, vm_globals, a, v);
},
global_env[1]);
in_batch[1] = 1;
return 1;
});
sx.endModuleLoad =
caml_js_wrap_callback
(function(param){
if(in_batch[1]){
Stdlib_Hashtbl[12].call
(null,
function(k, v){
var a = Sx_types[4].call(null, k);
return Stdlib_Hashtbl[11].call(null, global_env[1], a, v);
},
vm_globals);
in_batch[1] = 0;
}
return 1;
});
sx.compileModule = wrap(api_compile_module);
sx.typeOf = caml_js_wrap_callback(api_type_of);
sx.inspect = caml_js_wrap_callback(api_inspect);
sx.engine = caml_js_wrap_callback(api_engine);
sx.registerNative = caml_js_wrap_callback(api_register_native);
sx.loadSource = caml_js_wrap_callback(api_load);
sx.callFn = wrap(api_call_fn);
sx.isCallable = caml_js_wrap_callback(api_is_callable);
sx.fnArity = caml_js_wrap_callback(api_fn_arity);
sx.debugEnv = caml_js_wrap_callback(api_debug_env);
sx.scopeTraceOn =
caml_js_wrap_callback
(function(param){
Sx_primitives[8].call(null, 0);
return Js_of_ocaml_Js[1];
});
sx.scopeTraceOff =
caml_js_wrap_callback
(function(param){
Sx_primitives[9].call(null, 0);
return Js_of_ocaml_Js[1];
});
sx.scopeTraceDrain =
caml_js_wrap_callback
(function(param){
var
log = Sx_primitives[10].call(null, 0),
a = Stdlib_List[20].call(null, caml_jsstring_of_string, log);
return caml_js_from_array(Stdlib_Array[11].call(null, a));
});
sx.setStepLimit =
caml_js_wrap_callback
(function(n){
var limit = n | 0;
Sx_ref[3][1] = limit;
Sx_ref[4][1] = 0;
Sx_vm[20].call(null, 0);
return Js_of_ocaml_Js[1];
});
sx.resetStepCount =
caml_js_wrap_callback
(function(param){
Sx_ref[4][1] = 0;
Sx_vm[20].call(null, 0);
return Js_of_ocaml_Js[1];
});
Js_of_ocaml_Js[52][1].SxKernel = sx;
runtime.caml_register_global(373, [0], "Dune__exe__Sx_browser");
return;
}
(globalThis));
//# 5 "../.js/default/stdlib/std_exit.cmo.js"
//# shape: Std_exit:[]
(function
(globalThis){
"use strict";
var runtime = globalThis.jsoo_runtime;
function caml_call1(f, a0){
return (f.l >= 0 ? f.l : f.l = f.length) === 1
? f(a0)
: runtime.caml_call_gen(f, [a0]);
}
var Stdlib = runtime.caml_get_global_data().Stdlib;
caml_call1(Stdlib[103], 0);
runtime.caml_register_global(1, [0], "Std_exit");
return;
}
(globalThis));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3hfYnJvd3Nlci5iYy5qcyIsInNlY3Rpb25zIjpbeyJvZmZzZXQiOnsibGluZSI6MywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3hfYnJvd3Nlci5lb2Jqcy9qc29vL3N4X2Jyb3dzZXIuYmMucnVudGltZS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvYnVpbHRpbi8rbWxCeXRlcy5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2lvLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmcy5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK3N5bmMuanMiLCIvYnVpbHRpbi8rbmF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8rYmlnc3RyaW5nLmpzIiwiL2J1aWx0aW4vK2JsYWtlMi5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2VmZmVjdC5qcyIsIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLytkb21haW4uanMiLCIvYnVpbHRpbi8raW50cy5qcyIsIi9idWlsdGluLytoYXNoLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rcnVudGltZV9ldmVudHMuanMiLCIvYnVpbHRpbi8renN0ZC5qcyIsIi9idWlsdGluLyt3ZWFrLmpzIiwiL2J1aWx0aW4vK2djLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytncmFwaGljcy5qcyIsIi9idWlsdGluLytqc2xpYl9qc19vZl9vY2FtbC5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rcHJuZy5qcyIsIi9idWlsdGluLytwYXJzaW5nLmpzIiwiL2J1aWx0aW4vK3N0ci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEFuIE9DYW1sIHN0cmluZyBpcyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBmaWVsZHM6XG4vLyAtIHRhZyAndCdcbi8vIC0gbGVuZ3RoICdsJ1xuLy8gLSBjb250ZW50cyAnYydcbi8vXG4vLyBUaGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgSmF2YVNjcmlwdCBhcnJheSBvclxuLy8gYSBKYXZhU2NyaXB0IHN0cmluZy4gVGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZyBjYW4gYmUgbGVzcyB0aGFuIHRoZVxuLy8gbGVuZ3RoIG9mIHRoZSBPQ2FtbCBzdHJpbmcuIEluIHRoaXMgY2FzZSwgcmVtYWluaW5nIGJ5dGVzIGFyZVxuLy8gYXNzdW1lZCB0byBiZSB6ZXJvZXMuIEFycmF5cyBhcmUgbXV0YWJsZSBidXQgY29uc3VtZXMgbW9yZSBtZW1vcnlcbi8vIHRoYW4gc3RyaW5ncy4gQSBjb21tb24gcGF0dGVybiBpcyB0byBzdGFydCBmcm9tIGFuIGVtcHR5IHN0cmluZyBhbmRcbi8vIHByb2dyZXNzaXZlbHkgZmlsbCBpdCBmcm9tIHRoZSBzdGFydC4gUGFydGlhbCBzdHJpbmdzIG1ha2VzIGl0XG4vLyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBlZmZpY2llbnRseS5cbi8vXG4vLyBXaGVuIGNvbnZlcnRpbmcgdG8gYW5kIGZyb20gVVRGLTE2LCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlXG4vLyBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzIChpbiB3aGljaCBjYXNlLCBub1xuLy8gY29udmVyc2lvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQpIG9yIG5vdC5cbi8vXG4vLyBUaGUgc3RyaW5nIHRhZyBjYW4gdGh1cyB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy8gICBmdWxsIHN0cmluZyAgICAgQllURSB8IFVOS05PV046ICAgICAgMFxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IEFTQ0lJOiAgICAgICAgOVxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IE5PVF9BU0NJSTogICAgOFxuLy8gICBzdHJpbmcgcHJlZml4ICAgUEFSVElBTDogICAgICAgICAgICAgMlxuLy8gICBhcnJheSAgICAgICAgICAgQVJSQVk6ICAgICAgICAgICAgICAgNFxuLy9cbi8vIE9uZSBjYW4gdXNlIGJpdCBtYXNraW5nIHRvIGRpc2NyaW1pbmF0ZSB0aGVzZSBkaWZmZXJlbnQgY2FzZXM6XG4vLyAgIGtub3duX2VuY29kaW5nKHgpID0geCY4XG4vLyAgIGlzX2FzY2lpKHgpID0gICAgICAgeCYxXG4vLyAgIGtpbmQoeCkgPSAgICAgICAgICAgeCY2XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9zdHJfcmVwZWF0KG4sIHMpIHtcbiAgcmV0dXJuIHMucmVwZWF0KG4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsIGksIGxlbikge1xuICB2YXIgZiA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gIGlmIChpID09PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PT0gYS5sZW5ndGgpIHJldHVybiBmLmFwcGx5KG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsIGxlbiAtPSAxMDI0KVxuICAgIHMgKz0gZi5hcHBseShudWxsLCBhLnNsaWNlKGksIGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG4vL1dlYWtkZWZcbi8vIFByZSBFQ01BU2NyaXB0IDUsIFthcHBseV0gd291bGQgbm90IHN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3QuXG4vLyBJbiBzdWNoIHNldHVwLCBUeXBlZF9hcnJheSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBwb2x5ZmlsbCwgYW5kIFtmLmFwcGx5XSB3b3VsZFxuLy8gZmFpbCBoZXJlLiBNYXJrIHRoZSBwcmltaXRpdmUgYXMgV2Vha2RlZiwgc28gdGhhdCBwZW9wbGUgY2FuIG92ZXJyaWRlIGl0IGVhc2lseS5cbmZ1bmN0aW9uIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoYSwgaSwgbGVuKSB7XG4gIHZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgaWYgKGkgPT09IDAgJiYgbGVuIDw9IDQwOTYgJiYgbGVuID09PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkobnVsbCwgYSk7XG4gIHZhciBzID0gXCJcIjtcbiAgZm9yICg7IDAgPCBsZW47IGkgKz0gMTAyNCwgbGVuIC09IDEwMjQpXG4gICAgcyArPSBmLmFwcGx5KG51bGwsIGEuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKGxlbiwgMTAyNCkpKTtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29faXNfYXNjaWlcbmZ1bmN0aW9uIGpzb29faXNfYXNjaWkocykge1xuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGdldHMgYmV0dGVyIGF0IGFyb3VuZCB0aGlzIHBvaW50IGZvciBhbGwgYnJvd3NlcnNcbiAgaWYgKHMubGVuZ3RoIDwgMjQpIHtcbiAgICAvLyBTcGlkZXJtb25rZXkgZ2V0cyBtdWNoIHNsb3dlciB3aGVuIHMubGVuZ3RoID49IDI0IChvbiA2NCBiaXQgYXJjaHMpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBpZiAocy5jaGFyQ29kZUF0KGkpID4gMTI3KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbnRyb2xDaGFyYWN0ZXJzSW5SZWdleDogZXhwZWN0ZWRcbiAgZWxzZSByZXR1cm4gIS9bXlxceDAwLVxceDdmXS8udGVzdChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICAgIGNhc2UgMCAvKiBCWVRFUyAqLzpcbiAgICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgIGlmIChpID49IHMuYy5sZW5ndGgpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIHMuYy5jaGFyQ29kZUF0KGkpO1xuICAgIGNhc2UgNCAvKiBBUlJBWSAqLzpcbiAgICAgIHJldHVybiBzLmNbaV07XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPT0gNCAvKiBBUlJBWSAqLykge1xuICAgIGlmIChpID09PSBzLmMubGVuZ3RoKSB7XG4gICAgICBzLmMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgIGlmIChpICsgMSA9PT0gcy5sKSBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LTk9XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICB9XG4gIHMuY1tpXSA9IGM7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQxNihzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSksXG4gICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4KSB8IGIxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MTYocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSxcbiAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCkgfCBiMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDMyKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSxcbiAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpLFxuICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpICsgMiksXG4gICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCkgfCAoYjMgPDwgMTYpIHwgKGIyIDw8IDgpIHwgYjE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkpLFxuICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkgKyAxKSxcbiAgICBiMyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMiksXG4gICAgYjQgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0KSB8IChiMyA8PCAxNikgfCAoYjIgPDwgOCkgfCBiMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDY0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gNykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgYVs3IC0gal0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQoX3MsIF9pLCBfYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfc2V0KHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocywgaSwgaTE2KSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhmZiAmIChpMTYgPj4gOCksXG4gICAgYjEgPSAweGZmICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGkgKyAxLCBiMik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MzIocywgaSwgaTMyKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGI0ID0gMHhmZiAmIChpMzIgPj4gMjQpLFxuICAgIGIzID0gMHhmZiAmIChpMzIgPj4gMTYpLFxuICAgIGIyID0gMHhmZiAmIChpMzIgPj4gOCksXG4gICAgYjEgPSAweGZmICYgaTMyO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpICsgMiwgYjMpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDMsIGI0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQ2NChzLCBpLCBpNjQpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoaTY0KTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDcgLSBqLCBhW2pdKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczoganNvb190ZXh0X2VuY29kZXJcbnZhciBqc29vX3RleHRfZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuXG4vL1Byb3ZpZGVzOiBqc29vX3RleHRfZGVjb2RlclxudmFyIGpzb29fdGV4dF9kZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGpzb29fdGV4dF9lbmNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHtcbiAgICByZXR1cm4gbmV3IE1sQnl0ZXMoOSwgcywgcy5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhID0ganNvb190ZXh0X2VuY29kZXIuZW5jb2RlKHMpO1xuICAgIHJldHVybiBuZXcgTWxCeXRlcyg0LCBhLCBhLmxlbmd0aCk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywganNvb19pc19hc2NpaVxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczoganNvb190ZXh0X2RlY29kZXJcbmNsYXNzIE1sQnl0ZXMge1xuICBjb25zdHJ1Y3Rvcih0YWcsIGNvbnRlbnRzLCBsZW5ndGgpIHtcbiAgICB0aGlzLnQgPSB0YWc7XG4gICAgdGhpcy5jID0gY29udGVudHM7XG4gICAgdGhpcy5sID0gbGVuZ3RoO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgc3dpdGNoICh0aGlzLnQpIHtcbiAgICAgIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIGNhc2UgOCAvKkJZVEVTIHwgTk9UX0FTQ0lJKi86XG4gICAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHRoaXMpO1xuICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgMCAvKkJZVEVTIHwgVU5LTk9XTiovOlxuICAgICAgICBpZiAoanNvb19pc19hc2NpaSh0aGlzLmMpKSB0aGlzLnQgPSA5OyAvKkJZVEVTIHwgQVNDSUkqL1xuICAgICAgICBlbHNlIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgICAgICByZXR1cm4gdGhpcy5jO1xuICAgIH1cbiAgfVxuXG4gIHRvVXRmMTYoKSB7XG4gICAgaWYgKHRoaXMudCA9PT0gOSkgcmV0dXJuIHRoaXMuYztcbiAgICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXModGhpcyk7XG4gICAgcmV0dXJuIGpzb29fdGV4dF9kZWNvZGVyLmRlY29kZShhKTtcbiAgfVxuXG4gIHNsaWNlKCkge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy50ID09PSA0ID8gdGhpcy5jLnNsaWNlKCkgOiB0aGlzLmM7XG4gICAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCwgY29udGVudCwgdGhpcy5sKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocykge1xuICAvKiBBc3N1bWVzIG5vdCBCWVRFUyAqL1xuICBpZiAocy50ID09PSAyIC8qIFBBUlRJQUwgKi8pIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgXCJcXDBcIik7XG4gIGVsc2Ugcy5jID0gY2FtbF9zdWJfdWludDhfYXJyYXlfdG9fanNieXRlcyhzLmMsIDAsIHMuYy5sZW5ndGgpO1xuICBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LTk9XTiovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQVJSQVkgKi9cbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShzLmwpO1xuICB2YXIgYiA9IHMuYyxcbiAgICBsID0gYi5sZW5ndGgsXG4gICAgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gYi5jaGFyQ29kZUF0KGkpO1xuICBmb3IgKGwgPSBzLmw7IGkgPCBsOyBpKyspIGFbaV0gPSAwO1xuICBzLmMgPSBhO1xuICBzLnQgPSA0OyAvKiBBUlJBWSAqL1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocykge1xuICBpZiAocy50ICE9PSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gIHJldHVybiBzLmM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcocykge1xuICB2YXIgbCA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShsKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbiA/IDIgOiA5LCBcIlwiLCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcoX2xlbikge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcyxjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2J5dGVzKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQnl0ZXMuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuID8gMiA6IDksIFwiXCIsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2FycmF5KGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsIDAsIGEubGVuZ3RoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGEpIHtcbiAgcmV0dXJuIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoYSwgMCwgYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkoYSkge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91aW50OF9hcnJheShhLnNsaWNlKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5KGEpIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LCBhLCBhLmxlbmd0aCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYSkge1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoNCwgYSwgYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICBzMS50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgczIudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiBzMS5jIDwgczIuYyA/IC0xIDogczEuYyA+IHMyLmMgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMikge1xuICBpZiAoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgczEudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIHMyLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gczEuYyA9PT0gczIuYyA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19lcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbm90ZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAxIC0gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX25vdGVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gMSAtIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzZXF1YWwgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHMxLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICBzMi50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIHMxLmMgPD0gczIuYyA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHMxLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICBzMi50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIHMxLmMgPCBzMi5jID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsIHMxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9BbGlhczogY2FtbF9maWxsX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT09IDIgLyogUEFSVElBTCAqLyAmJiBsID49IHMuYy5sZW5ndGgpKSkge1xuICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0KGwsIFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgICAgICBzLnQgPSBsID09PSBzLmwgPyAwIC8qIEJZVEVTIHwgVU5LTk9XTiAqLyA6IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHMudCAhPT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ibGl0X2J5dGVzKHMxLCBpMSwgczIsIGkyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDA7XG4gIGlmIChcbiAgICBpMiA9PT0gMCAmJlxuICAgIChsZW4gPj0gczIubCB8fCAoczIudCA9PT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpXG4gICkge1xuICAgIHMyLmMgPVxuICAgICAgczEudCA9PT0gNCAvKiBBUlJBWSAqL1xuICAgICAgICA/IGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbilcbiAgICAgICAgOiBpMSA9PT0gMCAmJiBzMS5jLmxlbmd0aCA9PT0gbGVuXG4gICAgICAgICAgPyBzMS5jXG4gICAgICAgICAgOiBzMS5jLnNsaWNlKGkxLCBpMSArIGxlbik7XG4gICAgczIudCA9IHMyLmMubGVuZ3RoID09PSBzMi5sID8gMCAvKiBCWVRFUyB8IFVOS05PV04gKi8gOiAyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSBpZiAoczIudCA9PT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09PSBzMi5jLmxlbmd0aCkge1xuICAgIHMyLmMgKz1cbiAgICAgIHMxLnQgPT09IDQgLyogQVJSQVkgKi9cbiAgICAgICAgPyBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pXG4gICAgICAgIDogaTEgPT09IDAgJiYgczEuYy5sZW5ndGggPT09IGxlblxuICAgICAgICAgID8gczEuY1xuICAgICAgICAgIDogczEuYy5zbGljZShpMSwgaTEgKyBsZW4pO1xuICAgIHMyLnQgPSBzMi5jLmxlbmd0aCA9PT0gczIubCA/IDAgLyogQllURVMgfCBVTktOT1dOICovIDogMjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2Uge1xuICAgIGlmIChzMi50ICE9PSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsXG4gICAgICBjMiA9IHMyLmM7XG4gICAgaWYgKHMxLnQgPT09IDQgLyogQVJSQVkgKi8pIHtcbiAgICAgIGlmIChpMiA8PSBpMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBjMltpMiArIGldID0gYzFbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzJbaTIgKyBpXSA9IGMxW2kxICsgaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsID0gTWF0aC5taW4obGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzJbaTIgKyBpXSA9IGMxLmNoYXJDb2RlQXQoaTEgKyBpKTtcbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGMyW2kyICsgaV0gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ibGl0X3N0cmluZyhhLCBiLCBjLCBkLCBlKSB7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhhKSwgYiwgYywgZCwgZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19sZW5ndGgocykge1xuICByZXR1cm4gcy5sO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXQgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29uY2F0KGEsIGIpIHtcbiAgcmV0dXJuIGEgKyBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIE1sQnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbmNhdChzMSwgczIpIHtcbiAgczEudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIHMyLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoMCwgczEuYyArIHMyLmMsIHMxLmwgKyBzMi5sKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBzLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZSBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gczEgPCBzMiA/IC0xIDogczEgPiBzMiA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYgKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gczEgPD0gczIgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiBzMSA8IHMyID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgcy50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh4KSB7XG4gIHJldHVybiB4O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3RleHRfZGVjb2Rlcl9idWZmXG52YXIganNvb190ZXh0X2RlY29kZXJfYnVmZiA9IG5ldyBBcnJheUJ1ZmZlcigxMDI0KTtcblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWlcbi8vUmVxdWlyZXM6IGpzb29fdGV4dF9kZWNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX3RleHRfZGVjb2Rlcl9idWZmXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHJldHVybiBzO1xuICB2YXIgYSA9XG4gICAgcy5sZW5ndGggPD0ganNvb190ZXh0X2RlY29kZXJfYnVmZi5sZW5ndGhcbiAgICAgID8gbmV3IFVpbnQ4QXJyYXkoanNvb190ZXh0X2RlY29kZXJfYnVmZiwgMCwgcy5sZW5ndGgpXG4gICAgICA6IG5ldyBVaW50OEFycmF5KHMubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgYVtpXSA9IHMuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4ganNvb190ZXh0X2RlY29kZXIuZGVjb2RlKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGpzb29fdGV4dF9lbmNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpO1xuICB2YXIgYSA9IGpzb29fdGV4dF9lbmNvZGVyLmVuY29kZShzKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7XG4gIHJldHVybiBuZXcgTWxCeXRlcygwLCBzLCBzLmxlbmd0aCk7XG59XG5cbi8vIFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBiZSB1c2VkIHdoZW4gdXNlLWpzLXN0cmluZz1mYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSwgczIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcy50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIHMudG9VdGYxNigpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyhzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9pc19tbF9ieXRlcyhzKSB7XG4gIHJldHVybiBzIGluc3RhbmNlb2YgTWxCeXRlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JldHVybnMgYSAoZnVsbCkgc3RyaW5nIG9mIGJ5dGVzIG9yIGFuIGFycmF5XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gICAgICByZXR1cm4gcy5jO1xuICAgIGRlZmF1bHQ6IC8qIEJZVEVTIG9yIEFSUkFZICovXG4gICAgICByZXR1cm4gcy5jO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbnRyb2xDaGFyYWN0ZXJzSW5SZWdleDogZXhwZWN0ZWRcbiAgcmV0dXJuIHR5cGVvZiBzID09PSBcInN0cmluZ1wiICYmICEvW15cXHgwMC1cXHhmZl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2lzX21sX2J5dGVzKHMpO1xufVxuXG4vLyBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZXByZWNhdGVkXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vRGVwcmVjYXRlZDogVXNlIFtjYW1sX3N0cmluZ19vZl9qc2J5dGVzXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RvX2pzX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL0RlcHJlY2F0ZWQ6IFVzZSBbY2FtbF9qc3N0cmluZ19vZl9zdHJpbmddIGluc3RlYWRcbmZ1bmN0aW9uIGNhbWxfdG9fanNfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vRGVwcmVjYXRlZDogVXNlIFtjYW1sX3N0cmluZ19vZl9qc3N0cmluZ10gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9qc190b19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX3N0cmluZyh4KSB7XG4gIHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNdIGluc3RlYWRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2ZfYnl0ZXMoeCkge1xuICByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0RlcHJlY2F0ZWQ6IFVzZSBbY2FtbF9zdHJpbmdfb2ZfanNieXRlc10gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9uZXdfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogMHg4MCxcbiAgUFJFRklYX1NNQUxMX0lOVDogMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogMHgyMCxcbiAgQ09ERV9JTlQ4OiAweDAwLFxuICBDT0RFX0lOVDE2OiAweDAxLFxuICBDT0RFX0lOVDMyOiAweDAyLFxuICBDT0RFX0lOVDY0OiAweDAzLFxuICBDT0RFX1NIQVJFRDg6IDB4MDQsXG4gIENPREVfU0hBUkVEMTY6IDB4MDUsXG4gIENPREVfU0hBUkVEMzI6IDB4MDYsXG4gIENPREVfQkxPQ0szMjogMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAweDEzLFxuICBDT0RFX1NUUklORzg6IDB4MDksXG4gIENPREVfU1RSSU5HMzI6IDB4MGEsXG4gIENPREVfRE9VQkxFX0JJRzogMHgwYixcbiAgQ09ERV9ET1VCTEVfTElUVExFOiAweDBjLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAweDBkLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOiAweDBlLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzogMHgwZixcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6IDB4MDcsXG4gIENPREVfQ09ERVBPSU5URVI6IDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAweDExLFxuICBDT0RFX0NVU1RPTTogMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAweDE4LFxuICBDT0RFX0NVU1RPTV9GSVhFRDogMHgxOSxcbn07XG5cbi8vUHJvdmlkZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG5jbGFzcyBVSW50OEFycmF5UmVhZGVyIHtcbiAgY29uc3RydWN0b3IocywgaSkge1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5pID0gaTtcbiAgfVxuXG4gIHJlYWQ4dSgpIHtcbiAgICByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXTtcbiAgfVxuXG4gIHJlYWQ4cygpIHtcbiAgICByZXR1cm4gKHRoaXMuc1t0aGlzLmkrK10gPDwgMjQpID4+IDI0O1xuICB9XG5cbiAgcmVhZDE2dSgpIHtcbiAgICB2YXIgcyA9IHRoaXMucyxcbiAgICAgIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDgpIHwgc1tpICsgMV07XG4gIH1cblxuICByZWFkMTZzKCkge1xuICAgIHZhciBzID0gdGhpcy5zLFxuICAgICAgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKChzW2ldIDw8IDI0KSA+PiAxNikgfCBzW2kgKyAxXTtcbiAgfVxuXG4gIHJlYWQzMnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHNbaV0gPDwgMjQpIHwgKHNbaSArIDFdIDw8IDE2KSB8IChzW2kgKyAyXSA8PCA4KSB8IHNbaSArIDNdKSA+Pj4gMDtcbiAgfVxuXG4gIHJlYWQzMnMoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCkgfCAoc1tpICsgMV0gPDwgMTYpIHwgKHNbaSArIDJdIDw8IDgpIHwgc1tpICsgM107XG4gIH1cblxuICByZWFkc3RyKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKSk7XG4gIH1cblxuICByZWFkdWludDhhcnJheShsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogSnNTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmNsYXNzIEpzU3RyaW5nUmVhZGVyIHtcbiAgY29uc3RydWN0b3IocywgaSkge1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5pID0gaTtcbiAgfVxuXG4gIHJlYWQ4dSgpIHtcbiAgICByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspO1xuICB9XG5cbiAgcmVhZDhzKCkge1xuICAgIHJldHVybiAodGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0KSA+PiAyNDtcbiAgfVxuXG4gIHJlYWQxNnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfVxuXG4gIHJlYWQxNnMoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfVxuXG4gIHJlYWQzMnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoXG4gICAgICAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfFxuICAgICAgICAocy5jaGFyQ29kZUF0KGkgKyAxKSA8PCAxNikgfFxuICAgICAgICAocy5jaGFyQ29kZUF0KGkgKyAyKSA8PCA4KSB8XG4gICAgICAgIHMuY2hhckNvZGVBdChpICsgMykpID4+PlxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICByZWFkMzJzKCkge1xuICAgIHZhciBzID0gdGhpcy5zLFxuICAgICAgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKFxuICAgICAgKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDgpIHxcbiAgICAgIHMuY2hhckNvZGVBdChpICsgMylcbiAgICApO1xuICB9XG5cbiAgcmVhZHN0cihsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zbGljZShpLCBpICsgbGVuKSk7XG4gIH1cblxuICByZWFkdWludDhhcnJheShsZW4pIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgdmFyIHMgPSB0aGlzLnM7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgYltqXSA9IHMuY2hhckNvZGVBdChpICsgaik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IEpzU3RyaW5nUmVhZGVyLCBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLCBvZnMpIHtcbiAgdmFyIGMgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQocyk7XG4gIHZhciBvZnMgPSB0eXBlb2Ygb2ZzID09PSBcIm51bWJlclwiID8gb2ZzIDogb2ZzWzBdO1xuICB2YXIgcmVhZGVyID1cbiAgICBjIGluc3RhbmNlb2YgVWludDhBcnJheVxuICAgICAgPyBuZXcgVUludDhBcnJheVJlYWRlcihjLCBvZnMpXG4gICAgICA6IG5ldyBKc1N0cmluZ1JlYWRlcihjLCBvZnMpO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bm1hcnNoYWwocmVhZGVyLCBzaXplKSB7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHdyaXRlci53cml0ZSg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4O1xuICBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpIHtcbiAgc2l6ZVswXSA9IDQ7XG4gIHJldHVybiByZWFkZXIucmVhZDMycygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpIHtcbiAgc3dpdGNoIChyZWFkZXIucmVhZDh1KCkpIHtcbiAgICBjYXNlIDE6XG4gICAgICBzaXplWzBdID0gNDtcbiAgICAgIHJldHVybiByZWFkZXIucmVhZDMycygpO1xuICAgIGNhc2UgMjpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPSB7XG4gIF9qOiB7XG4gICAgZGVzZXJpYWxpemU6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgIHNlcmlhbGl6ZTogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgIGZpeGVkX2xlbmd0aDogOCxcbiAgICBjb21wYXJlOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgaGFzaDogY2FtbF9pbnQ2NF9oYXNoLFxuICB9LFxuICBfaToge1xuICAgIGRlc2VyaWFsaXplOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICBmaXhlZF9sZW5ndGg6IDQsXG4gIH0sXG4gIF9uOiB7XG4gICAgZGVzZXJpYWxpemU6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICBmaXhlZF9sZW5ndGg6IDQsXG4gIH0sXG4gIF9iaWdhcnJheToge1xuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAocmVhZGVyLCBzeikge1xuICAgICAgcmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgXCJfYmlnYXJyYXlcIik7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgIGNvbXBhcmU6IGNhbWxfYmFfY29tcGFyZSxcbiAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gIH0sXG4gIF9iaWdhcnIwMjoge1xuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAocmVhZGVyLCBzeikge1xuICAgICAgcmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgXCJfYmlnYXJyMDJcIik7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgIGNvbXBhcmU6IGNhbWxfYmFfY29tcGFyZSxcbiAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gIH0sXG59O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX3NldF9vb19pZFxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIpIHtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N2Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT09IDApIHtcbiAgICAgIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdmKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgdmFyIG1hZ2ljID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgc3dpdGNoIChtYWdpYykge1xuICAgIGNhc2UgMHg4NDk1YTZiZSAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICAgIHZhciBjb21wcmVzc2VkID0gMDtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gZGF0YV9sZW47XG4gICAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmQgLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSByZWFkZXIucmVhZDh1KCkgJiAweDNmO1xuICAgICAgdmFyIGNvbXByZXNzZWQgPSAxO1xuICAgICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgdmFyIG51bV9vYmplY3RzID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgICB2YXIgX3NpemVfMzIgPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICAgIHZhciBfc2l6ZV82NCA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgaWYgKG92ZXJmbG93WzBdKSB7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXG4gICAgICAgICAgXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmYgLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi86XG4gICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICBcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIGEgMzItYml0IHBsYXRmb3JtXCIsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBiYWQgb2JqZWN0XCIpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKGhlYWRlcl9sZW4gIT09IHJlYWRlci5pIC0gb2xkX3Bvcykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBpbnZhbGlkIGhlYWRlclwiKTtcbiAgfVxuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIG9iamVjdHMgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSBudW1fb2JqZWN0cyA+IDAgPyBbXSA6IG51bGw7XG4gIHZhciBvYmpfY291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIGludGVybl9yZWMocmVhZGVyKSB7XG4gICAgdmFyIGNvZGUgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweGY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gdjtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICBpZiAodGFnID09PSAyNDgpIG9iamVjdHMucHVzaCh2KTtcbiAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2UgcmV0dXJuIGNvZGUgJiAweDNmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcgKi8pIHtcbiAgICAgICAgdmFyIGxlbiA9IGNvZGUgJiAweDFmO1xuICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDhzKCk7XG4gICAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMTZzKCk7XG4gICAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbnRlZ2VyIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIGlmIChjb21wcmVzc2VkID09PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICAgICAgICBpZiAoY29tcHJlc3NlZCA9PT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgaWYgKGNvbXByZXNzZWQgPT09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICAgIHZhciBoZWFkZXIgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4ZmY7XG4gICAgICAgICAgICB2YXIgc2l6ZSA9IGhlYWRlciA+PiAxMDtcbiAgICAgICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgICAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuIHY7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICBpZiAodGFnID09PSAyNDgpIG9iamVjdHMucHVzaCh2KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MTM6IC8vY3N0LkNPREVfQkxPQ0s2NDpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MDk6IC8vY3N0LkNPREVfU1RSSU5HODpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyKGxlbik7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGE6IC8vY3N0LkNPREVfU1RSSU5HMzI6XG4gICAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIobGVuKTtcbiAgICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgIGNhc2UgMHgwYzogLy9jc3QuQ09ERV9ET1VCTEVfTElUVExFOlxuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHRbaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGU6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6XG4gICAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDBkOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfQklHOlxuICAgICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDA3OiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDBmOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgICAgY2FzZSAweDExOiAvL2NzdC5DT0RFX0lORklYUE9JTlRFUjpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDEyOiAvL2NzdC5DT0RFX0NVU1RPTTpcbiAgICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgICBjYXNlIDB4MTk6IC8vY3N0LkNPREVfQ1VTVE9NX0ZJWEVEOlxuICAgICAgICAgICAgdmFyIGMsXG4gICAgICAgICAgICAgIHMgPSBcIlwiO1xuICAgICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSgpKSAhPT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tzXTtcbiAgICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgICAgaWYgKCFvcHMpXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdW5rbm93biBjdXN0b20gYmxvY2sgaWRlbnRpZmllclwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDB4MTI6IC8vIGNzdC5DT0RFX0NVU1RPTSAoZGVwcmVjYXRlZClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgICAgICBpZiAoIW9wcy5maXhlZF9sZW5ndGgpXG4gICAgICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICAgICAgICAgICAgICBcImlucHV0X3ZhbHVlOiBleHBlY3RlZCBhIGZpeGVkLXNpemUgY3VzdG9tIGJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSBvcHMuZml4ZWRfbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDB4MTg6IC8vIGNzdC5DT0RFX0NVU1RPTV9MRU5cbiAgICAgICAgICAgICAgICBleHBlY3RlZF9zaXplID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHNpemU2NFxuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQzMnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaXplID0gWzBdO1xuICAgICAgICAgICAgdmFyIHYgPSBvcHMuZGVzZXJpYWxpemUocmVhZGVyLCBzaXplKTtcbiAgICAgICAgICAgIGlmIChleHBlY3RlZF9zaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkX3NpemUgIT09IHNpemVbMF0pXG4gICAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICAgICAgICAgIFwiaW5wdXRfdmFsdWU6IGluY29ycmVjdCBsZW5ndGggb2Ygc2VyaWFsaXplZCBjdXN0b20gYmxvY2tcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjb21wcmVzc2VkKSB7XG4gICAgaWYgKGNhbWxfZGVjb21wcmVzc19pbnB1dCkge1xuICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVhZHVpbnQ4YXJyYXkoZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KHVuY29tcHJlc3NlZF9kYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gY2FtbF9kZWNvbXByZXNzX2lucHV0KGRhdGEsIHJlcyk7XG4gICAgICB2YXIgcmVhZGVyID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIocmVzLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjb21wcmVzc2VkIG9iamVjdCwgY2Fubm90IGRlY29tcHJlc3NcIik7XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjKHJlYWRlcik7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjKHJlYWRlcik7XG4gIH1cbiAgd2hpbGUgKG9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgIHZhciB4ID0gb2JqZWN0cy5wb3AoKTtcbiAgICBpZiAoeFsyXSA+PSAwKSBjYW1sX3NldF9vb19pZCh4KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPCA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDIwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPj0gNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAxNjtcblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZShzLCBvZnMpIHtcbiAgdmFyIHIgPSBuZXcgVUludDhBcnJheVJlYWRlcihjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpLCBvZnMpO1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N2Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT09IDApIHtcbiAgICAgIGMgPSByLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT09IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Zik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG5cbiAgc3dpdGNoIChyLnJlYWQzMnUoKSkge1xuICAgIGNhc2UgMHg4NDk1YTZiZSAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHIucmVhZDMydSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAweDg0OTVhNmJkIC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqLzpcbiAgICAgIHZhciBoZWFkZXJfbGVuID0gci5yZWFkOHUoKSAmIDB4M2Y7XG4gICAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgICBpZiAob3ZlcmZsb3dbMF0pIHtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICBcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmYgLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi86XG4gICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICBcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiBhIDMyLWJpdCBwbGF0Zm9ybVwiLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IGJhZCBvYmplY3RcIik7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gaGVhZGVyX2xlbiAtIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSArIGRhdGFfbGVuO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE9iamVjdFRhYmxlXG5jbGFzcyBNbE9iamVjdFRhYmxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5vYmpzID0gW107XG4gICAgdGhpcy5sb29rdXAgPSBuZXcgZ2xvYmFsVGhpcy5NYXAoKTtcbiAgfVxuXG4gIHN0b3JlKHYpIHtcbiAgICB0aGlzLmxvb2t1cC5zZXQodiwgdGhpcy5vYmpzLmxlbmd0aCk7XG4gICAgdGhpcy5vYmpzLnB1c2godik7XG4gIH1cblxuICByZWNhbGwodikge1xuICAgIHZhciBpID0gdGhpcy5sb29rdXAuZ2V0KHYpO1xuICAgIHJldHVybiBpID09PSB1bmRlZmluZWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHRoaXMub2Jqcy5sZW5ndGggLSBpOyAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBNbE9iamVjdFRhYmxlLCBjYW1sX2xpc3RfdG9fanNfYXJyYXksIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xudmFyIGNhbWxfb3V0cHV0X3ZhbCA9IChmdW5jdGlvbiAoKSB7XG4gIGNsYXNzIFdyaXRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmNodW5rID0gW107XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDIwO1xuICAgICAgdGhpcy5ibG9ja19sZW4gPSAwO1xuICAgICAgdGhpcy5vYmpfY291bnRlciA9IDA7XG4gICAgICB0aGlzLnNpemVfMzIgPSAwO1xuICAgICAgdGhpcy5zaXplXzY0ID0gMDtcbiAgICB9XG5cbiAgICB3cml0ZShzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4OyBpID49IDA7IGkgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4ZmY7XG4gICAgfVxuXG4gICAgd3JpdGVfYXQocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODsgaSA+PSAwOyBpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbcG9zKytdID0gKHZhbHVlID4+IGkpICYgMHhmZjtcbiAgICB9XG5cbiAgICB3cml0ZV9jb2RlKHNpemUsIGNvZGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gY29kZTtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODsgaSA+PSAwOyBpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweGZmO1xuICAgIH1cblxuICAgIHdyaXRlX3NoYXJlZChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAxIDw8IDgpXG4gICAgICAgIHRoaXMud3JpdGVfY29kZSg4LCAweDA0IC8qY3N0LkNPREVfU0hBUkVEOCovLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAob2Zmc2V0IDwgMSA8PCAxNilcbiAgICAgICAgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwb3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaHVua19pZHg7XG4gICAgfVxuXG4gICAgZmluYWxpemUoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlKDMyLCAweDg0OTVhNmJlKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMuYmxvY2tfbGVuKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMuc2l6ZV82NCk7XG4gICAgICByZXR1cm4gdGhpcy5jaHVuaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICh2LCBmbGFncykge1xuICAgIGZsYWdzID0gY2FtbF9saXN0X3RvX2pzX2FycmF5KGZsYWdzKTtcblxuICAgIHZhciBub19zaGFyaW5nID0gZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSxcbiAgICAgIGNsb3N1cmVzID0gZmxhZ3MuaW5kZXhPZigxIC8qTWFyc2hhbC5DbG9zdXJlcyovKSAhPT0gLTE7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiaW4gY2FtbF9vdXRwdXRfdmFsOiBmbGFnIE1hcnNoYWwuQ2xvc3VyZXMgaXMgbm90IHN1cHBvcnRlZC5cIixcbiAgICAgICk7XG5cbiAgICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlcigpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gbm9fc2hhcmluZyA/IG51bGwgOiBuZXcgTWxPYmplY3RUYWJsZSgpO1xuXG4gICAgZnVuY3Rpb24gbWVtbyh2KSB7XG4gICAgICBpZiAobm9fc2hhcmluZykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGV4aXN0aW5nX29mZnNldCA9IGludGVybl9vYmpfdGFibGUucmVjYWxsKHYpO1xuICAgICAgaWYgKGV4aXN0aW5nX29mZnNldCkge1xuICAgICAgICB3cml0ZXIud3JpdGVfc2hhcmVkKGV4aXN0aW5nX29mZnNldCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuX29ial90YWJsZS5zdG9yZSh2KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVybl9yZWModikge1xuICAgICAgaWYgKHYuY2FtbF9jdXN0b20pIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIG5hbWUgPSB2LmNhbWxfY3VzdG9tO1xuICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW25hbWVdO1xuICAgICAgICB2YXIgc3pfMzJfNjQgPSBbMCwgMF07XG4gICAgICAgIGlmICghb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4MTggLypjc3QuQ09ERV9DVVNUT01fTEVOKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgaGVhZGVyX3BvcyA9IHdyaXRlci5wb3MoKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcywgMzIsIHN6XzMyXzY0WzBdKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDQsIDMyLCAwKTsgLy8gemVyb1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgOCwgMzIsIHN6XzMyXzY0WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCAhPT0gc3pfMzJfNjRbMF0pXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICAgICAgICBcIm91dHB1dF92YWx1ZTogaW5jb3JyZWN0IGZpeGVkIHNpemVzIHNwZWNpZmllZCBieSBcIiArIG5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDIgKyAoKHN6XzMyXzY0WzBdICsgMykgPj4gMik7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDIgKyAoKHN6XzMyXzY0WzFdICsgNykgPj4gMyk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodikgJiYgdlswXSA9PT0gKHZbMF0gfCAwKSkge1xuICAgICAgICBpZiAodlswXSA9PT0gMjUxKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEFic3RyYWN0KVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxICYmIG1lbW8odikpIHJldHVybjtcbiAgICAgICAgaWYgKHZbMF0gPCAxNiAmJiB2Lmxlbmd0aCAtIDEgPCA4KVxuICAgICAgICAgIHdyaXRlci53cml0ZShcbiAgICAgICAgICAgIDgsXG4gICAgICAgICAgICAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovICsgdlswXSArICgodi5sZW5ndGggLSAxKSA8PCA0KSxcbiAgICAgICAgICApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoXG4gICAgICAgICAgICAzMixcbiAgICAgICAgICAgIDB4MDggLypjc3QuQ09ERV9CTE9DSzMyKi8sXG4gICAgICAgICAgICAoKHYubGVuZ3RoIC0gMSkgPDwgMTApIHwgdlswXSxcbiAgICAgICAgICApO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSB2Lmxlbmd0aDtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gdi5sZW5ndGg7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEpIHN0YWNrLnB1c2godiwgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgICAgaWYgKCFjYW1sX2lzX21sX2J5dGVzKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIikpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICAgIFwib3V0cHV0X3ZhbHVlOiBbQnl0ZXMudF0gY2Fubm90IHNhZmVseSBiZSBtYXJzaGFsZWQgd2l0aCBbLS1lbmFibGUgdXNlLWpzLXN0cmluZ11cIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApIHdyaXRlci53cml0ZSg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDkgLypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2Ugd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MGEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQodiwgaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KSB8IDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KSB8IDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMCkgd3JpdGVyLndyaXRlKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoOCwgMHgwOSAvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZSB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwYSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQodiwgaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KSB8IDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KSB8IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT09ICh2IHwgMCkpIHtcbiAgICAgICAgICB2YXIgdHlwZV9vZl92ID0gdHlwZW9mIHY7XG4gICAgICAgICAgaWYgKHR5cGVfb2ZfdiAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChcIiArIHR5cGVfb2ZfdiArIFwiKVwiKTtcbiAgICAgICAgICAvLyBJZiBhIGZsb2F0IGhhcHBlbnMgdG8gYmUgYW4gaW50ZWdlciBpdCBpcyBzZXJpYWxpemVkIGFzIGFuIGludGVnZXJcbiAgICAgICAgICAvLyAoSnNfb2Zfb2NhbWwgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHlwZSBvZiBhbiBpbnRlZ2VyIG51bWJlciBpc1xuICAgICAgICAgIC8vIGZsb2F0IG9yIGludGVnZXIuKSBUaGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFzaGVzIHdoZW5cbiAgICAgICAgICAvLyB1bm1hcnNoYWxsaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBydW50aW1lLlxuICAgICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgICAgdmFyIHQgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh2KSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4MGMgLypjc3QuQ09ERV9ET1VCTEVfTElUVExFKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgdFs3IC0gaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAzO1xuICAgICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDI7XG4gICAgICAgIH0gZWxzZSBpZiAodiA+PSAwICYmIHYgPCAweDQwKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4NDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAxIDw8IDcpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSg4LCAweDAwIC8qY3N0LkNPREVfSU5UOCovLCB2KTtcbiAgICAgICAgICBlbHNlIGlmICh2ID49IC0oMSA8PCAxNSkgJiYgdiA8IDEgPDwgMTUpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgxNiwgMHgwMSAvKmNzdC5DT0RFX0lOVDE2Ki8sIHYpO1xuICAgICAgICAgIGVsc2Ugd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDIgLypjc3QuQ09ERV9JTlQzMiovLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBleHRlcm5fcmVjKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCgpO1xuICAgICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICAgIGlmIChpICsgMSA8IHYubGVuZ3RoKSBzdGFjay5wdXNoKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWModltpXSk7XG4gICAgfVxuICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSB3cml0ZXIub2JqX2NvdW50ZXIgPSBpbnRlcm5fb2JqX3RhYmxlLm9ianMubGVuZ3RoO1xuICAgIHdyaXRlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3cml0ZXIuY2h1bmspO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkoY2FtbF9vdXRwdXRfdmFsKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXModiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoY2FtbF9vdXRwdXRfdmFsKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlcihzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwodiwgZmxhZ3MpO1xuICBpZiAodC5sZW5ndGggPiBsZW4pIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLnRvX2J1ZmZlcjogYnVmZmVyIG92ZXJmbG93XCIpO1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl91aW50OF9hcnJheSh0KSwgMCwgcywgb2ZzLCB0Lmxlbmd0aCk7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBJb1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19mZHNcbnZhciBjYW1sX3N5c19mZHMgPSBuZXcgQXJyYXkoMyk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Nsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbmZ1bmN0aW9uIGNhbWxfc3lzX2Nsb3NlKGZkKSB7XG4gIHZhciB4ID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKHgpIHtcbiAgICB4LmZpbGUuY2xvc2UoZmFsc2UpO1xuICAgIGRlbGV0ZSBjYW1sX3N5c19mZHNbZmRdO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBNbENoYW5pZFxuZnVuY3Rpb24gTWxDaGFuaWQoaWQpIHtcbiAgdGhpcy5pZCA9IGlkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9SZXF1aXJlczogTWxDaGFuaWRcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSwgaWR4KSB7XG4gIHZhciBjaGFuaWQ7XG4gIGlmIChpZHggPT09IHVuZGVmaW5lZCkge1xuICAgIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gICAgY2hhbmlkID0gbmV3IE1sQ2hhbmlkKGlkeCk7XG4gIH0gZWxzZSBpZiAoY2FtbF9zeXNfZmRzW2lkeF0pIHtcbiAgICBjaGFuaWQgPSBjYW1sX3N5c19mZHNbaWR4XS5jaGFuaWQ7XG4gIH0gZWxzZSBjaGFuaWQgPSBuZXcgTWxDaGFuaWQoaWR4KTtcbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSB7IGZpbGU6IGZpbGUsIGNoYW5pZDogY2hhbmlkIH07XG4gIHJldHVybiBpZHggfCAwO1xufVxuZnVuY3Rpb24gY2FtbF9zeXNfb3BlbihuYW1lLCBmbGFncywgcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnJkb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBmLndyb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBmLmFwcGVuZCA9IDE7XG4gICAgICAgIGYud3JpdGVvbmx5ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGYuY3JlYXRlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIGYudHJ1bmNhdGUgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgZi5leGNsID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDY6XG4gICAgICAgIGYuYmluYXJ5ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIGYudGV4dCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBmLm5vbmJsb2NrID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZsYWdzID0gZmxhZ3NbMl07XG4gIH1cbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCwgZiwgcGVybXMpO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlLCB1bmRlZmluZWQpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlzX25vZGUgPSBmc19ub2RlX3N1cHBvcnRlZCgpO1xuICBmdW5jdGlvbiBmaWxlKGZkLCBmbGFncykge1xuICAgIGlmIChpc19ub2RlKSB7XG4gICAgICByZXR1cm4gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpO1xuICAgIH0gZWxzZSByZXR1cm4gbmV3IE1sRmFrZUZkX291dChmZCwgZmxhZ3MpO1xuICB9XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoXG4gICAgZmlsZSgwLCB7IHJkb25seTogMSwgYWx0bmFtZTogXCIvZGV2L3N0ZGluXCIsIGlzQ2hhcmFjdGVyRGV2aWNlOiB0cnVlIH0pLFxuICAgIDAsXG4gICk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoXG4gICAgZmlsZSgxLCB7IGJ1ZmZlcmVkOiBpc19ub2RlID8gMSA6IDIsIHdyb25seTogMSwgaXNDaGFyYWN0ZXJEZXZpY2U6IHRydWUgfSksXG4gICAgMSxcbiAgKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChcbiAgICBmaWxlKDIsIHsgYnVmZmVyZWQ6IGlzX25vZGUgPyAxIDogMiwgd3Jvbmx5OiAxLCBpc0NoYXJhY3RlckRldmljZTogdHJ1ZSB9KSxcbiAgICAyLFxuICApO1xufSkoKTtcblxuLy8gb2NhbWwgQ2hhbm5lbHNcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX25hbWUoY2hhbmlkLCBuYW1lKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogTWxDaGFuaWRcbmNsYXNzIGNhbWxfbWxfY2hhbm5lbHNfc3RhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1hcCA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKTtcbiAgICB0aGlzLm9wZW5lZCA9IG5ldyBnbG9iYWxUaGlzLlNldCgpO1xuICB9XG5cbiAgY2xvc2UoY2hhbmlkKSB7XG4gICAgdGhpcy5vcGVuZWQuZGVsZXRlKGNoYW5pZCk7XG4gIH1cblxuICBnZXQoY2hhbmlkKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldChjaGFuaWQpO1xuICB9XG5cbiAgc2V0KGNoYW5pZCwgdmFsKSB7XG4gICAgaWYgKHZhbC5vcGVuZWQpIHRoaXMub3BlbmVkLmFkZChjaGFuaWQpO1xuICAgIHJldHVybiB0aGlzLm1hcC5zZXQoY2hhbmlkLCB2YWwpO1xuICB9XG5cbiAgYWxsKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5lZC52YWx1ZXMoKTtcbiAgfVxufVxuXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBjYW1sX21sX2NoYW5uZWxzX3N0YXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9nZXQoaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHMuZ2V0KGlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3QoY2FwdHVyZWQsIGludG8pIHtcbiAgdmFyIHRvX3Jlc3RvcmUgPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNhcHR1cmVkKTtcbiAgdmFyIG5ld18gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGludG8pO1xuICBjYW1sX21sX2NoYW5uZWxzLnNldChjYXB0dXJlZCwgbmV3Xyk7XG4gIHJldHVybiB0b19yZXN0b3JlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmUoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpIHtcbiAgY2FtbF9tbF9jaGFubmVscy5zZXQoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCgpIHtcbiAgdmFyIGwgPSAwO1xuICB2YXIga2V5cyA9IGNhbWxfbWxfY2hhbm5lbHMuYWxsKCk7XG4gIGZvciAodmFyIGsgb2Yga2V5cykge1xuICAgIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChrKTtcbiAgICBpZiAoY2hhbi5vcGVuZWQgJiYgY2hhbi5vdXQpIGwgPSBbMCwgaywgbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuLy9SZXF1aXJlczogY2FtbF9pb19idWZmZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKSB7XG4gIHZhciBmZF9kZXNjID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKGZkX2Rlc2MgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiICsgZmQgKyBcIiBkb2Vzbid0IGV4aXN0XCIpO1xuICB2YXIgZmlsZSA9IGZkX2Rlc2MuZmlsZTtcbiAgdmFyIGNoYW5pZCA9IGZkX2Rlc2MuY2hhbmlkO1xuICB2YXIgYnVmZmVyZWQgPSBmaWxlLmZsYWdzLmJ1ZmZlcmVkICE9PSB1bmRlZmluZWQgPyBmaWxlLmZsYWdzLmJ1ZmZlcmVkIDogMTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTogZmlsZSxcbiAgICBvZmZzZXQ6IGZpbGUucG9zKCksXG4gICAgZmQ6IGZkLFxuICAgIG9wZW5lZDogdHJ1ZSxcbiAgICBvdXQ6IHRydWUsXG4gICAgYnVmZmVyX2N1cnI6IDAsXG4gICAgYnVmZmVyOiBuZXcgVWludDhBcnJheShjYW1sX2lvX2J1ZmZlcl9zaXplKSxcbiAgICBidWZmZXJlZDogYnVmZmVyZWQsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHMuc2V0KGNoYW5pZCwgY2hhbm5lbCk7XG4gIHJldHVybiBjaGFuaWQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX2lvX2J1ZmZlcl9zaXplXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCkge1xuICB2YXIgZmRfZGVzYyA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmIChmZF9kZXNjID09PSB1bmRlZmluZWQpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIiArIGZkICsgXCIgZG9lc24ndCBleGlzdFwiKTtcbiAgdmFyIGZpbGUgPSBmZF9kZXNjLmZpbGU7XG4gIHZhciBjaGFuaWQgPSBmZF9kZXNjLmNoYW5pZDtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6IGZpbGUsXG4gICAgb2Zmc2V0OiBmaWxlLnBvcygpLFxuICAgIGZkOiBmZCxcbiAgICBvcGVuZWQ6IHRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICBidWZmZXJfY3VycjogMCxcbiAgICBidWZmZXJfbWF4OiAwLFxuICAgIGJ1ZmZlcjogbmV3IFVpbnQ4QXJyYXkoY2FtbF9pb19idWZmZXJfc2l6ZSksXG4gICAgcmVmaWxsOiByZWZpbGwsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHMuc2V0KGNoYW5pZCwgY2hhbm5lbCk7XG4gIHJldHVybiBjaGFuaWQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFncyhmZCwgX2ZsYWdzKSB7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFncyhmZCwgX2ZsYWdzKSB7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQoZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9BbGlhczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG5mdW5jdGlvbiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvcihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUoY2hhbmlkLCBtb2RlKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLmZpbGUuZmxhZ3MudGV4dCA9ICFtb2RlO1xuICBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5ID0gbW9kZTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaXNfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5mbGFncy5iaW5hcnk7XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLm9wZW5lZCkge1xuICAgIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gICAgY2FtbF9tbF9jaGFubmVscy5jbG9zZShjaGFuaWQpO1xuICAgIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpO1xuICAgIGNoYW4uZmQgPSAtMTtcbiAgICBjaGFuLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUubGVuZ3RoKCkgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCxjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNoYW4uZmlsZS5sZW5ndGgoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dChjaGFuaWQsIGYpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ub3V0cHV0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICBmKHMpO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsKGNoYW5pZCwgZikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkucmVmaWxsID0gZjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yZWZpbGwoY2hhbikge1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkge1xuICAgIHZhciBzdHIgPSBjaGFuLnJlZmlsbCgpO1xuICAgIHZhciBzdHJfYSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKHN0cik7XG4gICAgaWYgKHN0cl9hLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY2hhbi5yZWZpbGwgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hhbi5idWZmZXIubGVuZ3RoIDwgY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKSB7XG4gICAgICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKTtcbiAgICAgICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgICAgICBjaGFuLmJ1ZmZlciA9IGI7XG4gICAgICB9XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoc3RyX2EsIGNoYW4uYnVmZmVyX21heCk7XG4gICAgICBjaGFuLm9mZnNldCArPSBzdHJfYS5sZW5ndGg7XG4gICAgICBjaGFuLmJ1ZmZlcl9tYXggKz0gc3RyX2EubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoY2hhbi5mZCA9PT0gLTEpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQmFkIGZpbGUgZGVzY3JpcHRvclwiKTtcbiAgICB9XG4gICAgdmFyIG5yZWFkID0gY2hhbi5maWxlLnJlYWQoXG4gICAgICBjaGFuLmJ1ZmZlcixcbiAgICAgIGNoYW4uYnVmZmVyX21heCxcbiAgICAgIGNoYW4uYnVmZmVyLmxlbmd0aCAtIGNoYW4uYnVmZmVyX21heCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gICAgY2hhbi5vZmZzZXQgKz0gbnJlYWQ7XG4gICAgY2hhbi5idWZmZXJfbWF4ICs9IG5yZWFkO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9iaWdhcnJheShjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF9iYV90b190eXBlZF9hcnJheShiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBuID0gbDtcbiAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgaWYgKGwgPD0gYXZhaWwpIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciwgY2hhbi5idWZmZXJfY3VyciArIGwpLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGw7XG4gIH0gZWxzZSBpZiAoYXZhaWwgPiAwKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsIGNoYW4uYnVmZmVyX2N1cnIgKyBhdmFpbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYXZhaWw7XG4gICAgbiA9IGF2YWlsO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgICBpZiAobiA+IGF2YWlsKSBuID0gYXZhaWw7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsIGNoYW4uYnVmZmVyX2N1cnIgKyBuKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBuO1xuICB9XG4gIHJldHVybiBuIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBoZWFkZXIgPSBuZXcgVWludDhBcnJheShjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBmdW5jdGlvbiBibG9jayhidWZmZXIsIG9mZnNldCwgbikge1xuICAgIHZhciByID0gMDtcbiAgICB3aGlsZSAociA8IG4pIHtcbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICAgICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpIGJyZWFrO1xuICAgICAgYnVmZmVyW29mZnNldCArIHJdID0gY2hhbi5idWZmZXJbY2hhbi5idWZmZXJfY3Vycl07XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHZhciByID0gYmxvY2soaGVhZGVyLCAwLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBpZiAociA9PT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICBlbHNlIGlmIChyIDwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdFwiKTtcbiAgdmFyIGxlbiA9IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUoY2FtbF9ieXRlc19vZl91aW50OF9hcnJheShoZWFkZXIpLCAwKTtcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbiArIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGJ1Zi5zZXQoaGVhZGVyLCAwKTtcbiAgdmFyIHIgPSBibG9jayhidWYsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSwgbGVuKTtcbiAgaWYgKHIgPCBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdCBcIiArIHIgKyBcIiAgXCIgKyBsZW4pO1xuICB2YXIgcmVzID0gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYnVmKSwgMCk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwKGMpIHtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWUoYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9yZWZpbGxcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfY2hhcihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gIH1cbiAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgY2hhbi5idWZmZXJfY3VycisrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9jaGFyXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludChjaGFuaWQpIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgcmVzID0gKChyZXMgPDwgOCkgKyBjYW1sX21sX2lucHV0X2NoYXIoY2hhbmlkKSkgfCAwO1xuICB9XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgaWYgKFxuICAgIHBvcyA+PSBjaGFuLm9mZnNldCAtIGNoYW4uYnVmZmVyX21heCAmJlxuICAgIHBvcyA8PSBjaGFuLm9mZnNldCAmJlxuICAgIGNoYW4uZmlsZS5mbGFncy5iaW5hcnlcbiAgKSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IGNoYW4uYnVmZmVyX21heCAtIChjaGFuLm9mZnNldCAtIHBvcyk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5maWxlLnNlZWsocG9zLCAwKTtcbiAgICBjaGFuLm9mZnNldCA9IHBvcztcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luKGNoYW5pZCwgcG9zKSB7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luXzY0KGNoYW5pZCwgcG9zKSB7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgLSAoY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3Vycik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19pbihjaGFuaWQpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbl82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9wb3NfaW4oY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgcCA9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGRvIHtcbiAgICBpZiAocCA+PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID4gMCkge1xuICAgICAgICBjaGFuLmJ1ZmZlci5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciksIDApO1xuICAgICAgICBwIC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9tYXggPj0gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtY2hhbi5idWZmZXJfbWF4IHwgMDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2X21heCA9IGNoYW4uYnVmZmVyX21heDtcbiAgICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgICAgaWYgKHByZXZfbWF4ID09PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgICAgcmV0dXJuIC1jaGFuLmJ1ZmZlcl9tYXggfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoY2hhbi5idWZmZXJbcCsrXSAhPT0gMTApO1xuICByZXR1cm4gKHAgLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2ZsdXNoKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYgKCFjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3QgZmx1c2ggYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgaWYgKCFjaGFuLmJ1ZmZlciB8fCBjaGFuLmJ1ZmZlcl9jdXJyID09PSAwKSByZXR1cm4gMDtcbiAgaWYgKGNoYW4ub3V0cHV0KSB7XG4gICAgY2hhbi5vdXRwdXQoXG4gICAgICBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzKGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IGNoYW4uYnVmZmVyX2N1cnI7ICkge1xuICAgICAgcG9zICs9IGNoYW4uZmlsZS53cml0ZShjaGFuLmJ1ZmZlciwgcG9zLCBjaGFuLmJ1ZmZlcl9jdXJyIC0gcG9zLCBmYWxzZSk7XG4gICAgfVxuICB9XG4gIGNoYW4ub2Zmc2V0ICs9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9vdXRwdXQgdG8gb3V0X2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfdGFcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmICghY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IG91dHB1dCB0byBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pO1xuICBpZiAoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGggPiBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoKTtcbiAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgY2hhbi5idWZmZXIgPSBiO1xuICB9XG4gIHN3aXRjaCAoY2hhbi5idWZmZXJlZCkge1xuICAgIGNhc2UgMDogLy8gVW5idWZmZXJlZFxuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEJ1ZmZlcmVkICh0aGUgZGVmYXVsdClcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgICAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKSBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6IC8vIEJ1ZmZlcmVkIChvbmx5IGZvciBzdGRvdXQgYW5kIHN0ZGVycilcbiAgICAgIHZhciBpZCA9IGJ1ZmZlci5sYXN0SW5kZXhPZigxMCk7XG4gICAgICBpZiAoaWQgPCAwKSB7XG4gICAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aCkgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheSgwLCBpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBpZCArIDE7XG4gICAgICAgIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheShpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoIC0gaWQgLSAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLCBidWZmZXIsIG9mZnNldCwgbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF9tbF9vdXRwdXRfdGFcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9iaWdhcnJheShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCwgYnVmZmVyLCBvZmZzZXQsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCwgYnVmZmVyLCBvZmZzZXQsIGxlbikge1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoXG4gICAgY2hhbmlkLFxuICAgIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksXG4gICAgb2Zmc2V0LFxuICAgIGxlbixcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2NoYXIoY2hhbmlkLCBjKSB7XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLCBzLCAwLCAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcsIGNhbWxfbWxfb3V0cHV0LGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWUoY2hhbmlkLCB2LCBmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCwgcywgMCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpIHtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5maWxlLnNlZWsocG9zLCAwKTtcbiAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKSB7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLCBwb3MpIHtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfcG9zX291dChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCArIGNoYW4uYnVmZmVyX2N1cnI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19vdXQoY2hhbmlkKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXRfNjQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNhbWxfcG9zX291dChjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50KGNoYW5pZCwgaSkge1xuICB2YXIgYXJyID0gWyhpID4+IDI0KSAmIDB4ZmYsIChpID4+IDE2KSAmIDB4ZmYsIChpID4+IDgpICYgMHhmZiwgaSAmIDB4ZmZdO1xuICBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIG5ldyBVaW50OEFycmF5KGFyciksIDAsIDQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYnVmZmVyZWQoY2hhbmlkLCB2KSB7XG4gIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA9IHY7XG4gIGlmICghdikgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICByZXR1cm4gMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gU3lzXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvcihtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyhjYW1sX2dsb2JhbF9kYXRhLlN5c19lcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9BbGlhczogY2FtbF91bml4X2V4aXRcbi8vQWxpYXM6IHVuaXhfZXhpdFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdChjb2RlKSB7XG4gIGlmIChnbG9iYWxUaGlzLnF1aXQpIGdsb2JhbFRoaXMucXVpdChjb2RlKTtcbiAgLy9ub2RlanNcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZXhpdCkgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKSB7XG4gIHN3aXRjaCAoZXhuWzJdKSB7XG4gICAgY2FzZSAtODogLy8gTWF0Y2hfZmFpbHVyZVxuICAgIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICAgIGNhc2UgLTEyOiAvLyBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuICAgICAgcmV0dXJuIDE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGV4bikge1xuICB2YXIgciA9IFwiXCI7XG4gIGlmIChleG5bMF0gPT09IDApIHtcbiAgICByICs9IGV4blsxXVsxXTtcbiAgICBpZiAoXG4gICAgICBleG4ubGVuZ3RoID09PSAzICYmXG4gICAgICBleG5bMl1bMF0gPT09IDAgJiZcbiAgICAgIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKVxuICAgICkge1xuICAgICAgdmFyIGJ1Y2tldCA9IGV4blsyXTtcbiAgICAgIHZhciBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IDI7XG4gICAgICB2YXIgYnVja2V0ID0gZXhuO1xuICAgIH1cbiAgICByICs9IFwiKFwiO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPiBzdGFydCkgciArPSBcIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXTtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikgciArPSB2LnRvU3RyaW5nKCk7XG4gICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgTWxCeXRlcykge1xuICAgICAgICByICs9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByICs9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfSBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCI7XG4gIH0gZWxzZSBpZiAoZXhuWzBdID09PSAyNDgpIHtcbiAgICByICs9IGV4blsxXTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbiwgY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGVycikgJiYgKGVyclswXSA9PT0gMCB8fCBlcnJbMF0gPT09IDI0OCkpIHtcbiAgICB2YXIgaGFuZGxlciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCIpO1xuICAgIGlmIChoYW5kbGVyKSBjYW1sX2NhbGxiYWNrKGhhbmRsZXIsIFtlcnIsIGZhbHNlXSk7XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbXNnID0gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGVycik7XG4gICAgICB2YXIgYXRfZXhpdCA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIik7XG4gICAgICBpZiAoYXRfZXhpdCkgY2FtbF9jYWxsYmFjayhhdF9leGl0LCBbMF0pO1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cpO1xuICAgICAgaWYgKGVyci5qc19lcnJvcikgdGhyb3cgZXJyLmpzX2Vycm9yO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczoganNvb19zdGF0aWNfZW52XG52YXIganNvb19zdGF0aWNfZW52ID0ge307XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbi8vUmVxdWlyZXM6IGpzb29fc3RhdGljX2VudlxuZnVuY3Rpb24gY2FtbF9zZXRfc3RhdGljX2VudihrLCB2KSB7XG4gIGpzb29fc3RhdGljX2VudltrXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3N5c19nZXRlbnYgKGNvbnN0KVxuLy9SZXF1aXJlczoganNvb19zdGF0aWNfZW52XG5mdW5jdGlvbiBqc29vX3N5c19nZXRlbnYobikge1xuICBpZiAoanNvb19zdGF0aWNfZW52W25dKSByZXR1cm4ganNvb19zdGF0aWNfZW52W25dO1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgLy9ub2RlanMgZW52XG4gIGlmIChwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52W25dICE9PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W25dO1xuICBpZiAoZ2xvYmFsVGhpcy5qc29vX2VudiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5qc29vX2VudltuXSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLmpzb29fZW52W25dO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGVudiAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGVudihuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYgKHIgPT09IHVuZGVmaW5lZCkgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRlbnZfb3B0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52X29wdChuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYgKHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocildO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnYobmFtZSkge1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52KG5hbWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgY2FtbF9hcmd2ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdO1xuXG4gIGlmIChwcm9jZXNzPy5hcmd2Py5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKVxuICAgIGFyZ3MyLnB1c2goY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoYXJnc1tpXSkpO1xuICByZXR1cm4gYXJnczI7XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG52YXIgY2FtbF9leGVjdXRhYmxlX25hbWUgPSBjYW1sX2FyZ3ZbMV07XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9hcmd2KF91bml0KSB7XG4gIHJldHVybiBbMCwgY2FtbF9hcmd2WzFdLCBjYW1sX2FyZ3ZdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2FyZ3YoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfYXJndjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbW9kaWZ5X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfbW9kaWZ5X2FyZ3YoYXJnKSB7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShfdW5pdCkge1xuICByZXR1cm4gY2FtbF9leGVjdXRhYmxlX25hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKSB7XG4gIHZhciBjbWQgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhjbWQpO1xuICBpZiAodHlwZW9mIHJlcXVpcmUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gICAgaWYgKGNoaWxkX3Byb2Nlc3M/LmV4ZWNTeW5jKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjbWQsIHsgc3RkaW86IFwiaW5oZXJpdFwiIH0pO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gIH0gZWxzZSByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKF9jbWQpIHtcbiAgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAqIDAuMDAxO1xuZnVuY3Rpb24gY2FtbF9zeXNfdGltZSgpIHtcbiAgdmFyIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICByZXR1cm4gbm93ICogMC4wMDEgLSBjYW1sX2luaXRpYWxfdGltZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuXG4vL1JlcXVpcmVzOiBjYW1sX3N5c190aW1lXG5mdW5jdGlvbiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW4oX2IpIHtcbiAgcmV0dXJuIGNhbWxfc3lzX3RpbWUoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQoKSB7XG4gIGlmIChnbG9iYWxUaGlzLmNyeXB0bykge1xuICAgIGlmIChnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHZhciBhID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBJbnQzMkFycmF5KDQpKTtcbiAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcykge1xuICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheShnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcygxNikuYnVmZmVyKTtcbiAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgfVxuICB9XG4gIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3cgXiAoMHhmZmZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICByZXR1cm4gWzAsIHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUoKSB7XG4gIHJldHVybiAzMjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplKCkge1xuICByZXR1cm4gMzI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSgpIHtcbiAgcmV0dXJuICgweDdmZmZmZmZmIC8gNCkgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXgoKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIlVuaXhcIiA/IDEgOiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIoKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIldpbjMyXCIgPyAxIDogMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4oKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIkN5Z3dpblwiID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IG9zX3R5cGVcbi8vUmVxdWlyZXM6IGpzb29faXNfd2luMzJcbnZhciBvc190eXBlID0ganNvb19pc193aW4zMiA/IFwiV2luMzJcIiA6IFwiVW5peFwiO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfY29uZmlnIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfY29uZmlnKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMob3NfdHlwZSksIDMyLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3N5c19pc2F0dHkoX2NoYW4pIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV92YXJpYW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfdmFyaWFudChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVycyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MoYm9vbCkge1xuICBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSBib29sO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfcnVudGltZV93YXJuaW5ncztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3hkZ19kZWZhdWx0c1xuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfeGRnX2RlZmF1bHRzKF91bml0KSB7XG4gIHJldHVybiAwOyAvLyBlbXB0eSBsaXN0XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGUobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuaXNGaWxlKHJvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW9fYnVmZmVyX3NpemVcbnZhciBjYW1sX2lvX2J1ZmZlcl9zaXplID0gNjU1MzY7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lvX2J1ZmZlcl9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2lvX2J1ZmZlcl9zaXplXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfaW9fYnVmZmVyX3NpemUoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfaW9fYnVmZmVyX3NpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RlbXBfZGlyX25hbWVcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfdGVtcF9kaXJfbmFtZShfdW5pdCkge1xuICBpZiAob3NfdHlwZSA9PT0gXCJXaW4zMlwiKSB7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHJlcXVpcmUoXCJub2RlOm9zXCIpLnRtcGRpcigpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGVtcF9kaXJfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vVmVyc2lvbjogPj0gNS40XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c190ZW1wX2Rpcl9uYW1lKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29udmVydF9zaWduYWxfbnVtYmVyXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfY29udmVydF9zaWduYWxfbnVtYmVyKHNpZ25vKSB7XG4gIHJldHVybiBzaWdubztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmV2X2NvbnZlcnRfc2lnbmFsX251bWJlclxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfc3lzX3Jldl9jb252ZXJ0X3NpZ25hbF9udW1iZXIoc2lnbm8pIHtcbiAgcmV0dXJuIHNpZ25vO1xufVxuXG4vL0Fsd2F5c1xuLy9SZXF1aXJlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vSWY6ICF3YXNtXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgaWYgKHByb2Nlc3M/Lm9uKSB7XG4gICAgcHJvY2Vzcy5vbihcInVuY2F1Z2h0RXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChlcnIsIG9yaWdpbikge1xuICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgyKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5lcnJvcikge1xuICAgICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihldmVudC5lcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKTtcbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnID0gRkxBRyhcIndpdGgtanMtZXJyb3JcIik7XG5cbihmdW5jdGlvbiAoKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KFwiT0NBTUxSVU5QQVJBTVwiKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBsID0gci5zcGxpdChcIixcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobFtpXSA9PT0gXCJiXCIpIHtcbiAgICAgICAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGxbaV0uc3RhcnRzV2l0aChcImI9XCIpKSB7XG4gICAgICAgIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZyA9ICtsW2ldLnNsaWNlKDIpO1xuICAgICAgfSBlbHNlIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnXG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA9IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZztcblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cygpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXNcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9ydW50aW1lX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA/IDEgOiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSgpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UoX3VuaXQpIHtcbiAgcmV0dXJuIFswXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlKGIpIHtcbiAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA9IGI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlKCkge1xuICByZXR1cm4gWzBdO1xufVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCgpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KF9zbG90KSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QoX2J0LCBfaWR4KSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoX2V4biwgX2J0KSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrKCkge1xuICByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90KF9yYnQpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiAhZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSBmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09PSAwKSByZXR1cm4gZiguLi5hcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgZyA9IGYoLi4uYXJncy5zbGljZSgwLCBuKSk7XG4gICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBnO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsIGFyZ3Muc2xpY2UobikpO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDEpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICAgIHJldHVybiBmKC4uLm5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKyspIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgICByZXR1cm4gZiguLi5uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncy5jb25jYXQoZXh0cmFfYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBnLmwgPSBkO1xuICAgIHJldHVybiBnO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogZWZmZWN0c1xuLy9JZjogIWRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSBmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09PSAwKSB7XG4gICAgcmV0dXJuIGYoLi4uYXJncyk7XG4gIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgcmVzdCA9IGFyZ3Muc2xpY2UobiAtIDEpO1xuICAgIHZhciBrID0gYXJnc1thcmdzTGVuIC0gMV07XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoMCwgbik7XG4gICAgYXJnc1tuIC0gMV0gPSBmdW5jdGlvbiAoZykge1xuICAgICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBrKGcpO1xuICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBrO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZywgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gZiguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzTGVuLS07XG4gICAgdmFyIGsgPSBhcmdzW2FyZ3NMZW5dO1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgICAgcmV0dXJuIGYoLi4ubmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG4gICAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAzKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKykgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAyXSA9IHo7XG4gICAgICAgICAgcmV0dXJuIGYoLi4ubmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXJncy5sZW5ndGggPSBhcmdzTGVuO1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncy5jb25jYXQoZXh0cmFfYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBnLmwgPSBkICsgMTtcbiAgICByZXR1cm4gayhnKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX2Nwc1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuLy9JZjogZWZmZWN0c1xuLy9JZjogIWRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG52YXIgY2FtbF9jYWxsX2dlbl9jcHMgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX3R1cGxlIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfY3BzX2Nsb3N1cmVcbi8vSWY6IGVmZmVjdHNcbi8vSWY6IGRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG52YXIgY2FtbF9jYWxsX2dlbl90dXBsZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGNhbWxfY2FsbF9nZW5fZGlyZWN0KGYsIGFyZ3MpIHtcbiAgICB2YXIgbiA9IGYubCA+PSAwID8gZi5sIDogKGYubCA9IGYubGVuZ3RoKTtcbiAgICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICAgIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gICAgaWYgKGQgPT09IDApIHtcbiAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICAgIHZhciBnID0gZiguLi5hcmdzLnNsaWNlKDAsIG4pKTtcbiAgICAgIGlmICh0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZztcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2RpcmVjdChnLCBhcmdzLnNsaWNlKG4pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRklYTUU6IFJlc3RvcmUgdGhlIG9wdGltaXphdGlvbiBvZiBoYW5kbGluZyBzcGVjaWFsbHkgZCA9IDEgb3IgMlxuICAgICAgdmFyIGFyZ3NfID0gYXJncy5zbGljZSgpO1xuICAgICAgYXJnc18ubGVuZ3RoID0gYXJnc0xlbjtcbiAgICAgIHZhciByZXQgPSBjYW1sX2Nwc19jbG9zdXJlKFxuICAgICAgICBmdW5jdGlvbiAoLi4uZXh0cmFfYXJncykge1xuICAgICAgICAgIGlmIChleHRyYV9hcmdzLmxlbmd0aCA9PT0gMCkgZXh0cmFfYXJncyA9IFt1bmRlZmluZWRdO1xuICAgICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2RpcmVjdChmLCBhcmdzLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fY3BzKGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgcmV0LmwgPSBkO1xuICAgICAgcmV0LmNwcy5sID0gZCArIDE7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjYW1sX2NhbGxfZ2VuX2NwcyhmLCBhcmdzKSB7XG4gICAgaWYgKCFmLmNwcykge1xuICAgICAgdmFyIGsgPSBhcmdzLnBvcCgpO1xuICAgICAgcmV0dXJuIGsoY2FtbF9jYWxsX2dlbl9kaXJlY3QoZiwgYXJncykpO1xuICAgIH1cbiAgICB2YXIgbiA9IGYuY3BzLmwgPj0gMCA/IGYuY3BzLmwgOiAoZi5jcHMubCA9IGYuY3BzLmxlbmd0aCk7XG4gICAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICAgIGlmIChkID09PSAwKSB7XG4gICAgICByZXR1cm4gZi5jcHMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIGlmIChkIDwgMCkge1xuICAgICAgdmFyIHJlc3QgPSBhcmdzLnNsaWNlKG4gLSAxKTtcbiAgICAgIHZhciBrID0gYXJnc1thcmdzTGVuIC0gMV07XG4gICAgICBhcmdzID0gYXJncy5zbGljZSgwLCBuKTtcbiAgICAgIGFyZ3NbbiAtIDFdID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGs7XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2NwcyhnLCBhcmdzKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZi5jcHMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3NMZW4tLTtcbiAgICAgIHZhciBhcmdzXyA9IGFyZ3Muc2xpY2UoKTtcbiAgICAgIGFyZ3NfLmxlbmd0aCA9IGFyZ3NMZW47XG4gICAgICB2YXIgY29udCA9IGNhbWxfY3BzX2Nsb3N1cmUoXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fZGlyZWN0KGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fY3BzKGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdmFyIGsgPSBhcmdzW2FyZ3NMZW5dO1xuICAgICAgY29udC5sID0gZDtcbiAgICAgIGNvbnQuY3BzLmwgPSBkICsgMTtcbiAgICAgIHJldHVybiBrKGNvbnQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2NhbWxfY2FsbF9nZW5fZGlyZWN0LCBjYW1sX2NhbGxfZ2VuX2Nwc107XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuX3R1cGxlXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbi8vV2Vha2RlZlxudmFyIGNhbWxfY2FsbF9nZW4gPSBjYW1sX2NhbGxfZ2VuX3R1cGxlWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX2Nwc1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlbl90dXBsZVxuLy9JZjogZWZmZWN0c1xuLy9JZjogZG91YmxldHJhbnNsYXRlXG4vL1dlYWtkZWZcbnZhciBjYW1sX2NhbGxfZ2VuX2NwcyA9IGNhbWxfY2FsbF9nZW5fdHVwbGVbMV07XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG52YXIgY2FtbF9uYW1lZF92YWx1ZXMgPSB7fTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSAoY29uc3QsbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLCB2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dsb2JhbF9kYXRhXG52YXIgY2FtbF9nbG9iYWxfZGF0YSA9IFswXTtcblxuLy9Qcm92aWRlczogY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9idWlsZF9zeW1ib2xzKHN5bWIpIHtcbiAgdmFyIHIgPSB7fTtcbiAgdmFyIG1heCA9IC0xO1xuICBpZiAoc3ltYikge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3ltYi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkeCA9IHN5bWJbaV1bMl07XG4gICAgICBtYXggPSBNYXRoLm1heChtYXgsIGlkeCk7XG4gICAgICByW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN5bWJbaV1bMV0pXSA9IGlkeDtcbiAgICB9XG4gIH1cbiAgci5uZXh0X2lkeCA9IG1heCArIDE7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3RvcGxldmVsX3JlbG9jXG52YXIganNvb190b3BsZXZlbF9yZWxvYyA9IHVuZGVmaW5lZDtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKGNvbnN0LCBzaGFsbG93LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfY2FsbGJhY2ssIGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczoganNvb190b3BsZXZlbF9yZWxvY1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9nbG9iYWwobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYgKG5hbWVfb3B0KSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lX29wdDtcbiAgICBpZiAoanNvb190b3BsZXZlbF9yZWxvYykge1xuICAgICAgbiA9IGNhbWxfY2FsbGJhY2soanNvb190b3BsZXZlbF9yZWxvYywgW25hbWVdKTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scykge1xuICAgICAgaWYgKCFjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCkge1xuICAgICAgICBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCA9IGNhbWxfYnVpbGRfc3ltYm9scyhjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpO1xuICAgICAgfVxuICAgICAgdmFyIG5pZCA9IGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4W25hbWVdO1xuICAgICAgaWYgKG5pZCA+PSAwKSBuID0gbmlkO1xuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZSB1bml0IGlzIHVua25vd24sIHRoaXMgY2FuIGhhcHBlbiB3aGVuIGR5bmxpbmtpbmcgYSBwcmVjb21waWxlZCBqcyxcbiAgICAgICAgLy8gbGV0J3MgYWxsb2NhdGUgYSBmcmVzaCBpZHguXG4gICAgICAgIHZhciBuID0gY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHgubmV4dF9pZHgrKztcbiAgICAgICAgY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHhbbmFtZV0gPSBuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmIChuYW1lX29wdCkgY2FtbF9nbG9iYWxfZGF0YVtuYW1lX29wdF0gPSB2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9nbG9iYWxfZGF0YSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2dldF9nbG9iYWxfZGF0YShfdW5pdCkge1xuICByZXR1cm4gY2FtbF9nbG9iYWxfZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykge1xuICByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfcHJpbnRfc3RhdHNcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfcHJpbnRfc3RhdHMoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWJcblxuLy9Qcm92aWRlczogY2FtbF9qc19wdXJlX2V4cHIgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfcHVyZV9leHByKGYpIHtcbiAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgWzBdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobywgZiwgdikge1xuICBvW2ZdID0gdjtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLCBmKSB7XG4gIHJldHVybiBvW2ZdO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19kZWxldGUgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19kZWxldGUobywgZikge1xuICBkZWxldGUgb1tmXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sIGMpIHtcbiAgcmV0dXJuIG8gaW5zdGFuY2VvZiBjID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvO1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlIChyZXM/Lmpvb190cmFtcCkge1xuICAgIHJlcyA9IHJlcy5qb29fdHJhbXAuYXBwbHkobnVsbCwgcmVzLmpvb19hcmdzKTtcbiAgICBjKys7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVfcmV0dXJuXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGYsIGFyZ3MsIGRpcmVjdCkge1xuICByZXR1cm4geyBqb29fdHJhbXA6IGYsIGpvb19hcmdzOiBhcmdzLCBqb29fZGlyZWN0OiBkaXJlY3QgfTtcbn1cblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG52YXIgY2FtbF9zdGFja19kZXB0aCA9IDA7XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19jaGVja19kZXB0aFxuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoXG5mdW5jdGlvbiBjYW1sX3N0YWNrX2NoZWNrX2RlcHRoKCkge1xuICByZXR1cm4gLS1jYW1sX3N0YWNrX2RlcHRoID4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogIWVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9jYWxsX2dlblxudmFyIGNhbWxfY2FsbGJhY2sgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG4vL1JlcXVpcmVzOiBjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuLCBjYW1sX3dyYXBfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vQWxpYXM6IGNhbWxfY3BzX3RyYW1wb2xpbmVcbmZ1bmN0aW9uIGNhbWxfY2FsbGJhY2soZiwgYXJncykge1xuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfY3VycmVudF9zdGFjayA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgam9vX3RyYW1wOiBmLFxuICAgICAgam9vX2FyZ3M6IGFyZ3MuY29uY2F0KGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSksXG4gICAgfTtcbiAgICBkbyB7XG4gICAgICBjYW1sX3N0YWNrX2RlcHRoID0gNDA7XG4gICAgICB0cnkge1xuICAgICAgICByZXMgPSBjYW1sX2NhbGxfZ2VuKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gICAgICAgIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgICAgICAgcmVzID0geyBqb29fdHJhbXA6IGhhbmRsZXIsIGpvb19hcmdzOiBbY2FtbF93cmFwX2V4Y2VwdGlvbihlKV0gfTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChyZXM/Lmpvb19hcmdzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9jdXJyZW50X3N0YWNrID0gc2F2ZWRfY3VycmVudF9zdGFjaztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbnZhciBjYW1sX2NhbGxiYWNrID0gY2FtbF9jYWxsX2dlbjtcblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZyhfdW5pdCkge1xuICByZXR1cm4gRkxBRyhcInVzZS1qcy1zdHJpbmdcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc19lZmZlY3RzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKENPTkZJRyhcImVmZmVjdHNcIikpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dyYXBfZXhjZXB0aW9uIGNvbnN0IChtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyxjYW1sX25hbWVkX3ZhbHVlXG5mdW5jdGlvbiBjYW1sX3dyYXBfZXhjZXB0aW9uKGUpIHtcbiAgaWYgKEZMQUcoXCJleGN3cmFwXCIpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHJldHVybiBlO1xuICAgIHZhciBleG47XG4gICAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgICBpZiAoXG4gICAgICBnbG9iYWxUaGlzLlJhbmdlRXJyb3IgJiZcbiAgICAgIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLlJhbmdlRXJyb3IgJiZcbiAgICAgIGUubWVzc2FnZSAmJlxuICAgICAgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSlcbiAgICApXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgICBlbHNlIGlmIChcbiAgICAgIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvciAmJlxuICAgICAgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvciAmJlxuICAgICAgZS5tZXNzYWdlICYmXG4gICAgICBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKVxuICAgIClcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICAgIGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgICAgZXhuID0gWzAsIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpLCBlXTtcbiAgICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgICBlbHNlXG4gICAgICBleG4gPSBbMCwgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhTdHJpbmcoZSkpXTtcbiAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXJyb3IgYXQgaGFuZCwgbGV0J3MgdXNlIGl0LlxuICAgIGlmIChlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvcikgZXhuLmpzX2Vycm9yID0gZTtcbiAgICByZXR1cm4gZXhuO1xuICB9IGVsc2UgcmV0dXJuIGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZ1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuZnVuY3Rpb24gY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgLy8gQmFja3RyYWNlcyBhcmUgdmVyeSBleHBlbnNpdmUsIHdlIG9ubHkgZW5hYmxlIHRoZW0gd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZFxuICAvLyBhdCBjb21waWxlLXRpbWUgKC0tZW5hYmxlIHdpdGgtanMtZXJyb3IpIG9yIGF0IHN0YXJ0dXAgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MS5cbiAgLy8gTGlicmFyaWVzIHN1Y2ggYXMgQmFzZSB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlIGJhY2t0cmFjZXMgKHByb2dyYW1tYXRpY2FsbHkpIGJ1dFxuICAvLyBpdCdzIHdheSB0byBzbG93LiBIZXJlLCB3ZSBmb3JjZSB0aGUgZW5kLXVzZXIgdG8gb3B0LWluIHRvIGJhY2t0cmFjZXMuXG4gIGlmIChjYW1sX3JlY29yZF9iYWNrdHJhY2VfZW52X2ZsYWcgJiYgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZylcbiAgICByZXR1cm4gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSk7XG4gIGVsc2UgcmV0dXJuIGV4bjtcbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZiAoIWV4bi5qc19lcnJvciB8fCBmb3JjZSB8fCBleG5bMF0gPT09IDI0OClcbiAgICBleG4uanNfZXJyb3IgPSBuZXcgZ2xvYmFsVGhpcy5FcnJvcihcIkpzIGV4Y2VwdGlvbiBjb250YWluaW5nIGJhY2t0cmFjZVwiKTtcbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb24oZXhuKSB7XG4gIGlmIChleG4uanNfZXJyb3IpIHtcbiAgICByZXR1cm4gWzAsIGV4bi5qc19lcnJvcl07XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdGhyb3dfanNfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3Rocm93X2pzX2V4Y2VwdGlvbihleG4pIHtcbiAgdGhyb3cgZXhuO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYm9vbCh4KSB7XG4gIHJldHVybiAhIXg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Zsb2F0IGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9pbnQzMlxuLy9BbGlhczogY2FtbF9qc19mcm9tX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Zsb2F0IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fZmxvYXQoeCkge1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9faW50MzIgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc190b19uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfdG9faW50MzIoeCkge1xuICByZXR1cm4geCB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgYlswXSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGJbaSArIDFdID0gYVtpXTtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF9vZl9qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF9vZl9qc19hcnJheShhKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yICh2YXIgaSA9IGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLCBlLCBsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpIHtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yICg7IGwgIT09IDA7IGwgPSBsWzJdKSB7XG4gICAgYS5wdXNoKGxbMV0pO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3ZhciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc192YXIoeCkge1xuICB2YXIgeCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHgpO1xuICAvL0NoZWNrcyB0aGF0IHggaGFzIHRoZSBmb3JtIGlkZW50Wy5pZGVudF0qXG4gIGlmICgheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAnY2FtbF9qc192YXI6IFwiJyArXG4gICAgICAgIHggK1xuICAgICAgICAnXCIgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZS4gY29udGludWluZyAuLicsXG4gICAgKTtcbiAgICAvL2NvbnNvbGUuZXJyb3IoXCJKcy5VbnNhZmUuZXZhbF9zdHJpbmdcIilcbiAgfVxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6XG4gIHJldHVybiBldmFsPy4oeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykge1xuICByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5fY2FsbCAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfZnVuX2NhbGwoZiwgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGYoKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gZihhWzFdKTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdKTtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdKTtcbiAgICBjYXNlIDg6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdLCBhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIG5ldyBjKCk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0pO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBuZXcgYyhhWzFdLCBhWzJdKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gbmV3IGMoYVsxXSwgYVsyXSwgYVszXSk7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0sIGFbMl0sIGFbM10sIGFbNF0pO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBuZXcgYyhhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gbmV3IGMoYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSk7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0sIGFbNl0sIGFbN10pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7XG4gICAgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTtcbiAgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEYoKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfb2pzX25ld19hcnIgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX29qc19uZXdfYXJyKGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBuZXcgYygpO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gbmV3IGMoYVswXSwgYVsxXSk7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMF0sIGFbMV0sIGFbMl0pO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gbmV3IGMoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSk7XG4gICAgY2FzZSA2OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0pO1xuICAgIGNhc2UgNzpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkge1xuICAgIHJldHVybiBjLmFwcGx5KHRoaXMsIGEpO1xuICB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRigpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXJncyA9IFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBjYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKSA6IHJlcztcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFthcmdzXSk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGFyZ3MubGVuZ3RoID0gYXJpdHk7XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKTtcbiAgICBhcmdzLmxlbmd0aCA9IGxlbjtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfd3JhcF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gICAgcmV0dXJuIHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gY2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcykgOiByZXM7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgW3RoaXMsIGFyZ3NdKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGFyZ3MubGVuZ3RoID0gYXJpdHk7XG4gICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpO1xuICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICBhcmdzLmxlbmd0aCA9IGxlbjtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogIWVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gZi5sID49IDAgPyBmLmwgOiAoZi5sID0gZi5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gZi5sID49IDAgPyBmLmwgOiAoZi5sID0gZi5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgLy8gRnVuY3Rpb25zIGhhdmUgYW4gYWRkaXRpb25hbCBjb250aW51YXRpb24gcGFyYW1ldGVyLiBUaGlzIHNob3VsZFxuICAvLyBub3QgYmUgdmlzaWJsZSB3aGVuIGNhbGxpbmcgdGhlbSBmcm9tIEphdmFTY3JpcHRcbiAgcmV0dXJuIChmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCkpIC0gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMoeCwgeSkge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRG91YmxlRXF1YWxzOlxuICByZXR1cm4gKyh4ID09IHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zdHJpY3RfZXF1YWxzKHgsIHkpIHtcbiAgcmV0dXJuICsoeCA9PT0geSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXZhbF9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXZhbF9zdHJpbmcocykge1xuICAvLyBVc2VzIGFuIGluZGlyZWN0IGV2YWwgdGhyb3VnaCB0aGUgb3B0aW9uYWwgY2hhaW5pbmcgb3BlcmF0b3IuXG4gIC8vIChzZWUgaHR0cHM6Ly9tZG4uZGV2L2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2V2YWwpXG4gIC8vIFRoaXMgaXMgZmFzdGVyIGFuZCBhdm9pZCB2YXJpYWJsZSBjYXB0dXJlcy5cbiAgLy8gQWxzbyBwcmVwZW5kcyBgXCJ1c2Ugc3RyaWN0XCJgIGRpcmVjdGl2ZSBzaW5jZSB0aGlzIGlzIG5vdCBpbmhlcml0ZWRcbiAgLy8gZnJvbSB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHdpdGggYW4gaW5kaXJlY3QgZXZhbC5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsnICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V4cHIgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgLy8gV2UgYWRkIHBhcmVudGhlc2VzIHRvIGF2b2lkIHRoZSBhbWJpZ3VpdHkgYmV0d2VlbiBleHByZXNzaW9uc1xuICAvLyBhbmQgc3RhdGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHdlIGFjY2VwdCBpbnZhbGlkIGlucHV0cyBsaWtlXG4gIC8vIFwiYSkoYlwiLCBidXQgdGhpcyBpcyB1bmxpa2VseSB0byBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZS5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsoJyArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpICsgXCIpXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9wdXJlX2pzX2V4cHIocykge1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9wdXJlX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsoJyArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpICsgXCIpXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX29iamVjdCAob2JqZWN0X2xpdGVyYWwpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19vYmplY3QoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9SYWlzZSBleGNlcHRpb25cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9jb25zdGFudCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2NvbnN0YW50KHRhZykge1xuICB0aHJvdyB0YWc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJnKHRhZywgYXJnKSB7XG4gIHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnLCBhcmddKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZ3MgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJncyh0YWcsIGFyZ3MpIHtcbiAgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWddLmNvbmNhdChhcmdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aChtc2cpIHtcbiAgaWYgKCFjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlID0gWzI0OCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkZhaWx1cmVcIiksIC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2ludmFsaWRfYXJndW1lbnQobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRW5kX29mX2ZpbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRGl2aXNpb25fYnlfemVybyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9mb3VuZCgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5KCkge1xuICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF90aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZSgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoY2FtbF91bml4X2dldHRpbWVvZmRheSgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3RpbWVzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3RpbWVzXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZXMoKSB7XG4gIGlmIChnbG9iYWxUaGlzLnByb2Nlc3M/LmNwdVVzYWdlKSB7XG4gICAgdmFyIHQgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3B1VXNhZ2UoKTtcbiAgICByZXR1cm4gQkxPQ0soMCwgdC51c2VyIC8gMWU2LCB0LnN5c3RlbSAvIDFlNiwgMCwgMCk7XG4gIH0gZWxzZSBpZiAoZ2xvYmFsVGhpcy5wZXJmb3JtYW5jZT8ubm93KSB7XG4gICAgcmV0dXJuIEJMT0NLKDAsIGdsb2JhbFRoaXMucGVyZm9ybWFuY2Uubm93KCkgLyAxMDAwLCAwLCAwLCAwKTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RpbWVzOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dtdGltZVxuLy9BbGlhczogdW5peF9nbXRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9nbXRpbWUodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSBuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGQuZ2V0VVRDU2Vjb25kcygpLFxuICAgIGQuZ2V0VVRDTWludXRlcygpLFxuICAgIGQuZ2V0VVRDSG91cnMoKSxcbiAgICBkLmdldFVUQ0RhdGUoKSxcbiAgICBkLmdldFVUQ01vbnRoKCksXG4gICAgZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCxcbiAgICBkLmdldFVUQ0RheSgpLFxuICAgIGRveSxcbiAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8sXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbG9jYWx0aW1lKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgamFuLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICAganVsLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICk7XG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGQuZ2V0U2Vjb25kcygpLFxuICAgIGQuZ2V0TWludXRlcygpLFxuICAgIGQuZ2V0SG91cnMoKSxcbiAgICBkLmdldERhdGUoKSxcbiAgICBkLmdldE1vbnRoKCksXG4gICAgZC5nZXRGdWxsWWVhcigpIC0gMTkwMCxcbiAgICBkLmdldERheSgpLFxuICAgIGRveSxcbiAgICAoZC5nZXRUaW1lem9uZU9mZnNldCgpIDwgc3RkVGltZXpvbmVPZmZzZXQpIHxcbiAgICAgIDAgLyogZGF5bGlnaHQgc2F2aW5ncyB0aW1lICBmaWVsZC4gKi8sXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbWt0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWt0aW1lKHRtKSB7XG4gIHZhciBkID0gbmV3IERhdGUodG1bNl0gKyAxOTAwLCB0bVs1XSwgdG1bNF0sIHRtWzNdLCB0bVsyXSwgdG1bMV0pLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IGNhbWxfdW5peF9sb2NhbHRpbWUodCk7XG4gIHJldHVybiBCTE9DSygwLCB0LCB0bTIpO1xufVxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXJ0dXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9zdGFydHVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbGVhbnVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fY2xlYW51cFxuZnVuY3Rpb24gY2FtbF91bml4X2NsZWFudXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkIGNvbnN0XG4vL0FsaWFzOiB3aW5faGFuZGxlX2ZkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkKHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZVxuLy9BbGlhczogdW5peF9pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQpO1xuICBpZiAoIWZpbGUuaXNhdHR5KSByZXR1cm4gMDtcbiAgcmV0dXJuIGZpbGUuaXNhdHR5KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KF9maWxlRGVzY3JpcHRvcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogdW5peF9lcnJvclxudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLFxuICBcIkVBQ0NFU1wiLFxuICBcIkVBR0FJTlwiLFxuICBcIkVCQURGXCIsXG4gIFwiRUJVU1lcIixcbiAgXCJFQ0hJTERcIixcbiAgXCJFREVBRExLXCIsXG4gIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLFxuICBcIkVGQVVMVFwiLFxuICBcIkVGQklHXCIsXG4gIFwiRUlOVFJcIixcbiAgXCJFSU5WQUxcIixcbiAgXCJFSU9cIixcbiAgXCJFSVNESVJcIixcbiAgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIixcbiAgXCJFTkFNRVRPT0xPTkdcIixcbiAgXCJFTkZJTEVcIixcbiAgXCJFTk9ERVZcIixcbiAgXCJFTk9FTlRcIixcbiAgXCJFTk9FWEVDXCIsXG4gIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsXG4gIFwiRU5PU1BDXCIsXG4gIFwiRU5PU1lTXCIsXG4gIFwiRU5PVERJUlwiLFxuICBcIkVOT1RFTVBUWVwiLFxuICBcIkVOT1RUWVwiLFxuICBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIixcbiAgXCJFUElQRVwiLFxuICBcIkVSQU5HRVwiLFxuICBcIkVST0ZTXCIsXG4gIFwiRVNQSVBFXCIsXG4gIFwiRVNSQ0hcIixcbiAgXCJFWERFVlwiLFxuICBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIixcbiAgXCJFQUxSRUFEWVwiLFxuICBcIkVOT1RTT0NLXCIsXG4gIFwiRURFU1RBRERSUkVRXCIsXG4gIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsXG4gIFwiRU5PUFJPVE9PUFRcIixcbiAgXCJFUFJPVE9OT1NVUFBPUlRcIixcbiAgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsXG4gIFwiRVBGTk9TVVBQT1JUXCIsXG4gIFwiRUFGTk9TVVBQT1JUXCIsXG4gIFwiRUFERFJJTlVTRVwiLFxuICBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLFxuICBcIkVORVRVTlJFQUNIXCIsXG4gIFwiRU5FVFJFU0VUXCIsXG4gIFwiRUNPTk5BQk9SVEVEXCIsXG4gIFwiRUNPTk5SRVNFVFwiLFxuICBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsXG4gIFwiRU5PVENPTk5cIixcbiAgXCJFU0hVVERPV05cIixcbiAgXCJFVE9PTUFOWVJFRlNcIixcbiAgXCJFVElNRURPVVRcIixcbiAgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIixcbiAgXCJFSE9TVFVOUkVBQ0hcIixcbiAgXCJFTE9PUFwiLFxuICBcIkVPVkVSRkxPV1wiLFxuXTtcblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiB1bml4X2Vycm9yLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5O1xuICAgIH1cbiAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB2YXJpYW50cywgZmFsbGJhY2sgdG8gRVVOS05PV05FUlIoaW50KVxuICAgIC8vIGVycm5vIGlzIGV4cGVjdGVkIHRvIGJlIHBvc2l0aXZlXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIC1lcnJubyk7XG4gIH1cbiAgdmFyIGFyZ3MgPSBbXG4gICAgdmFyaWFudCxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzeXNjYWxsIHx8IFwiXCIpLFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGggfHwgXCJcIiksXG4gIF07XG4gIHJldHVybiBhcmdzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmVycm9yXG4vL1JlcXVpcmVzOiB1bml4X2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N0cmVycm9yKGVycm5vKSB7XG4gIGNvbnN0IHV0aWwgPSByZXF1aXJlKFwibm9kZTp1dGlsXCIpO1xuICBpZiAoZXJybm8gPj0gMCkge1xuICAgIGNvbnN0IGNvZGUgPSB1bml4X2Vycm9yW2Vycm5vXTtcbiAgICByZXR1cm4gdXRpbFxuICAgICAgLmdldFN5c3RlbUVycm9yTWFwKClcbiAgICAgIC5lbnRyaWVzKClcbiAgICAgIC5maW5kKCh4KSA9PiB4WzFdWzBdID09PSBjb2RlKVsxXVsxXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdXRpbC5nZXRTeXN0ZW1FcnJvck1lc3NhZ2UoZXJybm8pO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyZXJyb3Jcbi8vUmVxdWlyZXM6IHVuaXhfZXJyb3Jcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3RyZXJyb3IoZXJybm8pIHtcbiAgY29uc3QgY29kZSA9IHVuaXhfZXJyb3JbZXJybm9dO1xuICByZXR1cm4gY29kZSB8fCBcIlVua25vd24gZXJyb3IgXCIgKyBlcnJubztcbn1cblxuLy9Qcm92aWRlczogdW5peF9lcnJvcl9tZXNzYWdlXG4vL0FsaWFzOiBjYW1sX3VuaXhfZXJyb3JfbWVzc2FnZVxuLy9SZXF1aXJlczogY2FtbF9zdHJlcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIHVuaXhfZXJyb3JfbWVzc2FnZShlcnIpIHtcbiAgY29uc3QgZXJybm8gPSB0eXBlb2YgZXJyID09PSBcIm51bWJlclwiID8gZXJyIDogLWVyclsxXTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNhbWxfc3RyZXJyb3IoZXJybm8pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19jaGRpclxuLy9BbGlhczogdW5peF9jaGRpclxuZnVuY3Rpb24gY2FtbF91bml4X2NoZGlyKGRpcikge1xuICByZXR1cm4gY2FtbF9zeXNfY2hkaXIoZGlyLCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChcbiAgICByb290LnJlc3QsXG4gICAgLyogbGFyZ2UgKi8gZmFsc2UsXG4gICAgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdF82NFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXRfNjQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXRfNjQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChcbiAgICByb290LnJlc3QsXG4gICAgLyogbGFyZ2UgKi8gdHJ1ZSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KFxuICAgIHJvb3QucmVzdCxcbiAgICAvKiBsYXJnZSAqLyBmYWxzZSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdF82NChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0XzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KFxuICAgIHJvb3QucmVzdCxcbiAgICAvKiBsYXJnZSAqLyB0cnVlLFxuICAgIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NobW9kXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9jaG1vZFxuZnVuY3Rpb24gY2FtbF91bml4X2NobW9kKG5hbWUsIHBlcm1zKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UuY2htb2QpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2NobW9kOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmNobW9kKHJvb3QucmVzdCwgcGVybXMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVuYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3Jcbi8vQWxpYXM6IHVuaXhfcmVuYW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVuYW1lKG8sIG4pIHtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmIChvX3Jvb3QuZGV2aWNlICE9PSBuX3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gMSwgXCJFWERFVlwiLCBcInJlbmFtZVwiKTtcbiAgaWYgKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSkgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogbm90IGltcGxlbWVudGVkXCIpO1xuICBvX3Jvb3QuZGV2aWNlLnJlbmFtZShvX3Jvb3QucmVzdCwgbl9yb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbWtkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ybWRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG4vL0FsaWFzOiB1bml4X2xpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9saW5rKGZvbGxvdywgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYgKCFzcmNfcm9vdC5kZXZpY2UubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIC8vIFdlIGNhbid0IGNvbnRyb2wgd2hldGhlciBhICdzcmMnIHN5bWxpbmsgaXMgZm9sbG93ZWQgb3Igbm90LlxuICAvLyBTbyB3ZSBmYWlsIHdoZW4gJ2ZvbGxvdycgaXMgc2V0LCBhcyBkb2N1bWVudGVkIGluIHRoZSBVbml4IG1vZHVsZS5cbiAgaWYgKHR5cGVvZiBmb2xsb3cgIT09IFwibnVtYmVyXCIpXG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoLyogcmFpc2UgVW5peF9lcnJvciAqLyAxLCBcIkVOT1NZU1wiLCBcImxpbmtcIik7XG4gIGlmIChzcmNfcm9vdC5kZXZpY2UgIT09IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRVhERVZcIiwgXCJsaW5rXCIpO1xuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLmxpbmsoXG4gICAgc3JjX3Jvb3QucmVzdCxcbiAgICBkc3Rfcm9vdC5yZXN0LFxuICAgIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N5bWxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9BbGlhczogdW5peF9zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3ltbGluayh0b19kaXIsIHNyYywgZHN0KSB7XG4gIHZhciBkc3Rfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRzdCk7XG4gIGlmICghZHN0X3Jvb3QuZGV2aWNlLnN5bWxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gZHN0X3Jvb3QuZGV2aWNlLnN5bWxpbmsoXG4gICAgdG9fZGlyLFxuICAgIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHNyYyksXG4gICAgZHN0X3Jvb3QucmVzdCxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcmVhZGxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkbGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVhZGxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JlYWRsaW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJlYWRsaW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3VubGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfdW5saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfdW5saW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS51bmxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3VubGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdXRpbWVzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF91dGltZXNcbmZ1bmN0aW9uIGNhbWxfdW5peF91dGltZXMobmFtZSwgYXRpbWUsIG10aW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudXRpbWVzKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF91dGltZXM6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByb290LmRldmljZS51dGltZXMocm9vdC5yZXN0LCBhdGltZSwgbXRpbWUsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdHJ1bmNhdGVcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3RydW5jYXRlXG5mdW5jdGlvbiBjYW1sX3VuaXhfdHJ1bmNhdGUobmFtZSwgbGVuKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudHJ1bmNhdGUpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RydW5jYXRlOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UudHJ1bmNhdGUocm9vdC5yZXN0LCBsZW4sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdHJ1bmNhdGVfNjRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2ludDY0X3RvX2Zsb2F0XG4vL0FsaWFzOiB1bml4X3RydW5jYXRlXzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfdHJ1bmNhdGVfNjQobmFtZSwgbGVuKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudHJ1bmNhdGUpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RydW5jYXRlXzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UudHJ1bmNhdGUoXG4gICAgcm9vdC5yZXN0LFxuICAgIGNhbWxfaW50NjRfdG9fZmxvYXQobGVuKSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfYWNjZXNzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9hY2Nlc3NcbmZ1bmN0aW9uIGNhbWxfdW5peF9hY2Nlc3MobmFtZSwgZmxhZ3MpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnIgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgZi53ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGYueCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBmLmYgPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZmxhZ3MgPSBmbGFnc1syXTtcbiAgfVxuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLmFjY2Vzcykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfYWNjZXNzOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UuYWNjZXNzKHJvb3QucmVzdCwgZiwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9vcGVuXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9zeXNfZmRzLCBNbENoYW5pZFxuLy9BbGlhczogdW5peF9vcGVuXG5mdW5jdGlvbiBjYW1sX3VuaXhfb3BlbihuYW1lLCBmbGFncywgcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnJkb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBmLndyb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBmLnJkd3IgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgZi5ub25ibG9jayA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0OlxuICAgICAgICBmLmFwcGVuZCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA1OlxuICAgICAgICBmLmNyZWF0ZSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA2OlxuICAgICAgICBmLnRydW5jYXRlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIGYuZXhjbCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBmLm5vY3R0eSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA5OlxuICAgICAgICBmLmRzeW5jID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwOlxuICAgICAgICBmLnN5bmMgPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZmxhZ3MgPSBmbGFnc1syXTtcbiAgfVxuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LCBmLCBwZXJtcywgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgdmFyIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gIHZhciBjaGFuaWQgPSBuZXcgTWxDaGFuaWQoaWR4KTtcbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSB7IGZpbGU6IGZpbGUsIGNoYW5pZDogY2hhbmlkIH07XG4gIHJldHVybiBpZHggfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2ZkcywgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3JcbmZ1bmN0aW9uIGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgY21kKSB7XG4gIHZhciBmZF9kZXNjID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKGZkX2Rlc2MgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgY21kKTtcbiAgcmV0dXJuIGZkX2Rlc2MuZmlsZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZzdGF0XG4vL0FsaWFzOiB1bml4X2ZzdGF0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfdW5peF9mc3RhdChmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmc3RhdFwiKTtcbiAgaWYgKCFmaWxlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3RhdCgvKiBsYXJnZSAqLyBmYWxzZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9mc3RhdF82NFxuLy9BbGlhczogdW5peF9mc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3VuaXhfZnN0YXRfNjQoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiZnN0YXRcIik7XG4gIGlmICghZmlsZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9mc3RhdDY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3RhdCgvKiBsYXJnZSAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZjaG1vZFxuLy9BbGlhczogdW5peF9mY2htb2Rcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF91bml4X2ZjaG1vZChmZCwgcGVybXMpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiZmNobW9kXCIpO1xuICBpZiAoIWZpbGUuY2htb2QpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZjaG1vZDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiBmaWxlLmNobW9kKHBlcm1zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZzeW5jXG4vL0FsaWFzOiB1bml4X2ZzeW5jXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfdW5peF9mc3luYyhmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmc3luY1wiKTtcbiAgaWYgKCFmaWxlLnN5bmMpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZzeW5jOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3luYygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfd3JpdGVcbi8vQWxpYXM6IHVuaXhfd3JpdGVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF91bml4X3dyaXRlKGZkLCBidWYsIHBvcywgbGVuKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcIndyaXRlXCIpO1xuICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKTtcbiAgdmFyIHdyaXR0ZW4gPSAwO1xuICB3aGlsZSAobGVuID4gMCkge1xuICAgIHZhciBuID0gZmlsZS53cml0ZShhLCBwb3MsIGxlbiwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbiAgICB3cml0dGVuICs9IG47XG4gICAgcG9zICs9IG47XG4gICAgbGVuIC09IG47XG4gIH1cbiAgcmV0dXJuIHdyaXR0ZW47XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zaW5nbGVfd3JpdGVcbi8vQWxpYXM6IHVuaXhfc2luZ2xlX3dyaXRlXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfdW5peF9zaW5nbGVfd3JpdGUoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwid3JpdGVcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICByZXR1cm4gZmlsZS53cml0ZShcbiAgICBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZiksXG4gICAgcG9zLFxuICAgIGxlbixcbiAgICAvKiByYWlzZSB1bml4X2Vycm9yICovIDEsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF93cml0ZV9iaWdhcnJheVxuLy9BbGlhczogY2FtbF91bml4X2xvb2t1cF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5LCBjYW1sX3VuaXhfbG9va3VwX2ZpbGVcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX3VuaXhfd3JpdGVfYmlnYXJyYXkoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1Zik7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcIndyaXRlXCIpO1xuICB2YXIgd3JpdHRlbiA9IDA7XG4gIHdoaWxlIChsZW4gPiAwKSB7XG4gICAgdmFyIG4gPSBmaWxlLndyaXRlKGEsIHBvcywgbGVuLCAvKiByYWlzZSB1bml4X2Vycm9yICovIDEpO1xuICAgIHdyaXR0ZW4gKz0gbjtcbiAgICBwb3MgKz0gbjtcbiAgICBsZW4gLT0gbjtcbiAgfVxuICByZXR1cm4gd3JpdHRlbjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRcbi8vQWxpYXM6IHVuaXhfcmVhZFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZChmZCwgYnVmLCBwb3MsIGxlbikge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJyZWFkXCIpO1xuICByZXR1cm4gZmlsZS5yZWFkKFxuICAgIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKSxcbiAgICBwb3MsXG4gICAgbGVuLFxuICAgIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRfYmlnYXJyYXlcbi8vQWxpYXM6IHVuaXhfcmVhZF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF91bml4X2xvb2t1cF9maWxlXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRfYmlnYXJyYXkoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1Zik7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcInJlYWRcIik7XG4gIHJldHVybiBmaWxlLnJlYWQoYSwgcG9zLCBsZW4sIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc2Vla1xuLy9BbGlhczogdW5peF9sc2Vla1xuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlXG5mdW5jdGlvbiBjYW1sX3VuaXhfbHNlZWsoZmQsIGxlbiwgd2hlbmNlKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImxzZWVrXCIpO1xuICByZXR1cm4gZmlsZS5zZWVrKGxlbiwgd2hlbmNlLCAvKiByYWlzZSB1bml4X2Vycm9yICovIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHNlZWtfNjRcbi8vQWxpYXM6IHVuaXhfbHNlZWtfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9pbnQ2NF90b19mbG9hdFxuZnVuY3Rpb24gY2FtbF91bml4X2xzZWVrXzY0KGZkLCBsZW4sIHdoZW5jZSkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJsc2Vla1wiKTtcbiAgcmV0dXJuIGZpbGUuc2VlayhjYW1sX2ludDY0X3RvX2Zsb2F0KGxlbiksIHdoZW5jZSwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Z0cnVuY2F0ZVxuLy9BbGlhczogdW5peF9mdHJ1bmNhdGVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF91bml4X2Z0cnVuY2F0ZShmZCwgbGVuKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImZ0cnVuY2F0ZVwiKTtcbiAgaWYgKCFmaWxlLnRydW5jYXRlKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9mdHJ1bmNhdGU6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICBmaWxlLnRydW5jYXRlKGxlbiwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9mdHJ1bmNhdGVfNjRcbi8vQWxpYXM6IHVuaXhfZnRydW5jYXRlXzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGgsIGNhbWxfaW50NjRfdG9fZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9mdHJ1bmNhdGVfNjQoZmQsIGxlbikge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmdHJ1bmNhdGVcIik7XG4gIGlmICghZmlsZS50cnVuY2F0ZSkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfZnRydW5jYXRlXzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgZmlsZS50cnVuY2F0ZShjYW1sX2ludDY0X3RvX2Zsb2F0KGxlbiksIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xvc2Vcbi8vQWxpYXM6IHVuaXhfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZVxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImNsb3NlXCIpO1xuICBmaWxlLmNsb3NlKC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaW5jaGFubmVsX29mX2ZpbGVkZXNjclxuLy9BbGlhczogdW5peF9pbmNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB3aW5faW5jaGFubmVsX29mX2ZpbGVkZXNjclxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuZnVuY3Rpb24gY2FtbF91bml4X2luY2hhbm5lbF9vZl9maWxlZGVzY3IoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiaW5fY2hhbm5lbF9vZl9kZXNjclwiKTtcbiAgZmlsZS5jaGVja19zdHJlYW1fc2VtYW50aWNzKFwiaW5fY2hhbm5lbF9vZl9kZXNjclwiKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luKGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB1bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB3aW5fb3V0Y2hhbm5lbF9vZl9maWxlZGVzY3Jcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG5mdW5jdGlvbiBjYW1sX3VuaXhfb3V0Y2hhbm5lbF9vZl9maWxlZGVzY3IoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwib3V0X2NoYW5uZWxfb2ZfZGVzY3JcIik7XG4gIGZpbGUuY2hlY2tfc3RyZWFtX3NlbWFudGljcyhcIm91dF9jaGFubmVsX29mX2Rlc2NyXCIpO1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHVpZFxuLy9BbGlhczogdW5peF9nZXR1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR1aWQoX3VuaXQpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0dWlkKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQoKTtcbiAgfVxuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldGV1aWRcbi8vQWxpYXM6IHVuaXhfZ2V0ZXVpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldGV1aWQoX3VuaXQpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0ZXVpZCkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0ZXVpZCgpO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0Z2lkXG4vL0FsaWFzOiB1bml4X2dldGdpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldGdpZChfdW5pdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzPy5nZXRnaWQpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLmdldGdpZCgpO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0ZWdpZFxuLy9BbGlhczogdW5peF9nZXRlZ2lkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0ZWdpZChfdW5pdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzPy5nZXRlZ2lkKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXRlZ2lkKCk7XG4gIH1cbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXRwd25hbVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0cHduYW1cbi8vQWxpYXM6IGNhbWxfdW5peF9nZXRwd3VpZFxuLy9BbGlhczogdW5peF9nZXRwd3VpZFxuLy9BbGlhczogY2FtbF91bml4X2dldGdybmFtXG4vL0FsaWFzOiB1bml4X2dldGdybmFtXG4vL0FsaWFzOiBjYW1sX3VuaXhfZ2V0Z3JnaWRcbi8vQWxpYXM6IHVuaXhfZ2V0Z3JnaWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXRwd25hbShfdW5pdCkge1xuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaGFzX3N5bWxpbmtcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2hhc19zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfaGFzX3N5bWxpbmsoX3VuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCkgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X29wZW5kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X29wZW5kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShwYXRoKTtcbiAgaWYgKCFyb290LmRldmljZS5vcGVuZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9vcGVuZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgdmFyIGRpcl9oYW5kbGUgPSByb290LmRldmljZS5vcGVuZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIHsgcG9pbnRlcjogZGlyX2hhbmRsZSwgcGF0aDogcGF0aCB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG4vL0FsaWFzOiB1bml4X3JlYWRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpIHtcbiAgdmFyIGVudHJ5O1xuICB0cnkge1xuICAgIGVudHJ5ID0gZGlyX2hhbmRsZS5wb2ludGVyLnJlYWRTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgXCJyZWFkZGlyXCIpO1xuICB9XG4gIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZW50cnkubmFtZSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuLy9BbGlhczogdW5peF9jbG9zZWRpclxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpIHtcbiAgdHJ5IHtcbiAgICBkaXJfaGFuZGxlLnBvaW50ZXIuY2xvc2VTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgXCJjbG9zZWRpclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmV3aW5kZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXIsIGNhbWxfdW5peF9vcGVuZGlyXG4vL0FsaWFzOiB1bml4X3Jld2luZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3Jld2luZGRpcihkaXJfaGFuZGxlKSB7XG4gIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbiAgdmFyIG5ld19kaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIoZGlyX2hhbmRsZS5wYXRoKTtcbiAgZGlyX2hhbmRsZS5wb2ludGVyID0gbmV3X2Rpcl9oYW5kbGUucG9pbnRlcjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kZmlyc3Rcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91bml4X29wZW5kaXIsIGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZGZpcnN0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGZpcnN0KHBhdGgpIHtcbiAgLy8gVGhlIFdpbmRvd3MgY29kZSBhZGRzIHRoaXMgZ2xvYiB0byB0aGUgcGF0aCwgc28gd2UgbmVlZCB0byByZW1vdmUgaXRcbiAgdmFyIHBhdGhfanMgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwYXRoKTtcbiAgcGF0aF9qcyA9IHBhdGhfanMucmVwbGFjZSgvKF58W1xcXFwvXSlcXCpcXC5cXCokLywgXCJcIik7XG4gIHBhdGggPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoX2pzKTtcbiAgLy8gKi4qIGlzIG5vdyBzdHJpcHBlZFxuICB2YXIgZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpO1xuICB2YXIgZmlyc3RfZW50cnkgPSBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbiAgLy8gVGhlIFdpbmRvd3MgYmluZGluZ3MgdHlwZSBkaXJfaGFuZGxlIGFzIGFuIGBpbnRgIGJ1dCBpdCdzIG5vdCBpbiBKU1xuICByZXR1cm4gWzAsIGZpcnN0X2VudHJ5LCBkaXJfaGFuZGxlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRuZXh0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRuZXh0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZG5leHQoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9BbGlhczogd2luX2ZpbmRjbG9zZVxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRjbG9zZShkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIGNvbnN0XG4vL0FsaWFzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihyYWlzZV91bml4LCBjb2RlLCBjbWQsIG1zZywgcGF0aCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpXG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIGNtZCwgcGF0aCkpO1xuICBlbHNlIHtcbiAgICB2YXIgbXNnID0gY29kZSArIFwiOiBcIiArIG1zZyArIFwiLCBcIiArIGNtZDtcbiAgICBpZiAocGF0aCAhPT0gdW5kZWZpbmVkKSBtc2cgKz0gXCIgJ1wiICsgcGF0aCArIFwiJ1wiO1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG1zZyk7XG4gIH1cbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRHVtbXkgZmlsZXN5c3RlbVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuc2xpY2UoLTEpICE9PSBcIi9cIiA/IG5hbWUgKyBcIi9cIiA6IG5hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZClcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKCkucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG5lbHNlIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKSB7XG4gIHZhciB4ID0gcGF0aF9pc19hYnNvbHV0ZShwYXRoKTtcbiAgaWYgKCF4KSByZXR1cm47XG4gIHJldHVybiB4WzBdICsgXCIvXCI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcm9vdFxuLy9SZXF1aXJlczogY2FtbF9nZXRfcm9vdCwgY2FtbF9jdXJyZW50X2RpciwgY2FtbF9mYWlsd2l0aFxudmFyIGNhbWxfcm9vdCA9XG4gIGNhbWxfZ2V0X3Jvb3QoY2FtbF9jdXJyZW50X2RpcikgfHxcbiAgY2FtbF9mYWlsd2l0aChcInVuYWJsZSB0byBjb21wdXRlIGNhbWxfcm9vdFwiKTtcblxuLy9Qcm92aWRlczogTWxGaWxlXG5mdW5jdGlvbiBNbEZpbGUoKSB7fVxuXG4vL1Byb3ZpZGVzOiBwYXRoX2lzX2Fic29sdXRlXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9SZXF1aXJlczoganNvb19pc193aW4zMlxuZnVuY3Rpb24gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCkge1xuICBmdW5jdGlvbiBwb3NpeChwYXRoKSB7XG4gICAgaWYgKHBhdGguY2hhckF0KDApID09PSBcIi9cIikgcmV0dXJuIFtcIlwiLCBwYXRoLnNsaWNlKDEpXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3aW4zMihwYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcbiAgICB2YXIgc3BsaXREZXZpY2VSZSA9XG4gICAgICAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8IFwiXCI7XG4gICAgdmFyIGlzVW5jID0gZGV2aWNlLmxlbmd0aCA+IDAgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gXCI6XCI7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChyZXN1bHRbMl0gfHwgaXNVbmMpIHtcbiAgICAgIHZhciByb290ID0gcmVzdWx0WzFdIHx8IFwiXCI7XG4gICAgICB2YXIgc2VwID0gcmVzdWx0WzJdIHx8IFwiXCI7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc2xpY2Uocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4ganNvb19pc193aW4zMiA/IHdpbjMyIDogcG9zaXg7XG59XG52YXIgcGF0aF9pc19hYnNvbHV0ZSA9IG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfcGF0aFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfbWFrZV9wYXRoKG5hbWUpIHtcbiAgbmFtZSA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZiAoIXBhdGhfaXNfYWJzb2x1dGUobmFtZSkpIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAwID0gcGF0aF9pc19hYnNvbHV0ZShuYW1lKTtcbiAgdmFyIGNvbXAgPSBjb21wMFsxXS5zcGxpdCgvWy9cXFxcXS8pO1xuICB2YXIgbmNvbXAgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aDsgaSsrKSB7XG4gICAgc3dpdGNoIChjb21wW2ldKSB7XG4gICAgICBjYXNlIFwiLi5cIjpcbiAgICAgICAgbmNvbXAucG9wKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIi5cIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiXCI6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbmNvbXAucHVzaChjb21wW2ldKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdO1xuaWYgKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgICBwYXRoOiBjYW1sX3Jvb3QsXG4gICAgZGV2aWNlOiBuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCksXG4gIH0pO1xufSBlbHNlIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgICBwYXRoOiBjYW1sX3Jvb3QsXG4gICAgZGV2aWNlOiBuZXcgTWxGYWtlRGV2aWNlKGNhbWxfcm9vdCksXG4gIH0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgcGF0aDogXCIvc3RhdGljL1wiLFxuICBkZXZpY2U6IG5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKSxcbn0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGlzdF9tb3VudF9wb2ludCgpIHtcbiAgdmFyIHByZXYgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgb2xkID0gcHJldjtcbiAgICBwcmV2ID0gWzAsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF07XG4gIH1cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8vUHJvdmlkZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2V0X3Jvb3QsIE1sTm9kZURldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpIHtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSk7XG4gIHZhciByZXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtID0ganNvb19tb3VudF9wb2ludFtpXTtcbiAgICBpZiAoXG4gICAgICBuYW1lX3NsYXNoLnNlYXJjaChtLnBhdGgpID09PSAwICYmXG4gICAgICAoIXJlcyB8fCByZXMucGF0aC5sZW5ndGggPCBtLnBhdGgubGVuZ3RoKVxuICAgIClcbiAgICAgIHJlcyA9IHtcbiAgICAgICAgcGF0aDogbS5wYXRoLFxuICAgICAgICBkZXZpY2U6IG0uZGV2aWNlLFxuICAgICAgICByZXN0OiBuYW1lLnNsaWNlKG0ucGF0aC5sZW5ndGgsIG5hbWUubGVuZ3RoKSxcbiAgICAgIH07XG4gIH1cbiAgaWYgKCFyZXMgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdD8ubWF0Y2goL15bYS16QS1aXTpcXC8kLykpIHtcbiAgICAgIHZhciBtID0geyBwYXRoOiByb290LCBkZXZpY2U6IG5ldyBNbE5vZGVEZXZpY2Uocm9vdCkgfTtcbiAgICAgIGpzb29fbW91bnRfcG9pbnQucHVzaChtKTtcbiAgICAgIHJlcyA9IHtcbiAgICAgICAgcGF0aDogbS5wYXRoLFxuICAgICAgICBkZXZpY2U6IG0uZGV2aWNlLFxuICAgICAgICByZXN0OiBuYW1lLnNsaWNlKG0ucGF0aC5sZW5ndGgsIG5hbWUubGVuZ3RoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChyZXMpIHJldHVybiByZXM7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwibm8gZGV2aWNlIGZvdW5kIGZvciBcIiArIG5hbWVfc2xhc2gpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vdW50X2F1dG9sb2FkXG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX21vdW50X2F1dG9sb2FkKG5hbWUsIGYpIHtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goeyBwYXRoOiBuYW1lLCBkZXZpY2U6IG5ldyBNbEZha2VEZXZpY2UobmFtZSwgZikgfSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VubW91bnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfbWFrZV9wYXRoLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3VubW91bnQobmFtZSkge1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIHZhciBpZHggPSAtMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmIChqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT09IG5hbWUpIGlkeCA9IGk7XG4gIGlmIChpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LCAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGN3ZFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vQWxpYXM6IGNhbWxfdW5peF9nZXRjd2Rcbi8vQWxpYXM6IHVuaXhfZ2V0Y3dkXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjYW1sX2N1cnJlbnRfZGlyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2hkaXJcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZiAocm9vdC5kZXZpY2UuaXNfZGlyKHJvb3QucmVzdCkpIHtcbiAgICBpZiAocm9vdC5yZXN0KVxuICAgICAgY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocm9vdC5wYXRoICsgcm9vdC5yZXN0KTtcbiAgICBlbHNlIGNhbWxfY3VycmVudF9kaXIgPSByb290LnBhdGg7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgIHJhaXNlX3VuaXgsXG4gICAgICBcIkVOT1RESVJcIixcbiAgICAgIFwiY2hkaXJcIixcbiAgICAgIFwibm90IGEgZGlyZWN0b3J5XCIsXG4gICAgICBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhkaXIpLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoZGlyKSwgcmFpc2VfdW5peCk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lLCByYWlzZV91bml4KSB7XG4gIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgIHJhaXNlX3VuaXgsXG4gICAgXCJFTk9FTlRcIixcbiAgICBcIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIixcbiAgICBuYW1lLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeShuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSBsW2kgKyAxXSA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGFbaV0pO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVtb3ZlXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVtb3ZlKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19kaXJlY3RvcnkobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLmlzX2Rpcihyb290LnJlc3QpO1xuICByZXR1cm4gYSA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobywgbikge1xuICB2YXIgb19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobyk7XG4gIHZhciBuX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuKTtcbiAgaWYgKG9fcm9vdC5kZXZpY2UgIT09IG5fcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogY2Fubm90IG1vdmUgZmlsZSBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtXCIpO1xuICBpZiAoIW9fcm9vdC5kZXZpY2UucmVuYW1lKSBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIG9fcm9vdC5kZXZpY2UucmVuYW1lKG9fcm9vdC5yZXN0LCBuX3Jvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfbWtkaXIobmFtZSwgcGVybSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19ybWRpcihuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKF92ZmQsIF9raW5kLCBfbGF5b3V0LCBfc2hhcmVkLCBfZGltcywgX3Bvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfc3lzX2Zkc1t2ZmRdO1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9iYV9tYXBfZmlsZSBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGUoYXJndiwgX2FyZ24pIHtcbiAgLy8gYXJnbiA9PT0gNlxuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLCBhcmd2WzFdLCBhcmd2WzJdLCBhcmd2WzNdLCBhcmd2WzRdLCBhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsIGNvbnRlbnQpIHtcbiAgaWYgKGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSkgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpO1xuICBlbHNlIHtcbiAgICBpZiAoIWdsb2JhbFRoaXMuanNvb19mc190bXApIGdsb2JhbFRoaXMuanNvb19mc190bXAgPSBbXTtcbiAgICBnbG9iYWxUaGlzLmpzb29fZnNfdG1wLnB1c2goeyBuYW1lOiBuYW1lLCBjb250ZW50OiBjb250ZW50IH0pO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZzX2luaXRcbi8vUmVxdWlyZXM6IGpzb29fY3JlYXRlX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfZnNfaW5pdCgpIHtcbiAgdmFyIHRtcCA9IGdsb2JhbFRoaXMuanNvb19mc190bXA7XG4gIGlmICh0bXApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRtcC5sZW5ndGg7IGkrKykge1xuICAgICAganNvb19jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSwgdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmpzb29fZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVnaXN0ZXIpIGNhbWxfZmFpbHdpdGgoXCJjYW5ub3QgcmVnaXN0ZXIgZmlsZVwiKTtcbiAgcm9vdC5kZXZpY2UucmVnaXN0ZXIocm9vdC5yZXN0LCBjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpIHtcbiAgdmFyIG5hbWUgPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWFkX2ZpbGVfY29udGVudFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50KG5hbWUpIHtcbiAgdmFyIG5hbWUgPSB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiA/IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG5hbWUpIDogbmFtZTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCwgeyByZG9ubHk6IDEgfSk7XG4gICAgdmFyIGxlbiA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgZmlsZS5yZWFkKGJ1ZiwgMCwgbGVuLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGJ1Zik7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSkpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBNbEZha2VGZCwgY2FtbF9jcmVhdGVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXksIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuY2xhc3MgTWxGYWtlRGV2aWNlIHtcbiAgY29uc3RydWN0b3Iocm9vdCwgZikge1xuICAgIHRoaXMuY29udGVudCA9IHt9O1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5sb29rdXBGdW4gPSBmO1xuICB9XG5cbiAgbm0obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJvb3QgKyBuYW1lO1xuICB9XG5cbiAgY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSkge1xuICAgIHZhciBjb21wID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgcmVzICs9IGNvbXBbaV0gKyBcIi9cIjtcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRbcmVzXSkgY29udGludWU7XG4gICAgICB0aGlzLmNvbnRlbnRbcmVzXSA9IFN5bWJvbChcImRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cblxuICBzbGFzaChuYW1lKSB7XG4gICAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpID8gbmFtZSA6IG5hbWUgKyBcIi9cIjtcbiAgfVxuXG4gIGxvb2t1cChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRbbmFtZV0gJiYgdGhpcy5sb29rdXBGdW4pIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmxvb2t1cEZ1bihcbiAgICAgICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcodGhpcy5yb290KSxcbiAgICAgICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobmFtZSksXG4gICAgICApO1xuICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhyZXNbMV0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleGlzdHMobmFtZSwgZG9fbm90X2xvb2t1cCkge1xuICAgIC8vIFRoZSByb290IG9mIHRoZSBkZXZpY2UgZXhpc3RzXG4gICAgaWYgKG5hbWUgPT09IFwiXCIpIHJldHVybiAxO1xuICAgIC8vIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICAgIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgICBpZiAodGhpcy5jb250ZW50W25hbWVfc2xhc2hdKSByZXR1cm4gMTtcbiAgICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gICAgaWYgKCFkb19ub3RfbG9va3VwKSB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdID8gMSA6IDA7XG4gIH1cblxuICBpc0ZpbGUobmFtZSkge1xuICAgIGlmICh0aGlzLmV4aXN0cyhuYW1lKSAmJiAhdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZW5hbWVfZGlyKG9sZG5hbWUsIG5ld25hbWUpIHtcbiAgICBpZiAodGhpcy5leGlzdHMobmV3bmFtZSkpIHtcbiAgICAgIGlmICghdGhpcy5pc19kaXIobmV3bmFtZSkpIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgICAgdGhpcy5ubShuZXduYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5XCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZWFkZGlyKG5ld25hbWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuZXduYW1lKSArIFwiIDogZGlyZWN0b3J5IG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG9sZF9zbGFzaCA9IHRoaXMuc2xhc2gob2xkbmFtZSk7XG4gICAgdmFyIG5ld19zbGFzaCA9IHRoaXMuc2xhc2gobmV3bmFtZSk7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuZXdfc2xhc2gpO1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLnJlYWRkaXIob2xkbmFtZSkpIHtcbiAgICAgIHRoaXMucmVuYW1lKG9sZF9zbGFzaCArIGYsIG5ld19zbGFzaCArIGYpO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5jb250ZW50W29sZF9zbGFzaF07XG4gIH1cblxuICByZW5hbWUob2xkbmFtZSwgbmV3bmFtZSkge1xuICAgIGlmICghdGhpcy5leGlzdHMob2xkbmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG9sZG5hbWUpICsgXCIgOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIGlmICh0aGlzLmlzX2RpcihvbGRuYW1lKSkge1xuICAgICAgdGhpcy5yZW5hbWVfZGlyKG9sZG5hbWUsIG5ld25hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5leGlzdHMobmV3bmFtZSkgJiYgdGhpcy5pc19kaXIobmV3bmFtZSkpIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgICAgdGhpcy5ubShuZXduYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFtuZXduYW1lXSA9IHRoaXMuY29udGVudFtvbGRuYW1lXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbb2xkbmFtZV07XG4gICAgfVxuICB9XG5cbiAgbWtkaXIobmFtZSwgX21vZGUsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5leGlzdHMobmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFRVhJU1RcIixcbiAgICAgICAgXCJta2RpclwiLFxuICAgICAgICBcImZpbGUgYWxyZWFkeSBleGlzdHNcIixcbiAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICk7XG4gICAgdmFyIHBhcmVudCA9IC9eKC4qKVxcL1teL10rLy5leGVjKG5hbWUpO1xuICAgIHBhcmVudCA9IHBhcmVudD8uWzFdIHx8IFwiXCI7XG4gICAgaWYgKCF0aGlzLmV4aXN0cyhwYXJlbnQpKVxuICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgIFwiRU5PRU5UXCIsXG4gICAgICAgIFwibWtkaXJcIixcbiAgICAgICAgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsXG4gICAgICAgIHRoaXMubm0obmFtZSksXG4gICAgICApO1xuICAgIGlmICghdGhpcy5pc19kaXIocGFyZW50KSlcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICByYWlzZV91bml4LFxuICAgICAgICBcIkVOT1RESVJcIixcbiAgICAgICAgXCJta2RpclwiLFxuICAgICAgICBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgKTtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKHRoaXMuc2xhc2gobmFtZSkpO1xuICB9XG5cbiAgcm1kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHZhciBuYW1lX3NsYXNoID0gbmFtZSA9PT0gXCJcIiA/IFwiXCIgOiB0aGlzLnNsYXNoKG5hbWUpO1xuICAgIGlmICghdGhpcy5leGlzdHMobmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgXCJybWRpclwiLFxuICAgICAgICBcIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIixcbiAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICk7XG4gICAgaWYgKCF0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICByYWlzZV91bml4LFxuICAgICAgICBcIkVOT1RESVJcIixcbiAgICAgICAgXCJybWRpclwiLFxuICAgICAgICBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgKTtcbiAgICBmb3IgKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgICAgaWYgKG4uc3RhcnRzV2l0aChuYW1lX3NsYXNoKSAmJiBuICE9PSBuYW1lX3NsYXNoKVxuICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICByYWlzZV91bml4LFxuICAgICAgICAgIFwiRU5PVEVNUFRZXCIsXG4gICAgICAgICAgXCJybWRpclwiLFxuICAgICAgICAgIFwiZGlyZWN0b3J5IG5vdCBlbXB0eVwiLFxuICAgICAgICAgIHRoaXMubm0obmFtZSksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF07XG4gIH1cblxuICByZWFkZGlyKG5hbWUpIHtcbiAgICB2YXIgbmFtZV9zbGFzaCA9IG5hbWUgPT09IFwiXCIgPyBcIlwiIDogdGhpcy5zbGFzaChuYW1lKTtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgICB2YXIgc2VlbiA9IHt9O1xuICAgIHZhciBhID0gW107XG4gICAgZm9yICh2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGlmIChuLnN0YXJ0c1dpdGgobmFtZV9zbGFzaCkgJiYgbiAhPT0gbmFtZV9zbGFzaCkge1xuICAgICAgICB2YXIgbGFzdCA9IG4uaW5kZXhPZihcIi9cIiwgbmFtZV9zbGFzaC5sZW5ndGgpO1xuICAgICAgICBpZiAobGFzdCA8IDApIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBtID0gbi5zbGljZShuYW1lX3NsYXNoLmxlbmd0aCwgbGFzdCk7XG4gICAgICAgIGlmIChtICYmICFzZWVuW21dKSB7XG4gICAgICAgICAgc2VlblttXSA9IHRydWU7XG4gICAgICAgICAgYS5wdXNoKG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgb3BlbmRpcihuYW1lLCByYWlzZV91bml4KSB7XG4gICAgdmFyIGEgPSB0aGlzLnJlYWRkaXIobmFtZSk7XG4gICAgdmFyIGMgPSBmYWxzZTtcbiAgICB2YXIgaSA9IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYWRTeW5jOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjKVxuICAgICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICAgIFwiRUJBREZcIixcbiAgICAgICAgICAgIFwicmVhZGRpclwiLFxuICAgICAgICAgICAgXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGkgPT09IGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGVudHJ5ID0gYVtpXTtcbiAgICAgICAgaSsrO1xuICAgICAgICByZXR1cm4geyBuYW1lOiBlbnRyeSB9O1xuICAgICAgfSxcbiAgICAgIGNsb3NlU3luYzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoYylcbiAgICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgICBcIkVCQURGXCIsXG4gICAgICAgICAgICBcInJlYWRkaXJcIixcbiAgICAgICAgICAgIFwiYmFkIGZpbGUgZGVzY3JpcHRvclwiLFxuICAgICAgICAgICk7XG4gICAgICAgIGMgPSB0cnVlO1xuICAgICAgICBhID0gW107XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpc19kaXIobmFtZSkge1xuICAgIGlmIChuYW1lID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXSA/IDEgOiAwO1xuICB9XG5cbiAgdW5saW5rKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKG5hbWUsIHRydWUpKSB7XG4gICAgICAvLyBbdHJ1ZV0gbWVhbnMgbm8gXCJsb29rdXBcIiBpZiBub3QgZm91bmQuXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgXCJ1bmxpbmtcIixcbiAgICAgICAgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsXG4gICAgICAgIG5hbWUsXG4gICAgICApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVdO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgYWNjZXNzKG5hbWUsIF9mbGFncywgcmFpc2VfdW5peCkge1xuICAgIHRoaXMubG9va3VwKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICBcIkVBQ0NFU1NcIixcbiAgICAgICAgICBcImFjY2Vzc1wiLFxuICAgICAgICAgIFwicGVybWlzc2lvbiBkZW5pZWQsXCIsXG4gICAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUodGhpcy5ubShuYW1lKSwgcmFpc2VfdW5peCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgb3BlbihuYW1lLCBmLCBfcGVybXMsIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgZmlsZTtcbiAgICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpXG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgXCJFSVNESVJcIixcbiAgICAgICAgICBcIm9wZW5cIixcbiAgICAgICAgICBcImlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5XCIsXG4gICAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICAgKTtcbiAgICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpXG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgXCJFRVhJU1RcIixcbiAgICAgICAgICBcIm9wZW5cIixcbiAgICAgICAgICBcImZpbGUgYWxyZWFkeSBleGlzdHNcIixcbiAgICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICAgIGlmIChmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKDApO1xuICAgIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSh0aGlzLm5tKG5hbWUpLCByYWlzZV91bml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbiAgfVxuXG4gIHRydW5jYXRlKG5hbWUsIGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHZhciBmaWxlO1xuICAgIHRoaXMubG9va3VwKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICBcIkVJU0RJUlwiLFxuICAgICAgICAgIFwib3BlblwiLFxuICAgICAgICAgIFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIixcbiAgICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICAgIGZpbGUudHJ1bmNhdGUobGVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUodGhpcy5ubShuYW1lKSwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXIobmFtZSwgY29udGVudCkge1xuICAgIHZhciBmaWxlO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pXG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGlmIChjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKSBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY29udGVudCk7XG4gICAgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGNvbnRlbnQpKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gICAgZWxzZSBpZiAoY29udGVudC50b1N0cmluZykge1xuICAgICAgdmFyIGJ5dGVzID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoXG4gICAgICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSksXG4gICAgICApO1xuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGJ5dGVzKTtcbiAgICB9XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICAgIH0gZWxzZVxuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgIHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiLFxuICAgICAgKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XG5jbGFzcyBNbEZha2VGaWxlIGV4dGVuZHMgTWxGaWxlIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kYXRhID0gY29udGVudDtcbiAgfVxuXG4gIHRydW5jYXRlKGxlbikge1xuICAgIHZhciBvbGQgPSB0aGlzLmRhdGE7XG4gICAgdmFyIG9sZF9sZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aChvbGQpO1xuICAgIHRoaXMuZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbiB8IDApO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGQsIDAsIHRoaXMuZGF0YSwgMCwgTWF0aC5taW4obGVuLCBvbGRfbGVuKSk7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHRoaXMuZGF0YSk7XG4gIH1cblxuICB3cml0ZShvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gICAgaWYgKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgICB2YXIgbmV3X3N0ciA9IGNhbWxfY3JlYXRlX2J5dGVzKG9mZnNldCArIGxlbik7XG4gICAgICB2YXIgb2xkX2RhdGEgPSB0aGlzLmRhdGE7XG4gICAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgICAgY2FtbF9ibGl0X2J5dGVzKG9sZF9kYXRhLCAwLCB0aGlzLmRhdGEsIDAsIGNsZW4pO1xuICAgIH1cbiAgICBjYW1sX2JsaXRfYnl0ZXMoXG4gICAgICBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5KGJ1ZiksXG4gICAgICBwb3MsXG4gICAgICB0aGlzLmRhdGEsXG4gICAgICBvZmZzZXQsXG4gICAgICBsZW4sXG4gICAgKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG5cbiAgcmVhZChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gICAgaWYgKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgICBsZW4gPSBjbGVuIC0gb2Zmc2V0O1xuICAgIH1cbiAgICBpZiAobGVuID4gMCkge1xuICAgICAgdmFyIGRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4gfCAwKTtcbiAgICAgIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgZGF0YSwgMCwgbGVuKTtcbiAgICAgIGJ1Zi5zZXQoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhkYXRhKSwgcG9zKTtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3JcbmNsYXNzIE1sRmFrZUZkX291dCBleHRlbmRzIE1sRmFrZUZpbGUge1xuICBjb25zdHJ1Y3RvcihmZCwgZmxhZ3MpIHtcbiAgICBzdXBlcihjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgdGhpcy5sb2cgPSBmdW5jdGlvbiAoX3MpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH07XG4gICAgaWYgKGZkID09PSAxICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmxvZyA9IGNvbnNvbGUubG9nO1xuICAgIGVsc2UgaWYgKGZkID09PSAyICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICB0aGlzLmxvZyA9IGNvbnNvbGUuZXJyb3I7XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbnNvbGUubG9nID09PSBcImZ1bmN0aW9uXCIpIHRoaXMubG9nID0gY29uc29sZS5sb2c7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdHJ1bmNhdGUoX2xlbiwgcmFpc2VfdW5peCkge1xuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgcmFpc2VfdW5peCxcbiAgICAgIFwiRUlOVkFMXCIsXG4gICAgICBcImZ0cnVuY2F0ZVwiLFxuICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgKTtcbiAgfVxuXG4gIHdyaXRlKGJ1ZiwgcG9zLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgd3JpdHRlbiA9IGxlbjtcbiAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGVuID4gMCAmJlxuICAgICAgICBwb3MgPj0gMCAmJlxuICAgICAgICBwb3MgKyBsZW4gPD0gYnVmLmxlbmd0aCAmJlxuICAgICAgICBidWZbcG9zICsgbGVuIC0gMV0gPT09IDEwXG4gICAgICApXG4gICAgICAgIGxlbi0tO1xuICAgICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICAgIHZhciBzcmMgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgICAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYnVmKSwgcG9zLCBzcmMsIDAsIGxlbik7XG4gICAgICB0aGlzLmxvZyhzcmMudG9VdGYxNigpKTtcbiAgICAgIHJldHVybiB3cml0dGVuO1xuICAgIH1cbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgIHJhaXNlX3VuaXgsXG4gICAgICBcIkVCQURGXCIsXG4gICAgICBcIndyaXRlXCIsXG4gICAgICBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIixcbiAgICApO1xuICB9XG5cbiAgcmVhZChfYnVmLCBfcG9zLCBfbGVuLCByYWlzZV91bml4KSB7XG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IocmFpc2VfdW5peCwgXCJFQkFERlwiLCBcInJlYWRcIiwgXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCIpO1xuICB9XG5cbiAgc2VlayhfbGVuLCBfd2hlbmNlLCByYWlzZV91bml4KSB7XG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IocmFpc2VfdW5peCwgXCJFU1BJUEVcIiwgXCJsc2Vla1wiLCBcImlsbGVnYWwgc2Vla1wiKTtcbiAgfVxuICBwb3MoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5sb2cgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGVja19zdHJlYW1fc2VtYW50aWNzKF9jbWQpIHt9XG59XG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuY2xhc3MgTWxGYWtlRmQge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBmaWxlLCBmbGFncykge1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgIHRoaXMuc2Vla2VkID0gZmFsc2U7XG4gIH1cblxuICBlcnJfY2xvc2VkKGNtZCwgcmFpc2VfdW5peCkge1xuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKHJhaXNlX3VuaXgsIFwiRUJBREZcIiwgY21kLCBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIik7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgaWYgKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5sZW5ndGgoKTtcbiAgICB0aGlzLmVycl9jbG9zZWQoXCJsZW5ndGhcIik7XG4gIH1cblxuICB0cnVuY2F0ZShsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICBpZiAoISh0aGlzLmZsYWdzLndyb25seSB8fCB0aGlzLmZsYWdzLnJkd3IpKVxuICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICByYWlzZV91bml4LFxuICAgICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgICAgXCJ0cnVuY2F0ZVwiLFxuICAgICAgICAgIFwiaW52YWxpZCBhcmd1bWVudFwiLFxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZS50cnVuY2F0ZShsZW4pO1xuICAgIH1cbiAgICB0aGlzLmVycl9jbG9zZWQoXCJ0cnVuY2F0ZVwiLCByYWlzZV91bml4KTtcbiAgfVxuXG4gIHdyaXRlKGJ1ZiwgcG9zLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5maWxlICYmICh0aGlzLmZsYWdzLndyb25seSB8fCB0aGlzLmZsYWdzLnJkd3IpKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICBsZW4gPSB0aGlzLmZpbGUud3JpdGUob2Zmc2V0LCBidWYsIHBvcywgbGVuKTtcbiAgICAgIHRoaXMub2Zmc2V0ICs9IGxlbjtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIHRoaXMuZXJyX2Nsb3NlZChcIndyaXRlXCIsIHJhaXNlX3VuaXgpO1xuICB9XG5cbiAgcmVhZChidWYsIHBvcywgbGVuLCByYWlzZV91bml4KSB7XG4gICAgaWYgKHRoaXMuZmlsZSAmJiAhdGhpcy5mbGFncy53cm9ubHkpIHtcbiAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICAgIGxlbiA9IHRoaXMuZmlsZS5yZWFkKG9mZnNldCwgYnVmLCBwb3MsIGxlbik7XG4gICAgICB0aGlzLm9mZnNldCArPSBsZW47XG4gICAgICByZXR1cm4gbGVuO1xuICAgIH1cbiAgICB0aGlzLmVycl9jbG9zZWQoXCJyZWFkXCIsIHJhaXNlX3VuaXgpO1xuICB9XG5cbiAgc2VlayhvZmZzZXQsIHdoZW5jZSwgcmFpc2VfdW5peCkge1xuICAgIHN3aXRjaCAod2hlbmNlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKVxuICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgIFwibHNlZWtcIixcbiAgICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgICApO1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuc2Vla2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcG9zKCkge1xuICAgIHJldHVybiB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICghdGhpcy5maWxlKSB0aGlzLmVycl9jbG9zZWQoXCJjbG9zZVwiKTtcbiAgICB0aGlzLmZpbGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGVja19zdHJlYW1fc2VtYW50aWNzKGNtZCkge1xuICAgIGlmICghdGhpcy5maWxlKSByZXR1cm4gdGhpcy5lcnJfY2xvc2VkKGNtZCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuY2xhc3MgTWxJbnQ2NCB7XG4gIGNvbnN0cnVjdG9yKGxvLCBtaSwgaGkpIHtcbiAgICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgICB0aGlzLm1pID0gbWkgJiAweGZmZmZmZjtcbiAgICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG4gICAgdGhpcy5jYW1sX2N1c3RvbSA9IFwiX2pcIjtcbiAgfVxuXG4gIHN0YXRpYyBVTlNJR05FRF9NQVggPSBuZXcgTWxJbnQ2NCgweGZmZmZmZiwgMHhmZmZmZmYsIDB4ZmZmZik7XG4gIHN0YXRpYyBTSUdORURfTUFYID0gbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmLCAweDdmZmYpO1xuICBzdGF0aWMgU0lHTkVEX01JTiA9IG5ldyBNbEludDY0KDB4MDAwMDAwLCAweDAwMDAwMCwgMHg4MDAwKTtcblxuICBzbGljZSgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbywgdGhpcy5taSwgdGhpcy5oaSk7XG4gIH1cblxuICB1Y29tcGFyZSh4KSB7XG4gICAgaWYgKHRoaXMuaGkgPiB4LmhpKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICAgIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gICAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb21wYXJlKHgpIHtcbiAgICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICAgIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICAgIGlmIChoaSA+IHhoaSkgcmV0dXJuIDE7XG4gICAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICAgIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgbmVnKCkge1xuICAgIHZhciBsbyA9IC10aGlzLmxvO1xuICAgIHZhciBtaSA9IC10aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgICB2YXIgaGkgPSAtdGhpcy5oaSArIChtaSA+PiAyNCk7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xuICB9XG5cbiAgYWRkKHgpIHtcbiAgICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgICB2YXIgbWkgPSB0aGlzLm1pICsgeC5taSArIChsbyA+PiAyNCk7XG4gICAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbiAgfVxuXG4gIHN1Yih4KSB7XG4gICAgdmFyIGxvID0gdGhpcy5sbyAtIHgubG87XG4gICAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICAgIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG4gIH1cblxuICBtdWwoeCkge1xuICAgIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICAgIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gICAgdmFyIGhpID1cbiAgICAgICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArXG4gICAgICB0aGlzLmhpICogeC5sbyArXG4gICAgICB0aGlzLm1pICogeC5taSArXG4gICAgICB0aGlzLmxvICogeC5oaTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG4gIH1cblxuICBpc1plcm8oKSB7XG4gICAgcmV0dXJuICh0aGlzLmxvIHwgdGhpcy5taSB8IHRoaXMuaGkpID09PSAwO1xuICB9XG5cbiAgaXNOZWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGkgPDwgMTYgPCAwO1xuICB9XG5cbiAgYW5kKHgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyAmIHgubG8sIHRoaXMubWkgJiB4Lm1pLCB0aGlzLmhpICYgeC5oaSk7XG4gIH1cblxuICBvcih4KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gfCB4LmxvLCB0aGlzLm1pIHwgeC5taSwgdGhpcy5oaSB8IHguaGkpO1xuICB9XG5cbiAgeG9yKHgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyBeIHgubG8sIHRoaXMubWkgXiB4Lm1pLCB0aGlzLmhpIF4geC5oaSk7XG4gIH1cblxuICBzaGlmdF9sZWZ0KHMpIHtcbiAgICBzID0gcyAmIDYzO1xuICAgIGlmIChzID09PSAwKSByZXR1cm4gdGhpcztcbiAgICBpZiAocyA8IDI0KSB7XG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgIHRoaXMubG8gPDwgcyxcbiAgICAgICAgKHRoaXMubWkgPDwgcykgfCAodGhpcy5sbyA+PiAoMjQgLSBzKSksXG4gICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHMgPCA0OClcbiAgICAgIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgKHRoaXMubWkgPDwgKHMgLSAyNCkpIHwgKHRoaXMubG8gPj4gKDQ4IC0gcykpLFxuICAgICAgKTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSk7XG4gIH1cblxuICBzaGlmdF9yaWdodF91bnNpZ25lZChzKSB7XG4gICAgcyA9IHMgJiA2MztcbiAgICBpZiAocyA9PT0gMCkgcmV0dXJuIHRoaXM7XG4gICAgaWYgKHMgPCAyNClcbiAgICAgIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAgICh0aGlzLm1pID4+IHMpIHwgKHRoaXMuaGkgPDwgKDI0IC0gcykpLFxuICAgICAgICB0aGlzLmhpID4+IHMsXG4gICAgICApO1xuICAgIGlmIChzIDwgNDgpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICAgdGhpcy5oaSA+PiAocyAtIDI0KSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xuICB9XG5cbiAgc2hpZnRfcmlnaHQocykge1xuICAgIHMgPSBzICYgNjM7XG4gICAgaWYgKHMgPT09IDApIHJldHVybiB0aGlzO1xuICAgIHZhciBoID0gKHRoaXMuaGkgPDwgMTYpID4+IDE2O1xuICAgIGlmIChzIDwgMjQpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiBzKSA+Pj4gMTYsXG4gICAgICApO1xuICAgIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICAgIGlmIChzIDwgNDgpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSkgPj4gMTYsXG4gICAgICAgIHNpZ24gJiAweGZmZmYsXG4gICAgICApO1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NCgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xuICB9XG5cbiAgbHNsMSgpIHtcbiAgICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gICAgdGhpcy5taSA9ICgodGhpcy5taSA8PCAxKSB8ICh0aGlzLmxvID4+IDIzKSkgJiAweGZmZmZmZjtcbiAgICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbiAgfVxuXG4gIGxzcjEoKSB7XG4gICAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gICAgdGhpcy5taSA9ICgodGhpcy5taSA+Pj4gMSkgfCAodGhpcy5oaSA8PCAyMykpICYgMHhmZmZmZmY7XG4gICAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG4gIH1cblxuICB1ZGl2bW9kKHgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgbW9kdWx1cyA9IHRoaXMuc2xpY2UoKTtcbiAgICB2YXIgZGl2aXNvciA9IHguc2xpY2UoKTtcbiAgICB2YXIgcXVvdGllbnQgPSBuZXcgTWxJbnQ2NCgwLCAwLCAwKTtcbiAgICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICAgIG9mZnNldCsrO1xuICAgICAgZGl2aXNvci5sc2wxKCk7XG4gICAgfVxuICAgIHdoaWxlIChvZmZzZXQgPj0gMCkge1xuICAgICAgb2Zmc2V0LS07XG4gICAgICBxdW90aWVudC5sc2wxKCk7XG4gICAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICAgIHF1b3RpZW50LmxvKys7XG4gICAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICAgIH1cbiAgICAgIGRpdmlzb3IubHNyMSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBxdW90aWVudDogcXVvdGllbnQsIG1vZHVsdXM6IG1vZHVsdXMgfTtcbiAgfVxuXG4gIGRpdih5KSB7XG4gICAgdmFyIHggPSB0aGlzO1xuICAgIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCk7XG4gICAgdmFyIHNpZ24gPSB4LmhpIF4geS5oaTtcbiAgICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gICAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICAgIHZhciBxID0geC51ZGl2bW9kKHkpLnF1b3RpZW50O1xuICAgIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIG1vZCh5KSB7XG4gICAgdmFyIHggPSB0aGlzO1xuICAgIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCk7XG4gICAgdmFyIHNpZ24gPSB4LmhpO1xuICAgIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gICAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICB0b0ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbiAgfVxuXG4gIHRvRmxvYXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmhpIDw8IDE2KSAqIE1hdGgucG93KDIsIDMyKSArIHRoaXMubWkgKiBNYXRoLnBvdygyLCAyNCkgKyB0aGlzLmxvXG4gICAgKTtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuaGkgPj4gOCxcbiAgICAgIHRoaXMuaGkgJiAweGZmLFxuICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgIHRoaXMubWkgJiAweGZmLFxuICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgIHRoaXMubG8gJiAweGZmLFxuICAgIF07XG4gIH1cblxuICBsbzMyKCkge1xuICAgIHJldHVybiB0aGlzLmxvIHwgKCh0aGlzLm1pICYgMHhmZikgPDwgMjQpO1xuICB9XG5cbiAgaGkzMigpIHtcbiAgICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgsIHkpIHtcbiAgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY29tcGFyZSh4LCB5LCBfdG90YWwpIHtcbiAgcmV0dXJuIHguY29tcGFyZSh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnKHgpIHtcbiAgcmV0dXJuIHgubmVnKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCh4LCB5KSB7XG4gIHJldHVybiB4LmFkZCh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zdWIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc3ViKHgsIHkpIHtcbiAgcmV0dXJuIHguc3ViKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgsIHkpIHtcbiAgcmV0dXJuIHgubXVsKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7XG4gIHJldHVybiAreC5pc1plcm8oKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7XG4gIHJldHVybiAreC5pc05lZygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FuZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hbmQoeCwgeSkge1xuICByZXR1cm4geC5hbmQoeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb3IoeCwgeSkge1xuICByZXR1cm4geC5vcih5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF94b3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfeG9yKHgsIHkpIHtcbiAgcmV0dXJuIHgueG9yKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCh4LCBzKSB7XG4gIHJldHVybiB4LnNoaWZ0X2xlZnQocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQoeCwgcykge1xuICByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCh4LCBzKSB7XG4gIHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdlxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYoeCwgeSkge1xuICByZXR1cm4geC5kaXYoeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kXG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCh4LCB5KSB7XG4gIHJldHVybiB4Lm1vZCh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuLy9BbGlhczogY2FtbF9pbnQ2NF9vZl9pbnRcbi8vQWxpYXM6IGNhbWxfaW50NjRfb2ZfbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50NjRfdG9faW50XG4vL0FsaWFzOiBjYW1sX2ludDY0X3RvX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMih4KSB7XG4gIHJldHVybiB4LnRvSW50KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQoeCkge1xuICByZXR1cm4geC50b0Zsb2F0KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0KHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zvcm1hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3RvX2ludDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX3plcm8sIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mb3JtYXQoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7XG4gICAgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghY2FtbF9pbnQ2NF9pc196ZXJvKHgpKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSBcIiBcIjtcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQobiwgXCIwXCIpICsgYnVmZmVyO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIGJ1ZmZlcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcGFyc2VfZGlnaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdWx0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9tdWwsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9zdHJpbmcocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZShzKTtcbiAgdmFyIGkgPSByWzBdLFxuICAgIHNpZ24gPSByWzFdLFxuICAgIGJhc2UgPSByWzJdLFxuICAgIHNpZ25lZG5lc3MgPSByWzNdO1xuICB2YXIgYmFzZTY0ID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihiYXNlKTtcbiAgdmFyIHRocmVzaG9sZCA9IE1sSW50NjQuVU5TSUdORURfTUFYLnVkaXZtb2QoYmFzZTY0KS5xdW90aWVudDtcbiAgdmFyIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJJbnQ2NC5vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIGJhc2UgKiByZXMgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQodGhyZXNob2xkLCByZXMpKSBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcIkludDY0Lm9mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICBpZiAoXG4gICAgc2lnbmVkbmVzcyAmJlxuICAgIGNhbWxfaW50NjRfdWx0KHNpZ24gPCAwID8gTWxJbnQ2NC5TSUdORURfTUlOIDogTWxJbnQ2NC5TSUdORURfTUFYLCByZXMpXG4gIClcbiAgICBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsbywgaGkpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIGxvICYgMHhmZmZmZmYsXG4gICAgKChsbyA+Pj4gMjQpICYgMHhmZikgfCAoKGhpICYgMHhmZmZmKSA8PCA4KSxcbiAgICAoaGkgPj4+IDE2KSAmIDB4ZmZmZixcbiAgKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpIHtcbiAgcmV0dXJuIHYubG8zMigpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KSB7XG4gIHJldHVybiB2LmhpMzIoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAoYVs3XSA8PCAwKSB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgIChhWzRdIDw8IDApIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgKGFbMV0gPDwgMCkgfCAoYVswXSA8PCA4KSxcbiAgKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fYnl0ZXMoeCkge1xuICByZXR1cm4geC50b0FycmF5KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpIHtcbiAgcmV0dXJuIHYubG8zMigpIF4gdi5oaTMyKCk7XG59XG4iLCIvL1Byb3ZpZGVzOiBNbE11dGV4XG5jbGFzcyBNbE11dGV4IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2NrZWQgPSBmYWxzZTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX211dGV4X25ld1xuLy9SZXF1aXJlczogTWxNdXRleFxuZnVuY3Rpb24gY2FtbF9tbF9tdXRleF9uZXcoX3VuaXQpIHtcbiAgcmV0dXJuIG5ldyBNbE11dGV4KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfbXV0ZXhfbG9ja1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9tbF9tdXRleF9sb2NrKHQpIHtcbiAgaWYgKHQubG9ja2VkKSBjYW1sX2ZhaWx3aXRoKFwiTXV0ZXgubG9jazogbXV0ZXggYWxyZWFkeSBsb2NrZWQuIENhbm5vdCB3YWl0LlwiKTtcbiAgZWxzZSB0LmxvY2tlZCA9IHRydWU7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX211dGV4X3RyeV9sb2NrXG5mdW5jdGlvbiBjYW1sX21sX211dGV4X3RyeV9sb2NrKHQpIHtcbiAgaWYgKCF0LmxvY2tlZCkge1xuICAgIHQubG9ja2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9tdXRleF91bmxvY2tcbmZ1bmN0aW9uIGNhbWxfbWxfbXV0ZXhfdW5sb2NrKHQpIHtcbiAgdC5sb2NrZWQgPSBmYWxzZTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvL1Byb3ZpZGVzOiBpbml0aWFsaXplX25hdFxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBzZXJpYWxpemVfbmF0LCBkZXNlcmlhbGl6ZV9uYXQsIGNhbWxfaGFzaF9uYXRcbmZ1bmN0aW9uIGluaXRpYWxpemVfbmF0KCkge1xuICBjYW1sX2N1c3RvbV9vcHMuX25hdCA9IHtcbiAgICBkZXNlcmlhbGl6ZTogZGVzZXJpYWxpemVfbmF0LFxuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplX25hdCxcbiAgICBoYXNoOiBjYW1sX2hhc2hfbmF0LFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5hdFxuY2xhc3MgTWxOYXQge1xuICBjb25zdHJ1Y3Rvcih4KSB7XG4gICAgdGhpcy5kYXRhID0gbmV3IEludDMyQXJyYXkoeCk7XG4gICAgLy8gRm9yIG51bSA8IDEuNVxuICAgIC8vIGxlbmd0aF9uYXQgaXNuJ3QgZXh0ZXJuYWwsIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGUgT2JqLnNpemVcbiAgICAvLyB3b3JrIG91dCByaWdodC5cbiAgICAvLyBXZSBhZGQgKzIgdG8gdGhlIGFycmF5IGxlbmd0aDpcbiAgICAvLyAtICsxIGZvciB0aGUgdGFnXG4gICAgLy8gLSArMSBmb3IgdGhlIGN1c3RvbV9vcHMgc2xvdFxuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aCArIDI7XG4gICAgdGhpcy5jYW1sX2N1c3RvbSA9IFwiX25hdFwiO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY2FtbF9oYXNoX25hdCh4KSB7XG4gIHZhciBsZW4gPSBudW1fZGlnaXRzX25hdCh4LCAwLCB4LmRhdGEubGVuZ3RoKTtcbiAgdmFyIGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHguZGF0YVtpXSk7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGxlbmd0aF9uYXRcbmZ1bmN0aW9uIGxlbmd0aF9uYXQoeCkge1xuICByZXR1cm4geC5kYXRhLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogbmF0X29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gbmF0X29mX2FycmF5KGwpIHtcbiAgcmV0dXJuIG5ldyBNbE5hdChsKTtcbn1cblxuLy9Qcm92aWRlczogY3JlYXRlX25hdFxuLy9SZXF1aXJlczogTWxOYXRcbmZ1bmN0aW9uIGNyZWF0ZV9uYXQoc2l6ZSkge1xuICB2YXIgYXJyID0gbmV3IE1sTmF0KHNpemUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIGFyci5kYXRhW2ldID0gLTE7XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLy9Qcm92aWRlczogc2V0X3RvX3plcm9fbmF0XG5mdW5jdGlvbiBzZXRfdG9femVyb19uYXQobmF0LCBvZnMsIGxlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgbmF0LmRhdGFbb2ZzICsgaV0gPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBibGl0X25hdFxuZnVuY3Rpb24gYmxpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMiwgbGVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBuYXQxLmRhdGFbb2ZzMSArIGldID0gbmF0Mi5kYXRhW29mczIgKyBpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdFxuZnVuY3Rpb24gc2V0X2RpZ2l0X25hdChuYXQsIG9mcywgZGlnaXQpIHtcbiAgbmF0LmRhdGFbb2ZzXSA9IGRpZ2l0O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbnRoX2RpZ2l0X25hdFxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdChuYXQsIG9mcykge1xuICByZXR1cm4gbmF0LmRhdGFbb2ZzXTtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdF9uYXRpdmVcbmZ1bmN0aW9uIHNldF9kaWdpdF9uYXRfbmF0aXZlKG5hdCwgb2ZzLCBkaWdpdCkge1xuICBuYXQuZGF0YVtvZnNdID0gZGlnaXQ7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBudGhfZGlnaXRfbmF0X25hdGl2ZVxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdF9uYXRpdmUobmF0LCBvZnMpIHtcbiAgcmV0dXJuIG5hdC5kYXRhW29mc107XG59XG5cbi8vUHJvdmlkZXM6IG51bV9kaWdpdHNfbmF0XG5mdW5jdGlvbiBudW1fZGlnaXRzX25hdChuYXQsIG9mcywgbGVuKSB7XG4gIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChuYXQuZGF0YVtvZnMgKyBpXSAhPT0gMCkgcmV0dXJuIGkgKyAxO1xuICB9XG4gIHJldHVybiAxOyAvLyAwIGNvdW50cyBhcyAxIGRpZ2l0XG59XG5cbi8vUHJvdmlkZXM6IG51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdFxuZnVuY3Rpb24gbnVtX2xlYWRpbmdfemVyb19iaXRzX2luX2RpZ2l0KG5hdCwgb2ZzKSB7XG4gIHZhciBhID0gbmF0LmRhdGFbb2ZzXTtcbiAgdmFyIGIgPSAwO1xuICBpZiAoYSAmIDB4ZmZmZjAwMDApIHtcbiAgICBiICs9IDE2O1xuICAgIGEgPj4+PSAxNjtcbiAgfVxuICBpZiAoYSAmIDB4ZmYwMCkge1xuICAgIGIgKz0gODtcbiAgICBhID4+Pj0gODtcbiAgfVxuICBpZiAoYSAmIDB4ZjApIHtcbiAgICBiICs9IDQ7XG4gICAgYSA+Pj49IDQ7XG4gIH1cbiAgaWYgKGEgJiAxMikge1xuICAgIGIgKz0gMjtcbiAgICBhID4+Pj0gMjtcbiAgfVxuICBpZiAoYSAmIDIpIHtcbiAgICBiICs9IDE7XG4gICAgYSA+Pj49IDE7XG4gIH1cbiAgaWYgKGEgJiAxKSB7XG4gICAgYiArPSAxO1xuICB9XG4gIHJldHVybiAzMiAtIGI7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X2ludFxuZnVuY3Rpb24gaXNfZGlnaXRfaW50KG5hdCwgb2ZzKSB7XG4gIGlmIChuYXQuZGF0YVtvZnNdID49IDApIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaXNfZGlnaXRfemVyb1xuZnVuY3Rpb24gaXNfZGlnaXRfemVybyhuYXQsIG9mcykge1xuICBpZiAobmF0LmRhdGFbb2ZzXSA9PT0gMCkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBpc19kaWdpdF9ub3JtYWxpemVkXG5mdW5jdGlvbiBpc19kaWdpdF9ub3JtYWxpemVkKF9uYXQsIF9vZnMpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X29kZFxuZnVuY3Rpb24gaXNfZGlnaXRfb2RkKG5hdCwgb2ZzKSB7XG4gIGlmIChuYXQuZGF0YVtvZnNdICYgMSkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBpbmNyX25hdFxuZnVuY3Rpb24gaW5jcl9uYXQobmF0LCBvZnMsIGxlbiwgY2FycnlfaW4pIHtcbiAgdmFyIGNhcnJ5ID0gY2FycnlfaW47XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgeCA9IChuYXQuZGF0YVtvZnMgKyBpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQuZGF0YVtvZnMgKyBpXSA9IHggfCAwO1xuICAgIGlmICh4ID09PSB4ID4+PiAwKSB7XG4gICAgICBjYXJyeSA9IDA7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgY2FycnkgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2Fycnk7XG59XG5cbi8vIGxlbjEgPj0gbGVuMlxuLy9Qcm92aWRlczogYWRkX25hdFxuLy9SZXF1aXJlczogaW5jcl9uYXRcbmZ1bmN0aW9uIGFkZF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMiwgY2FycnlfaW4pIHtcbiAgdmFyIGNhcnJ5ID0gY2FycnlfaW47XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0MS5kYXRhW29mczEgKyBpXSA+Pj4gMCkgKyAobmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQxLmRhdGFbb2ZzMSArIGldID0geDtcbiAgICBpZiAoeCA9PT0geCA+Pj4gMCkge1xuICAgICAgY2FycnkgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXJyeSA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmNyX25hdChuYXQxLCBvZnMxICsgbGVuMiwgbGVuMSAtIGxlbjIsIGNhcnJ5KTtcbn1cblxuLy9Qcm92aWRlczogY29tcGxlbWVudF9uYXRcbmZ1bmN0aW9uIGNvbXBsZW1lbnRfbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW29mcyArIGldID0gKC0xID4+PiAwKSAtIChuYXQuZGF0YVtvZnMgKyBpXSA+Pj4gMCk7XG4gIH1cbn1cblxuLy8gb2NhbWwgZmxpcHMgY2FycnlfaW5cbi8vUHJvdmlkZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBkZWNyX25hdChuYXQsIG9mcywgbGVuLCBjYXJyeV9pbikge1xuICB2YXIgYm9ycm93ID0gY2FycnlfaW4gPT09IDEgPyAwIDogMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciB4ID0gKG5hdC5kYXRhW29mcyArIGldID4+PiAwKSAtIGJvcnJvdztcbiAgICBuYXQuZGF0YVtvZnMgKyBpXSA9IHg7XG4gICAgaWYgKHggPj0gMCkge1xuICAgICAgYm9ycm93ID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3Jyb3cgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm9ycm93ID09PSAxID8gMCA6IDE7XG59XG5cbi8vIG9jYW1sIGZsaXBzIGNhcnJ5X2luXG4vLyBsZW4xID49IGxlbjJcbi8vUHJvdmlkZXM6IHN1Yl9uYXRcbi8vUmVxdWlyZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBzdWJfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIGNhcnJ5X2luKSB7XG4gIHZhciBib3Jyb3cgPSBjYXJyeV9pbiA9PT0gMSA/IDAgOiAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4ID0gKG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDApIC0gKG5hdDIuZGF0YVtvZnMyICsgaV0gPj4+IDApIC0gYm9ycm93O1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSB4O1xuICAgIGlmICh4ID49IDApIHtcbiAgICAgIGJvcnJvdyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvcnJvdyA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWNyX25hdChuYXQxLCBvZnMxICsgbGVuMiwgbGVuMSAtIGxlbjIsIGJvcnJvdyA9PT0gMSA/IDAgOiAxKTtcbn1cblxuLy8gbmF0MSArPSBuYXQyICogbmF0M1tvZnMzXVxuLy8gbGVuMSA+PSBsZW4yXG4vL1Byb3ZpZGVzOiBtdWx0X2RpZ2l0X25hdFxuLy9SZXF1aXJlczogYWRkX25hdCwgbmF0X29mX2FycmF5XG5mdW5jdGlvbiBtdWx0X2RpZ2l0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQzLCBvZnMzKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIHZhciBhID0gbmF0My5kYXRhW29mczNdID4+PiAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4MSA9XG4gICAgICAobmF0MS5kYXRhW29mczEgKyBpXSA+Pj4gMCkgK1xuICAgICAgKG5hdDIuZGF0YVtvZnMyICsgaV0gPj4+IDApICogKGEgJiAweDAwMDBmZmZmKSArXG4gICAgICBjYXJyeTtcbiAgICB2YXIgeDIgPSAobmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgKiAoYSA+Pj4gMTYpO1xuICAgIGNhcnJ5ID0gTWF0aC5mbG9vcih4MiAvIDY1NTM2KTtcbiAgICB2YXIgeDMgPSB4MSArICh4MiAlIDY1NTM2KSAqIDY1NTM2O1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSB4MztcbiAgICBjYXJyeSArPSBNYXRoLmZsb29yKHgzIC8gNDI5NDk2NzI5Nik7XG4gIH1cblxuICBpZiAobGVuMiA8IGxlbjEgJiYgY2FycnkpIHtcbiAgICByZXR1cm4gYWRkX25hdChcbiAgICAgIG5hdDEsXG4gICAgICBvZnMxICsgbGVuMixcbiAgICAgIGxlbjEgLSBsZW4yLFxuICAgICAgbmF0X29mX2FycmF5KFtjYXJyeV0pLFxuICAgICAgMCxcbiAgICAgIDEsXG4gICAgICAwLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9XG59XG5cbi8vIG5hdDEgKz0gbmF0MiAqIG5hdDNcbi8vIGxlbjEgPj0gbGVuMiArIGxlbjMuXG4vL1Byb3ZpZGVzOiBtdWx0X25hdFxuLy9SZXF1aXJlczogbXVsdF9kaWdpdF9uYXRcbmZ1bmN0aW9uIG11bHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIG5hdDMsIG9mczMsIGxlbjMpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4zOyBpKyspIHtcbiAgICBjYXJyeSArPSBtdWx0X2RpZ2l0X25hdChcbiAgICAgIG5hdDEsXG4gICAgICBvZnMxICsgaSxcbiAgICAgIGxlbjEgLSBpLFxuICAgICAgbmF0MixcbiAgICAgIG9mczIsXG4gICAgICBsZW4yLFxuICAgICAgbmF0MyxcbiAgICAgIG9mczMgKyBpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyBuYXQxID0gMiAqIG5hdDEgKyBuYXQyICogbmF0MlxuLy8gbGVuMSA+PSAyICogbGVuMlxuLy9Qcm92aWRlczogc3F1YXJlX25hdFxuLy9SZXF1aXJlczogbXVsdF9uYXQsIGFkZF9uYXRcbmZ1bmN0aW9uIHNxdWFyZV9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICB2YXIgY2FycnkgPSAwO1xuICBjYXJyeSArPSBhZGRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDEsIG9mczEsIGxlbjEsIDApO1xuICBjYXJyeSArPSBtdWx0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQyLCBvZnMyLCBsZW4yKTtcbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X2xlZnRfbmF0XG5mdW5jdGlvbiBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBuYml0cykge1xuICBpZiAobmJpdHMgPT09IDApIHtcbiAgICBuYXQyLmRhdGFbb2ZzMl0gPSAwO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciB3cmFwID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4xOyBpKyspIHtcbiAgICB2YXIgYSA9IG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDA7XG4gICAgbmF0MS5kYXRhW29mczEgKyBpXSA9IChhIDw8IG5iaXRzKSB8IHdyYXA7XG4gICAgd3JhcCA9IGEgPj4+ICgzMiAtIG5iaXRzKTtcbiAgfVxuICBuYXQyLmRhdGFbb2ZzMl0gPSB3cmFwO1xuICByZXR1cm4gMDtcbn1cblxuLy8gQXNzdW1pbmcgYyA+IGEsIHJldHVybnMgW3F1b3RpZW50LCByZW1haW5kZXJdIG9mIChhPDwzMiArIGIpL2Ncbi8vUHJvdmlkZXM6IGRpdl9oZWxwZXJcbmZ1bmN0aW9uIGRpdl9oZWxwZXIoYSwgYiwgYykge1xuICB2YXIgeCA9IGEgKiA2NTUzNiArIChiID4+PiAxNik7XG4gIHZhciB5ID0gTWF0aC5mbG9vcih4IC8gYykgKiA2NTUzNjtcbiAgdmFyIHogPSAoeCAlIGMpICogNjU1MzY7XG4gIHZhciB3ID0geiArIChiICYgMHgwMDAwZmZmZik7XG4gIHJldHVybiBbeSArIE1hdGguZmxvb3IodyAvIGMpLCB3ICUgY107XG59XG5cbi8vIG5hdDFbb2ZzMStsZW5dIDwgbmF0MltvZnMyXVxuLy9Qcm92aWRlczogZGl2X2RpZ2l0X25hdFxuLy9SZXF1aXJlczogZGl2X2hlbHBlclxuZnVuY3Rpb24gZGl2X2RpZ2l0X25hdChuYXRxLCBvZnNxLCBuYXRyLCBvZnNyLCBuYXQxLCBvZnMxLCBsZW4sIG5hdDIsIG9mczIpIHtcbiAgdmFyIHJlbSA9IG5hdDEuZGF0YVtvZnMxICsgbGVuIC0gMV0gPj4+IDA7XG4gIC8vIG5hdHFbb2ZzcStsZW4tMV0gaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvIChkdWUgdG8gdGhlIE1TRCByZXF1aXJlbWVudCksXG4gIC8vIGFuZCBzaG91bGQgbm90IGJlIHdyaXR0ZW4gdG8uXG4gIGZvciAodmFyIGkgPSBsZW4gLSAyOyBpID49IDA7IGktLSkge1xuICAgIHZhciB4ID0gZGl2X2hlbHBlcihyZW0sIG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAsIG5hdDIuZGF0YVtvZnMyXSA+Pj4gMCk7XG4gICAgbmF0cS5kYXRhW29mc3EgKyBpXSA9IHhbMF07XG4gICAgcmVtID0geFsxXTtcbiAgfVxuICBuYXRyLmRhdGFbb2Zzcl0gPSByZW07XG4gIHJldHVybiAwO1xufVxuXG4vLyBuYXQxW25hdDI6XSA6PSBuYXQxIC8gbmF0MlxuLy8gbmF0MVs6bmF0Ml0gOj0gbmF0MSAlIG5hdDJcbi8vIGxlbjEgPiBsZW4yLCBuYXQyW29mczIrbGVuMi0xXSA+IG5hdDFbb2ZzMStsZW4xLTFdXG4vL1Byb3ZpZGVzOiBkaXZfbmF0XG4vL1JlcXVpcmVzOiBkaXZfZGlnaXRfbmF0LCBkaXZfaGVscGVyLCBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQsIHNoaWZ0X2xlZnRfbmF0LCBzaGlmdF9yaWdodF9uYXQsIGNyZWF0ZV9uYXQsIHNldF90b196ZXJvX25hdCwgbXVsdF9kaWdpdF9uYXQsIHN1Yl9uYXQsIGNvbXBhcmVfbmF0LCBuYXRfb2ZfYXJyYXlcbmZ1bmN0aW9uIGRpdl9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICBpZiAobGVuMiA9PT0gMSkge1xuICAgIGRpdl9kaWdpdF9uYXQobmF0MSwgb2ZzMSArIDEsIG5hdDEsIG9mczEsIG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIpO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHMgPSBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQobmF0Miwgb2ZzMiArIGxlbjIgLSAxKTtcbiAgc2hpZnRfbGVmdF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpO1xuICBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7XG5cbiAgdmFyIGQgPSAobmF0Mi5kYXRhW29mczIgKyBsZW4yIC0gMV0gPj4+IDApICsgMTtcbiAgdmFyIGEgPSBjcmVhdGVfbmF0KGxlbjIgKyAxKTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IGxlbjI7IGktLSkge1xuICAgIC8vIERlY2VudCBsb3dlciBib3VuZCBvbiBxdW9cbiAgICB2YXIgcXVvID1cbiAgICAgIGQgPT09IDQyOTQ5NjcyOTZcbiAgICAgICAgPyBuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwXG4gICAgICAgIDogZGl2X2hlbHBlcihcbiAgICAgICAgICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAsXG4gICAgICAgICAgICBuYXQxLmRhdGFbb2ZzMSArIGkgLSAxXSA+Pj4gMCxcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgKVswXTtcbiAgICBzZXRfdG9femVyb19uYXQoYSwgMCwgbGVuMiArIDEpO1xuICAgIG11bHRfZGlnaXRfbmF0KGEsIDAsIGxlbjIgKyAxLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXRfb2ZfYXJyYXkoW3F1b10pLCAwKTtcbiAgICBzdWJfbmF0KG5hdDEsIG9mczEgKyBpIC0gbGVuMiwgbGVuMiArIDEsIGEsIDAsIGxlbjIgKyAxLCAxKTtcblxuICAgIHdoaWxlIChcbiAgICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gIT09IDAgfHxcbiAgICAgIGNvbXBhcmVfbmF0KG5hdDEsIG9mczEgKyBpIC0gbGVuMiwgbGVuMiwgbmF0Miwgb2ZzMiwgbGVuMikgPj0gMFxuICAgICkge1xuICAgICAgcXVvID0gcXVvICsgMTtcbiAgICAgIHN1Yl9uYXQobmF0MSwgb2ZzMSArIGkgLSBsZW4yLCBsZW4yICsgMSwgbmF0Miwgb2ZzMiwgbGVuMiwgMSk7XG4gICAgfVxuXG4gICAgbmF0MS5kYXRhW29mczEgKyBpXSA9IHF1bztcbiAgfVxuXG4gIHNoaWZ0X3JpZ2h0X25hdChuYXQxLCBvZnMxLCBsZW4yLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7IC8vIHNoaWZ0IHJlbWFpbmRlclxuICBzaGlmdF9yaWdodF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpOyAvLyByZXN0b3JlXG4gIHJldHVybiAwO1xufVxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X3JpZ2h0X25hdFxuZnVuY3Rpb24gc2hpZnRfcmlnaHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIG5iaXRzKSB7XG4gIGlmIChuYml0cyA9PT0gMCkge1xuICAgIG5hdDIuZGF0YVtvZnMyXSA9IDA7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgdmFyIHdyYXAgPSAwO1xuICBmb3IgKHZhciBpID0gbGVuMSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGEgPSBuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwO1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSAoYSA+Pj4gbmJpdHMpIHwgd3JhcDtcbiAgICB3cmFwID0gYSA8PCAoMzIgLSBuYml0cyk7XG4gIH1cbiAgbmF0Mi5kYXRhW29mczJdID0gd3JhcDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgaWYgKG5hdDEuZGF0YVtvZnMxXSA+IG5hdDIuZGF0YVtvZnMyXSkgcmV0dXJuIDE7XG4gIGlmIChuYXQxLmRhdGFbb2ZzMV0gPCBuYXQyLmRhdGFbb2ZzMl0pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfbmF0XG4vL1JlcXVpcmVzOiBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICB2YXIgYSA9IG51bV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIGxlbjEpO1xuICB2YXIgYiA9IG51bV9kaWdpdHNfbmF0KG5hdDIsIG9mczIsIGxlbjIpO1xuICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwID4gbmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgcmV0dXJuIDE7XG4gICAgaWYgKG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAgPCBuYXQyLmRhdGFbb2ZzMiArIGldID4+PiAwKSByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGxhbmRfZGlnaXRfbmF0XG5mdW5jdGlvbiBsYW5kX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSAmPSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBsb3JfZGlnaXRfbmF0XG5mdW5jdGlvbiBsb3JfZGlnaXRfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgbmF0MS5kYXRhW29mczFdIHw9IG5hdDIuZGF0YVtvZnMyXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGx4b3JfZGlnaXRfbmF0XG5mdW5jdGlvbiBseG9yX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSBePSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXJpYWxpemVfbmF0XG5mdW5jdGlvbiBzZXJpYWxpemVfbmF0KHdyaXRlciwgbmF0LCBzeikge1xuICB2YXIgbGVuID0gbmF0LmRhdGEubGVuZ3RoO1xuICB3cml0ZXIud3JpdGUoMzIsIGxlbik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB3cml0ZXIud3JpdGUoMzIsIG5hdC5kYXRhW2ldKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHN6WzFdID0gbGVuICogODtcbn1cblxuLy9Qcm92aWRlczogZGVzZXJpYWxpemVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gZGVzZXJpYWxpemVfbmF0KHJlYWRlciwgc3opIHtcbiAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIHZhciBuYXQgPSBuZXcgTWxOYXQobGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHJldHVybiBuYXQ7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX3dpbjMyXG52YXIganNvb19pc193aW4zMiA9XG4gIGdsb2JhbFRoaXMuRGVubz8uYnVpbGQ/Lm9zID09PSBcIndpbmRvd3NcIiB8fFxuICBnbG9iYWxUaGlzLnByb2Nlc3M/LnBsYXRmb3JtID09PSBcIndpbjMyXCI7XG5cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUgIT09IHVuZGVmaW5lZDtcbn1cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sTm9kZUZkLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yLCBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHNcbi8vUmVxdWlyZXM6IGpzb29faXNfd2luMzJcbmNsYXNzIE1sTm9kZURldmljZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QpIHtcbiAgICB0aGlzLmZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgfVxuXG4gIG5tKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yb290ICsgbmFtZTtcbiAgfVxuXG4gIGV4aXN0cyhuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSkgPyAxIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGlzRmlsZShuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRmlsZSgpID8gMSA6IDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gICAgfVxuICB9XG5cbiAgbWtkaXIobmFtZSwgbW9kZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLCB7IG1vZGU6IG1vZGUgfSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgcm1kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnJtZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICByZWFkZGlyKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZnMucmVhZGRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGlzX2RpcihuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRGlyZWN0b3J5KCkgPyAxIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICB1bmxpbmsobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnVubGlua1N5bmModGhpcy5ubShuYW1lKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgdXRpbWVzKG5hbWUsIGF0aW1lLCBtdGltZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXRpbWUgPT09IDAgJiYgbXRpbWUgPT09IDApIHtcbiAgICAgICAgYXRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7XG4gICAgICAgIG10aW1lID0gYXRpbWU7XG4gICAgICB9XG4gICAgICB0aGlzLmZzLnV0aW1lc1N5bmModGhpcy5ubShuYW1lKSwgYXRpbWUsIG10aW1lKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICB0cnVuY2F0ZShuYW1lLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy50cnVuY2F0ZVN5bmModGhpcy5ubShuYW1lKSwgbGVuIHwgMCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgYWNjZXNzKG5hbWUsIGYsIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgY29uc3RzID0gdGhpcy5mcy5jb25zdGFudHM7XG4gICAgdmFyIHJlcyA9IDA7XG4gICAgZm9yICh2YXIga2V5IGluIGYpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5SX09LO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuV19PSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICByZXMgfD0ganNvb19pc193aW4zMiA/IGNvbnN0cy5SX09LIDogY29uc3RzLlhfT0s7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5GX09LO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy5hY2Nlc3NTeW5jKHRoaXMubm0obmFtZSksIHJlcyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgb3BlbihuYW1lLCBmLCBwZXJtcywgcmFpc2VfdW5peCkge1xuICAgIHZhciBjb25zdHMgPSB0aGlzLmZzLmNvbnN0YW50cztcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBrZXkgaW4gZikge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcInJkb25seVwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19SRE9OTFk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ3cm9ubHlcIjpcbiAgICAgICAgICByZXMgfD0gY29uc3RzLk9fV1JPTkxZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmR3clwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19SRFdSO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXBwZW5kXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNyZWF0ZVwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19DUkVBVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRydW5jYXRlXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX1RSVU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZXhjbFwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19FWENMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICByZXMgfD0gY29uc3RzLk9fVEVYVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm5vbmJsb2NrXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX05PTkJMT0NLO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibm9jdHR5XCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX05PQ1RUWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRzeW5jXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0RTWU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3luY1wiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19TWU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdmFyIGZkID0gdGhpcy5mcy5vcGVuU3luYyh0aGlzLm5tKG5hbWUpLCByZXMsIHBlcm1zKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGYpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBzbGFzaChuYW1lKSB7XG4gICAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpID8gbmFtZSA6IG5hbWUgKyBcIi9cIjtcbiAgfVxuXG4gIHJlbmFtZShvLCBuLCByYWlzZV91bml4KSB7XG4gICAgaWYgKGpzb29faXNfd2luMzIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLm5tKG4pO1xuICAgICAgICB2YXIgc291cmNlID0gdGhpcy5ubShvKTtcbiAgICAgICAgdmFyIHRhcmdldF9zdGF0cywgc291cmNlX3N0YXRzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRhcmdldF9zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGFyZ2V0LCB7XG4gICAgICAgICAgICB0aHJvd0lmTm9FbnRyeTogZmFsc2UsXG4gICAgICAgICAgfSkpICYmXG4gICAgICAgICAgKHNvdXJjZV9zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmMoc291cmNlLCB7XG4gICAgICAgICAgICB0aHJvd0lmTm9FbnRyeTogZmFsc2UsXG4gICAgICAgICAgfSkpICYmXG4gICAgICAgICAgc291cmNlX3N0YXRzLmlzRGlyZWN0b3J5KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRhcmdldF9zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2xhc2godGFyZ2V0KS5zdGFydHNXaXRoKHRoaXMuc2xhc2goc291cmNlKSkpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mcy5ybWRpclN5bmModGFyZ2V0KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRU5PVERJUjogbm90IGEgZGlyZWN0b3J5LCByZW5hbWUgJyR7c291cmNlfScgLT4gJyR7dGFyZ2V0fSdgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oZXJyLCB7XG4gICAgICAgICAgICAgIGVycm5vOiAtMjAsXG4gICAgICAgICAgICAgIGNvZGU6IFwiRU5PVERJUlwiLFxuICAgICAgICAgICAgICBzeXNjYWxsOiBcInJlbmFtZVwiLFxuICAgICAgICAgICAgICBwYXRoOiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcy5yZW5hbWVTeW5jKHRoaXMubm0obyksIHRoaXMubm0obikpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXQobmFtZSwgbGFyZ2UsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICAgIHJldHVybiBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHMoanNfc3RhdHMsIGxhcmdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgbHN0YXQobmFtZSwgbGFyZ2UsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgICByZXR1cm4gb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzKGpzX3N0YXRzLCBsYXJnZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNobW9kKG5hbWUsIHBlcm1zLCByYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZnMuY2htb2RTeW5jKHRoaXMubm0obmFtZSksIHBlcm1zKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBsaW5rKHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmxpbmtTeW5jKHRoaXMubm0odGFyZ2V0KSwgdGhpcy5ubShwYXRoKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgc3ltbGluayh0b19kaXIsIHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnN5bWxpbmtTeW5jKFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHRoaXMubm0ocGF0aCksXG4gICAgICAgIHRvX2RpciA9PT0gMCA/IG51bGwgOiB0b19kaXJbMV0gPyBcImRpclwiIDogXCJmaWxlXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRsaW5rKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGxpbmsgPSB0aGlzLmZzLnJlYWRsaW5rU3luYyh0aGlzLm5tKG5hbWUpLCBcInV0ZjhcIik7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobGluayk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5vcGVuZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IG9jYW1sX3N0YXRzX2Zyb21fbm9kZV9zdGF0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdFxuZnVuY3Rpb24gb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzKGpzX3N0YXRzLCBsYXJnZSkge1xuICAvKiA9PT1Vbml4LmZpbGVfa2luZD09PVxuICAgKiB0eXBlIGZpbGVfa2luZCA9XG4gICAqICAgICBTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFJlZ3VsYXIgZmlsZSAqKVxuICAgKiAgIHwgU19ESVIgICAgICAgICAgICAgICAgICAgICAgICgqKiBEaXJlY3RvcnkgKilcbiAgICogICB8IFNfQ0hSICAgICAgICAgICAgICAgICAgICAgICAoKiogQ2hhcmFjdGVyIGRldmljZSAqKVxuICAgKiAgIHwgU19CTEsgICAgICAgICAgICAgICAgICAgICAgICgqKiBCbG9jayBkZXZpY2UgKilcbiAgICogICB8IFNfTE5LICAgICAgICAgICAgICAgICAgICAgICAoKiogU3ltYm9saWMgbGluayAqKVxuICAgKiAgIHwgU19GSUZPICAgICAgICAgICAgICAgICAgICAgICgqKiBOYW1lZCBwaXBlICopXG4gICAqICAgfCBTX1NPQ0sgICAgICAgICAgICAgICAgICAgICAgKCoqIFNvY2tldCAqKVxuICAgKi9cbiAgdmFyIGZpbGVfa2luZDtcbiAgaWYgKGpzX3N0YXRzLmlzRmlsZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZV9raW5kID0gMTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0NoYXJhY3RlckRldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMjtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0Jsb2NrRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAzO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA0O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRklGTygpKSB7XG4gICAgZmlsZV9raW5kID0gNTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1NvY2tldCgpKSB7XG4gICAgZmlsZV9raW5kID0gNjtcbiAgfVxuICAvKiA9PT1Vbml4LnN0YXRzPT09XG4gICAqIHR5cGUgc3RhdHMgPVxuICAgKiAgeyBzdF9kZXYgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIERldmljZSBudW1iZXIgKilcbiAgICogICAgc3RfaW5vIDogaW50OyAgICAgICAgICAgICAgICgqKiBJbm9kZSBudW1iZXIgKilcbiAgICogICAgc3Rfa2luZCA6IGZpbGVfa2luZDsgICAgICAgICgqKiBLaW5kIG9mIHRoZSBmaWxlICopXG4gICAqICAgIHN0X3Blcm0gOiBmaWxlX3Blcm07ICAgICAgICAoKiogQWNjZXNzIHJpZ2h0cyAqKVxuICAgKiAgICBzdF9ubGluayA6IGludDsgICAgICAgICAgICAgKCoqIE51bWJlciBvZiBsaW5rcyAqKVxuICAgKiAgICBzdF91aWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIFVzZXIgaWQgb2YgdGhlIG93bmVyICopXG4gICAqICAgIHN0X2dpZCA6IGludDsgICAgICAgICAgICAgICAoKiogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cCAqKVxuICAgKiAgICBzdF9yZGV2IDogaW50OyAgICAgICAgICAgICAgKCoqIERldmljZSBJRCAoaWYgc3BlY2lhbCBmaWxlKSAqKVxuICAgKiAgICBzdF9zaXplIDogaW50OyAgICAgICAgICAgICAgKCoqIFNpemUgaW4gYnl0ZXMgKilcbiAgICogICAgc3RfYXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IGFjY2VzcyB0aW1lICopXG4gICAqICAgIHN0X210aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBtb2RpZmljYXRpb24gdGltZSAqKVxuICAgKiAgICBzdF9jdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3Qgc3RhdHVzIGNoYW5nZSB0aW1lICopXG4gICAqICB9XG4gICAqL1xuICByZXR1cm4gQkxPQ0soXG4gICAgMCxcbiAgICBqc19zdGF0cy5kZXYsXG4gICAganNfc3RhdHMuaW5vIHwgMCxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAgbGFyZ2UgPyBjYW1sX2ludDY0X29mX2Zsb2F0KGpzX3N0YXRzLnNpemUpIDoganNfc3RhdHMuc2l6ZSB8IDAsXG4gICAganNfc3RhdHMuYXRpbWVNcyAvIDEwMDAsXG4gICAganNfc3RhdHMubXRpbWVNcyAvIDEwMDAsXG4gICAganNfc3RhdHMuY3RpbWVNcyAvIDEwMDAsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuY2xhc3MgTWxOb2RlRGV2aWNlIHt9XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yLCBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvciwgb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzXG5jbGFzcyBNbE5vZGVGZCBleHRlbmRzIE1sRmlsZSB7XG4gIGNvbnN0cnVjdG9yKGZkLCBmbGFncykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5mcyA9IHJlcXVpcmUoXCJub2RlOmZzXCIpO1xuICAgIHRoaXMuZmQgPSBmZDtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBzdGF0cyA9IHRoaXMuZnMuZnN0YXRTeW5jKGZkKTtcbiAgICAgIGZsYWdzLm5vU2VlayA9XG4gICAgICAgIHN0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHwgc3RhdHMuaXNGSUZPKCkgfHwgc3RhdHMuaXNTb2NrZXQoKTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5mbGFncy5hcHBlbmQgPyBzdGF0cy5zaXplIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRoZSBmc3RhdCB3aWxsIGZhaWwgb24gc3RhbmRhcmQgc3RyZWFtcyB1bmRlciBXaW5kb3dzIHdpdGggbm9kZVxuICAgICAgLy8gMTggKGFuZCBsb3dlcikuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8zODExLlxuICAgICAgZmxhZ3Mubm9TZWVrID0gdHJ1ZTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5zZWVrZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHRydW5jYXRlKGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmZ0cnVuY2F0ZVN5bmModGhpcy5mZCwgbGVuIHwgMCk7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPiBsZW4pIHRoaXMub2Zmc2V0ID0gbGVuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBpc2F0dHkoKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoXCJub2RlOnR0eVwiKTtcbiAgICByZXR1cm4gdHR5LmlzYXR0eSh0aGlzLmZkKSA/IDEgOiAwO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5mc3RhdFN5bmModGhpcy5mZCkuc2l6ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZShidWYsIGJ1Zl9vZmZzZXQsIGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5mbGFncy5ub1NlZWsgfHwgIXRoaXMuc2Vla2VkKSB7XG4gICAgICAgIHZhciB3cml0dGVuID0gdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHdyaXR0ZW4gPSB0aGlzLmZzLndyaXRlU3luYyhcbiAgICAgICAgICB0aGlzLmZkLFxuICAgICAgICAgIGJ1ZixcbiAgICAgICAgICBidWZfb2Zmc2V0LFxuICAgICAgICAgIGxlbixcbiAgICAgICAgICB0aGlzLm9mZnNldCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub2Zmc2V0ICs9IHdyaXR0ZW47XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdHRlbjtcbiAgfVxuXG4gIHJlYWQoYSwgYnVmX29mZnNldCwgbGVuLCByYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmZsYWdzLm5vU2VlayB8fCAhdGhpcy5zZWVrZWQpIHtcbiAgICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuLCB0aGlzLm9mZnNldCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9mZnNldCArPSByZWFkO1xuICAgICAgcmV0dXJuIHJlYWQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIHNlZWsob2Zmc2V0LCB3aGVuY2UsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5mbGFncy5ub1NlZWspIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKHJhaXNlX3VuaXgsIFwiRVNQSVBFXCIsIFwibHNlZWtcIiwgXCJpbGxlZ2FsIHNlZWtcIik7XG4gICAgfVxuICAgIHN3aXRjaCAod2hlbmNlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFSU5WQUxcIixcbiAgICAgICAgXCJsc2Vla1wiLFxuICAgICAgICBcImludmFsaWQgYXJndW1lbnRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuc2Vla2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQ7XG4gIH1cblxuICBwb3MoKSB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0O1xuICB9XG5cbiAgc3RhdChsYXJnZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKTtcbiAgICAgIHJldHVybiBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHMoanNfc3RhdHMsIGxhcmdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgICB9XG4gIH1cblxuICBjaG1vZChwZXJtcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmZjaG1vZFN5bmModGhpcy5mZCwgcGVybXMpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gMSk7XG4gICAgfVxuICB9XG5cbiAgc3luYygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy5mc3luY1N5bmModGhpcy5mZCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZShyYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZnMuY2xvc2VTeW5jKHRoaXMuZmQpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrX3N0cmVhbV9zZW1hbnRpY3MoY21kKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCAvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIGNtZCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIGpzX3N0YXRzLmlzRmlsZSgpIHx8XG4gICAgICAgIGpzX3N0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAganNfc3RhdHMuaXNGSUZPKCkgfHxcbiAgICAgICAganNfc3RhdHMuaXNTb2NrZXQoKVxuICAgICAgKVxuICAgIClcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIDEsXG4gICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgIGNtZCxcbiAgICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgICApO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL0lmOiBicm93c2VyXG5jbGFzcyBNbE5vZGVGZCB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZFxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpIHtcbiAgaWYgKGZsYWdzLmFsdG5hbWUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG4gICAgICB2YXIgZmQyID0gZnMub3BlblN5bmMoZmxhZ3MuYWx0bmFtZSwgXCJyc1wiKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQyLCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmbGFncyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoX2ZkLCBfZmxhZ3MpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncywgbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4LCBjbWQpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKFwiVW5peC5Vbml4X2Vycm9yXCIpO1xuICBpZiAocmFpc2VfdW5peCAmJiB1bml4X2Vycm9yKSB7XG4gICAgdmFyIGFyZ3MgPSBtYWtlX3VuaXhfZXJyX2FyZ3MoXG4gICAgICBlcnIuY29kZSxcbiAgICAgIGNtZCB8fCBlcnIuc3lzY2FsbCxcbiAgICAgIGVyci5wYXRoLFxuICAgICAgZXJyLmVycm5vLFxuICAgICk7XG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZCwgQW5keSBSYXlcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbi8vXG4vLyBCaWdhcnJheS5cbi8vXG4vLyAtIGFsbCBiaWdhcnJheSB0eXBlcyBpbmNsdWRpbmcgSW50NjQgYW5kIENvbXBsZXguXG4vLyAtIGZvcnRyYW4gKyBjIGxheW91dHNcbi8vIC0gc3ViL3NsaWNlL3Jlc2hhcGVcbi8vIC0gcmV0YWluIGZhc3QgcGF0aCBmb3IgMWQgYXJyYXkgYWNjZXNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaW5pdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYV9pbml0KCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplKGRpbXMpIHtcbiAgdmFyIG5fZGltcyA9IGRpbXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbl9kaW1zOyBpKyspIHtcbiAgICBpZiAoZGltc1tpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBzaXplID0gc2l6ZSAqIGRpbXNbaV07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5wYWNrRmxvYXQxNlxudmFyIGNhbWxfdW5wYWNrRmxvYXQxNiA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBwb3cgPSBNYXRoLnBvdztcblxuICB2YXIgRVhQX01BU0sxNiA9IDMxOyAvLyAyICoqIDUgLSAxXG4gIHZhciBTSUdOSUZJQ0FORF9NQVNLMTYgPSAxMDIzOyAvLyAyICoqIDEwIC0gMVxuICB2YXIgTUlOX1NVQk5PUk1BTDE2ID0gcG93KDIsIC0yNCk7IC8vIDIgKiogLTEwICogMiAqKiAtMTRcbiAgdmFyIFNJR05JRklDQU5EX0RFTk9NMTYgPSAwLjAwMDk3NjU2MjU7IC8vIDIgKiogLTEwXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciBzaWduID0gYnl0ZXMgPj4+IDE1O1xuICAgIHZhciBleHBvbmVudCA9IChieXRlcyA+Pj4gMTApICYgRVhQX01BU0sxNjtcbiAgICB2YXIgc2lnbmlmaWNhbmQgPSBieXRlcyAmIFNJR05JRklDQU5EX01BU0sxNjtcbiAgICBpZiAoZXhwb25lbnQgPT09IEVYUF9NQVNLMTYpXG4gICAgICByZXR1cm4gc2lnbmlmaWNhbmQgPT09IDBcbiAgICAgICAgPyBzaWduID09PSAwXG4gICAgICAgICAgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcbiAgICAgICAgICA6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICAgICAgICA6IE51bWJlci5OYU47XG4gICAgaWYgKGV4cG9uZW50ID09PSAwKVxuICAgICAgcmV0dXJuIHNpZ25pZmljYW5kICogKHNpZ24gPT09IDAgPyBNSU5fU1VCTk9STUFMMTYgOiAtTUlOX1NVQk5PUk1BTDE2KTtcbiAgICB2YXIgciA9XG4gICAgICBwb3coMiwgZXhwb25lbnQgLSAxNSkgKlxuICAgICAgKHNpZ24gPT09IDBcbiAgICAgICAgPyAxICsgc2lnbmlmaWNhbmQgKiBTSUdOSUZJQ0FORF9ERU5PTTE2XG4gICAgICAgIDogLTEgLSBzaWduaWZpY2FuZCAqIFNJR05JRklDQU5EX0RFTk9NMTYpO1xuICAgIHJldHVybiByO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9wYWNrRmxvYXQxNlxudmFyIGNhbWxfcGFja0Zsb2F0MTYgPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBJTlZFUlNFX09GX0VQU0lMT04gPSAxIC8gTnVtYmVyLkVQU0lMT047XG5cbiAgZnVuY3Rpb24gcm91bmRUaWVzVG9FdmVuKG51bSkge1xuICAgIHJldHVybiBudW0gKyBJTlZFUlNFX09GX0VQU0lMT04gLSBJTlZFUlNFX09GX0VQU0lMT047XG4gIH1cblxuICBjb25zdCBGTE9BVDE2X01JTl9WQUxVRSA9IDYuMTAzNTE1NjI1ZS01O1xuICBjb25zdCBGTE9BVDE2X01BWF9WQUxVRSA9IDY1NTA0O1xuICBjb25zdCBGTE9BVDE2X0VQU0lMT04gPSAwLjAwMDk3NjU2MjU7XG5cbiAgY29uc3QgRkxPQVQxNl9FUFNJTE9OX01VTFRJUExJRURfQllfRkxPQVQxNl9NSU5fVkFMVUUgPVxuICAgIEZMT0FUMTZfRVBTSUxPTiAqIEZMT0FUMTZfTUlOX1ZBTFVFO1xuICBjb25zdCBGTE9BVDE2X0VQU0lMT05fREVWSURFRF9CWV9FUFNJTE9OID1cbiAgICBGTE9BVDE2X0VQU0lMT04gKiBJTlZFUlNFX09GX0VQU0lMT047XG5cbiAgZnVuY3Rpb24gcm91bmRUb0Zsb2F0MTYobnVtKSB7XG4gICAgY29uc3QgbnVtYmVyID0gK251bTtcblxuICAgIC8vIE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLTBcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShudW1iZXIpIHx8IG51bWJlciA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICAvLyBmaW5pdGUgZXhjZXB0IDAsIC0wXG4gICAgY29uc3Qgc2lnbiA9IG51bWJlciA+IDAgPyAxIDogLTE7XG4gICAgY29uc3QgYWJzb2x1dGUgPSBNYXRoLmFicyhudW1iZXIpO1xuXG4gICAgLy8gc21hbGwgbnVtYmVyXG4gICAgaWYgKGFic29sdXRlIDwgRkxPQVQxNl9NSU5fVkFMVUUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNpZ24gKlxuICAgICAgICByb3VuZFRpZXNUb0V2ZW4oXG4gICAgICAgICAgYWJzb2x1dGUgLyBGTE9BVDE2X0VQU0lMT05fTVVMVElQTElFRF9CWV9GTE9BVDE2X01JTl9WQUxVRSxcbiAgICAgICAgKSAqXG4gICAgICAgIEZMT0FUMTZfRVBTSUxPTl9NVUxUSVBMSUVEX0JZX0ZMT0FUMTZfTUlOX1ZBTFVFXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXAgPSAoMSArIEZMT0FUMTZfRVBTSUxPTl9ERVZJREVEX0JZX0VQU0lMT04pICogYWJzb2x1dGU7XG4gICAgY29uc3QgcmVzdWx0ID0gdGVtcCAtICh0ZW1wIC0gYWJzb2x1dGUpO1xuXG4gICAgLy8gbGFyZ2UgbnVtYmVyXG4gICAgaWYgKHJlc3VsdCA+IEZMT0FUMTZfTUFYX1ZBTFVFIHx8IE51bWJlci5pc05hTihyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gc2lnbiAqIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbiAqIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGJhc2UgYWxnb3JpdGhtOiBodHRwOi8vZm94LXRvb2xraXQub3JnL2Z0cC9mYXN0aGFsZmZsb2F0Y29udmVyc2lvbi5wZGZcblxuICBjb25zdCBiYXNlVGFibGUgPSBuZXcgVWludDE2QXJyYXkoNTEyKTtcbiAgY29uc3Qgc2hpZnRUYWJsZSA9IG5ldyBVaW50OEFycmF5KDUxMik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIGNvbnN0IGUgPSBpIC0gMTI3O1xuXG4gICAgLy8gdmVyeSBzbWFsbCBudW1iZXIgKDAsIC0wKVxuICAgIGlmIChlIDwgLTI0KSB7XG4gICAgICBiYXNlVGFibGVbaV0gPSAweDAwMDA7XG4gICAgICBiYXNlVGFibGVbaSB8IDB4MTAwXSA9IDB4ODAwMDtcbiAgICAgIHNoaWZ0VGFibGVbaV0gPSAyNDtcbiAgICAgIHNoaWZ0VGFibGVbaSB8IDB4MTAwXSA9IDI0O1xuXG4gICAgICAvLyBzbWFsbCBudW1iZXIgKGRlbm9ybSlcbiAgICB9IGVsc2UgaWYgKGUgPCAtMTQpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IDB4MDQwMCA+PiAoLWUgLSAxNCk7XG4gICAgICBiYXNlVGFibGVbaSB8IDB4MTAwXSA9ICgweDA0MDAgPj4gKC1lIC0gMTQpKSB8IDB4ODAwMDtcbiAgICAgIHNoaWZ0VGFibGVbaV0gPSAtZSAtIDE7XG4gICAgICBzaGlmdFRhYmxlW2kgfCAweDEwMF0gPSAtZSAtIDE7XG5cbiAgICAgIC8vIG5vcm1hbCBudW1iZXJcbiAgICB9IGVsc2UgaWYgKGUgPD0gMTUpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IChlICsgMTUpIDw8IDEwO1xuICAgICAgYmFzZVRhYmxlW2kgfCAweDEwMF0gPSAoKGUgKyAxNSkgPDwgMTApIHwgMHg4MDAwO1xuICAgICAgc2hpZnRUYWJsZVtpXSA9IDEzO1xuICAgICAgc2hpZnRUYWJsZVtpIHwgMHgxMDBdID0gMTM7XG5cbiAgICAgIC8vIGxhcmdlIG51bWJlciAoSW5maW5pdHksIC1JbmZpbml0eSlcbiAgICB9IGVsc2UgaWYgKGUgPCAxMjgpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IDB4N2MwMDtcbiAgICAgIGJhc2VUYWJsZVtpIHwgMHgxMDBdID0gMHhmYzAwO1xuICAgICAgc2hpZnRUYWJsZVtpXSA9IDI0O1xuICAgICAgc2hpZnRUYWJsZVtpIHwgMHgxMDBdID0gMjQ7XG5cbiAgICAgIC8vIHN0YXkgKE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZVRhYmxlW2ldID0gMHg3YzAwO1xuICAgICAgYmFzZVRhYmxlW2kgfCAweDEwMF0gPSAweGZjMDA7XG4gICAgICBzaGlmdFRhYmxlW2ldID0gMTM7XG4gICAgICBzaGlmdFRhYmxlW2kgfCAweDEwMF0gPSAxMztcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7XG4gIGNvbnN0IGZsb2F0VmlldyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgY29uc3QgdWludDMyVmlldyA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAobnVtKSB7XG4gICAgZmxvYXRWaWV3WzBdID0gcm91bmRUb0Zsb2F0MTYobnVtKTtcbiAgICBjb25zdCBmID0gdWludDMyVmlld1swXTtcbiAgICBjb25zdCBlID0gKGYgPj4gMjMpICYgMHgxZmY7XG4gICAgcmV0dXJuIGJhc2VUYWJsZVtlXSArICgoZiAmIDB4MDA3ZmZmZmYpID4+IHNoaWZ0VGFibGVbZV0pO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSB7XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgNzpcbiAgICBjYXNlIDEwOlxuICAgIGNhc2UgMTE6XG4gICAgICByZXR1cm4gMjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKSB7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIDA6XG4gICAgICB2aWV3ID0gRmxvYXQzMkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgdmlldyA9IEZsb2F0NjRBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZpZXcgPSBJbnQ4QXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2aWV3ID0gVWludDhBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZpZXcgPSBJbnQxNkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmlldyA9IFVpbnQxNkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgdmlldyA9IEludDMyQXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6XG4gICAgICB2aWV3ID0gSW50MzJBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZpZXcgPSBJbnQzMkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OlxuICAgICAgdmlldyA9IEludDMyQXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmlldyA9IEZsb2F0MzJBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICB2aWV3ID0gRmxvYXQ2NEFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIHZpZXcgPSBVaW50OEFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMzpcbiAgICAgIHZpZXcgPSBVaW50MTZBcnJheTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyMDJcIjtcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG4vL1JlcXVpcmVzOiBjYW1sX3BhY2tGbG9hdDE2LCBjYW1sX3VucGFja0Zsb2F0MTZcbmNsYXNzIE1sX0JpZ2FycmF5IHtcbiAgY29uc3RydWN0b3Ioa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcbiAgICB0aGlzLmtpbmQgPSBraW5kO1xuICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgIHRoaXMuZGltcyA9IGRpbXM7XG4gICAgdGhpcy5kYXRhID0gYnVmZmVyO1xuICAgIHRoaXMuY2FtbF9jdXN0b20gPSBjYW1sX2JhX2N1c3RvbV9uYW1lO1xuICB9XG5cbiAgb2Zmc2V0KGFyZykge1xuICAgIHZhciBvZnMgPSAwO1xuICAgIGlmICh0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImJpZ2FycmF5LmpzOiBpbnZhbGlkIG9mZnNldFwiKTtcbiAgICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPT0gYXJnLmxlbmd0aClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgICBpZiAodGhpcy5sYXlvdXQgPT09IDAgLyogY19sYXlvdXQgKi8pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmdbaV0gPCAwIHx8IGFyZ1tpXSA+PSB0aGlzLmRpbXNbaV0pIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgICAgb2ZzID0gb2ZzICogdGhpcy5kaW1zW2ldICsgYXJnW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5kaW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmIChhcmdbaV0gPCAxIHx8IGFyZ1tpXSA+IHRoaXMuZGltc1tpXSkge1xuICAgICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBvZnMgPSBvZnMgKiB0aGlzLmRpbXNbaV0gKyAoYXJnW2ldIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZnM7XG4gIH1cblxuICBnZXQob2ZzKSB7XG4gICAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gSW50NjRcbiAgICAgICAgdmFyIGwgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgICAgICB2YXIgaCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLCBoKTtcbiAgICAgIGNhc2UgMTA6XG4gICAgICBjYXNlIDExOlxuICAgICAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgICAgICB2YXIgciA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICAgICAgcmV0dXJuIFsyNTQsIHIsIGldO1xuICAgICAgY2FzZSAxMzpcbiAgICAgICAgcmV0dXJuIGNhbWxfdW5wYWNrRmxvYXQxNih0aGlzLmRhdGFbb2ZzXSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW29mc107XG4gICAgfVxuICB9XG5cbiAgc2V0KG9mcywgdikge1xuICAgIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIC8vIEludDY0XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSB2WzFdO1xuICAgICAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gdlsyXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB0aGlzLmRhdGFbb2ZzXSA9IGNhbWxfcGFja0Zsb2F0MTYodik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmaWxsKHYpIHtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSA3OlxuICAgICAgICAvLyBJbnQ2NFxuICAgICAgICB2YXIgYSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmZpbGwoYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IGkgJSAyID09PSAwID8gYSA6IGI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgICAgIHZhciBpbSA9IHZbMV07XG4gICAgICAgIHZhciByZSA9IHZbMl07XG4gICAgICAgIGlmIChpbSA9PT0gcmUpIHtcbiAgICAgICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IGkgJSAyID09PSAwID8gaW0gOiByZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB0aGlzLmRhdGEuZmlsbChjYW1sX3BhY2tGbG9hdDE2KHYpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29tcGFyZShiLCB0b3RhbCkge1xuICAgIGlmICh0aGlzLmxheW91dCAhPT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9PSBiLmtpbmQpIHtcbiAgICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICAgIHZhciBrMiA9IGIua2luZCB8IChiLmxheW91dCA8PCA4KTtcbiAgICAgIHJldHVybiBrMiAtIGsxO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPT0gYi5kaW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGIuZGltcy5sZW5ndGggLSB0aGlzLmRpbXMubGVuZ3RoO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGlmICh0aGlzLmRpbXNbaV0gIT09IGIuZGltc1tpXSkgcmV0dXJuIHRoaXMuZGltc1tpXSA8IGIuZGltc1tpXSA/IC0xIDogMTtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIEZsb2F0c1xuICAgICAgICB2YXIgeCwgeTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5kYXRhW2ldO1xuICAgICAgICAgIHkgPSBiLmRhdGFbaV07XG4gICAgICAgICAgaWYgKHggPCB5KSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoeCAhPT0geSkge1xuICAgICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE51bWJlci5OYU47XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih4KSkgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih5KSkgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gSW50NjRcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2kgKyAxXSA8IGIuZGF0YVtpICsgMV0pIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2kgKyAxXSA+IGIuZGF0YVtpICsgMV0pIHJldHVybiAxO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPj4+IDAgPCBiLmRhdGFbaV0gPj4+IDApIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ldID4+PiAwID4gYi5kYXRhW2ldID4+PiAwKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGFhID0gY2FtbF91bnBhY2tGbG9hdDE2KHRoaXMuZGF0YVtpXSk7XG4gICAgICAgICAgdmFyIGJiID0gY2FtbF91bnBhY2tGbG9hdDE2KGIuZGF0YVtpXSk7XG4gICAgICAgICAgaWYgKGFhIDwgYmIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYWEgPiBiYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDM6XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIDU6XG4gICAgICBjYXNlIDY6XG4gICAgICBjYXNlIDg6XG4gICAgICBjYXNlIDk6XG4gICAgICBjYXNlIDEyOlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPCBiLmRhdGFbaV0pIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlfY18xXzFcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmNsYXNzIE1sX0JpZ2FycmF5X2NfMV8xIGV4dGVuZHMgTWxfQmlnYXJyYXkge1xuICBvZmZzZXQoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmxlbmd0aCA9PT0gMSkgYXJnID0gYXJnWzBdO1xuICAgICAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJNbF9CaWdhcnJheV9jXzFfMS5vZmZzZXRcIik7XG4gICAgfVxuICAgIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICByZXR1cm4gYXJnO1xuICB9XG5cbiAgZ2V0KG9mcykge1xuICAgIHJldHVybiB0aGlzLmRhdGFbb2ZzXTtcbiAgfVxuXG4gIHNldChvZnMsIHYpIHtcbiAgICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmaWxsKHYpIHtcbiAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLCBiLCB0b3RhbCkge1xuICByZXR1cm4gYS5jb21wYXJlKGIsIHRvdGFsKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgTWxfQmlnYXJyYXlfY18xXzEsIGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSkge1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmIChjYW1sX2JhX2dldF9zaXplKGRpbXMpICogc2l6ZV9wZXJfZWxlbWVudCAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJsZW5ndGggZG9lc24ndCBtYXRjaCBkaW1zXCIpO1xuICB9XG4gIGlmIChcbiAgICBsYXlvdXQgPT09IDAgJiYgLy8gY19sYXlvdXRcbiAgICBkaW1zLmxlbmd0aCA9PT0gMSAmJiAvLyBBcnJheTFcbiAgICBzaXplX3Blcl9lbGVtZW50ID09PSAxICYmXG4gICAga2luZCAhPT0gMTMgLy8gZmxvYXQxNlxuICApXG4gICAgLy8gMS10by0xIG1hcHBpbmdcbiAgICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHJldHVybiBuZXcgTWxfQmlnYXJyYXkoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlKGtpbmQsIGxheW91dCwgZGltc19tbCkge1xuICB2YXIgZGltcyA9IGNhbWxfanNfZnJvbV9hcnJheShkaW1zX21sKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfY2hhbmdlX2xheW91dChiYSwgbGF5b3V0KSB7XG4gIGlmIChiYS5sYXlvdXQgPT09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIG5ld19kaW1zW2ldID0gYmEuZGltc1tiYS5kaW1zLmxlbmd0aCAtIGkgLSAxXTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBsYXlvdXQsIG5ld19kaW1zLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kXG5mdW5jdGlvbiBjYW1sX2JhX2tpbmQoYmEpIHtcbiAgcmV0dXJuIGJhLmtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbGF5b3V0XG5mdW5jdGlvbiBjYW1sX2JhX2xheW91dChiYSkge1xuICByZXR1cm4gYmEubGF5b3V0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX251bV9kaW1zXG5mdW5jdGlvbiBjYW1sX2JhX251bV9kaW1zKGJhKSB7XG4gIHJldHVybiBiYS5kaW1zLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1cbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9kaW0oYmEsIGkpIHtcbiAgaWYgKGkgPCAwIHx8IGkgPj0gYmEuZGltcy5sZW5ndGgpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmRpbVwiKTtcbiAgcmV0dXJuIGJhLmRpbXNbaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzFcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8xKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8yKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8zKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfZ2VuZXJpYyhiYSwgaSkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSk7XG4gIHJldHVybiBiYS5nZXQob2ZzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQxNihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiBiMSB8IChiMiA8PCA4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQzMihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMgKyAwKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcyArIDEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzICsgMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMgKyAzKTtcbiAgcmV0dXJuIChiMSA8PCAwKSB8IChiMiA8PCA4KSB8IChiMyA8PCAxNikgfCAoYjQgPDwgMjQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDY0KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYgKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyArIDApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMgKyAyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyArIDMpO1xuICB2YXIgYjUgPSBiYS5nZXQob2ZzICsgNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMgKyA1KTtcbiAgdmFyIGI3ID0gYmEuZ2V0KG9mcyArIDYpO1xuICB2YXIgYjggPSBiYS5nZXQob2ZzICsgNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCwgYjcsIGI2LCBiNSwgYjQsIGIzLCBiMiwgYjFdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMShiYSwgaTApIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoaTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMihiYSwgaTAsIGkxKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCwgaTFdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzMoYmEsIGkwLCBpMSwgaTIpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLCBpMSwgaTJdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfZ2VuZXJpYyhiYSwgaSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQxNihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMgKyAwLCB2ICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAxLCAodiA+Pj4gOCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MzIoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZiAob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzICsgMCwgdiAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzICsgMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAyLCAodiA+Pj4gMTYpICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAzLCAodiA+Pj4gMjQpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDY0KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYgKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIHYgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcyArIGksIHZbNyAtIGldKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzEoYmEsIGkwLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoaTApLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCwgaTFdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8zXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8zKGJhLCBpMCwgaTEsIGkyLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLCBpMSwgaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9PSBzcmMuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRzdC5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkc3QuZGltc1tpXSAhPT0gc3JjLmRpbXNbaV0pXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGRzdC5kYXRhLnNldChzcmMuZGF0YSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3N1YlxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc3ViKGJhLCBvZnMsIGxlbikge1xuICB2YXIgY2hhbmdlZF9kaW07XG4gIHZhciBtdWwgPSAxO1xuICBpZiAoYmEubGF5b3V0ID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gMDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoIC0gMTsgaSsrKSBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gYmEuZGltcy5sZW5ndGggLSAxO1xuICAgIG9mcyA9IG9mcyAtIDE7XG4gIH1cbiAgaWYgKG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgKyBsZW4gPiBiYS5kaW1zW2NoYW5nZWRfZGltXSkge1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnN1YjogYmFkIHN1Yi1hcnJheVwiKTtcbiAgfVxuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBuZXdfZGltc1tpXSA9IGJhLmRpbXNbaV07XG4gIG5ld19kaW1zW2NoYW5nZWRfZGltXSA9IGxlbjtcbiAgbXVsICo9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogbXVsLCAob2ZzICsgbGVuKSAqIG11bCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NsaWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3NsaWNlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBudW1faW5kcyA9IHZpbmQubGVuZ3RoO1xuICB2YXIgaW5kZXggPSBbXTtcbiAgdmFyIHN1Yl9kaW1zID0gW107XG4gIHZhciBvZnM7XG5cbiAgaWYgKG51bV9pbmRzID4gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc2xpY2U6IHRvbyBtYW55IGluZGljZXNcIik7XG5cbiAgLy8gQ29tcHV0ZSBvZmZzZXQgYW5kIGNoZWNrIGJvdW5kc1xuICBpZiAoYmEubGF5b3V0ID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKSBpbmRleFtpXSA9IHZpbmRbaV07XG4gICAgZm9yICg7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBpbmRleFtpXSA9IDA7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKG51bV9pbmRzKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzICsgaV0gPSB2aW5kW2ldO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kczsgaSsrKSBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShcbiAgICBvZnMgKiBzaXplX3Blcl9lbGVtZW50LFxuICAgIChvZnMgKyBzaXplKSAqIHNpemVfcGVyX2VsZW1lbnQsXG4gICk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBzdWJfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3Jlc2hhcGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbmZ1bmN0aW9uIGNhbWxfYmFfcmVzaGFwZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbmV3X2RpbSA9IFtdO1xuICB2YXIgbnVtX2RpbXMgPSB2aW5kLmxlbmd0aDtcblxuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIH1cbiAgdmFyIG51bV9lbHRzID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgbmV3X2RpbVtpXSA9IHZpbmRbaV07XG4gICAgaWYgKG5ld19kaW1baV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIG51bV9lbHRzID0gbnVtX2VsdHMgKiBuZXdfZGltW2ldO1xuICB9XG5cbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICAvLyBDaGVjayB0aGF0IHNpemVzIGFncmVlXG4gIGlmIChudW1fZWx0cyAhPT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9wYWNrRmxvYXQxNlxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgYmEua2luZCB8IChiYS5sYXlvdXQgPDwgOCkpO1xuICBpZiAoYmEuY2FtbF9jdXN0b20gPT09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYmEuZGltc1tpXSA8IDB4ZmZmZikgd3JpdGVyLndyaXRlKDE2LCBiYS5kaW1zW2ldKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIDB4ZmZmZik7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgMCk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGltc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zW2ldKTtcbiAgc3dpdGNoIChiYS5raW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OiAvLyBJbnQxNkFycmF5XG4gICAgY2FzZSA1OiAvLyBVaW50MTZBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6IC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6IC8vIEludDMyQXJyYXkgKGludClcbiAgICBjYXNlIDk6IC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OiAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGJhLmdldChpKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEZsb2F0NjRBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOiAvLyBGbG9hdDE2QXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAwOiAvLyBGbG9hdDMyQXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYiA9IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICAgIHZhciBqID0gYmEuZ2V0KGkpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMl0pKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgICB2YXIgY29tcGxleCA9IGJhLmdldChpKTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzFdKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsyXSkpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlKDgsIGJbal0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfdW5wYWNrRmxvYXQxNlxuZnVuY3Rpb24gY2FtbF9iYV9kZXNlcmlhbGl6ZShyZWFkZXIsIHN6LCBuYW1lKSB7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmO1xuICB2YXIgbGF5b3V0ID0gKHRhZyA+PiA4KSAmIDE7XG4gIHZhciBkaW1zID0gW107XG4gIGlmIChuYW1lID09PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgICAgdmFyIHNpemVfZGltID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICAgIGlmIChzaXplX2RpbSA9PT0gMHhmZmZmKSB7XG4gICAgICAgIHZhciBzaXplX2RpbV9oaSA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIHZhciBzaXplX2RpbV9sbyA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIGlmIChzaXplX2RpbV9oaSAhPT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykgZGltcy5wdXNoKHJlYWRlci5yZWFkMzJ1KCkpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoZGltcyk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpO1xuICB2YXIgYmEgPSBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OiAvLyBJbnQxNkFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTogLy8gVWludDE2QXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OiAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OiAvLyBJbnQzMkFycmF5IChpbnQpXG4gICAgY2FzZSA5OiAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgICB2YXIgc2l4dHkgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICBpZiAoc2l4dHkpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXG4gICAgICAgICAgXCJpbnB1dF92YWx1ZTogY2Fubm90IHJlYWQgYmlnYXJyYXkgd2l0aCA2NC1iaXQgT0NhbWwgaW50c1wiLFxuICAgICAgICApO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgIHZhciBpbnQ2NCA9IGNhbWxfaW50NjRfb2ZfYnl0ZXModCk7XG4gICAgICAgIGJhLnNldChpLCBpbnQ2NCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEZsb2F0NjRBcnJheVxuICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICAgIGJhLnNldChpLCBmKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6IC8vIEZsb2F0MTZBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDA6IC8vIEZsb2F0MzJBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICAgIGJhLnNldChpLCBmKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgICB2YXIgaW0gPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICAgIGJhLnNldChpLCBbMjU0LCByZSwgaW1dKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgICBiYS5zZXQoaSwgWzI1NCwgcmUsIGltXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICBzelswXSA9ICg0ICsgbnVtX2RpbXMpICogNDtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9mcm9tXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfYmFfY3JlYXRlX3Vuc2FmZV0gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfZnJvbShkYXRhMSwgZGF0YTIsIF9qc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKSB7XG4gIGlmIChkYXRhMiB8fCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpID09PSAyKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFxuICAgICAgXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGExKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9oYXNoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF91bnBhY2tGbG9hdDE2LCBjYW1sX2hhc2hfbWl4X2Zsb2F0MTYsIGNhbWxfaGFzaF9taXhfZmxvYXQzMlxuZnVuY3Rpb24gY2FtbF9iYV9oYXNoKGJhKSB7XG4gIHZhciBudW1fZWx0cyA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIHZhciBoID0gMDtcbiAgc3dpdGNoIChiYS5raW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiAyNTYpIG51bV9lbHRzID0gMjU2O1xuICAgICAgdmFyIHcgPSAwLFxuICAgICAgICBpID0gMDtcbiAgICAgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9lbHRzOyBpICs9IDQpIHtcbiAgICAgICAgdyA9XG4gICAgICAgICAgKGJhLmRhdGFbaSArIDBdICYgMHhmZikgfFxuICAgICAgICAgICgoYmEuZGF0YVtpICsgMV0gJiAweGZmKSA8PCA4KSB8XG4gICAgICAgICAgKChiYS5kYXRhW2kgKyAyXSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgKGJhLmRhdGFbaSArIDNdIDw8IDI0KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICAgICAgfVxuICAgICAgdyA9IDA7XG4gICAgICBzd2l0Y2ggKG51bV9lbHRzICYgMykge1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICAgIHcgPSBiYS5kYXRhW2kgKyAyXSA8PCAxNjtcbiAgICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgICB3IHw9IGJhLmRhdGFbaSArIDFdIDw8IDg7XG4gICAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB3IHw9IGJhLmRhdGFbaSArIDBdO1xuICAgICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDogLy8gSW50MTZBcnJheVxuICAgIGNhc2UgNTogLy8gVWludDE2QXJyYXlcbiAgICAgIGlmIChudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgICB2YXIgdyA9IDAsXG4gICAgICAgIGkgPSAwO1xuICAgICAgZm9yIChpID0gMDsgaSArIDIgPD0gbnVtX2VsdHM7IGkgKz0gMikge1xuICAgICAgICB3ID0gKGJhLmRhdGFbaSArIDBdICYgMHhmZmZmKSB8IChiYS5kYXRhW2kgKyAxXSA8PCAxNik7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICAgIH1cbiAgICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPT0gMCkgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OiAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6IC8vIEludDMyQXJyYXkgKGludClcbiAgICBjYXNlIDk6IC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6IC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgICBudW1fZWx0cyAqPSAyO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSB7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgbnVtX2VsdHMgKj0gMjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICAgIGNhc2UgMDogLy8gRmxvYXQzMkFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKylcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQzMihoLCBiYS5kYXRhW2ldKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgbnVtX2VsdHMgKj0gMjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICAgIGNhc2UgMTogLy8gRmxvYXQ2NEFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOlxuICAgICAgaWYgKG51bV9lbHRzID4gMTI4KSBudW1fZWx0cyA9IDEyODtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykge1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdDE2KGgsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXQxNlxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQxNihoYXNoLCBkKSB7XG4gIC8qIE5vcm1hbGl6ZSBOYU5zICovXG4gIGlmICgoZCAmIDB4N2MwMCkgPT09IDB4N2MwMCAmJiAoZCAmIDB4MDNmZikgIT09IDApIHtcbiAgICBkID0gMHg3YzAxO1xuICB9IGVsc2UgaWYgKGQgPT09IDB4ODAwMCkge1xuICAgIC8qIE5vcm1hbGl6ZSAtMCBpbnRvICswICovXG4gICAgZCA9IDA7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQzMihoYXNoLCB2KSB7XG4gIHZhciBpID0gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KHYpO1xuICAvKiBOb3JtYWxpemUgTmFOcyAqL1xuICBpZiAoKGkgJiAweDdmODAwMDAwKSA9PT0gMHg3ZjgwMDAwMCAmJiAoaSAmIDB4N2ZmZmZmKSAhPT0gMCkge1xuICAgIGkgPSAweDdmODAwMDAxO1xuICB9IGVsc2UgaWYgKGkgPT09ICgweDgwMDAwMDAwIHwgMCkpIHtcbiAgICAvKiBOb3JtYWxpemUgLTAgaW50byArMCAqL1xuICAgIC8vIFRoaXMgY29kZSBwYXRoIGlzIG5vdCB1c2VkIGJ5IGNhbWxfaGFzaCBiZWNhdXNlIDAgYW5kIC0wIGxvb2tcbiAgICAvLyBsaWtlIGludGVnZXJzXG4gICAgaSA9IDA7XG4gIH1cbiAgaGFzaCA9IGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGkpO1xuICByZXR1cm4gaGFzaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV90b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJhKSB7XG4gIHJldHVybiBiYS5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpIHtcbiAgdmFyIGtpbmQ7XG4gIGlmICh0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkga2luZCA9IDA7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpIGtpbmQgPSAyO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSBraW5kID0gNDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkga2luZCA9IDU7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgcmV0dXJuIGtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5KHRhKSB7XG4gIHZhciBraW5kID0gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKTtcbiAgdmFyIHRhID1cbiAgICAvKiBOZWVkZWQgdG8gYXZvaWQgdW5zaWduZWQgc2V0dGVycyBvdmVyZmxvd2luZ1xuICAgICAgICAgdGhlIHJhbmdlIG9mIE9DYW1sIFtpbnQzMl0gdmFsdWVzLiAqL1xuICAgIHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXlcbiAgICAgID8gbmV3IEludDMyQXJyYXkodGEuYnVmZmVyLCB0YS5ieXRlT2Zmc2V0LCB0YS5sZW5ndGgpXG4gICAgICA6IHRhO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG4iLCIvLy8vLy8vLy8gQklHU1RSSU5HXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYmlnc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9iaWdzdHJpbmcoaCwgYnMpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGJzLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyIG11dGFibGVcbmZ1bmN0aW9uIGJpZ3N0cmluZ190b19hcnJheV9idWZmZXIoYnMpIHtcbiAgcmV0dXJuIGJzLmRhdGEuYnVmZmVyO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5KGJzKSB7XG4gIHJldHVybiBicy5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlcihhYikge1xuICB2YXIgdGEgPSBuZXcgVWludDhBcnJheShhYik7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoMTIsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheShiYSkge1xuICB2YXIgdGEgPSBuZXcgVWludDhBcnJheShcbiAgICBiYS5idWZmZXIsXG4gICAgYmEuYnl0ZU9mZnNldCxcbiAgICBiYS5sZW5ndGggKiBiYS5CWVRFU19QRVJfRUxFTUVOVCxcbiAgKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSgxMiwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfbWVtY21wXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19tZW1jbXAoczEsIHBvczEsIHMyLCBwb3MyLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhID0gY2FtbF9iYV9nZXRfMShzMSwgcG9zMSArIGkpO1xuICAgIHZhciBiID0gY2FtbF9iYV9nZXRfMShzMiwgcG9zMiArIGkpO1xuICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYShiYTEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYgKDEyICE9PSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZiAobGVuID09PSAwKSByZXR1cm4gMDtcbiAgdmFyIG9mczEgPSBiYTEub2Zmc2V0KHBvczEpO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmIChvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmIChvZnMyICsgbGVuID4gYmEyLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIHZhciBzbGljZSA9IGJhMS5kYXRhLnN1YmFycmF5KG9mczEsIG9mczEgKyBsZW4pO1xuICBiYTIuZGF0YS5zZXQoc2xpY2UsIHBvczIpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmEoc3RyMSwgcG9zMSwgYmEyLCBwb3MyLCBsZW4pIHtcbiAgaWYgKDEyICE9PSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYgKHBvczEgKyBsZW4gPiBjYW1sX21sX3N0cmluZ19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYgKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoc3RyMSkuc3ViYXJyYXkocG9zMSwgcG9zMSArIGxlbik7XG4gIGJhMi5kYXRhLnNldChzbGljZSwgb2ZzMik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhKHN0cjEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmEyLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmIChwb3MxICsgbGVuID4gY2FtbF9tbF9ieXRlc19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYgKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzdHIxKS5zdWJhcnJheShwb3MxLCBwb3MxICsgbGVuKTtcbiAgYmEyLmRhdGEuc2V0KHNsaWNlLCBvZnMyKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlcyhiYTEsIHBvczEsIGJ5dGVzMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMSA9IGJhMS5vZmZzZXQocG9zMSk7XG4gIGlmIChvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmIChwb3MyICsgbGVuID4gY2FtbF9tbF9ieXRlc19sZW5ndGgoYnl0ZXMyKSkge1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zdWJhcnJheShvZnMxLCBvZnMxICsgbGVuKTtcbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoc2xpY2UpLCAwLCBieXRlczIsIHBvczIsIGxlbik7XG4gIHJldHVybiAwO1xufVxuIiwiLy9Qcm92aWRlczogYmxha2UyYlxuLy9WZXJzaW9uOiA+PSA1LjJcbnZhciBibGFrZTJiID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQmxha2UyQiBpbiBwdXJlIEphdmFzY3JpcHRcbiAgLy8gQWRhcHRlZCBmcm9tIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaW4gUkZDNzY5M1xuICAvLyBQb3J0ZWQgdG8gSmF2YXNjcmlwdCBieSBEQyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9kY3Bvc2NoXG5cbiAgLy8gNjQtYml0IHVuc2lnbmVkIGFkZGl0aW9uXG4gIC8vIFNldHMgdlthLGErMV0gKz0gdltiLGIrMV1cbiAgLy8gdiBzaG91bGQgYmUgYSBVaW50MzJBcnJheVxuICBmdW5jdGlvbiBBREQ2NEFBKHYsIGEsIGIpIHtcbiAgICBjb25zdCBvMCA9IHZbYV0gKyB2W2JdO1xuICAgIGxldCBvMSA9IHZbYSArIDFdICsgdltiICsgMV07XG4gICAgaWYgKG8wID49IDB4MTAwMDAwMDAwKSB7XG4gICAgICBvMSsrO1xuICAgIH1cbiAgICB2W2FdID0gbzA7XG4gICAgdlthICsgMV0gPSBvMTtcbiAgfVxuXG4gIC8vIDY0LWJpdCB1bnNpZ25lZCBhZGRpdGlvblxuICAvLyBTZXRzIHZbYSxhKzFdICs9IGJcbiAgLy8gYjAgaXMgdGhlIGxvdyAzMiBiaXRzIG9mIGIsIGIxIHJlcHJlc2VudHMgdGhlIGhpZ2ggMzIgYml0c1xuICBmdW5jdGlvbiBBREQ2NEFDKHYsIGEsIGIwLCBiMSkge1xuICAgIGxldCBvMCA9IHZbYV0gKyBiMDtcbiAgICBpZiAoYjAgPCAwKSB7XG4gICAgICBvMCArPSAweDEwMDAwMDAwMDtcbiAgICB9XG4gICAgbGV0IG8xID0gdlthICsgMV0gKyBiMTtcbiAgICBpZiAobzAgPj0gMHgxMDAwMDAwMDApIHtcbiAgICAgIG8xKys7XG4gICAgfVxuICAgIHZbYV0gPSBvMDtcbiAgICB2W2EgKyAxXSA9IG8xO1xuICB9XG5cbiAgLy8gTGl0dGxlLWVuZGlhbiBieXRlIGFjY2Vzc1xuICBmdW5jdGlvbiBCMkJfR0VUMzIoYXJyLCBpKSB7XG4gICAgcmV0dXJuIGFycltpXSBeIChhcnJbaSArIDFdIDw8IDgpIF4gKGFycltpICsgMl0gPDwgMTYpIF4gKGFycltpICsgM10gPDwgMjQpO1xuICB9XG5cbiAgLy8gRyBNaXhpbmcgZnVuY3Rpb25cbiAgLy8gVGhlIFJPVFJzIGFyZSBpbmxpbmVkIGZvciBzcGVlZFxuICBmdW5jdGlvbiBCMkJfRyhhLCBiLCBjLCBkLCBpeCwgaXkpIHtcbiAgICBjb25zdCB4MCA9IG1baXhdO1xuICAgIGNvbnN0IHgxID0gbVtpeCArIDFdO1xuICAgIGNvbnN0IHkwID0gbVtpeV07XG4gICAgY29uc3QgeTEgPSBtW2l5ICsgMV07XG5cbiAgICBBREQ2NEFBKHYsIGEsIGIpOyAvLyB2W2EsYSsxXSArPSB2W2IsYisxXSAuLi4gaW4gSlMgd2UgbXVzdCBzdG9yZSBhIHVpbnQ2NCBhcyB0d28gdWludDMyc1xuICAgIEFERDY0QUModiwgYSwgeDAsIHgxKTsgLy8gdlthLCBhKzFdICs9IHggLi4uIHgwIGlzIHRoZSBsb3cgMzIgYml0cyBvZiB4LCB4MSBpcyB0aGUgaGlnaCAzMiBiaXRzXG5cbiAgICAvLyB2W2QsZCsxXSA9ICh2W2QsZCsxXSB4b3IgdlthLGErMV0pIHJvdGF0ZWQgdG8gdGhlIHJpZ2h0IGJ5IDMyIGJpdHNcbiAgICBsZXQgeG9yMCA9IHZbZF0gXiB2W2FdO1xuICAgIGxldCB4b3IxID0gdltkICsgMV0gXiB2W2EgKyAxXTtcbiAgICB2W2RdID0geG9yMTtcbiAgICB2W2QgKyAxXSA9IHhvcjA7XG5cbiAgICBBREQ2NEFBKHYsIGMsIGQpO1xuXG4gICAgLy8gdltiLGIrMV0gPSAodltiLGIrMV0geG9yIHZbYyxjKzFdKSByb3RhdGVkIHJpZ2h0IGJ5IDI0IGJpdHNcbiAgICB4b3IwID0gdltiXSBeIHZbY107XG4gICAgeG9yMSA9IHZbYiArIDFdIF4gdltjICsgMV07XG4gICAgdltiXSA9ICh4b3IwID4+PiAyNCkgXiAoeG9yMSA8PCA4KTtcbiAgICB2W2IgKyAxXSA9ICh4b3IxID4+PiAyNCkgXiAoeG9yMCA8PCA4KTtcblxuICAgIEFERDY0QUEodiwgYSwgYik7XG4gICAgQURENjRBQyh2LCBhLCB5MCwgeTEpO1xuXG4gICAgLy8gdltkLGQrMV0gPSAodltkLGQrMV0geG9yIHZbYSxhKzFdKSByb3RhdGVkIHJpZ2h0IGJ5IDE2IGJpdHNcbiAgICB4b3IwID0gdltkXSBeIHZbYV07XG4gICAgeG9yMSA9IHZbZCArIDFdIF4gdlthICsgMV07XG4gICAgdltkXSA9ICh4b3IwID4+PiAxNikgXiAoeG9yMSA8PCAxNik7XG4gICAgdltkICsgMV0gPSAoeG9yMSA+Pj4gMTYpIF4gKHhvcjAgPDwgMTYpO1xuXG4gICAgQURENjRBQSh2LCBjLCBkKTtcblxuICAgIC8vIHZbYixiKzFdID0gKHZbYixiKzFdIHhvciB2W2MsYysxXSkgcm90YXRlZCByaWdodCBieSA2MyBiaXRzXG4gICAgeG9yMCA9IHZbYl0gXiB2W2NdO1xuICAgIHhvcjEgPSB2W2IgKyAxXSBeIHZbYyArIDFdO1xuICAgIHZbYl0gPSAoeG9yMSA+Pj4gMzEpIF4gKHhvcjAgPDwgMSk7XG4gICAgdltiICsgMV0gPSAoeG9yMCA+Pj4gMzEpIF4gKHhvcjEgPDwgMSk7XG4gIH1cblxuICAvLyBJbml0aWFsaXphdGlvbiBWZWN0b3JcbiAgY29uc3QgQkxBS0UyQl9JVjMyID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweGYzYmNjOTA4LCAweDZhMDllNjY3LCAweDg0Y2FhNzNiLCAweGJiNjdhZTg1LCAweGZlOTRmODJiLCAweDNjNmVmMzcyLFxuICAgIDB4NWYxZDM2ZjEsIDB4YTU0ZmY1M2EsIDB4YWRlNjgyZDEsIDB4NTEwZTUyN2YsIDB4MmIzZTZjMWYsIDB4OWIwNTY4OGMsXG4gICAgMHhmYjQxYmQ2YiwgMHgxZjgzZDlhYiwgMHgxMzdlMjE3OSwgMHg1YmUwY2QxOSxcbiAgXSk7XG5cbiAgY29uc3QgU0lHTUE4ID0gW1xuICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE0LCAxMCwgNCwgOCwgOSwgMTUsXG4gICAgMTMsIDYsIDEsIDEyLCAwLCAyLCAxMSwgNywgNSwgMywgMTEsIDgsIDEyLCAwLCA1LCAyLCAxNSwgMTMsIDEwLCAxNCwgMywgNixcbiAgICA3LCAxLCA5LCA0LCA3LCA5LCAzLCAxLCAxMywgMTIsIDExLCAxNCwgMiwgNiwgNSwgMTAsIDQsIDAsIDE1LCA4LCA5LCAwLCA1LFxuICAgIDcsIDIsIDQsIDEwLCAxNSwgMTQsIDEsIDExLCAxMiwgNiwgOCwgMywgMTMsIDIsIDEyLCA2LCAxMCwgMCwgMTEsIDgsIDMsIDQsXG4gICAgMTMsIDcsIDUsIDE1LCAxNCwgMSwgOSwgMTIsIDUsIDEsIDE1LCAxNCwgMTMsIDQsIDEwLCAwLCA3LCA2LCAzLCA5LCAyLCA4LFxuICAgIDExLCAxMywgMTEsIDcsIDE0LCAxMiwgMSwgMywgOSwgNSwgMCwgMTUsIDQsIDgsIDYsIDIsIDEwLCA2LCAxNSwgMTQsIDksIDExLFxuICAgIDMsIDAsIDgsIDEyLCAyLCAxMywgNywgMSwgNCwgMTAsIDUsIDEwLCAyLCA4LCA0LCA3LCA2LCAxLCA1LCAxNSwgMTEsIDksIDE0LFxuICAgIDMsIDEyLCAxMywgMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTQsIDEwLFxuICAgIDQsIDgsIDksIDE1LCAxMywgNiwgMSwgMTIsIDAsIDIsIDExLCA3LCA1LCAzLFxuICBdO1xuXG4gIC8vIFRoZXNlIGFyZSBvZmZzZXRzIGludG8gYSB1aW50NjQgYnVmZmVyLlxuICAvLyBNdWx0aXBseSB0aGVtIGFsbCBieSAyIHRvIG1ha2UgdGhlbSBvZmZzZXRzIGludG8gYSB1aW50MzIgYnVmZmVyLFxuICAvLyBiZWNhdXNlIHRoaXMgaXMgSmF2YXNjcmlwdCBhbmQgd2UgZG9uJ3QgaGF2ZSB1aW50NjRzXG4gIGNvbnN0IFNJR01BODIgPSBuZXcgVWludDhBcnJheShcbiAgICBTSUdNQTgubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDI7XG4gICAgfSksXG4gICk7XG5cbiAgLy8gQ29tcHJlc3Npb24gZnVuY3Rpb24uICdsYXN0JyBmbGFnIGluZGljYXRlcyBsYXN0IGJsb2NrLlxuICAvLyBOb3RlIHdlJ3JlIHJlcHJlc2VudGluZyAxNiB1aW50NjRzIGFzIDMyIHVpbnQzMnNcbiAgY29uc3QgdiA9IG5ldyBVaW50MzJBcnJheSgzMik7XG4gIGNvbnN0IG0gPSBuZXcgVWludDMyQXJyYXkoMzIpO1xuICBmdW5jdGlvbiBibGFrZTJiQ29tcHJlc3MoY3R4LCBsYXN0KSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgLy8gaW5pdCB3b3JrIHZhcmlhYmxlc1xuICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICB2W2ldID0gY3R4LmhbaV07XG4gICAgICB2W2kgKyAxNl0gPSBCTEFLRTJCX0lWMzJbaV07XG4gICAgfVxuXG4gICAgLy8gbG93IDY0IGJpdHMgb2Ygb2Zmc2V0XG4gICAgdlsyNF0gPSB2WzI0XSBeIGN0eC50O1xuICAgIHZbMjVdID0gdlsyNV0gXiAoY3R4LnQgLyAweDEwMDAwMDAwMCk7XG4gICAgLy8gaGlnaCA2NCBiaXRzIG5vdCBzdXBwb3J0ZWQsIG9mZnNldCBtYXkgbm90IGJlIGhpZ2hlciB0aGFuIDIqKjUzLTFcblxuICAgIC8vIGxhc3QgYmxvY2sgZmxhZyBzZXQgP1xuICAgIGlmIChsYXN0KSB7XG4gICAgICB2WzI4XSA9IH52WzI4XTtcbiAgICAgIHZbMjldID0gfnZbMjldO1xuICAgIH1cblxuICAgIC8vIGdldCBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICAgIG1baV0gPSBCMkJfR0VUMzIoY3R4LmIsIDQgKiBpKTtcbiAgICB9XG5cbiAgICAvLyB0d2VsdmUgcm91bmRzIG9mIG1peGluZ1xuICAgIC8vIHVuY29tbWVudCB0aGUgRGVidWdQcmludCBjYWxscyB0byBsb2cgdGhlIGNvbXB1dGF0aW9uXG4gICAgLy8gYW5kIG1hdGNoIHRoZSBSRkMgc2FtcGxlIGRvY3VtZW50YXRpb25cbiAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgQjJCX0coMCwgOCwgMTYsIDI0LCBTSUdNQTgyW2kgKiAxNiArIDBdLCBTSUdNQTgyW2kgKiAxNiArIDFdKTtcbiAgICAgIEIyQl9HKDIsIDEwLCAxOCwgMjYsIFNJR01BODJbaSAqIDE2ICsgMl0sIFNJR01BODJbaSAqIDE2ICsgM10pO1xuICAgICAgQjJCX0coNCwgMTIsIDIwLCAyOCwgU0lHTUE4MltpICogMTYgKyA0XSwgU0lHTUE4MltpICogMTYgKyA1XSk7XG4gICAgICBCMkJfRyg2LCAxNCwgMjIsIDMwLCBTSUdNQTgyW2kgKiAxNiArIDZdLCBTSUdNQTgyW2kgKiAxNiArIDddKTtcbiAgICAgIEIyQl9HKDAsIDEwLCAyMCwgMzAsIFNJR01BODJbaSAqIDE2ICsgOF0sIFNJR01BODJbaSAqIDE2ICsgOV0pO1xuICAgICAgQjJCX0coMiwgMTIsIDIyLCAyNCwgU0lHTUE4MltpICogMTYgKyAxMF0sIFNJR01BODJbaSAqIDE2ICsgMTFdKTtcbiAgICAgIEIyQl9HKDQsIDE0LCAxNiwgMjYsIFNJR01BODJbaSAqIDE2ICsgMTJdLCBTSUdNQTgyW2kgKiAxNiArIDEzXSk7XG4gICAgICBCMkJfRyg2LCA4LCAxOCwgMjgsIFNJR01BODJbaSAqIDE2ICsgMTRdLCBTSUdNQTgyW2kgKiAxNiArIDE1XSk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGN0eC5oW2ldID0gY3R4LmhbaV0gXiB2W2ldIF4gdltpICsgMTZdO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldXNhYmxlIHBhcmFtZXRlckJsb2NrXG4gIGNvbnN0IHBhcmFtZXRlckJsb2NrID0gbmV3IFVpbnQ4QXJyYXkoW1xuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vICAwOiBvdXRsZW4sIGtleWxlbiwgZmFub3V0LCBkZXB0aFxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vICA0OiBsZWFmIGxlbmd0aCwgc2VxdWVudGlhbCBtb2RlXG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gIDg6IG5vZGUgb2Zmc2V0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMTI6IG5vZGUgb2Zmc2V0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMTY6IG5vZGUgZGVwdGgsIGlubmVyIGxlbmd0aCwgcmZ1XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMjA6IHJmdVxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vIDI0OiByZnVcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyAyODogcmZ1XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMzI6IHNhbHRcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyAzNjogc2FsdFxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vIDQwOiBzYWx0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gNDQ6IHNhbHRcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA0ODogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA1MjogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA1NjogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA2MDogcGVyc29uYWxcbiAgXSk7XG5cbiAgLy8gQ3JlYXRlcyBhIEJMQUtFMmIgaGFzaGluZyBjb250ZXh0XG4gIC8vIFJlcXVpcmVzIGFuIG91dHB1dCBsZW5ndGggYmV0d2VlbiAxIGFuZCA2NCBieXRlc1xuICAvLyBUYWtlcyBhbiBvcHRpb25hbCBVaW50OEFycmF5IGtleVxuICBmdW5jdGlvbiBibGFrZTJiSW5pdChvdXRsZW4sIGtleSkge1xuICAgIGlmIChvdXRsZW4gPT09IDAgfHwgb3V0bGVuID4gNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgb3V0cHV0IGxlbmd0aCwgZXhwZWN0ZWQgMCA8IGxlbmd0aCA8PSA2NFwiKTtcbiAgICB9XG4gICAgaWYgKGtleS5sZW5ndGggPiA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBrZXksIGV4cGVjdGVkIFVpbnQ4QXJyYXkgd2l0aCAwIDwgbGVuZ3RoIDw9IDY0XCIpO1xuICAgIH1cblxuICAgIC8vIHN0YXRlLCAncGFyYW0gYmxvY2snXG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgYjogbmV3IFVpbnQ4QXJyYXkoMTI4KSxcbiAgICAgIGg6IG5ldyBVaW50MzJBcnJheSgxNiksXG4gICAgICB0OiAwLCAvLyBpbnB1dCBjb3VudFxuICAgICAgYzogMCwgLy8gcG9pbnRlciB3aXRoaW4gYnVmZmVyXG4gICAgICBvdXRsZW46IG91dGxlbiwgLy8gb3V0cHV0IGxlbmd0aCBpbiBieXRlc1xuICAgIH07XG5cbiAgICAvLyBpbml0aWFsaXplIHBhcmFtZXRlckJsb2NrIGJlZm9yZSB1c2FnZVxuICAgIHBhcmFtZXRlckJsb2NrLmZpbGwoMCk7XG4gICAgcGFyYW1ldGVyQmxvY2tbMF0gPSBvdXRsZW47XG4gICAgcGFyYW1ldGVyQmxvY2tbMV0gPSBrZXkubGVuZ3RoO1xuICAgIHBhcmFtZXRlckJsb2NrWzJdID0gMTsgLy8gZmFub3V0XG4gICAgcGFyYW1ldGVyQmxvY2tbM10gPSAxOyAvLyBkZXB0aFxuXG4gICAgLy8gaW5pdGlhbGl6ZSBoYXNoIHN0YXRlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBjdHguaFtpXSA9IEJMQUtFMkJfSVYzMltpXSBeIEIyQl9HRVQzMihwYXJhbWV0ZXJCbG9jaywgaSAqIDQpO1xuICAgIH1cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMCkge1xuICAgICAgYmxha2UyYlVwZGF0ZShjdHgsIGtleSk7XG4gICAgICAvLyBhdCB0aGUgZW5kXG4gICAgICBjdHguYyA9IDEyODtcbiAgICB9XG5cbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgLy8gVXBkYXRlcyBhIEJMQUtFMmIgc3RyZWFtaW5nIGhhc2hcbiAgLy8gUmVxdWlyZXMgaGFzaCBjb250ZXh0IGFuZCBVaW50OEFycmF5IChieXRlIGFycmF5KVxuICBmdW5jdGlvbiBibGFrZTJiVXBkYXRlKGN0eCwgaW5wdXQpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY3R4LmMgPT09IDEyOCkge1xuICAgICAgICAvLyBidWZmZXIgZnVsbCA/XG4gICAgICAgIGN0eC50ICs9IGN0eC5jOyAvLyBhZGQgY291bnRlcnNcbiAgICAgICAgYmxha2UyYkNvbXByZXNzKGN0eCwgZmFsc2UpOyAvLyBjb21wcmVzcyAobm90IGxhc3QpXG4gICAgICAgIGN0eC5jID0gMDsgLy8gY291bnRlciB0byB6ZXJvXG4gICAgICB9XG4gICAgICBjdHguYltjdHguYysrXSA9IGlucHV0W2ldO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXBsZXRlcyBhIEJMQUtFMmIgc3RyZWFtaW5nIGhhc2hcbiAgLy8gUmV0dXJucyBhIFVpbnQ4QXJyYXkgY29udGFpbmluZyB0aGUgbWVzc2FnZSBkaWdlc3RcbiAgZnVuY3Rpb24gYmxha2UyYkZpbmFsKGN0eCkge1xuICAgIGN0eC50ICs9IGN0eC5jOyAvLyBtYXJrIGxhc3QgYmxvY2sgb2Zmc2V0XG5cbiAgICB3aGlsZSAoY3R4LmMgPCAxMjgpIHtcbiAgICAgIC8vIGZpbGwgdXAgd2l0aCB6ZXJvc1xuICAgICAgY3R4LmJbY3R4LmMrK10gPSAwO1xuICAgIH1cbiAgICBibGFrZTJiQ29tcHJlc3MoY3R4LCB0cnVlKTsgLy8gZmluYWwgYmxvY2sgZmxhZyA9IDFcblxuICAgIC8vIGxpdHRsZSBlbmRpYW4gY29udmVydCBhbmQgc3RvcmVcbiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShjdHgub3V0bGVuKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN0eC5vdXRsZW47IGkrKykge1xuICAgICAgb3V0W2ldID0gY3R4LmhbaSA+PiAyXSA+PiAoOCAqIChpICYgMykpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIHJldHVybiB7IEluaXQ6IGJsYWtlMmJJbml0LCBVcGRhdGU6IGJsYWtlMmJVcGRhdGUsIEZpbmFsOiBibGFrZTJiRmluYWwgfTtcbn0pKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxha2UyX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGJsYWtlMmJcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX2JsYWtlMl9jcmVhdGUoaGFzaGxlbiwga2V5KSB7XG4gIGtleSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKGtleSk7XG4gIGlmIChrZXkubGVuZ3RoID4gNjQpIHtcbiAgICBrZXkuc3ViYXJyYXkoMCwgNjQpO1xuICB9XG4gIHJldHVybiBibGFrZTJiLkluaXQoaGFzaGxlbiwga2V5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBibGFrZTJiXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBfaGFzaGxlbikge1xuICAvLyBjdHgub3V0bGVuID09PSBoYXNobGVuXG4gIHZhciByID0gYmxha2UyYi5GaW5hbChjdHgpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkocik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogYmxha2UyYlxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfdXBkYXRlKGN0eCwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgaW5wdXQgPSBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyhidWYpO1xuICBpbnB1dCA9IGlucHV0LnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKTtcbiAgYmxha2UyYi5VcGRhdGUoY3R4LCBpbnB1dCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsYWtlMl91cGRhdGVcbi8vUmVxdWlyZXM6IGJsYWtlMmJcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX2JsYWtlMl91cGRhdGUoY3R4LCBidWYsIG9mcywgbGVuKSB7XG4gIHZhciBpbnB1dCA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKTtcbiAgaW5wdXQgPSBpbnB1dC5zdWJhcnJheShvZnMsIG9mcyArIGxlbik7XG4gIGJsYWtlMmIuVXBkYXRlKGN0eCwgaW5wdXQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfc3RyaW5nKGhhc2hsZW4sIGtleSwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleSk7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfc3RyaW5nKGhhc2hsZW4sIGtleSwgYnVmX3N0ciwgb2ZzLCBsZW4pIHtcbiAgdmFyIGN0eCA9IGNhbWxfYmxha2UyX2NyZWF0ZShoYXNobGVuLCBrZXkpO1xuICB2YXIgYnVmID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoYnVmX3N0cik7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfdXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9maW5hbFxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfYmxha2UyX2J5dGVzKGhhc2hsZW4sIGtleSwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleSk7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogYmxha2UyX2pzX2Zvcl93YXNtX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfY3JlYXRlLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiB3YXNtXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX2NyZWF0ZShoYXNobGVuLCBrZXkpIHtcbiAgY29uc3Qga2V5X2pzb29fc3RyaW5nID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhrZXkpO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleV9qc29vX3N0cmluZyk7XG59XG5cbi8vUHJvdmlkZXM6IGJsYWtlMl9qc19mb3Jfd2FzbV9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWwsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vSWY6IHdhc21cbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBibGFrZTJfanNfZm9yX3dhc21fZmluYWwoY3R4LCBoYXNobGVuKSB7XG4gIHJldHVybiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfYmxha2UyX2ZpbmFsKGN0eCwgaGFzaGxlbikpO1xufVxuXG4vL1Byb3ZpZGVzOiBibGFrZTJfanNfZm9yX3dhc21fdXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl91cGRhdGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IHdhc21cbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pIHtcbiAgY29uc3QgYnVmX2pzb29fc3RyaW5nID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhidWYpO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfdXBkYXRlKGN0eCwgYnVmX2pzb29fc3RyaW5nLCBvZnMsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGJsYWtlMl9qc19mb3Jfd2FzbV91cGRhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZSwgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL0lmOiB3YXNtXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pIHtcbiAgY29uc3QgYnVmX2pzb29fc3RyaW5nID0gY2FtbF9ieXRlc19vZl9qc2J5dGVzKGJ1Zik7XG4gIHJldHVybiBjYW1sX2JsYWtlMl91cGRhdGUoY3R4LCBidWZfanNvb19zdHJpbmcsIG9mcywgbGVuKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9jaGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfY2hhbihjaGFuaWQsIHRvcmVhZCkge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0MDk2KTtcbiAgaWYgKHRvcmVhZCA8IDApIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoKTtcbiAgICAgIGlmIChyZWFkID09PSAwKSBicmVhaztcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCwgYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHRvcmVhZCA+IDApIHtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhcbiAgICAgICAgY2hhbmlkLFxuICAgICAgICBidWZmZXIsXG4gICAgICAgIDAsXG4gICAgICAgIHRvcmVhZCA+IGJ1ZmZlci5sZW5ndGggPyBidWZmZXIubGVuZ3RoIDogdG9yZWFkLFxuICAgICAgKTtcbiAgICAgIGlmIChyZWFkID09PSAwKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsIGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgICB0b3JlYWQgLT0gcmVhZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfbWQ1X2J5dGVzXG5mdW5jdGlvbiBjYW1sX21kNV9zdHJpbmcocywgb2ZzLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfbWQ1X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpLCBvZnMsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG52YXIgY2FtbF9NRDVUcmFuc2Zvcm0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQoeCwgeSkge1xuICAgIHJldHVybiAoeCArIHkpIHwgMDtcbiAgfVxuICBmdW5jdGlvbiB4eChxLCBhLCBiLCB4LCBzLCB0KSB7XG4gICAgYSA9IGFkZChhZGQoYSwgcSksIGFkZCh4LCB0KSk7XG4gICAgcmV0dXJuIGFkZCgoYSA8PCBzKSB8IChhID4+PiAoMzIgLSBzKSksIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBjKSB8ICh+YiAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBnZyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgZCkgfCAoYyAmIH5kKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiB4eChiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4geHgoYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodywgYnVmZmVyKSB7XG4gICAgdmFyIGEgPSB3WzBdLFxuICAgICAgYiA9IHdbMV0sXG4gICAgICBjID0gd1syXSxcbiAgICAgIGQgPSB3WzNdO1xuXG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclswXSwgNywgMHhkNzZhYTQ3OCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxXSwgMTIsIDB4ZThjN2I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMl0sIDE3LCAweDI0MjA3MGRiKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzNdLCAyMiwgMHhjMWJkY2VlZSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcls0XSwgNywgMHhmNTdjMGZhZik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcls1XSwgMTIsIDB4NDc4N2M2MmEpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbNl0sIDE3LCAweGE4MzA0NjEzKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzddLCAyMiwgMHhmZDQ2OTUwMSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcls4XSwgNywgMHg2OTgwOThkOCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcls5XSwgMTIsIDB4OGI0NGY3YWYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNywgMHhmZmZmNWJiMSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMV0sIDIyLCAweDg5NWNkN2JlKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNywgMHg2YjkwMTEyMik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxM10sIDEyLCAweGZkOTg3MTkzKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTcsIDB4YTY3OTQzOGUpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTVdLCAyMiwgMHg0OWI0MDgyMSk7XG5cbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzFdLCA1LCAweGY2MWUyNTYyKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzZdLCA5LCAweGMwNDBiMzQwKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTQsIDB4MjY1ZTVhNTEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbMF0sIDIwLCAweGU5YjZjN2FhKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzVdLCA1LCAweGQ2MmYxMDVkKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzEwXSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE0LCAweGQ4YTFlNjgxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzRdLCAyMCwgMHhlN2QzZmJjOCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlcls5XSwgNSwgMHgyMWUxY2RlNik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNF0sIDksIDB4YzMzNzA3ZDYpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbM10sIDE0LCAweGY0ZDUwZDg3KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzhdLCAyMCwgMHg0NTVhMTRlZCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDUsIDB4YTllM2U5MDUpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMl0sIDksIDB4ZmNlZmEzZjgpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbN10sIDE0LCAweDY3NmYwMmQ5KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzEyXSwgMjAsIDB4OGQyYTRjOGEpO1xuXG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlcls1XSwgNCwgMHhmZmZhMzk0Mik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcls4XSwgMTEsIDB4ODc3MWY2ODEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNiwgMHg2ZDlkNjEyMik7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNF0sIDIzLCAweGZkZTUzODBjKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWzFdLCA0LCAweGE0YmVlYTQ0KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWzRdLCAxMSwgMHg0YmRlY2ZhOSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcls3XSwgMTYsIDB4ZjZiYjRiNjApO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTBdLCAyMywgMHhiZWJmYmM3MCk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDQsIDB4Mjg5YjdlYzYpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMF0sIDExLCAweGVhYTEyN2ZhKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzNdLCAxNiwgMHhkNGVmMzA4NSk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcls2XSwgMjMsIDB4MDQ4ODFkMDUpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbOV0sIDQsIDB4ZDlkNGQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMTJdLCAxMSwgMHhlNmRiOTllNSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE2LCAweDFmYTI3Y2Y4KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzJdLCAyMywgMHhjNGFjNTY2NSk7XG5cbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzBdLCA2LCAweGY0MjkyMjQ0KTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzddLCAxMCwgMHg0MzJhZmY5Nyk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE1LCAweGFiOTQyM2E3KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzVdLCAyMSwgMHhmYzkzYTAzOSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDYsIDB4NjU1YjU5YzMpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbM10sIDEwLCAweDhmMGNjYzkyKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTUsIDB4ZmZlZmY0N2QpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbMV0sIDIxLCAweDg1ODQ1ZGQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzhdLCA2LCAweDZmYTg3ZTRmKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzE1XSwgMTAsIDB4ZmUyY2U2ZTApO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbNl0sIDE1LCAweGEzMDE0MzE0KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzEzXSwgMjEsIDB4NGUwODExYTEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbNF0sIDYsIDB4Zjc1MzdlODIpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTFdLCAxMCwgMHhiZDNhZjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsyXSwgMTUsIDB4MmFkN2QyYmIpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbOV0sIDIxLCAweGViODZkMzkxKTtcblxuICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgd1sxXSA9IGFkZChiLCB3WzFdKTtcbiAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gIH07XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUluaXRcbmZ1bmN0aW9uIGNhbWxfTUQ1SW5pdCgpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2NCk7XG4gIHZhciBiMzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgdmFyIGI4ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIHtcbiAgICBsZW46IDAsXG4gICAgdzogbmV3IFVpbnQzMkFycmF5KFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2XSksXG4gICAgYjMyOiBiMzIsXG4gICAgYjg6IGI4LFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVVwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1VXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0X2xlbikge1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIHZhciBpbnB1dF9wb3MgPSAwO1xuICBjdHgubGVuICs9IGlucHV0X2xlbjtcbiAgaWYgKGluX2J1Zikge1xuICAgIHZhciBtaXNzaW5nID0gNjQgLSBpbl9idWY7XG4gICAgaWYgKGlucHV0X2xlbiA8IG1pc3NpbmcpIHtcbiAgICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCwgaW5wdXRfbGVuKSwgaW5fYnVmKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLCBtaXNzaW5nKSwgaW5fYnVmKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IG1pc3Npbmc7XG4gICAgaW5wdXRfcG9zICs9IG1pc3Npbmc7XG4gIH1cbiAgd2hpbGUgKGlucHV0X2xlbiA+PSA2NCkge1xuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLCBpbnB1dF9wb3MgKyA2NCksIDApO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gNjQ7XG4gICAgaW5wdXRfcG9zICs9IDY0O1xuICB9XG4gIGlmIChpbnB1dF9sZW4pXG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsIGlucHV0X3BvcyArIGlucHV0X2xlbiksIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVGaW5hbChjdHgpIHtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICBjdHguYjhbaW5fYnVmXSA9IDB4ODA7XG4gIGluX2J1ZisrO1xuICBpZiAoaW5fYnVmID4gNTYpIHtcbiAgICBmb3IgKHZhciBqID0gaW5fYnVmOyBqIDwgNjQ7IGorKykge1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNTY7IGorKykge1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGluX2J1ZjsgaiA8IDU2OyBqKyspIHtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9XG4gIGN0eC5iMzJbMTRdID0gY3R4LmxlbiA8PCAzO1xuICBjdHguYjMyWzE1XSA9IChjdHgubGVuID4+IDI5KSAmIDB4MWZmZmZmZmY7XG4gIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB0W2kgKiA0ICsgal0gPSAoY3R4LndbaV0gPj4gKDggKiBqKSkgJiAweGZmO1xuICByZXR1cm4gdDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9ieXRlcyhzLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKTtcbiAgY2FtbF9NRDVVcGRhdGUoY3R4LCBhLnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKSwgbGVuKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczoganNvb19kYXRhdmlld1xudmFyIGpzb29fZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVxuLy9SZXF1aXJlczoganNvb19kYXRhdmlld1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpIHtcbiAganNvb19kYXRhdmlldy5zZXRGbG9hdDY0KDAsIHgsIHRydWUpO1xuICB2YXIgbG8zMiA9IGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDAsIHRydWUpO1xuICB2YXIgaGkzMiA9IGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDQsIHRydWUpO1xuICB2YXIgbG8gPSBsbzMyICYgMHhmZmZmZmY7XG4gIHZhciBtaSA9IChsbzMyID4+PiAyNCkgfCAoKGhpMzIgPDwgOCkgJiAweGZmZmZmZik7XG4gIHZhciBoaSA9IChoaTMyID4+PiAxNikgJiAweGZmZmY7XG4gIC8vIFY4IHVzZXMgc2lnbmFsaW5nIE5hTnMgYXMgc2VudGluZWwuIFNvLCBOYU5zIGFyZSBtYWRlIHF1aWV0IHdoZW5cbiAgLy8gdGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5LiBNYWtlIHRoZW0gcXVpZXQgaGVyZSBzbyB0aGF0IHdlIGdldFxuICAvLyBjb25zaXN0ZW50IHJlc3VsdHMuXG4gIGlmICgoaGkgJiAweDdmZjgpID09PSAweDdmZjAgJiYgKG1pIHwgbG8gfCAoaGkgJiAweGYpKSAhPT0gMCkgaGkgfD0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKGxvLCBtaSwgaGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZGF0YXZpZXdcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCh4KSB7XG4gIGpzb29fZGF0YXZpZXcuc2V0RmxvYXQzMigwLCB4LCB0cnVlKTtcbiAgcmV0dXJuIGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDAsIHRydWUpIHwgMDtcbn1cblxuLy9GUCBsaXRlcmFscyBjYW4gYmUgd3JpdHRlbiB1c2luZyB0aGUgaGV4YWRlY2ltYWxcbi8vbm90YXRpb24gMHg8bWFudGlzc2EgaW4gaGV4PnA8ZXhwb25lbnQ+IGZyb20gSVNPIEM5OS5cbi8vaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWhleGZsb2F0L2Jsb2IvbWFzdGVyL2hleGZsb2F0LmpzXG4vL1Byb3ZpZGVzOiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHgpKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJuYW5cIik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHggPiAwID8gXCJpbmZpbml0eVwiIDogXCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSB4ID09PSAwICYmIDEgLyB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPyAxIDogeCA+PSAwID8gMCA6IDE7XG4gIGlmIChzaWduKSB4ID0gLXg7XG4gIHZhciBleHAgPSAwO1xuICBpZiAoeCA9PT0gMCkge1xuICB9IGVsc2UgaWYgKHggPCAxKSB7XG4gICAgd2hpbGUgKHggPCAxICYmIGV4cCA+IC0xMDIyKSB7XG4gICAgICB4ICo9IDI7XG4gICAgICBleHAtLTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikge1xuICAgICAgeCAvPSAyO1xuICAgICAgZXhwKys7XG4gICAgfVxuICB9XG4gIHZhciBleHBfc2lnbiA9IGV4cCA8IDAgPyBcIlwiIDogXCIrXCI7XG4gIHZhciBzaWduX3N0ciA9IFwiXCI7XG4gIGlmIChzaWduKSBzaWduX3N0ciA9IFwiLVwiO1xuICBlbHNlIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIDQzIC8qICcrJyAqLzpcbiAgICAgICAgc2lnbl9zdHIgPSBcIitcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDMyIC8qICcgJyAqLzpcbiAgICAgICAgc2lnbl9zdHIgPSBcIiBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHByZWMgPj0gMCAmJiBwcmVjIDwgMTMpIHtcbiAgICAvKiBJZiBhIHByZWNpc2lvbiBpcyBnaXZlbiwgYW5kIGlzIHNtYWxsLCByb3VuZCBtYW50aXNzYSBhY2NvcmRpbmdseSAqL1xuICAgIHZhciBjc3QgPSBNYXRoLnBvdygyLCBwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmIChwcmVjID49IDApIHtcbiAgICB2YXIgaWR4ID0geF9zdHIuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGlkeCA8IDApIHtcbiAgICAgIHhfc3RyICs9IFwiLlwiICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsIFwiMFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHggKyAxICsgcHJlYztcbiAgICAgIGlmICh4X3N0ci5sZW5ndGggPCBzaXplKVxuICAgICAgICB4X3N0ciArPSBjYW1sX3N0cl9yZXBlYXQoc2l6ZSAtIHhfc3RyLmxlbmd0aCwgXCIwXCIpO1xuICAgICAgZWxzZSB4X3N0ciA9IHhfc3RyLnNsaWNlKDAsIHNpemUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXG4gICAgc2lnbl9zdHIgKyBcIjB4XCIgKyB4X3N0ciArIFwicFwiICsgZXhwX3NpZ24gKyBleHAudG9TdHJpbmcoMTApLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZGF0YXZpZXdcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyh4KSB7XG4gIHZhciBsbyA9IHgubG87XG4gIHZhciBtaSA9IHgubWk7XG4gIHZhciBoaSA9IHguaGk7XG4gIC8vIFY4IHVzZXMgc2lnbmFsaW5nIE5hTnMgYXMgc2VudGluZWwuIFNvLCBOYU5zIGFyZSBtYWRlIHF1aWV0IHdoZW5cbiAgLy8gdGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5LiBNYWtlIHRoZW0gcXVpZXQgaGVyZSBzbyB0aGF0IHdlIGdldFxuICAvLyBjb25zaXN0ZW50IHJlc3VsdHMuXG4gIGlmICgoaGkgJiAweDdmZjgpID09PSAweDdmZjAgJiYgKG1pIHwgbG8gfCAoaGkgJiAweGYpKSAhPT0gMCkgaGkgfD0gODtcbiAganNvb19kYXRhdmlldy5zZXRVaW50MzIoMCwgbG8gfCAobWkgPDwgMjQpLCB0cnVlKTtcbiAganNvb19kYXRhdmlldy5zZXRVaW50MzIoNCwgKG1pID4+PiA4KSB8IChoaSA8PCAxNiksIHRydWUpO1xuICByZXR1cm4ganNvb19kYXRhdmlldy5nZXRGbG9hdDY0KDAsIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25leHRhZnRlcl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X3N1YixjYW1sX2ludDY0X29mX2ludDMyXG5mdW5jdGlvbiBjYW1sX25leHRhZnRlcl9mbG9hdCh4LCB5KSB7XG4gIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHkpKSByZXR1cm4gTnVtYmVyLk5hTjtcbiAgaWYgKHggPT09IHkpIHJldHVybiB5O1xuICBpZiAoeCA9PT0gMCkge1xuICAgIGlmICh5IDwgMCkgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NCk7XG4gICAgZWxzZSByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpO1xuICB9XG4gIHZhciBiaXRzID0gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpO1xuICB2YXIgb25lID0gY2FtbF9pbnQ2NF9vZl9pbnQzMigxKTtcbiAgaWYgKHggPCB5ID09PSB4ID4gMCkgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSk7XG4gIGVsc2UgYml0cyA9IGNhbWxfaW50NjRfc3ViKGJpdHMsIG9uZSk7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCkge1xuICByZXR1cm4gTWF0aC50cnVuYyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2RhdGF2aWV3XG5mdW5jdGlvbiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMoeCkge1xuICBqc29vX2RhdGF2aWV3LnNldFVpbnQzMigwLCB4LCB0cnVlKTtcbiAgcmV0dXJuIGpzb29fZGF0YXZpZXcuZ2V0RmxvYXQzMigwLCB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jbGFzc2lmeV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jbGFzc2lmeV9mbG9hdCh4KSB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPj0gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgpIHJldHVybiAwO1xuICAgIGlmICh4ICE9PSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuICByZXR1cm4gTnVtYmVyLmlzTmFOKHgpID8gNCA6IDM7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21vZGZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbW9kZl9mbG9hdCh4KSB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB2YXIgbmVnID0gMSAvIHggPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoeCk7XG4gICAgdmFyIGYgPSB4IC0gaTtcbiAgICBpZiAobmVnKSB7XG4gICAgICBpID0gLWk7XG4gICAgICBmID0gLWY7XG4gICAgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKE51bWJlci5pc05hTih4KSkgcmV0dXJuIFswLCBOdW1iZXIuTmFOLCBOdW1iZXIuTmFOXTtcbiAgcmV0dXJuIFswLCAxIC8geCwgeF07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xkZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xkZXhwX2Zsb2F0KHgsIGV4cCkge1xuICBleHAgfD0gMDtcbiAgaWYgKGV4cCA+IDEwMjMpIHtcbiAgICBleHAgLT0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIGlmIChleHAgPiAxMDIzKSB7XG4gICAgICAvLyBpbiBjYXNlIHggaXMgc3Vibm9ybWFsXG4gICAgICBleHAgLT0gMTAyMztcbiAgICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgfVxuICB9XG4gIGlmIChleHAgPCAtMTAyMykge1xuICAgIGV4cCArPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgLTEwMjMpO1xuICB9XG4gIHggKj0gTWF0aC5wb3coMiwgZXhwKTtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZyZXhwX2Zsb2F0KHgpIHtcbiAgaWYgKHggPT09IDAgfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkgcmV0dXJuIFswLCB4LCAwXTtcbiAgdmFyIG5lZyA9IHggPCAwO1xuICBpZiAobmVnKSB4ID0gLXg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywgTWF0aC5mbG9vcihNYXRoLmxvZzIoeCkpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwgLWV4cCk7XG4gIHdoaWxlICh4IDwgMC41KSB7XG4gICAgeCAqPSAyO1xuICAgIGV4cC0tO1xuICB9XG4gIHdoaWxlICh4ID49IDEpIHtcbiAgICB4ICo9IDAuNTtcbiAgICBleHArKztcbiAgfVxuICBpZiAobmVnKSB4ID0gLXg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUoeCwgeSkge1xuICBpZiAoeCA9PT0geSkgcmV0dXJuIDA7XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xO1xuICBpZiAoeCA+IHkpIHJldHVybiAxO1xuICBpZiAoIU51bWJlci5pc05hTih4KSkgcmV0dXJuIDE7XG4gIGlmICghTnVtYmVyLmlzTmFOKHkpKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvcHlzaWduX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvcHlzaWduX2Zsb2F0KHgsIHkpIHtcbiAgaWYgKHkgPT09IDApIHkgPSAxIC8geTtcbiAgeCA9IE1hdGguYWJzKHgpO1xuICByZXR1cm4geSA8IDAgPyAteCA6IHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2lnbmJpdF9mbG9hdCBjb25zdFxuLy9BbGlhczogY2FtbF9zaWduYml0XG5mdW5jdGlvbiBjYW1sX3NpZ25iaXRfZmxvYXQoeCkge1xuICBpZiAoeCA9PT0gMCkgeCA9IDEgLyB4O1xuICByZXR1cm4geCA8IDAgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9leHBtMV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHBtMV9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmV4cG0xKHgpO1xufVxuLy9Qcm92aWRlczogY2FtbF9leHAyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cDJfZmxvYXQoeCkge1xuICByZXR1cm4gTWF0aC5wb3coMiwgeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzFwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzFwX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nMXAoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmxvZzIoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2h5cG90X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2h5cG90X2Zsb2F0KHgsIHkpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzEwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzEwX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nMTAoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Nvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29zaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmNvc2goeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Fjb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Fjb3NoX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYWNvc2goeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3NpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2luaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLnNpbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2FzaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2FzaW5oX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYXNpbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3RhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdGFuaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLnRhbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2F0YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2F0YW5oX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3JvdW5kX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3JvdW5kX2Zsb2F0KHgpIHtcbiAgaWYgKHggPj0gMCkge1xuICAgIHZhciB5ID0gTWF0aC5mbG9vcih4KTtcbiAgICByZXR1cm4geCAtIHkgPj0gMC41ID8geSArIDEgOiB5O1xuICB9IGVsc2Uge1xuICAgIHZhciB5ID0gTWF0aC5jZWlsKHgpO1xuICAgIHJldHVybiB5IC0geCA+PSAwLjUgPyB5IC0gMSA6IHk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguY2JydCh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9XG4gICAgMS4wIC0gKCgoKGE1ICogdCArIGE0KSAqIHQgKyBhMykgKiB0ICsgYTIpICogdCArIGExKSAqIHQgKiBNYXRoLmV4cCgteCAqIHgpO1xuXG4gIHJldHVybiBzaWduICogeTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZjX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2VyZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9lcmZjX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIDEgLSBjYW1sX2VyZl9mbG9hdCh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5KGEsIGIpIHtcbiAgICB2YXIgYXQgPSBTUExJVCAqIGE7XG4gICAgdmFyIGFoaSA9IGF0IC0gKGF0IC0gYSk7XG4gICAgdmFyIGFsbyA9IGEgLSBhaGk7XG4gICAgdmFyIGJ0ID0gU1BMSVQgKiBiO1xuICAgIHZhciBiaGkgPSBidCAtIChidCAtIGIpO1xuICAgIHZhciBibG8gPSBiIC0gYmhpO1xuICAgIHZhciBwID0gYSAqIGI7XG4gICAgdmFyIGUgPSBhaGkgKiBiaGkgLSBwICsgYWhpICogYmxvICsgYWxvICogYmhpICsgYWxvICogYmxvO1xuICAgIHJldHVybiB7XG4gICAgICBwOiBwLFxuICAgICAgZTogZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSBhIC0gKHMgLSB2KSArIChiIC0gdik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHM6IHMsXG4gICAgICBlOiBlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhZGp1c3QoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4XG4gICAgICA/IHggKiAoMSArICh4IDwgMCA/IC0xIDogKzEpICogKHkgPCAwID8gLTEgOiArMSkgKiBFUFNJTE9OKVxuICAgICAgOiB4O1xuICB9XG5cbiAgaWYgKHggPT09IDAgfHwgeSA9PT0gMCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpIHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICByZXR1cm4geCAqIHkgKyB6O1xuICB9XG4gIGlmICh6ID09PSAwKSB7XG4gICAgcmV0dXJuIHggKiB5O1xuICB9XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHopKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiAoTWF0aC5hYnMoeHMgKiB5cykgKiA0KSAvIEVQU0lMT04pIHtcbiAgICByZXR1cm4gejtcbiAgfVxuICBpZiAoTWF0aC5hYnMoenMpIDwgKCgoTWF0aC5hYnMoeHMgKiB5cykgKiBFUFNJTE9OKSAvIDQpICogRVBTSUxPTikgLyA0KSB7XG4gICAgenMgPSAoeiA8IDAgPyAtMSA6ICsxKSAqIE1JTl9WQUxVRTtcbiAgfVxuXG4gIHZhciB4eSA9IG11bHRpcGx5KHhzLCB5cyk7XG4gIHZhciBzID0gYWRkKHh5LnAsIHpzKTtcbiAgdmFyIHUgPSBhZGQoeHkuZSwgcy5lKTtcbiAgdmFyIGkgPSBhZGQocy5zLCB1LnMpO1xuXG4gIHZhciBmID0gaS5zICsgYWRqdXN0KGkuZSwgdS5lKTtcbiAgaWYgKGYgPT09IDApIHtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIHZhciBmcyA9IGYgKiBzY2FsZTtcbiAgaWYgKE1hdGguYWJzKGZzKSA+IE1JTl9WQUxVRSkge1xuICAgIHJldHVybiBmcztcbiAgfVxuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2FzIGV4dHJhIHJvdW5kaW5nIGZvciBhIGRlbm9ybWFsaXplZCB2YWx1ZS5cbiAgcmV0dXJuIGZzICsgYWRqdXN0KGYgLSBmcyAvIHNjYWxlLCBpLmUpICogc2NhbGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9mbG9hdChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LCBkcCkge1xuICAgIGlmIChNYXRoLmFicyh4KSA8IDEuMCkge1xuICAgICAgcmV0dXJuIHgudG9GaXhlZChkcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gTnVtYmVyLnBhcnNlSW50KHgudG9TdHJpbmcoKS5zcGxpdChcIitcIilbMV0pO1xuICAgICAgaWYgKGUgPiAyMCkge1xuICAgICAgICBlIC09IDIwO1xuICAgICAgICB4IC89IE1hdGgucG93KDEwLCBlKTtcbiAgICAgICAgeCArPSBjYW1sX3N0cl9yZXBlYXQoZSwgXCIwXCIpO1xuICAgICAgICBpZiAoZHAgPiAwKSB7XG4gICAgICAgICAgeCA9IHggKyBcIi5cIiArIGNhbWxfc3RyX3JlcGVhdChkcCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSBlbHNlIHJldHVybiB4LnRvRml4ZWQoZHApO1xuICAgIH1cbiAgfVxuICB2YXIgcyxcbiAgICBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgdmFyIHByZWMgPSBmLnByZWMgPCAwID8gNiA6IGYucHJlYztcbiAgaWYgKHggPCAwIHx8ICh4ID09PSAwICYmIDEgLyB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKSB7XG4gICAgZi5zaWduID0gLTE7XG4gICAgeCA9IC14O1xuICB9XG4gIGlmIChOdW1iZXIuaXNOYU4oeCkpIHtcbiAgICBzID0gXCJuYW5cIjtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBzID0gXCJpbmZcIjtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICB9IGVsc2VcbiAgICBzd2l0Y2ggKGYuY29udikge1xuICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgdmFyIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyk7XG4gICAgICAgIC8vIGV4cG9uZW50IHNob3VsZCBiZSBhdCBsZWFzdCB0d28gZGlnaXRzXG4gICAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT09IFwiZVwiKVxuICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgLSAxKSArIFwiMFwiICsgcy5zbGljZShpIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgcHJlYyA9IHByZWMgPyBwcmVjIDogMTtcbiAgICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICAgIHZhciBqID0gcy5pbmRleE9mKFwiZVwiKTtcbiAgICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgICAgaWYgKGV4cCA8IC00IHx8IHggPj0gMWUyMSB8fCB4LnRvRml4ZWQoMCkubGVuZ3RoID4gcHJlYykge1xuICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICB2YXIgaSA9IGogLSAxO1xuICAgICAgICAgIHdoaWxlIChzLmNoYXJBdChpKSA9PT0gXCIwXCIpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT09IFwiLlwiKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgICBpID0gcy5sZW5ndGg7XG4gICAgICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PT0gXCJlXCIpXG4gICAgICAgICAgICBzID0gcy5zbGljZSgwLCBpIC0gMSkgKyBcIjBcIiArIHMuc2xpY2UoaSAtIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgICBpZiAoZXhwIDwgMCkge1xuICAgICAgICAgICAgcCAtPSBleHAgKyAxO1xuICAgICAgICAgICAgcyA9IHgudG9GaXhlZChwKTtcbiAgICAgICAgICB9IGVsc2Ugd2hpbGUgKCgocyA9IHgudG9GaXhlZChwKSksIHMubGVuZ3RoID4gcHJlYyArIDEpKSBwLS07XG4gICAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICAgIHZhciBpID0gcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKHMuY2hhckF0KGkpID09PSBcIjBcIikgaS0tO1xuICAgICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09PSBcIi5cIikgaS0tO1xuICAgICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHZhciByX2Zsb2F0ID0gL14gKlstK10/KD86XFxkKlxcLj9cXGQrfFxcZCtcXC4/XFxkKikoPzpbZUVdWy0rXT9cXGQrKT8kLztcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHJlcyA9ICtzO1xuICAvL0Zhc3QgcGF0aFxuICBpZiAoIU51bWJlci5pc05hTihyZXMpICYmIHJfZmxvYXQudGVzdChzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLCBcIlwiKTtcbiAgcmVzID0gK3M7XG4gIGlmICgoIU51bWJlci5pc05hTihyZXMpICYmIHJfZmxvYXQudGVzdChzKSkgfHwgL15bKy1dP25hbiQvaS50ZXN0KHMpKVxuICAgIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8kL2kuZXhlYyhzKTtcbiAgLy8gICAgICAgICAgMSAgICAgICAgMiAgICAgICAgICAgICAzICAgICAgICAgICA1XG4gIGlmIChtKSB7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCBcIlwiKTtcbiAgICB2YXIgbWFudGlzc2EgPSBOdW1iZXIucGFyc2VJbnQobVsxXSArIG1bMl0gKyBtMywgMTYpO1xuICAgIHZhciBleHBvbmVudCA9ICgrbVs1XSB8fCAwKSAtIDQgKiBtMy5sZW5ndGg7XG4gICAgcmVzID0gbWFudGlzc2EgKiBNYXRoLnBvdygyLCBleHBvbmVudCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZiAoL15cXCs/aW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgaWYgKC9eLWluZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gIGNhbWxfZmFpbHdpdGgoXCJmbG9hdF9vZl9zdHJpbmdcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkoeCwgeSkge1xuICBpZiAoeS5mdW4pIHtcbiAgICB4LmZ1biA9IHkuZnVuO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmICh0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgeC5mdW4gPSB5O1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBpID0geS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHhbaV0gPSB5W2ldO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19kdW1teV9pbmZpeFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuLy9WZXJzaW9uOiA8IDUuNFxuZnVuY3Rpb24gY2FtbF9hbGxvY19kdW1teV9pbmZpeCgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYoeCkge1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuZnVuLCBbeF0pO1xuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FsbG9jX2R1bW15X2xhenlcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2FsbG9jX2R1bW15X2xhenkoX3VuaXQpIHtcbiAgcmV0dXJuIFswLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91cGRhdGVfZHVtbXlfbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfdXBkYXRlX2R1bW15X2xhenkoZHVtbXksIG5ld3ZhbCkge1xuICBzd2l0Y2ggKGNhbWxfb2JqX3RhZyhuZXd2YWwpKSB7XG4gICAgY2FzZSAyNDY6IC8vIExhenlcbiAgICBjYXNlIDI0NDogLy8gRm9yY2luZ1xuICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkXG4gICAgICBjYW1sX3VwZGF0ZV9kdW1teShkdW1teSwgbmV3dmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBkdW1teVsxXSA9IG5ld3ZhbDtcbiAgICAgIGR1bW15WzBdID0gMjUwO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfb2JqX3RhZyh4KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHgpICYmIHhbMF0gPT09IHhbMF0gPj4+IDApIHJldHVybiB4WzBdO1xuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKSByZXR1cm4gMjUyO1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh4KSkgcmV0dXJuIDI1MjtcbiAgZWxzZSBpZiAoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiAyNDc7XG4gIGVsc2UgaWYgKHg/LmNhbWxfY3VzdG9tKSByZXR1cm4gMjU1O1xuICBlbHNlIHJldHVybiAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfdGFnIChtdXRhYmxlLCBjb25zdClcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF90YWcoeCwgdGFnKSB7XG4gIHhbMF0gPSB0YWc7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9vYmpfYmxvY2sgY29uc3QgKGNvbnN0LGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfYmxvY2sodGFnLCBzaXplKSB7XG4gIC8vIFRPRE86IGZhaWwgZm9yIHZhbHVlIHRoYXQgYXJlIG5vdCByZXByZXNlbnRlZCBhcyBhbiBhcnJheVxuICB2YXIgbyA9IG5ldyBBcnJheShzaXplICsgMSk7XG4gIG9bMF0gPSB0YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLCB4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gdGFnO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGw7IGkrKykgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9kdXAgbXV0YWJsZSAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJudW1iZXJcIiA/IHggOiB4LnNsaWNlKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUoeCwgcykge1xuICBpZiAocyA8PSAwIHx8IHMgKyAxID4geC5sZW5ndGgpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIk9iai50cnVuY2F0ZVwiKTtcbiAgaWYgKHgubGVuZ3RoICE9PSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkKGIsIHYpIHtcbiAgYlswXSA9IDI1MDtcbiAgYlsxXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcCh4LCBpLCBvbGQsIG4pIHtcbiAgaWYgKHhbaSArIDFdID09PSBvbGQpIHtcbiAgICB4W2kgKyAxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX3NoYXJlZFxuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX3NoYXJlZChfeCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQodikge1xuICByZXR1cm4gWzI1MCwgdl07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWV0aG9kX2NhY2hlXG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcblxuLy9Qcm92aWRlczogY2FtbF9vb19jYWNoZV9pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9tZXRob2RfY2FjaGVcbmZ1bmN0aW9uIGNhbWxfb29fY2FjaGVfaWQoKSB7XG4gIHZhciBjYWNoZWlkID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoO1xuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IDA7XG4gIGNhY2hlaWQ7XG59XG5cbi8vLy8vLy8vLy8vLy8gQ2FtbGludGVybmFsT09cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2NhY2hlZF9tZXRob2QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWV0aG9kX2NhY2hlXG5mdW5jdGlvbiBjYW1sX2dldF9jYWNoZWRfbWV0aG9kKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAobWV0aHNbb2ZzICsgNF0gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgKyAzXTtcbiAgfVxuICB2YXIgbGkgPSAzLFxuICAgIGhpID0gbWV0aHNbMV0gKiAyICsgMSxcbiAgICBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkgKyBoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSArIDFdKSBoaSA9IG1pIC0gMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSAtIDM7XG4gIHJldHVybiBtZXRoc1tsaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2Qob2JqLCB0YWcpIHtcbiAgdmFyIG1ldGhzID0gb2JqWzFdO1xuICB2YXIgbGkgPSAzLFxuICAgIGhpID0gbWV0aHNbMV0gKiAyICsgMSxcbiAgICBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkgKyBoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSArIDFdKSBoaSA9IG1pIC0gMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gdGFnID09PSBtZXRoc1tsaSArIDFdID8gbWV0aHNbbGldIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQoYikge1xuICBiWzJdID0gY2FtbF9vb19sYXN0X2lkKys7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXNoX29vX2lkIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfZnJlc2hfb29faWQoKSB7XG4gIHJldHVybiBjYW1sX29vX2xhc3RfaWQrKztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9yYXdfZmllbGQobywgaSkge1xuICByZXR1cm4gb1tpICsgMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF9yYXdfZmllbGQobywgaSwgdikge1xuICByZXR1cm4gKG9baSArIDFdID0gdik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKF9vKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9hZGRfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX29ial9hZGRfb2Zmc2V0KF92LCBfb2Zmc2V0KSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJPYmouYWRkX29mZnNldCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial91cGRhdGVfdGFnXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfdXBkYXRlX3RhZyhiLCBvLCBuKSB7XG4gIGlmIChiWzBdID09PSBvKSB7XG4gICAgYlswXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZ1xuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZyhvKSB7XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG8pICYmXG4gICAgb1swXSA9PT0gb1swXSA+Pj4gMCAmJlxuICAgIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ2LCAyNDQpXG4gICkge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZChvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ0LCAyNTApO1xuICByZXR1cm4gMDsgLy8gdW5pdFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZXNldF90b19sYXp5KG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLCAyNDQsIDI0Nik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVhZF9yZXN1bHRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZWFkX3Jlc3VsdChvKSB7XG4gIHJldHVybiBjYW1sX29ial90YWcobykgPT09IDI1MCA/IG9bMV0gOiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPCA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcoX3QpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gdCA9PT0gMjQ1ID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX2lkZW50aWZpZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2N1c3RvbV9pZGVudGlmaWVyKG8pIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG8uY2FtbF9jdXN0b20gfHwgXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZ2NfcmFtcF91cFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfbWxfZ2NfcmFtcF91cChmKSB7XG4gIHZhciBhID0gY2FtbF9jYWxsYmFjayhmLCBbMF0pO1xuICB2YXIgc3VzcGVuZGVkID0gMDtcbiAgcmV0dXJuIFswLCBhLCBzdXNwZW5kZWRdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2djX3JhbXBfZG93blxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfbWxfZ2NfcmFtcF9kb3duKF9zdXNwZW5kZWRfY29sbGVjdGlvbl93b3JrKSB7XG4gIHJldHVybiAwO1xufVxuIiwiLypcblRvIGRlYWwgd2l0aCBlZmZlY3RzLCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgaXMgaW50dWl0aXZlbHkgY29tcG9zZWQgb2ZcbmEgc3RhY2sgb2YgZmliZXJzLiBFYWNoIGZpYmVyIGhhcyBhIGN1cnJlbnQgbG93LWxldmVsIGNvbnRpbnVhdGlvblxuKG9uZS1hcmd1bWVudCBKYXZhU2NyaXB0IGZ1bmN0aW9uKSwgYSBzdGFjayBvZiBleGNlcHRpb24gaGFuZGxlcnMgYW5kXG5hIHRyaXBsZSBvZiBoYW5kbGVycywgd2hpY2ggYXJlIGludm9rZWQgd2hlbiB0aGUgZmliZXIgdGVybWluYXRlc1xuKGVpdGhlciB3aXRoIGEgdmFsdWUgb3IgYW4gZXhjZXB0aW9uKSBvciB3aGVuIGFuIGVmZmVjdCBpcyBwZXJmb3JtZWQuXG5UaGUgbG93LWxldmVsIGNvbnRpbnVhdGlvbiBvZiB0aGUgdG9wbW9zdCBmaWJlciAod2hpY2ggaXMgY3VycmVudGx5XG5leGVjdXRpbmcpIGlzIHBhc3NlZCBmcm9tIGZ1bmN0aW9uIHRvIGZ1bmN0aW9uIGFzIGFuIGFkZGl0aW9uYWxcbmFyZ3VtZW50LiBJdHMgc3RhY2sgb2YgZXhjZXB0aW9uIGhhbmRsZXJzIGlzIHN0b3JlZCBpblxuW2NhbWxfY3VycmVudF9zdGFjay54XS5cbkV4Y2VwdGlvbiBoYW5kbGVycyBhcmUgcHVzaGVkIGludG8gdGhpcyBzdGFja1xud2hlbiBlbnRlcmluZyBhIFt0cnkgLi4uIHdpdGggLi4uXSBhbmQgcG9wcGVkIG9uIGV4aXQuXG5IYW5kbGVycyBhcmUgc3RvcmVkIGluIFtjYW1sX2N1cnJlbnRfc3RhY2suaF1cbmFuZCB0aGUgcmVtYWluaW5nIGZpYmVycyBhcmUgc3RvcmVkIGluIFtjYW1sX2N1cnJlbnRfc3RhY2suZV0uXG5UbyBpbnN0YWxsIGFuIGVmZmVjdCBoYW5kbGVyLCB3ZSBwdXNoIGEgbmV3IGZpYmVyIGludG8gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LlxuXG5XZSBoYXZlIGJhc2ljYWxseSB0aGUgZm9sbG93aW5nIHR5cGUgZm9yIHJlaWZpZWQgY29udGludWF0aW9ucyAodHlwZVxuW2NvbnRpbnVhdGlvbl0gaW4gbW9kdWxlIFtFZmZlY3RdIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KTpcblxuICB0eXBlICgnYSwgJ2IpIGNvbnRpbnVhdGlvbiA9ICgnYSwgJ2IpIHN0YWNrIHJlZlxuXG4gIGFuZCAoXywgXykgc3RhY2sgPVxuICAgICAgQ29ucyA6ICgnYiAtPiB1bml0KSAqICAgICAgICAgICAgICgqIGxvdy1sZXZlbCBjb250aW51YXRpb24gKilcbiAgICAgICAgICAgICAoZXhuIC0+IHVuaXQpIGxpc3QgKiAgICAgICAoKiBleGNlcHRpb24gaGFuZGxlcnMgKilcbiAgICAgICAgICAgICAoJ2IsICdjKSBoYW5kbGVyICpcbiAgICAgICAgICAgICAoJ2EsICdiKSBzdGFja1xuICAgICAgICAgICAgIC0+ICgnYSwgJ2MpIHN0YWNrXG4gICAgfCBFbXB0eSA6ICgnYSwgJ2EpIHN0YWNrXG5cbiAgYW5kICgnYSwnYikgaGFuZGxlciA9ICAgKCogQXMgaW4gbW9kdWxlIEVmZmVjdCBmcm9tIHRoZSBzdGFuZGFyZCBsaWJyYXJ5ICopXG4gICAgeyByZXRjOiAnYSAtPiAnYjtcbiAgICAgIGV4bmM6IGV4biAtPiAnYjtcbiAgICAgIGVmZmM6ICdjLidjIEVmZmVjdC50IC0+ICgoJ2MsJ2IpIGNvbnRpbnVhdGlvbiAtPiAnYikgb3B0aW9uIH1cblxuQ29udGludWF0aW9ucyBhcmUgb25lLXNob3QuIEEgY29udGludWF0aW9uIFtyZWYgRW1wdHldIGhhcyBhbHJlYWR5XG5iZWVuIHJlc3VtZWQuXG5cbkEgY29udGludWF0aW9uIGlzIGJhc2ljYWxseSBjb21wb3NlZCBvZiBhIGxpc3Qgb2YgZmliZXJzLCB3aGljaCBlYWNoXG5oYXMgaXRzIGxvdy1sZXZlbCBjb250aW51YXRpb24sIGl0cyBzdGFjayBvZiBleGNlcHRpb24gaGFuZGxlcnMgYW5kIGFcbnRyaXBsZSBvZiBoYW5kbGVycyB0byBkZWFsIHdpdGggd2hlbiB0aGUgZmliZXIgdGVybWluYXRlcyBvciBhblxuZWZmZWN0IGlzIHBlcmZvcm1lZC4gV2hlbiByZXN1bWluZyBhIGNvbnRpbnVhdGlvbiwgdGhlIGlubmVybW9zdCBmaWJlclxuaXMgcmVzdW1lZCBmaXJzdC5cblxuVGhlIGhhbmRsZXJzIGFyZSBDUFMtdHJhbnNmb3JtZWQgZnVuY3Rpb25zOiB0aGV5IGFjdHVhbGx5IHRha2UgYW5cbmFkZGl0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBjdXJyZW50IGxvdy1sZXZlbCBjb250aW51YXRpb24uXG4qL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vIFRoaXMgaGFzIHRoZSBzaGFwZSB7aywgeCwgaCwgZX0gd2hlcmVcbi8vIC0gaCBpcyBhIHRyaXBsZSBvZiBoYW5kbGVycyAoc2VlIGVmZmVjdC5tbClcbi8vIC0gayBpcyB0aGUgbG93IGxldmVsIGNvbnRpbnVhdGlvblxuLy8gLSB4IGlzIHRoZSBleGNlcHRpb24gc3RhY2tcbi8vIC0gZSBpcyB0aGUgZmliZXIgc3RhY2sgb2YgdGhlIHBhcmVudCBmaWJlci5cbnZhciBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcblxuLy9Qcm92aWRlczogY2FtbF9wdXNoX3RyYXBcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9zdGFja1xuLy9JZjogZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9wdXNoX3RyYXAoaGFuZGxlcikge1xuICBjYW1sX2N1cnJlbnRfc3RhY2sueCA9IHsgaDogaGFuZGxlciwgdDogY2FtbF9jdXJyZW50X3N0YWNrLnggfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3BfdHJhcFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X3N0YWNrXG4vL0lmOiBlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX3BvcF90cmFwKCkge1xuICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KVxuICAgIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgICAgdGhyb3cgeDtcbiAgICB9O1xuICB2YXIgaCA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfdW5oYW5kbGVkXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG5cbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3VuaGFuZGxlZChlZmYpIHtcbiAgdmFyIGV4biA9IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4bihlZmYpO1xuICB0aHJvdyBleG47XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF9yZXN1bWVfc3RhY2tcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2VfY29uc3RhbnRcbi8vUmVxdWlyZXM6IGNhbWxfcG9wX2ZpYmVyLCBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3Jlc3VtZV9zdGFjayhzdGFjaywgbGFzdCwgaykge1xuICBpZiAoIXN0YWNrKVxuICAgIGNhbWxfcmFpc2VfY29uc3RhbnQoXG4gICAgICBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LkNvbnRpbnVhdGlvbl9hbHJlYWR5X3Jlc3VtZWRcIiksXG4gICAgKTtcbiAgaWYgKGxhc3QgPT09IDApIHtcbiAgICBsYXN0ID0gc3RhY2s7XG4gICAgLy8gUHJlIE9DYW1sIDUuMiwgbGFzdCB3YXMgbm90IHBvcHVsYXRlZC5cbiAgICB3aGlsZSAobGFzdC5lICE9PSAwKSBsYXN0ID0gbGFzdC5lO1xuICB9XG4gIGNhbWxfY3VycmVudF9zdGFjay5rID0gaztcbiAgbGFzdC5lID0gY2FtbF9jdXJyZW50X3N0YWNrO1xuICBjYW1sX2N1cnJlbnRfc3RhY2sgPSBzdGFjaztcbiAgcmV0dXJuIHN0YWNrLms7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9wX2ZpYmVyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3BvcF9maWJlcigpIHtcbiAgLy8gTW92ZSB0byB0aGUgcGFyZW50IGZpYmVyLCByZXR1cm5pbmcgdGhlIHBhcmVudCdzIGxvdy1sZXZlbCBjb250aW51YXRpb25cbiAgdmFyIGMgPSBjYW1sX2N1cnJlbnRfc3RhY2suZTtcbiAgY2FtbF9jdXJyZW50X3N0YWNrLmUgPSAwO1xuICBjYW1sX2N1cnJlbnRfc3RhY2sgPSBjO1xuICByZXR1cm4gYy5rO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG5cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfZnJlc2hfb29faWRcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG4oZWZmKSB7XG4gIHZhciBleG4gPSBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LlVuaGFuZGxlZFwiKTtcbiAgaWYgKGV4bikgZXhuID0gWzAsIGV4biwgZWZmXTtcbiAgZWxzZSB7XG4gICAgZXhuID0gW1xuICAgICAgMjQ4LFxuICAgICAgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkVmZmVjdC5VbmhhbmRsZWRcIiksXG4gICAgICBjYW1sX2ZyZXNoX29vX2lkKDApLFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wZXJmb3JtX2VmZmVjdFxuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4biwgY2FtbF9jdXJyZW50X3N0YWNrXG4vL1JlcXVpcmVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9wZXJmb3JtX2VmZmVjdChlZmYsIGswKSB7XG4gIGlmIChjYW1sX2N1cnJlbnRfc3RhY2suZSA9PT0gMCkge1xuICAgIHZhciBleG4gPSBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG4oZWZmKTtcbiAgICB0aHJvdyBleG47XG4gIH1cbiAgLy8gR2V0IGN1cnJlbnQgZWZmZWN0IGhhbmRsZXJcbiAgdmFyIGhhbmRsZXIgPSBjYW1sX2N1cnJlbnRfc3RhY2suaFszXTtcbiAgdmFyIGxhc3RfZmliZXIgPSBjYW1sX2N1cnJlbnRfc3RhY2s7XG4gIGxhc3RfZmliZXIuayA9IGswO1xuICB2YXIgY29udCA9IFsyNDUgLypjb250aW51YXRpb24qLywgbGFzdF9maWJlciwgbGFzdF9maWJlcl07XG4gIC8vIE1vdmUgdG8gcGFyZW50IGZpYmVyIGFuZCBleGVjdXRlIHRoZSBlZmZlY3QgaGFuZGxlciB0aGVyZVxuICAvLyBUaGUgaGFuZGxlciBpcyBkZWZpbmVkIGluIFN0ZGxpYi5FZmZlY3QsIHNvIHdlIGtub3cgdGhhdCB0aGUgYXJpdHkgbWF0Y2hlc1xuICB2YXIgazEgPSBjYW1sX3BvcF9maWJlcigpO1xuICByZXR1cm4gY2FtbF9zdGFja19jaGVja19kZXB0aCgpXG4gICAgPyBjYW1sX2dldF9jcHNfZnVuKGhhbmRsZXIpKGVmZiwgY29udCwgbGFzdF9maWJlciwgazEpXG4gICAgOiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGhhbmRsZXIsIFtlZmYsIGNvbnQsIGxhc3RfZmliZXIsIGsxXSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVwZXJmb3JtX2VmZmVjdFxuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4biwgY2FtbF9jdXJyZW50X3N0YWNrXG4vL1JlcXVpcmVzOiBjYW1sX3Jlc3VtZV9zdGFjaywgY2FtbF9jb250aW51YXRpb25fdXNlX25vZXhjXG4vL1JlcXVpcmVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9yZXBlcmZvcm1fZWZmZWN0KGVmZiwgY29udCwgbGFzdCwgazApIHtcbiAgaWYgKGNhbWxfY3VycmVudF9zdGFjay5lID09PSAwKSB7XG4gICAgdmFyIGV4biA9IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4bihlZmYpO1xuICAgIHZhciBzdGFjayA9IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Yyhjb250KTtcbiAgICBjYW1sX3Jlc3VtZV9zdGFjayhzdGFjaywgbGFzdCwgazApO1xuICAgIHRocm93IGV4bjtcbiAgfVxuICAvLyBHZXQgY3VycmVudCBlZmZlY3QgaGFuZGxlclxuICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay5oWzNdO1xuICB2YXIgbGFzdF9maWJlciA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgbGFzdF9maWJlci5rID0gazA7XG4gIGxhc3QuZSA9IGxhc3RfZmliZXI7XG4gIGNvbnRbMl0gPSBsYXN0X2ZpYmVyO1xuICAvLyBNb3ZlIHRvIHBhcmVudCBmaWJlciBhbmQgZXhlY3V0ZSB0aGUgZWZmZWN0IGhhbmRsZXIgdGhlcmVcbiAgLy8gVGhlIGhhbmRsZXIgaXMgZGVmaW5lZCBpbiBTdGRsaWIuRWZmZWN0LCBzbyB3ZSBrbm93IHRoYXQgdGhlIGFyaXR5IG1hdGNoZXNcbiAgdmFyIGsxID0gY2FtbF9wb3BfZmliZXIoKTtcbiAgcmV0dXJuIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKVxuICAgID8gY2FtbF9nZXRfY3BzX2Z1bihoYW5kbGVyKShlZmYsIGNvbnQsIGxhc3RfZmliZXIsIGsxKVxuICAgIDogY2FtbF90cmFtcG9saW5lX3JldHVybihoYW5kbGVyLCBbZWZmLCBjb250LCBsYXN0X2ZpYmVyLCBrMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG5mdW5jdGlvbiBjYW1sX2dldF9jcHNfZnVuKGYpIHtcbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2Nwc19mdW5cbi8vSWY6IGVmZmVjdHNcbi8vSWY6IGRvdWJsZXRyYW5zbGF0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfY3BzX2Z1bihmKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHRvIGdldCB0aGUgZWZmZWN0IGhhbmRsZXIuIElmIHRoZVxuICAvLyBlZmZlY3QgaGFuZGxlciBoYXMgbm8gQ1BTIGZ1bmN0aW9uLCB3ZSBrbm93IHRoYXQgd2UgY2FuIGRpcmVjdGx5XG4gIC8vIGNhbGwgdGhlIGRpcmVjdCB2ZXJzaW9uIGluc3RlYWQuXG4gIHJldHVybiBmLmNwcyA/IGYuY3BzIDogZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19zdGFja1xuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfY2FsbF9nZW4sIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5fY3BzLCBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrX2NhbGwoZiwgeCkge1xuICB2YXIgYXJncyA9IFt4LCBjYW1sX3BvcF9maWJlcigpXTtcbiAgcmV0dXJuIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKVxuICAgID8gY2FtbF9jYWxsX2dlbl9jcHMoZiwgYXJncylcbiAgICA6IGNhbWxfdHJhbXBvbGluZV9yZXR1cm4oZiwgYXJncywgMCk7XG59XG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrX2h2YWwoeCkge1xuICAvLyBDYWxsIFtodl0gaW4gdGhlIHBhcmVudCBmaWJlclxuICB2YXIgZiA9IGNhbWxfY3VycmVudF9zdGFjay5oWzFdO1xuICByZXR1cm4gY2FtbF9hbGxvY19zdGFja19jYWxsKGYsIHgpO1xufVxuZnVuY3Rpb24gY2FtbF9hbGxvY19zdGFja19oZXhuKGUpIHtcbiAgLy8gQ2FsbCBbaHhdIGluIHRoZSBwYXJlbnQgZmliZXJcbiAgdmFyIGYgPSBjYW1sX2N1cnJlbnRfc3RhY2suaFsyXTtcbiAgcmV0dXJuIGNhbWxfYWxsb2Nfc3RhY2tfY2FsbChmLCBlKTtcbn1cbmZ1bmN0aW9uIGNhbWxfYWxsb2Nfc3RhY2soaHYsIGh4LCBoZikge1xuICB2YXIgaGFuZGxlcnMgPSBbMCwgaHYsIGh4LCBoZl07XG4gIHJldHVybiB7XG4gICAgazogY2FtbF9hbGxvY19zdGFja19odmFsLFxuICAgIHg6IHsgaDogY2FtbF9hbGxvY19zdGFja19oZXhuLCB0OiAwIH0sXG4gICAgaDogaGFuZGxlcnMsXG4gICAgZTogMCxcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19zdGFja1xuLy9JZjogIWVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrKF9odiwgX2h4LCBfaGYpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Y1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Yyhjb250KSB7XG4gIHZhciBzdGFjayA9IGNvbnRbMV07XG4gIGNvbnRbMV0gPSAwO1xuICByZXR1cm4gc3RhY2s7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9hbmRfdXBkYXRlX2hhbmRsZXJfbm9leGNcbi8vUmVxdWlyZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Y1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfY29udGludWF0aW9uX3VzZV9hbmRfdXBkYXRlX2hhbmRsZXJfbm9leGMoXG4gIGNvbnQsXG4gIGh2YWwsXG4gIGhleG4sXG4gIGhlZmYsXG4pIHtcbiAgdmFyIHN0YWNrID0gY2FtbF9jb250aW51YXRpb25fdXNlX25vZXhjKGNvbnQpO1xuICBpZiAoc3RhY2sgPT09IDApIHJldHVybiBzdGFjaztcbiAgdmFyIGxhc3QgPSBjb250WzJdO1xuICBsYXN0LmhbMV0gPSBodmFsO1xuICBsYXN0LmhbMl0gPSBoZXhuO1xuICBsYXN0LmhbM10gPSBoZWZmO1xuICByZXR1cm4gc3RhY2s7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2NvbnRpbnVhdGlvbl9jYWxsc3RhY2tcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2dldF9jb250aW51YXRpb25fY2FsbHN0YWNrKCkge1xuICByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NvbmRpdGlvbl9uZXdcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl9uZXcoX3VuaXQpIHtcbiAgcmV0dXJuIHsgY29uZGl0aW9uOiAxIH07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY29uZGl0aW9uX3dhaXRcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl93YWl0KF90LCBfbXV0ZXh0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NvbmRpdGlvbl9icm9hZGNhc3Rcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl9icm9hZGNhc3QoX3QpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY29uZGl0aW9uX3NpZ25hbFxuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbWxfY29uZGl0aW9uX3NpZ25hbChfdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczoganNvb19lZmZlY3Rfbm90X3N1cHBvcnRlZFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy8hSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBqc29vX2VmZmVjdF9ub3Rfc3VwcG9ydGVkKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiRWZmZWN0IGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3VtZVxuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuX2NwcywgY2FtbF9jdXJyZW50X3N0YWNrLCBjYW1sX3dyYXBfZXhjZXB0aW9uLCBjYW1sX3Jlc3VtZV9zdGFja1xuLy9JZjogZWZmZWN0c1xuLy9JZjogZG91YmxldHJhbnNsYXRlXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9yZXN1bWUoZiwgYXJnLCBzdGFjaywgbGFzdCkge1xuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfY3VycmVudF9zdGFjayA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcbiAgICB2YXIgayA9IGNhbWxfcmVzdW1lX3N0YWNrKHN0YWNrLCBsYXN0LCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSk7XG4gICAgLyogTm90ZTogZiBpcyBub3QgYW4gb3JkaW5hcnkgZnVuY3Rpb24gYnV0IGEgKGRpcmVjdC1zdHlsZSwgQ1BTKSBjbG9zdXJlIHBhaXIgKi9cbiAgICB2YXIgcmVzID0geyBqb29fdHJhbXA6IGYsIGpvb19hcmdzOiBbYXJnLCBrXSwgam9vX2RpcmVjdDogMCB9O1xuICAgIGRvIHtcbiAgICAgIC8qIEF2b2lkcyB0cmFtcG9saW5pbmcgdG9vIG9mdGVuIHdoaWxlIHN0aWxsIGF2b2lkaW5nIHN0YWNrIG92ZXJmbG93LiBTZWVcbiAgICAgICAgIFtjYW1sX2NhbGxiYWNrXS4gKi9cbiAgICAgIGNhbWxfc3RhY2tfZGVwdGggPSA0MDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IHJlcy5qb29fZGlyZWN0XG4gICAgICAgICAgPyByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncylcbiAgICAgICAgICA6IGNhbWxfY2FsbF9nZW5fY3BzKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gICAgICAgIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgICAgICAgcmVzID0ge1xuICAgICAgICAgIGpvb190cmFtcDogaGFuZGxlcixcbiAgICAgICAgICBqb29fYXJnczogW2NhbWxfd3JhcF9leGNlcHRpb24oZSldLFxuICAgICAgICAgIGpvb19kaXJlY3Q6IDEsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSB3aGlsZSAocmVzPy5qb29fYXJncyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9jdXJyZW50X3N0YWNrID0gc2F2ZWRfY3VycmVudF9zdGFjaztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Nwc19jbG9zdXJlXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfY3BzX2Nsb3N1cmUoZGlyZWN0X2YsIGNwc19mKSB7XG4gIGRpcmVjdF9mLmNwcyA9IGNwc19mO1xuICByZXR1cm4gZGlyZWN0X2Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXNzdW1lX25vX3BlcmZvcm1cbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6IGVmZmVjdHNcbi8vSWY6ICFkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfYXNzdW1lX25vX3BlcmZvcm0oZikge1xuICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbMF0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YihhLCBpLCBsZW4pIHtcbiAgdmFyIGEyID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICBhMlswXSA9IDA7XG4gIGZvciAodmFyIGkyID0gMSwgaTEgPSBpICsgMTsgaTIgPD0gbGVuOyBpMisrLCBpMSsrKSB7XG4gICAgYTJbaTJdID0gYVtpMV07XG4gIH1cbiAgcmV0dXJuIGEyO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfc3ViIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfc3ViXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X3N1YihhLCBpLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfc3ViKGEsIGksIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9zdWIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9zdWJcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfc3ViKGEsIGksIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9zdWIoYSwgaSwgbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9hcHBlbmQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKSB7XG4gIHZhciBsMSA9IGExLmxlbmd0aCxcbiAgICBsMiA9IGEyLmxlbmd0aDtcbiAgdmFyIGwgPSBsMSArIGwyIC0gMTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsXG4gICAgaiA9IDE7XG4gIGZvciAoOyBpIDwgbDE7IGkrKykgYVtpXSA9IGExW2ldO1xuICBmb3IgKDsgaSA8IGw7IGkrKywgaisrKSBhW2ldID0gYTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfYXBwZW5kIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYXBwZW5kXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2FwcGVuZChhMSwgYTIpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9hcHBlbmQgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9hcHBlbmRcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICByZXR1cm4gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9jb25jYXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9jb25jYXQgbXV0YWJsZVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9jb25jYXQgbXV0YWJsZVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfdW5pZm9ybV9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ibGl0XG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF91bmlmb3JtX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9BbGlhczogY2FtbF9hcnJheV9zZXRfZmxvYXRcbi8vQWxpYXM6IGNhbWxfZmxvYXRhcnJheV9zZXRcbi8vQWxpYXM6IGNhbWxfYXJyYXlfc2V0X2FkZHJcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc2V0KGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBhcnJheVtpbmRleCArIDFdID0gbmV3dmFsO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL0FsaWFzOiBjYW1sX2FycmF5X2dldF9mbG9hdFxuLy9BbGlhczogY2FtbF9mbG9hdGFycmF5X2dldFxuLy9BbGlhczogY2FtbF9hcnJheV9nZXRfYWRkclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQoYXJyYXksIGluZGV4KSB7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXlbaW5kZXggKyAxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnJheVtvZnMgKyBpICsgMV0gPSB2O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfZmlsbFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2ZpbGxfdW5ib3hlZFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2ZpbGxfdW5ib3hlZChhcnJheSwgb2ZzLCBsZW4sIHYpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfZmlsbChhcnJheSwgb2ZzLCBsZW4sIHYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfZmlsbFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF91bmlmb3JtX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGVja19ib3VuZCAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL0FsaWFzOiBjYW1sX2NoZWNrX2JvdW5kX2dlblxuLy9BbGlhczogY2FtbF9jaGVja19ib3VuZF9mbG9hdFxuZnVuY3Rpb24gY2FtbF9jaGVja19ib3VuZChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X21ha2UgY29uc3QgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9tYWtlKGxlbiwgaW5pdCkge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDQpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAwO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfbWFrZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3ZlY3QobGVuLCBpbml0KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X21ha2UobGVuLCBpbml0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX2Zsb2F0X3ZlY3QgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX2Zsb2F0X3ZlY3QobGVuKSB7XG4gIGlmIChsZW4gPj4+IDAgPj0gKCgweDdmZmZmZmZmIC8gOCkgfCAwKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gKGxlbiArIDEpIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXSA9IDI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NyZWF0ZV9mbG9hdCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9hcnJheV9jcmVhdGVfZmxvYXQobGVuKSB7XG4gIGlmIChsZW4gPj4+IDAgPj0gKCgweDdmZmZmZmZmIC8gOCkgfCAwKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gKGxlbiArIDEpIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXSA9IDI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiO1xufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbikge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDgpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAyNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X21ha2UgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9tYWtlKGxlbiwgaW5pdCkge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDgpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAyNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSBpbml0O1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X21ha2VfdW5ib3hlZCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2Zsb2F0YXJyYXlfbWFrZVxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9tYWtlX3VuYm94ZWQobGVuLCBpbml0KSB7XG4gIHJldHVybiBjYW1sX2Zsb2F0YXJyYXlfbWFrZShsZW4sIGluaXQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfbWFrZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X21ha2Vcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfbWFrZShsZW4sIGluaXQpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfbWFrZShsZW4sIGluaXQpO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF9kb21haW5fZGxzXG4vL1ZlcnNpb246ID49IDVcbnZhciBjYW1sX2RvbWFpbl9kbHMgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfZG9tYWluX2Rsc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2Rsc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9kbHNfc2V0KGEpIHtcbiAgY2FtbF9kb21haW5fZGxzID0gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fZGxzX2NvbXBhcmVfYW5kX3NldFxuLy9SZXF1aXJlczogY2FtbF9kb21haW5fZGxzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9kb21haW5fZGxzX2NvbXBhcmVfYW5kX3NldChvbGQsIG4pIHtcbiAgaWYgKGNhbWxfZG9tYWluX2RscyAhPT0gb2xkKSByZXR1cm4gMDtcbiAgY2FtbF9kb21haW5fZGxzID0gbjtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZG9tYWluX2Rsc19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2Rsc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9kbHNfZ2V0KF91bml0KSB7XG4gIHJldHVybiBjYW1sX2RvbWFpbl9kbHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2xvYWRcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9hdG9taWNfbG9hZChyZWYpIHtcbiAgcmV0dXJuIHJlZlsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hdG9taWNfbG9hZF9maWVsZFxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX2xvYWRfZmllbGQoYiwgaSkge1xuICByZXR1cm4gYltpICsgMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2Nhc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2F0b21pY19jYXMocmVmLCBvLCBuKSB7XG4gIGlmIChyZWZbMV0gPT09IG8pIHtcbiAgICByZWZbMV0gPSBuO1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19jYXNfZmllbGRcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2F0b21pY19jYXNfZmllbGQoYiwgaSwgbywgbikge1xuICBpZiAoYltpICsgMV0gPT09IG8pIHtcbiAgICBiW2kgKyAxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2ZldGNoX2FkZFxuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2F0b21pY19mZXRjaF9hZGQocmVmLCBpKSB7XG4gIHZhciBvbGQgPSByZWZbMV07XG4gIHJlZlsxXSArPSBpO1xuICByZXR1cm4gb2xkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19mZXRjaF9hZGRfZmllbGRcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2F0b21pY19mZXRjaF9hZGRfZmllbGQoYiwgaSwgbikge1xuICB2YXIgb2xkID0gYltpICsgMV07XG4gIGJbaSArIDFdICs9IG47XG4gIHJldHVybiBvbGQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2V4Y2hhbmdlXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX2V4Y2hhbmdlKHJlZiwgdikge1xuICB2YXIgciA9IHJlZlsxXTtcbiAgcmVmWzFdID0gdjtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2V4Y2hhbmdlX2ZpZWxkXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9hdG9taWNfZXhjaGFuZ2VfZmllbGQoYiwgaSwgdikge1xuICB2YXIgciA9IGJbaSArIDFdO1xuICBiW2kgKyAxXSA9IHY7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19tYWtlX2NvbnRlbmRlZFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX21ha2VfY29udGVuZGVkKGEpIHtcbiAgcmV0dXJuIFswLCBhXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5fdW5pcXVlX3Rva2VuXG4vL1ZlcnNpb246ID49IDUuMCwgPCA1LjJcbnZhciBjYW1sX21sX2RvbWFpbl91bmlxdWVfdG9rZW5fID0gWzBdO1xuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5fdW5pcXVlX3Rva2VuKF91bml0KSB7XG4gIHJldHVybiBjYW1sX21sX2RvbWFpbl91bmlxdWVfdG9rZW5fO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudFxuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudChfdW5pdCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5faW5kZXhcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2lkXG4vL1ZlcnNpb246ID49IDUuMDNcbmZ1bmN0aW9uIGNhbWxfbWxfZG9tYWluX2luZGV4KF91bml0KSB7XG4gIHJldHVybiBjYW1sX2RvbWFpbl9pZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5faWRcbi8vVmVyc2lvbjogPj0gNVxudmFyIGNhbWxfZG9tYWluX2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fc3Bhd25cbi8vUmVxdWlyZXM6IGNhbWxfbWxfbXV0ZXhfdW5sb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2RvbWFpbl9pZFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjJcbnZhciBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4ID0gMTtcbmZ1bmN0aW9uIGNhbWxfZG9tYWluX3NwYXduKGYsIHRlcm1fc3luYykge1xuICB2YXIgaWQgPSBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4Kys7XG4gIHZhciBvbGQgPSBjYW1sX2RvbWFpbl9pZDtcbiAgY2FtbF9kb21haW5faWQgPSBpZDtcbiAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgWzBdKTtcbiAgY2FtbF9kb21haW5faWQgPSBvbGQ7XG4gIGNhbWxfbWxfbXV0ZXhfdW5sb2NrKHRlcm1fc3luY1syXSk7XG4gIC8vVE9ETzogZml4IGV4biBjYXNlXG4gIHRlcm1fc3luY1sxXSA9IFswLCBbMCwgcmVzXV07XG4gIHJldHVybiBpZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fc3Bhd25cbi8vUmVxdWlyZXM6IGNhbWxfbWxfbXV0ZXhfdW5sb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2RvbWFpbl9pZFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjAsIDwgNS4yXG52YXIgY2FtbF9kb21haW5fbGF0ZXN0X2lkeCA9IDE7XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9zcGF3bihmLCBtdXRleCkge1xuICB2YXIgaWQgPSBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4Kys7XG4gIHZhciBvbGQgPSBjYW1sX2RvbWFpbl9pZDtcbiAgY2FtbF9kb21haW5faWQgPSBpZDtcbiAgdmFyIF9yZXMgPSBjYW1sX2NhbGxiYWNrKGYsIFswXSk7XG4gIGNhbWxfZG9tYWluX2lkID0gb2xkO1xuICBjYW1sX21sX211dGV4X3VubG9jayhtdXRleCk7XG4gIHJldHVybiBpZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5faWRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2lkXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5faWQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfZG9tYWluX2lkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2RvbWFpbl9jcHVfcmVsYXhcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5fY3B1X3JlbGF4KF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0FsaWFzOiBjYW1sX2ludDMyX2Zvcm1hdFxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfZm9ybWF0XG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT09IFwiJWRcIilcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiICsgaSk7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGkgPCAwKSB7XG4gICAgaWYgKGYuc2lnbmVkY29udikge1xuICAgICAgZi5zaWduID0gLTE7XG4gICAgICBpID0gLWk7XG4gICAgfSBlbHNlIGkgPj4+PSAwO1xuICB9XG4gIHZhciBzID0gaS50b1N0cmluZyhmLmJhc2UpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0KG4sIFwiMFwiKSArIHM7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Uocykge1xuICB2YXIgaSA9IDAsXG4gICAgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLFxuICAgIGJhc2UgPSAxMCxcbiAgICBzaWduID0gMSxcbiAgICBzaWduZWRuZXNzID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkpIHtcbiAgICAgIGNhc2UgNDU6XG4gICAgICAgIGkrKztcbiAgICAgICAgc2lnbiA9IC0xO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDM6XG4gICAgICAgIGkrKztcbiAgICAgICAgc2lnbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgICAgY2FzZSAxMjA6XG4gICAgICBjYXNlIDg4OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgYmFzZSA9IDE2O1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMTE6XG4gICAgICBjYXNlIDc5OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgYmFzZSA9IDg7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDk4OlxuICAgICAgY2FzZSA2NjpcbiAgICAgICAgc2lnbmVkbmVzcyA9IDA7XG4gICAgICAgIGJhc2UgPSAyO1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMTc6XG4gICAgICBjYXNlIDg1OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBbaSwgc2lnbiwgYmFzZSwgc2lnbmVkbmVzc107XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZGlnaXRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZGlnaXQoYykge1xuICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KSByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IGNhbWxfaW50MzJfb2Zfc3RyaW5nXG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlKHMpO1xuICB2YXIgaSA9IHJbMF0sXG4gICAgc2lnbiA9IHJbMV0sXG4gICAgYmFzZSA9IHJbMl0sXG4gICAgc2lnbmVkbmVzcyA9IHJbM107XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciB0aHJlc2hvbGQgPSAtMSA+Pj4gMDtcbiAgdmFyIGMgPSBpIDwgbGVuID8gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA6IDA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKzsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmIChzaWduZWRuZXNzICYmIChyZXMgfCAwKSAhPT0gcmVzKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50MzJfbXVsXG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9tdWxcbi8vQWxpYXM6ICVpbnRfbXVsXG5mdW5jdGlvbiBjYW1sX211bChhLCBiKSB7XG4gIHJldHVybiBNYXRoLmltdWwoYSwgYik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGl2XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL0FsaWFzOiBjYW1sX2ludDMyX2RpdlxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfZGl2XG4vL0FsaWFzOiAlaW50X2RpdlxuZnVuY3Rpb24gY2FtbF9kaXYoeCwgeSkge1xuICBpZiAoeSA9PT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSgpO1xuICByZXR1cm4gKHggLyB5KSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW9kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL0FsaWFzOiBjYW1sX2ludDMyX21vZFxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfbW9kXG4vL0FsaWFzOiAlaW50X21vZFxuZnVuY3Rpb24gY2FtbF9tb2QoeCwgeSkge1xuICBpZiAoeSA9PT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSgpO1xuICByZXR1cm4geCAlIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNiBjb25zdFxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoeCAmIDB4MDBmZikgPDwgOCkgfCAoKHggJiAweGZmMDApID4+IDgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwIGNvbnN0XG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9ic3dhcFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9ic3dhcCh4KSB7XG4gIHJldHVybiAoXG4gICAgKCh4ICYgMHgwMDAwMDBmZikgPDwgMjQpIHxcbiAgICAoKHggJiAweDAwMDBmZjAwKSA8PCA4KSB8XG4gICAgKCh4ICYgMHgwMGZmMDAwMCkgPj4+IDgpIHxcbiAgICAoKHggJiAweGZmMDAwMDAwKSA+Pj4gMjQpXG4gICk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cbi8vZnVuY3Rpb24gUk9UTDMyKHgsbikgeyByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4+ICgzMi1uKSkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50KGgsIGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTEgfCAwKTtcbiAgZCA9IChkIDw8IDE1KSB8IChkID4+PiAoMzIgLSAxNSkpOyAvLyBST1RMMzIoZCwgMTUpO1xuICBkID0gY2FtbF9tdWwoZCwgMHgxYjg3MzU5Myk7XG4gIGggXj0gZDtcbiAgaCA9IChoIDw8IDEzKSB8IChoID4+PiAoMzIgLSAxMykpOyAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpIHwgMCkgKyAoMHhlNjU0NmI2NCB8IDApKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsKGgsIDB4ODVlYmNhNmIgfCAwKTtcbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IGNhbWxfbXVsKGgsIDB4YzJiMmFlMzUgfCAwKTtcbiAgaCBePSBoID4+PiAxNjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbG8zMiwgY2FtbF9pbnQ2NF9oaTMyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2Zsb2F0KGhhc2gsIHYwKSB7XG4gIHZhciBpNjQgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQodjApO1xuICB2YXIgbCA9IGNhbWxfaW50NjRfbG8zMihpNjQpO1xuICB2YXIgaCA9IGNhbWxfaW50NjRfaGkzMihpNjQpO1xuICAvKiBOb3JtYWxpemUgTmFOcyAqL1xuICBpZiAoKGggJiAweDdmZjAwMDAwKSA9PT0gMHg3ZmYwMDAwMCAmJiAobCB8IChoICYgMHhmZmZmZikpICE9PSAwKSB7XG4gICAgaCA9IDB4N2ZmMDAwMDA7XG4gICAgbCA9IDB4MDAwMDAwMDE7XG4gIH0gZWxzZSBpZiAoaCA9PT0gKDB4ODAwMDAwMDAgfCAwKSAmJiBsID09PSAwKSB7XG4gICAgLyogTm9ybWFsaXplIC0wIGludG8gKzAgKi9cbiAgICAvLyBUaGlzIGNvZGUgcGF0aCBpcyBub3QgdXNlZCBieSBjYW1sX2hhc2ggYmVjYXVzZSAwIGFuZCAtMCBsb29rXG4gICAgLy8gbGlrZSBpbnRlZ2Vyc1xuICAgIGggPSAwO1xuICB9XG4gIGhhc2ggPSBjYW1sX2hhc2hfbWl4X2ludChoYXNoLCBsKTtcbiAgaGFzaCA9IGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGgpO1xuICByZXR1cm4gaGFzaDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NChoLCB2KSB7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2xvMzIodikpO1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9oaTMyKHYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCxcbiAgICBpLFxuICAgIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9XG4gICAgICBzLmNoYXJDb2RlQXQoaSkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgOCkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMikgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSArIDMpIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICAgIGNhc2UgMzpcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDE2O1xuICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgY2FzZSAyOlxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgdyB8PSBzLmNoYXJDb2RlQXQoaSArIDEpIDw8IDg7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDE6XG4gICAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsXG4gICAgaSxcbiAgICB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldIHwgKHNbaSArIDFdIDw8IDgpIHwgKHNbaSArIDJdIDw8IDE2KSB8IChzW2kgKyAzXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgICBjYXNlIDM6XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICB3ID0gc1tpICsgMl0gPDwgMTY7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDI6XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICB3IHw9IHNbaSArIDFdIDw8IDg7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDE6XG4gICAgICB3IHw9IHNbaV07XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNvbnRlbnQpO1xuICAvKiBBUlJBWSAqLyBlbHNlIHJldHVybiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdikge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmcodikpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2ggbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0LCBjYW1sX2hhc2hfbWl4X3N0cmluZywgY2FtbF9oYXNoX21peF9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9oYXNoKGNvdW50LCBsaW1pdCwgc2VlZCwgb2JqKSB7XG4gIHZhciBxdWV1ZSwgcmQsIHdyLCBzeiwgbnVtLCBoLCB2LCBpLCBsZW47XG4gIHN6ID0gbGltaXQ7XG4gIGlmIChzeiA8IDAgfHwgc3ogPiAyNTYpIHN6ID0gMjU2O1xuICBudW0gPSBjb3VudDtcbiAgaCA9IHNlZWQ7XG4gIHF1ZXVlID0gW29ial07XG4gIHJkID0gMDtcbiAgd3IgPSAxO1xuICB3aGlsZSAocmQgPCB3ciAmJiBudW0gPiAwKSB7XG4gICAgdiA9IHF1ZXVlW3JkKytdO1xuICAgIGlmICh2Py5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYgKFxuICAgICAgICBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0gJiZcbiAgICAgICAgY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2hcbiAgICAgICkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGhoKTtcbiAgICAgICAgbnVtLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHYpICYmIHZbMF0gPT09ICh2WzBdIHwgMCkpIHtcbiAgICAgIHN3aXRjaCAodlswXSkge1xuICAgICAgICBjYXNlIDI0ODpcbiAgICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdlsyXSk7XG4gICAgICAgICAgbnVtLS07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjUwOlxuICAgICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSkge1xuICAgICAgICAgICAgLyogQWxsIGNvbnRpbnVhdGlvbnMgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZSxcbiAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGRpc3Rpbmd1aXNoIHRoZW0uICovXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB0YWcpO1xuICAgICAgICAgIGZvciAoaSA9IDEsIGxlbiA9IHYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgICBxdWV1ZVt3cisrXSA9IHZbaV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdik7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdik7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIHYpO1xuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodiB8IDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdiArIHYgKyAxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCB2KTtcbiAgICAgIG51bS0tO1xuICAgIH1cbiAgfVxuICBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNmZmZmZmZmO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsLCBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2hhc2goaCwgdikge1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsIHYpO1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzZmZmZmZmZjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSkge1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpXG4gICAgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoYSkpXG4gICAgcmV0dXJuIDI1MjsgLy8gc3RyaW5nX3RhZ1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhhKSlcbiAgICByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBhWzBdID09PSBhWzBdID4+PiAwICYmIGFbMF0gPD0gMjU1KSB7XG4gICAgLy8gTG9vayBsaWtlIGFuIG9jYW1sIGJsb2NrXG4gICAgdmFyIHRhZyA9IGFbMF0gfCAwO1xuICAgIC8vIGlnbm9yZSBkb3VibGVfYXJyYXlfdGFnIGJlY2F1c2Ugd2UgY2Fubm90IGFjY3VyYXRlbHkgc2V0XG4gICAgLy8gdGhpcyB0YWcgd2hlbiB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgZmxvYXQuXG4gICAgcmV0dXJuIHRhZyA9PT0gMjU0ID8gMCA6IHRhZztcbiAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgU3RyaW5nKVxuICAgIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE51bWJlcilcbiAgICByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYT8uY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDEyNTU7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmIChhPy5jb21wYXJlKVxuICAgIHJldHVybiAxMjU2OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gMTI0NzsgLy8gbGlrZSBjbG9zdXJlX3RhZyAoMjQ3KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpIHtcbiAgcmV0dXJuIChcbiAgICBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dLmNvbXBhcmVcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShudW0sIGN1c3RvbSwgc3dhcCwgdG90YWwpIHtcbiAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oY3VzdG9tKTtcbiAgaWYgKGNvbXApIHtcbiAgICB2YXIgeCA9IHN3YXAgPiAwID8gY29tcChjdXN0b20sIG51bSwgdG90YWwpIDogY29tcChudW0sIGN1c3RvbSwgdG90YWwpO1xuICAgIGlmICh0b3RhbCAmJiBOdW1iZXIuaXNOYU4oeCkpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZiAoTnVtYmVyLmlzTmFOKCt4KSkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZiAoKHggfCAwKSAhPT0gMCkgcmV0dXJuIHggfCAwOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWwgKGNvbnN0LCBjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludF9jb21wYXJlLCBjYW1sX3N0cmluZ19jb21wYXJlLCBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tLCBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvciAoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZiAodGFnX2EgPT09IDI1MCkge1xuICAgICAgICBhID0gYVsxXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB0YWdfYiA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGIpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYgKHRhZ19iID09PSAyNTApIHtcbiAgICAgICAgYiA9IGJbMV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmICh0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYgKHRhZ19hID09PSAxMDAwKSB7XG4gICAgICAgICAgaWYgKHRhZ19iID09PSAxMjU1KSB7XG4gICAgICAgICAgICAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZ19iID09PSAxMDAwKSB7XG4gICAgICAgICAgaWYgKHRhZ19hID09PSAxMjU1KSB7XG4gICAgICAgICAgICAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWdfYSA8IHRhZ19iID8gLTEgOiAxO1xuICAgICAgfVxuICAgICAgLy8gdGFnX2EgPSB0YWdfYlxuICAgICAgc3dpdGNoICh0YWdfYSkge1xuICAgICAgICAvLyAyNDY6IExhenlfdGFnIGhhbmRsZWQgYmVsbG93XG4gICAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pIHwgMDtcbiAgICAgICAgICBpZiAoeCAhPT0gMCkgcmV0dXJuIHg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ5OiAvLyBJbmZpeFxuICAgICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1MDogLy8gRm9yd2FyZCB0YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgICAgdmFyIHggPSBjYW1sX2J5dGVzX2NvbXBhcmUoYSwgYikgfCAwO1xuICAgICAgICAgICAgaWYgKHggIT09IDApIHJldHVybiB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTM6IC8vIERvdWJsZV90YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGluIGNhbWxfY29tcGFyZV92YWxfdGFnXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFxuICAgICAgICAgICAgXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgICBpZiAoY29tcCAhPT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5jYW1sX2N1c3RvbSA8IGIuY2FtbF9jdXN0b20gPyAtMSA6IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY29tcCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgICAgdmFyIHggPSBjb21wKGEsIGIsIHRvdGFsKTtcbiAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHgpKSB7XG4gICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICAgIHJldHVybiB0b3RhbCA/IC0xIDogeDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHggIT09ICh4IHwgMCkpIHtcbiAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoeCAhPT0gMCkgcmV0dXJuIHggfCAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgICB2YXIgeCA9IGEuY29tcGFyZShiLCB0b3RhbCk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih4KSkge1xuICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAtMSA6IHg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh4ICE9PSAoeCB8IDApKSB7XG4gICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHggIT09IDApIHJldHVybiB4IHwgMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDAwOiAvLyBOdW1iZXJcbiAgICAgICAgICBhID0gK2E7XG4gICAgICAgICAgYiA9ICtiO1xuICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOdW1iZXIuTmFOO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oYSkpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oYikpIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAgIC8vIDEuIEphdmFTY3JpcHQgcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgICAvLyAoMikgYW5kICgzKSwgYWZ0ZXIgZXZlbnR1YWwgY29lcmNpb25cbiAgICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAgIC8vICAgYW5kIGFwcGx5IHN0YW5kYXJkIGNvbXBhcmlzb25cbiAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAxIDogTnVtYmVyLk5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAxIDogTnVtYmVyLk5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICAgIHZhciBhID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhhKTtcbiAgICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICAgIHZhciBiID0gYi50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBMYXp5X3RhZyBvciBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICAgIGlmIChjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodGFnX2EpKSB7XG4gICAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGEubGVuZ3RoIDwgYi5sZW5ndGggPyAtMSA6IDE7XG4gICAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuXG4vLyBNYXkgcmFpc2Vcbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9jb21wYXJlKGEsIGIpIHtcbiAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwoYSwgYiwgdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50X2NvbXBhcmUgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50MzJfY29tcGFyZVxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfY29tcGFyZVxuZnVuY3Rpb24gY2FtbF9pbnRfY29tcGFyZShhLCBiKSB7XG4gIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIDA7XG4gIHJldHVybiAxO1xufVxuXG4vLyBNYXkgcmFpc2Vcbi8vUHJvdmlkZXM6IGNhbWxfZXF1YWwgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA9PT0gMCk7XG59XG5cbi8vIE1heSByYWlzZVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ub3RlcXVhbCh4LCB5KSB7XG4gIHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCwgeSwgZmFsc2UpICE9PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA+PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJ0aGFuKHgsIHkpIHtcbiAgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LCB5LCBmYWxzZSkgPiAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3NlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA8PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3N0aGFuIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuKHgsIHkpIHtcbiAgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LCB5LCBmYWxzZSkgPCAwKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX2V2ZW50X2luZGV4XG4vL1ZlcnNpb246ID49IDUuMVxudmFyIGNhbWxfY3VzdG9tX2V2ZW50X2luZGV4ID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3JlZ2lzdGVyXG4vL1JlcXVpcmVzOiBjYW1sX2N1c3RvbV9ldmVudF9pbmRleFxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9ldmVudHNfdXNlcl9yZWdpc3RlcihldmVudF9uYW1lLCBldmVudF90YWcsIGV2ZW50X3R5cGUpIHtcbiAgY2FtbF9jdXN0b21fZXZlbnRfaW5kZXggKz0gMTtcbiAgcmV0dXJuIFswLCBjYW1sX2N1c3RvbV9ldmVudF9pbmRleCwgZXZlbnRfbmFtZSwgZXZlbnRfdHlwZSwgZXZlbnRfdGFnXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3dyaXRlXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3dyaXRlKF9ldmVudCwgX2V2ZW50X2NvbnRlbnQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfdXNlcl9yZXNvbHZlXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3Jlc29sdmUoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3J1bnRpbWVfZXZlbnRzX3N0YXJ0XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19zdGFydCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfc3RhcnRcbi8vVmVyc2lvbjogPj0gNS4wLCA8IDUuMlxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c19zdGFydCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV9ldmVudHNfcGF1c2Vcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX3J1bnRpbWVfZXZlbnRzX3BhdXNlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c19wYXVzZVxuLy9WZXJzaW9uOiA+PSA1LjAsIDwgNS4yXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX3BhdXNlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX2V2ZW50c19hcmVfYWN0aXZlXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19hcmVfYWN0aXZlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c19yZXN1bWVcbi8vVmVyc2lvbjogPj01LjAsIDwgNS4yXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX3Jlc3VtZSgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV9ldmVudHNfcmVzdW1lXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19yZXN1bWUoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfZXZlbnRzX2NyZWF0ZV9jdXJzb3Jcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX2NyZWF0ZV9jdXJzb3IoX3RhcmdldCkge1xuICByZXR1cm4ge307XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfZnJlZV9jdXJzb3Jcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX2ZyZWVfY3Vyc29yKF9jdXJzb3IpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfcmVhZF9wb2xsXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c19yZWFkX3BvbGwoX2N1cnNvciwgX2NhbGxiYWNrcywgX251bSkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX2V2ZW50c19wYXRoIGNvbnN0XG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19wYXRoKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuIiwiLy9Qcm92aWRlczogenN0ZF9kZWNvbXByZXNzXG4vL1ZlcnNpb246ID49IDUuMVxudmFyIHpzdGRfZGVjb21wcmVzcyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGFsaWFzZXMgZm9yIHNob3J0ZXIgY29tcHJlc3NlZCBjb2RlIChtb3N0IG1pbmlmZXJzIGRvbid0IGRvIHRoaXMpXG4gIHZhciBhYiA9IEFycmF5QnVmZmVyLFxuICAgIHU4ID0gVWludDhBcnJheSxcbiAgICB1MTYgPSBVaW50MTZBcnJheSxcbiAgICBpMTYgPSBJbnQxNkFycmF5LFxuICAgIGkzMiA9IEludDMyQXJyYXk7XG4gIHZhciBzbGMgPSBmdW5jdGlvbiAodiwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuc2xpY2UpIHJldHVybiB1OC5wcm90b3R5cGUuc2xpY2UuY2FsbCh2LCBzLCBlKTtcbiAgICBpZiAocyA9PSBudWxsIHx8IHMgPCAwKSBzID0gMDtcbiAgICBpZiAoZSA9PSBudWxsIHx8IGUgPiB2Lmxlbmd0aCkgZSA9IHYubGVuZ3RoO1xuICAgIHZhciBuID0gbmV3IHU4KGUgLSBzKTtcbiAgICBuLnNldCh2LnN1YmFycmF5KHMsIGUpKTtcbiAgICByZXR1cm4gbjtcbiAgfTtcbiAgdmFyIGZpbGwgPSBmdW5jdGlvbiAodiwgbiwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuZmlsbCkgcmV0dXJuIHU4LnByb3RvdHlwZS5maWxsLmNhbGwodiwgbiwgcywgZSk7XG4gICAgaWYgKHMgPT0gbnVsbCB8fCBzIDwgMCkgcyA9IDA7XG4gICAgaWYgKGUgPT0gbnVsbCB8fCBlID4gdi5sZW5ndGgpIGUgPSB2Lmxlbmd0aDtcbiAgICBmb3IgKDsgcyA8IGU7ICsrcykgdltzXSA9IG47XG4gICAgcmV0dXJuIHY7XG4gIH07XG4gIHZhciBjcHcgPSBmdW5jdGlvbiAodiwgdCwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuY29weVdpdGhpbilcbiAgICAgIHJldHVybiB1OC5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKHYsIHQsIHMsIGUpO1xuICAgIGlmIChzID09IG51bGwgfHwgcyA8IDApIHMgPSAwO1xuICAgIGlmIChlID09IG51bGwgfHwgZSA+IHYubGVuZ3RoKSBlID0gdi5sZW5ndGg7XG4gICAgd2hpbGUgKHMgPCBlKSB7XG4gICAgICB2W3QrK10gPSB2W3MrK107XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ29kZXMgZm9yIGVycm9ycyBnZW5lcmF0ZWQgd2l0aGluIHRoaXMgbGlicmFyeVxuICAgKi9cbiAgLy8gZXJyb3IgY29kZXNcbiAgdmFyIGVjID0gW1xuICAgIFwiaW52YWxpZCB6c3RkIGRhdGFcIixcbiAgICBcIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQilcIixcbiAgICBcImludmFsaWQgYmxvY2sgdHlwZVwiLFxuICAgIFwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoXCIsXG4gICAgXCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2tcIixcbiAgICBcInVuZXhwZWN0ZWQgRU9GXCIsXG4gIF07XG4gIHZhciBlcnIgPSBmdW5jdGlvbiAoaW5kLCBtc2csIG50KSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnIHx8IGVjW2luZF0pO1xuICAgIGUuY29kZSA9IGluZDtcbiAgICBpZiAoIW50KSB0aHJvdyBlO1xuICAgIHJldHVybiBlO1xuICB9O1xuICB2YXIgcmIgPSBmdW5jdGlvbiAoZCwgYiwgbikge1xuICAgIHZhciBpID0gMCxcbiAgICAgIG8gPSAwO1xuICAgIGZvciAoOyBpIDwgbjsgKytpKSBvIHw9IGRbYisrXSA8PCAoaSA8PCAzKTtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgdmFyIGI0ID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICByZXR1cm4gKGRbYl0gfCAoZFtiICsgMV0gPDwgOCkgfCAoZFtiICsgMl0gPDwgMTYpIHwgKGRbYiArIDNdIDw8IDI0KSkgPj4+IDA7XG4gIH07XG4gIC8vIHJlYWQgWnN0YW5kYXJkIGZyYW1lIGhlYWRlclxuICB2YXIgcnpmaCA9IGZ1bmN0aW9uIChkYXQsIHcpIHtcbiAgICB2YXIgbjMgPSBkYXRbMF0gfCAoZGF0WzFdIDw8IDgpIHwgKGRhdFsyXSA8PCAxNik7XG4gICAgaWYgKG4zID09PSAweDJmYjUyOCAmJiBkYXRbM10gPT09IDI1Mykge1xuICAgICAgLy8gWnN0YW5kYXJkXG4gICAgICB2YXIgZmxnID0gZGF0WzRdO1xuICAgICAgLy8gICAgc2luZ2xlIHNlZ21lbnQgICAgICAgY2hlY2tzdW0gICAgICAgICAgICAgZGljdCBmbGFnICAgICBmcmFtZSBjb250ZW50IGZsYWdcbiAgICAgIHZhciBzcyA9IChmbGcgPj4gNSkgJiAxLFxuICAgICAgICBjYyA9IChmbGcgPj4gMikgJiAxLFxuICAgICAgICBkZiA9IGZsZyAmIDMsXG4gICAgICAgIGZjZiA9IGZsZyA+PiA2O1xuICAgICAgaWYgKGZsZyAmIDgpIGVycigwKTtcbiAgICAgIC8vIGJ5dGVcbiAgICAgIHZhciBidCA9IDYgLSBzcztcbiAgICAgIC8vIGRpY3QgYnl0ZXNcbiAgICAgIHZhciBkYiA9IGRmID09PSAzID8gNCA6IGRmO1xuICAgICAgLy8gZGljdGlvbmFyeSBpZFxuICAgICAgdmFyIGRpID0gcmIoZGF0LCBidCwgZGIpO1xuICAgICAgYnQgKz0gZGI7XG4gICAgICAvLyBmcmFtZSBzaXplIGJ5dGVzXG4gICAgICB2YXIgZnNiID0gZmNmID8gMSA8PCBmY2YgOiBzcztcbiAgICAgIC8vIGZyYW1lIHNvdXJjZSBzaXplXG4gICAgICB2YXIgZnNzID0gcmIoZGF0LCBidCwgZnNiKSArIChmY2YgPT09IDEgJiYgMjU2KTtcbiAgICAgIC8vIHdpbmRvdyBzaXplXG4gICAgICB2YXIgd3MgPSBmc3M7XG4gICAgICBpZiAoIXNzKSB7XG4gICAgICAgIC8vIHdpbmRvdyBkZXNjcmlwdG9yXG4gICAgICAgIHZhciB3YiA9IDEgPDwgKDEwICsgKGRhdFs1XSA+PiAzKSk7XG4gICAgICAgIHdzID0gd2IgKyAod2IgPj4gMykgKiAoZGF0WzVdICYgNyk7XG4gICAgICB9XG4gICAgICBpZiAod3MgPiAyMTQ1Mzg2NDk2KSBlcnIoMSk7XG4gICAgICB2YXIgYnVmID0gbmV3IHU4KCh3ID09PSAxID8gZnNzIHx8IHdzIDogdyA/IDAgOiB3cykgKyAxMik7XG4gICAgICAoYnVmWzBdID0gMSksIChidWZbNF0gPSA0KSwgKGJ1Zls4XSA9IDgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYjogYnQgKyBmc2IsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIGw6IDAsXG4gICAgICAgIGQ6IGRpLFxuICAgICAgICB3OiB3ICYmIHcgIT09IDEgPyB3IDogYnVmLnN1YmFycmF5KDEyKSxcbiAgICAgICAgZTogd3MsXG4gICAgICAgIG86IG5ldyBpMzIoYnVmLmJ1ZmZlciwgMCwgMyksXG4gICAgICAgIHU6IGZzcyxcbiAgICAgICAgYzogY2MsXG4gICAgICAgIG06IE1hdGgubWluKDEzMTA3Miwgd3MpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKCgobjMgPj4gNCkgfCAoZGF0WzNdIDw8IDIwKSkgPT09IDB4MTg0ZDJhNSkge1xuICAgICAgLy8gc2tpcHBhYmxlXG4gICAgICByZXR1cm4gYjQoZGF0LCA0KSArIDg7XG4gICAgfVxuICAgIGVycigwKTtcbiAgfTtcbiAgLy8gbW9zdCBzaWduaWZpY2FudCBiaXQgZm9yIG5vbnplcm9cbiAgdmFyIG1zYiA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgYml0cyA9IDA7XG4gICAgZm9yICg7IDEgPDwgYml0cyA8PSB2YWw7ICsrYml0cyk7XG4gICAgcmV0dXJuIGJpdHMgLSAxO1xuICB9O1xuICAvLyByZWFkIGZpbml0ZSBzdGF0ZSBlbnRyb3B5XG4gIHZhciByZnNlID0gZnVuY3Rpb24gKGRhdCwgYnQsIG1hbCkge1xuICAgIC8vIHRhYmxlIHBvc1xuICAgIHZhciB0cG9zID0gKGJ0IDw8IDMpICsgNDtcbiAgICAvLyBhY2N1cmFjeSBsb2dcbiAgICB2YXIgYWwgPSAoZGF0W2J0XSAmIDE1KSArIDU7XG4gICAgaWYgKGFsID4gbWFsKSBlcnIoMyk7XG4gICAgLy8gc2l6ZVxuICAgIHZhciBzeiA9IDEgPDwgYWw7XG4gICAgLy8gcHJvYmFiaWxpdGllcyBzeW1ib2xzICByZXBlYXQgICBpbmRleCAgIGhpZ2ggdGhyZXNob2xkXG4gICAgdmFyIHByb2JzID0gc3osXG4gICAgICBzeW0gPSAtMSxcbiAgICAgIHJlID0gLTEsXG4gICAgICBpID0gLTEsXG4gICAgICBodCA9IHN6O1xuICAgIC8vIG9wdGltaXphdGlvbjogc2luZ2xlIGFsbG9jYXRpb24gaXMgbXVjaCBmYXN0ZXJcbiAgICB2YXIgYnVmID0gbmV3IGFiKDUxMiArIChzeiA8PCAyKSk7XG4gICAgdmFyIGZyZXEgPSBuZXcgaTE2KGJ1ZiwgMCwgMjU2KTtcbiAgICAvLyBzYW1lIHZpZXcgYXMgZnJlcVxuICAgIHZhciBkc3RhdGUgPSBuZXcgdTE2KGJ1ZiwgMCwgMjU2KTtcbiAgICB2YXIgbnN0YXRlID0gbmV3IHUxNihidWYsIDUxMiwgc3opO1xuICAgIHZhciBiYjEgPSA1MTIgKyAoc3ogPDwgMSk7XG4gICAgdmFyIHN5bXMgPSBuZXcgdTgoYnVmLCBiYjEsIHN6KTtcbiAgICB2YXIgbmJpdHMgPSBuZXcgdTgoYnVmLCBiYjEgKyBzeik7XG4gICAgd2hpbGUgKHN5bSA8IDI1NSAmJiBwcm9icyA+IDApIHtcbiAgICAgIHZhciBiaXRzID0gbXNiKHByb2JzICsgMSk7XG4gICAgICB2YXIgY2J0ID0gdHBvcyA+PiAzO1xuICAgICAgLy8gbWFza1xuICAgICAgdmFyIG1zayA9ICgxIDw8IChiaXRzICsgMSkpIC0gMTtcbiAgICAgIHZhciB2YWwgPVxuICAgICAgICAoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSB8IChkYXRbY2J0ICsgMl0gPDwgMTYpKSA+PlxuICAgICAgICAgICh0cG9zICYgNykpICZcbiAgICAgICAgbXNrO1xuICAgICAgLy8gbWFzayAoMSBmZXdlciBiaXQpXG4gICAgICB2YXIgbXNrMWZiID0gKDEgPDwgYml0cykgLSAxO1xuICAgICAgLy8gbWF4IHNtYWxsIHZhbHVlXG4gICAgICB2YXIgbXN2ID0gbXNrIC0gcHJvYnMgLSAxO1xuICAgICAgLy8gc21hbGwgdmFsdWVcbiAgICAgIHZhciBzdmFsID0gdmFsICYgbXNrMWZiO1xuICAgICAgaWYgKHN2YWwgPCBtc3YpICh0cG9zICs9IGJpdHMpLCAodmFsID0gc3ZhbCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdHBvcyArPSBiaXRzICsgMTtcbiAgICAgICAgaWYgKHZhbCA+IG1zazFmYikgdmFsIC09IG1zdjtcbiAgICAgIH1cbiAgICAgIGZyZXFbKytzeW1dID0gLS12YWw7XG4gICAgICBpZiAodmFsID09PSAtMSkge1xuICAgICAgICBwcm9icyArPSB2YWw7XG4gICAgICAgIHN5bXNbLS1odF0gPSBzeW07XG4gICAgICB9IGVsc2UgcHJvYnMgLT0gdmFsO1xuICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIC8vIHJlcGVhdCBieXRlXG4gICAgICAgICAgdmFyIHJidCA9IHRwb3MgPj4gMztcbiAgICAgICAgICByZSA9ICgoZGF0W3JidF0gfCAoZGF0W3JidCArIDFdIDw8IDgpKSA+PiAodHBvcyAmIDcpKSAmIDM7XG4gICAgICAgICAgdHBvcyArPSAyO1xuICAgICAgICAgIHN5bSArPSByZTtcbiAgICAgICAgfSB3aGlsZSAocmUgPT09IDMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3ltID4gMjU1IHx8IHByb2JzKSBlcnIoMCk7XG4gICAgdmFyIHN5bXBvcyA9IDA7XG4gICAgLy8gc3ltIHN0ZXAgKGNvcHJpbWUgd2l0aCBzeiAtIGZvcm11bGEgZnJvbSB6c3RkIHNvdXJjZSlcbiAgICB2YXIgc3N0ZXAgPSAoc3ogPj4gMSkgKyAoc3ogPj4gMykgKyAzO1xuICAgIC8vIHN5bSBtYXNrXG4gICAgdmFyIHNtYXNrID0gc3ogLSAxO1xuICAgIGZvciAodmFyIHMgPSAwOyBzIDw9IHN5bTsgKytzKSB7XG4gICAgICB2YXIgc2YgPSBmcmVxW3NdO1xuICAgICAgaWYgKHNmIDwgMSkge1xuICAgICAgICBkc3RhdGVbc10gPSAtc2Y7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhpcyBpcyBzcGxpdCBpbnRvIHR3byBsb29wcyBpbiB6c3RkIHRvIGF2b2lkIGJyYW5jaGluZywgYnV0IGFzIEpTIGlzIGhpZ2hlci1sZXZlbCB0aGF0IGlzIHVubmVjZXNzYXJ5XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc2Y7ICsraSkge1xuICAgICAgICBzeW1zW3N5bXBvc10gPSBzO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgc3ltcG9zID0gKHN5bXBvcyArIHNzdGVwKSAmIHNtYXNrO1xuICAgICAgICB9IHdoaWxlIChzeW1wb3MgPj0gaHQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBzcHJlYWRpbmcgc3ltYm9scywgc2hvdWxkIGJlIHplcm8gYWdhaW5cbiAgICBpZiAoc3ltcG9zKSBlcnIoMCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHN6OyArK2kpIHtcbiAgICAgIC8vIG5leHQgc3RhdGVcbiAgICAgIHZhciBucyA9IGRzdGF0ZVtzeW1zW2ldXSsrO1xuICAgICAgLy8gbnVtIGJpdHNcbiAgICAgIHZhciBuYiA9IChuYml0c1tpXSA9IGFsIC0gbXNiKG5zKSk7XG4gICAgICBuc3RhdGVbaV0gPSAobnMgPDwgbmIpIC0gc3o7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAodHBvcyArIDcpID4+IDMsXG4gICAgICB7XG4gICAgICAgIGI6IGFsLFxuICAgICAgICBzOiBzeW1zLFxuICAgICAgICBuOiBuYml0cyxcbiAgICAgICAgdDogbnN0YXRlLFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuICAvLyByZWFkIGh1ZmZtYW5cbiAgdmFyIHJodSA9IGZ1bmN0aW9uIChkYXQsIGJ0KSB7XG4gICAgLy8gIGluZGV4ICB3ZWlnaHQgY291bnRcbiAgICB2YXIgaSA9IDAsXG4gICAgICB3YyA9IC0xO1xuICAgIC8vICAgIGJ1ZmZlciAgICAgICAgICAgICBoZWFkZXIgYnl0ZVxuICAgIHZhciBidWYgPSBuZXcgdTgoMjkyKSxcbiAgICAgIGhiID0gZGF0W2J0XTtcbiAgICAvLyBodWZmbWFuIHdlaWdodHNcbiAgICB2YXIgaHcgPSBidWYuc3ViYXJyYXkoMCwgMjU2KTtcbiAgICAvLyByYW5rIGNvdW50XG4gICAgdmFyIHJjID0gYnVmLnN1YmFycmF5KDI1NiwgMjY4KTtcbiAgICAvLyByYW5rIGluZGV4XG4gICAgdmFyIHJpID0gbmV3IHUxNihidWYuYnVmZmVyLCAyNjgpO1xuICAgIC8vIE5PVEU6IGF0IHRoaXMgcG9pbnQgYnQgaXMgMSBsZXNzIHRoYW4gZXhwZWN0ZWRcbiAgICBpZiAoaGIgPCAxMjgpIHtcbiAgICAgIC8vIGVuZCBieXRlLCBmc2UgZGVjb2RlIHRhYmxlXG4gICAgICB2YXIgX2EgPSByZnNlKGRhdCwgYnQgKyAxLCA2KSxcbiAgICAgICAgZWJ0ID0gX2FbMF0sXG4gICAgICAgIGZkdCA9IF9hWzFdO1xuICAgICAgYnQgKz0gaGI7XG4gICAgICB2YXIgZXBvcyA9IGVidCA8PCAzO1xuICAgICAgLy8gbGFzdCBieXRlXG4gICAgICB2YXIgbGIgPSBkYXRbYnRdO1xuICAgICAgaWYgKCFsYikgZXJyKDApO1xuICAgICAgLy8gIHN0YXRlMSAgIHN0YXRlMiAgIHN0YXRlMSBiaXRzICAgc3RhdGUyIGJpdHNcbiAgICAgIHZhciBzdDEgPSAwLFxuICAgICAgICBzdDIgPSAwLFxuICAgICAgICBidHIxID0gZmR0LmIsXG4gICAgICAgIGJ0cjIgPSBidHIxO1xuICAgICAgLy8gZnNlIHBvc1xuICAgICAgLy8gcHJlLWluY3JlbWVudCB0byBhY2NvdW50IGZvciBvcmlnaW5hbCBkZWZpY2l0IG9mIDFcbiAgICAgIHZhciBmcG9zID0gKCsrYnQgPDwgMykgLSA4ICsgbXNiKGxiKTtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgZnBvcyAtPSBidHIxO1xuICAgICAgICBpZiAoZnBvcyA8IGVwb3MpIGJyZWFrO1xuICAgICAgICB2YXIgY2J0ID0gZnBvcyA+PiAzO1xuICAgICAgICBzdDEgKz1cbiAgICAgICAgICAoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSkgPj4gKGZwb3MgJiA3KSkgJiAoKDEgPDwgYnRyMSkgLSAxKTtcbiAgICAgICAgaHdbKyt3Y10gPSBmZHQuc1tzdDFdO1xuICAgICAgICBmcG9zIC09IGJ0cjI7XG4gICAgICAgIGlmIChmcG9zIDwgZXBvcykgYnJlYWs7XG4gICAgICAgIGNidCA9IGZwb3MgPj4gMztcbiAgICAgICAgc3QyICs9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChmcG9zICYgNykpICYgKCgxIDw8IGJ0cjIpIC0gMSk7XG4gICAgICAgIGh3Wysrd2NdID0gZmR0LnNbc3QyXTtcbiAgICAgICAgYnRyMSA9IGZkdC5uW3N0MV07XG4gICAgICAgIHN0MSA9IGZkdC50W3N0MV07XG4gICAgICAgIGJ0cjIgPSBmZHQubltzdDJdO1xuICAgICAgICBzdDIgPSBmZHQudFtzdDJdO1xuICAgICAgfVxuICAgICAgaWYgKCsrd2MgPiAyNTUpIGVycigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2MgPSBoYiAtIDEyNztcbiAgICAgIGZvciAoOyBpIDwgd2M7IGkgKz0gMikge1xuICAgICAgICB2YXIgYnl0ZSA9IGRhdFsrK2J0XTtcbiAgICAgICAgaHdbaV0gPSBieXRlID4+IDQ7XG4gICAgICAgIGh3W2kgKyAxXSA9IGJ5dGUgJiAxNTtcbiAgICAgIH1cbiAgICAgICsrYnQ7XG4gICAgfVxuICAgIC8vIHdlaWdodCBleHBvbmVudGlhbCBzdW1cbiAgICB2YXIgd2VzID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2M7ICsraSkge1xuICAgICAgdmFyIHd0ID0gaHdbaV07XG4gICAgICAvLyBiaXRzIG11c3QgYmUgYXQgbW9zdCAxMSwgc2FtZSBhcyB3ZWlnaHRcbiAgICAgIGlmICh3dCA+IDExKSBlcnIoMCk7XG4gICAgICB3ZXMgKz0gd3QgJiYgMSA8PCAod3QgLSAxKTtcbiAgICB9XG4gICAgLy8gbWF4IGJpdHNcbiAgICB2YXIgbWIgPSBtc2Iod2VzKSArIDE7XG4gICAgLy8gdGFibGUgc2l6ZVxuICAgIHZhciB0cyA9IDEgPDwgbWI7XG4gICAgLy8gcmVtYWluaW5nIHN1bVxuICAgIHZhciByZW0gPSB0cyAtIHdlcztcbiAgICAvLyBtdXN0IGJlIHBvd2VyIG9mIDJcbiAgICBpZiAocmVtICYgKHJlbSAtIDEpKSBlcnIoMCk7XG4gICAgaHdbd2MrK10gPSBtc2IocmVtKSArIDE7XG4gICAgZm9yIChpID0gMDsgaSA8IHdjOyArK2kpIHtcbiAgICAgIHZhciB3dCA9IGh3W2ldO1xuICAgICAgKytyY1soaHdbaV0gPSB3dCAmJiBtYiArIDEgLSB3dCldO1xuICAgIH1cbiAgICAvLyBodWYgYnVmXG4gICAgdmFyIGhidWYgPSBuZXcgdTgodHMgPDwgMSk7XG4gICAgLy8gICAgc3ltYm9scyAgICAgICAgICAgICAgICAgICAgICBudW0gYml0c1xuICAgIHZhciBzeW1zID0gaGJ1Zi5zdWJhcnJheSgwLCB0cyksXG4gICAgICBuYiA9IGhidWYuc3ViYXJyYXkodHMpO1xuICAgIHJpW21iXSA9IDA7XG4gICAgZm9yIChpID0gbWI7IGkgPiAwOyAtLWkpIHtcbiAgICAgIHZhciBwdiA9IHJpW2ldO1xuICAgICAgZmlsbChuYiwgaSwgcHYsIChyaVtpIC0gMV0gPSBwdiArIHJjW2ldICogKDEgPDwgKG1iIC0gaSkpKSk7XG4gICAgfVxuICAgIGlmIChyaVswXSAhPT0gdHMpIGVycigwKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2M7ICsraSkge1xuICAgICAgdmFyIGJpdHMgPSBod1tpXTtcbiAgICAgIGlmIChiaXRzKSB7XG4gICAgICAgIHZhciBjb2RlID0gcmlbYml0c107XG4gICAgICAgIGZpbGwoc3ltcywgaSwgY29kZSwgKHJpW2JpdHNdID0gY29kZSArICgxIDw8IChtYiAtIGJpdHMpKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgYnQsXG4gICAgICB7XG4gICAgICAgIG46IG5iLFxuICAgICAgICBiOiBtYixcbiAgICAgICAgczogc3ltcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcbiAgLy8gVGFibGVzIGdlbmVyYXRlZCB1c2luZyB0aGlzOlxuICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xMDFhcnJvd3ovYTk3OTQ1MmQ0MzU1OTkyY2JmOGYyNTdjYmZmYzllZGRcbiAgLy8gZGVmYXVsdCBsaXRlcmFsIGxlbmd0aCB0YWJsZVxuICB2YXIgZGxsdCA9IC8qI19fUFVSRV9fKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbXG4gICAgICA4MSwgMTYsIDk5LCAxNDAsIDQ5LCAxOTgsIDI0LCA5OSwgMTIsIDMzLCAxOTYsIDI0LCA5OSwgMTAyLCAxMDIsIDEzNCwgNzAsXG4gICAgICAxNDYsIDQsXG4gICAgXSksXG4gICAgMCxcbiAgICA2LFxuICApWzFdO1xuICAvLyBkZWZhdWx0IG1hdGNoIGxlbmd0aCB0YWJsZVxuICB2YXIgZG1sdCA9IC8qI19fUFVSRV9fKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbXG4gICAgICAzMywgMjAsIDE5NiwgMjQsIDk5LCAxNDAsIDMzLCAxMzIsIDE2LCA2NiwgOCwgMzMsIDEzMiwgMTYsIDY2LCA4LCAzMywgNjgsXG4gICAgICA2OCwgNjgsIDY4LCA2OCwgNjgsIDY4LCA2OCwgMzYsIDksXG4gICAgXSksXG4gICAgMCxcbiAgICA2LFxuICApWzFdO1xuICAvLyBkZWZhdWx0IG9mZnNldCBjb2RlIHRhYmxlXG4gIHZhciBkb2N0ID0gLyojX19QVVJFX18gKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbMzIsIDEzMiwgMTYsIDY2LCAxMDIsIDcwLCA2OCwgNjgsIDY4LCA2OCwgMzYsIDczLCAyXSksXG4gICAgMCxcbiAgICA1LFxuICApWzFdO1xuICAvLyBiaXRzIHRvIGJhc2VsaW5lXG4gIHZhciBiMmJsID0gZnVuY3Rpb24gKGIsIHMpIHtcbiAgICB2YXIgbGVuID0gYi5sZW5ndGgsXG4gICAgICBibCA9IG5ldyBpMzIobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBibFtpXSA9IHM7XG4gICAgICBzICs9IDEgPDwgYltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGJsO1xuICB9O1xuICAvLyBsaXRlcmFsIGxlbmd0aCBiaXRzXG4gIHZhciBsbGIgPSAvKiNfX1BVUkVfXyAqLyBuZXcgdTgoXG4gICAgLyojX19QVVJFX18gKi8gbmV3IGkzMihbXG4gICAgICAwLCAwLCAwLCAwLCAxNjg0MzAwOSwgNTA1Mjg3NzAsIDEzNDY3ODAyMCwgMjAyMDUwMDU3LCAyNjk0MjIwOTMsXG4gICAgXSkuYnVmZmVyLFxuICAgIDAsXG4gICAgMzYsXG4gICk7XG4gIC8vIGxpdGVyYWwgbGVuZ3RoIGJhc2VsaW5lXG4gIHZhciBsbGJsID0gLyojX19QVVJFX18gKi8gYjJibChsbGIsIDApO1xuICAvLyBtYXRjaCBsZW5ndGggYml0c1xuICB2YXIgbWxiID0gLyojX19QVVJFX18gKi8gbmV3IHU4KFxuICAgIC8qI19fUFVSRV9fICovIG5ldyBpMzIoW1xuICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4NDMwMDksIDUwNTI4NzcwLCAxMTc3NjkyMjAsIDE4NTIwNzA0OCxcbiAgICAgIDI1MjU3OTA4NCwgMTYsXG4gICAgXSkuYnVmZmVyLFxuICAgIDAsXG4gICAgNTMsXG4gICk7XG4gIC8vIG1hdGNoIGxlbmd0aCBiYXNlbGluZVxuICB2YXIgbWxibCA9IC8qI19fUFVSRV9fICovIGIyYmwobWxiLCAzKTtcbiAgLy8gZGVjb2RlIGh1ZmZtYW4gc3RyZWFtXG4gIHZhciBkaHUgPSBmdW5jdGlvbiAoZGF0LCBvdXQsIGh1KSB7XG4gICAgdmFyIGxlbiA9IGRhdC5sZW5ndGgsXG4gICAgICBzcyA9IG91dC5sZW5ndGgsXG4gICAgICBsYiA9IGRhdFtsZW4gLSAxXSxcbiAgICAgIG1zayA9ICgxIDw8IGh1LmIpIC0gMSxcbiAgICAgIGViID0gLWh1LmI7XG4gICAgaWYgKCFsYikgZXJyKDApO1xuICAgIHZhciBzdCA9IDAsXG4gICAgICBidHIgPSBodS5iLFxuICAgICAgcG9zID0gKGxlbiA8PCAzKSAtIDggKyBtc2IobGIpIC0gYnRyLFxuICAgICAgaSA9IC0xO1xuICAgIHdoaWxlIChwb3MgPiBlYiAmJiBpIDwgc3MpIHtcbiAgICAgIHZhciBjYnQgPSBwb3MgPj4gMztcbiAgICAgIHZhciB2YWwgPVxuICAgICAgICAoZGF0W2NidF0gfCAoZGF0W2NidCArIDFdIDw8IDgpIHwgKGRhdFtjYnQgKyAyXSA8PCAxNikpID4+IChwb3MgJiA3KTtcbiAgICAgIHN0ID0gKChzdCA8PCBidHIpIHwgdmFsKSAmIG1zaztcbiAgICAgIG91dFsrK2ldID0gaHUuc1tzdF07XG4gICAgICBwb3MgLT0gYnRyID0gaHUubltzdF07XG4gICAgfVxuICAgIGlmIChwb3MgIT09IGViIHx8IGkgKyAxICE9PSBzcykgZXJyKDApO1xuICB9O1xuICAvLyBkZWNvZGUgaHVmZm1hbiBzdHJlYW0gNHhcbiAgLy8gVE9ETzogdXNlIHdvcmtlcnMgdG8gcGFyYWxsZWxpemVcbiAgdmFyIGRodTQgPSBmdW5jdGlvbiAoZGF0LCBvdXQsIGh1KSB7XG4gICAgdmFyIGJ0ID0gNjtcbiAgICB2YXIgc3MgPSBvdXQubGVuZ3RoLFxuICAgICAgc3oxID0gKHNzICsgMykgPj4gMixcbiAgICAgIHN6MiA9IHN6MSA8PCAxLFxuICAgICAgc3ozID0gc3oxICsgc3oyO1xuICAgIGRodShcbiAgICAgIGRhdC5zdWJhcnJheShidCwgKGJ0ICs9IGRhdFswXSB8IChkYXRbMV0gPDwgOCkpKSxcbiAgICAgIG91dC5zdWJhcnJheSgwLCBzejEpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoXG4gICAgICBkYXQuc3ViYXJyYXkoYnQsIChidCArPSBkYXRbMl0gfCAoZGF0WzNdIDw8IDgpKSksXG4gICAgICBvdXQuc3ViYXJyYXkoc3oxLCBzejIpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoXG4gICAgICBkYXQuc3ViYXJyYXkoYnQsIChidCArPSBkYXRbNF0gfCAoZGF0WzVdIDw8IDgpKSksXG4gICAgICBvdXQuc3ViYXJyYXkoc3oyLCBzejMpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoZGF0LnN1YmFycmF5KGJ0KSwgb3V0LnN1YmFycmF5KHN6MyksIGh1KTtcbiAgfTtcbiAgLy8gcmVhZCBac3RhbmRhcmQgYmxvY2tcbiAgdmFyIHJ6YiA9IGZ1bmN0aW9uIChkYXQsIHN0LCBvdXQpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGJ0ID0gc3QuYjtcbiAgICAvLyAgICBieXRlIDAgICAgICAgIGJsb2NrIHR5cGVcbiAgICB2YXIgYjAgPSBkYXRbYnRdLFxuICAgICAgYnR5cGUgPSAoYjAgPj4gMSkgJiAzO1xuICAgIHN0LmwgPSBiMCAmIDE7XG4gICAgdmFyIHN6ID0gKGIwID4+IDMpIHwgKGRhdFtidCArIDFdIDw8IDUpIHwgKGRhdFtidCArIDJdIDw8IDEzKTtcbiAgICAvLyBlbmQgYnl0ZSBmb3IgYmxvY2tcbiAgICB2YXIgZWJ0ID0gKGJ0ICs9IDMpICsgc3o7XG4gICAgaWYgKGJ0eXBlID09PSAxKSB7XG4gICAgICBpZiAoYnQgPj0gZGF0Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgc3QuYiA9IGJ0ICsgMTtcbiAgICAgIGlmIChvdXQpIHtcbiAgICAgICAgZmlsbChvdXQsIGRhdFtidF0sIHN0LnksIChzdC55ICs9IHN6KSk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsbChuZXcgdTgoc3opLCBkYXRbYnRdKTtcbiAgICB9XG4gICAgaWYgKGVidCA+IGRhdC5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAoYnR5cGUgPT09IDApIHtcbiAgICAgIHN0LmIgPSBlYnQ7XG4gICAgICBpZiAob3V0KSB7XG4gICAgICAgIG91dC5zZXQoZGF0LnN1YmFycmF5KGJ0LCBlYnQpLCBzdC55KTtcbiAgICAgICAgc3QueSArPSBzejtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzbGMoZGF0LCBidCwgZWJ0KTtcbiAgICB9XG4gICAgaWYgKGJ0eXBlID09PSAyKSB7XG4gICAgICAvLyAgICBieXRlIDMgICAgICAgIGxpdCBidHlwZSAgICAgc2l6ZSBmb3JtYXRcbiAgICAgIHZhciBiMyA9IGRhdFtidF0sXG4gICAgICAgIGxidCA9IGIzICYgMyxcbiAgICAgICAgc2YgPSAoYjMgPj4gMikgJiAzO1xuICAgICAgLy8gbGl0IHNyYyBzaXplICBsaXQgY21wIHN6IDQgc3RyZWFtc1xuICAgICAgdmFyIGxzcyA9IGIzID4+IDQsXG4gICAgICAgIGxjcyA9IDAsXG4gICAgICAgIHM0ID0gMDtcbiAgICAgIGlmIChsYnQgPCAyKSB7XG4gICAgICAgIGlmIChzZiAmIDEpIGxzcyB8PSAoZGF0WysrYnRdIDw8IDQpIHwgKHNmICYgMiAmJiBkYXRbKytidF0gPDwgMTIpO1xuICAgICAgICBlbHNlIGxzcyA9IGIzID4+IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzNCA9IHNmO1xuICAgICAgICBpZiAoc2YgPCAyKVxuICAgICAgICAgIChsc3MgfD0gKGRhdFsrK2J0XSAmIDYzKSA8PCA0KSxcbiAgICAgICAgICAgIChsY3MgPSAoZGF0W2J0XSA+PiA2KSB8IChkYXRbKytidF0gPDwgMikpO1xuICAgICAgICBlbHNlIGlmIChzZiA9PT0gMilcbiAgICAgICAgICAobHNzIHw9IChkYXRbKytidF0gPDwgNCkgfCAoKGRhdFsrK2J0XSAmIDMpIDw8IDEyKSksXG4gICAgICAgICAgICAobGNzID0gKGRhdFtidF0gPj4gMikgfCAoZGF0WysrYnRdIDw8IDYpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIChsc3MgfD0gKGRhdFsrK2J0XSA8PCA0KSB8ICgoZGF0WysrYnRdICYgNjMpIDw8IDEyKSksXG4gICAgICAgICAgICAobGNzID0gKGRhdFtidF0gPj4gNikgfCAoZGF0WysrYnRdIDw8IDIpIHwgKGRhdFsrK2J0XSA8PCAxMCkpO1xuICAgICAgfVxuICAgICAgKytidDtcbiAgICAgIC8vIGFkZCBsaXRlcmFscyB0byBlbmQgLSBjYW4gbmV2ZXIgb3ZlcmxhcCB3aXRoIGJhY2tyZWZlcmVuY2VzIGJlY2F1c2UgdW51c2VkIGxpdGVyYWxzIGFsd2F5cyBhcHBlbmRlZFxuICAgICAgdmFyIGJ1ZiA9IG91dCA/IG91dC5zdWJhcnJheShzdC55LCBzdC55ICsgc3QubSkgOiBuZXcgdTgoc3QubSk7XG4gICAgICAvLyBzdGFydGluZyBwb2ludCBmb3IgbGl0ZXJhbHNcbiAgICAgIHZhciBzcGwgPSBidWYubGVuZ3RoIC0gbHNzO1xuICAgICAgaWYgKGxidCA9PT0gMCkgYnVmLnNldChkYXQuc3ViYXJyYXkoYnQsIChidCArPSBsc3MpKSwgc3BsKTtcbiAgICAgIGVsc2UgaWYgKGxidCA9PT0gMSkgZmlsbChidWYsIGRhdFtidCsrXSwgc3BsKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBodWZmbWFuIHRhYmxlXG4gICAgICAgIHZhciBodSA9IHN0Lmg7XG4gICAgICAgIGlmIChsYnQgPT09IDIpIHtcbiAgICAgICAgICB2YXIgaHVkID0gcmh1KGRhdCwgYnQpO1xuICAgICAgICAgIC8vIHN1YnRyYWN0IGRlc2NyaXB0aW9uIGxlbmd0aFxuICAgICAgICAgIGxjcyArPSBidCAtIChidCA9IGh1ZFswXSk7XG4gICAgICAgICAgc3QuaCA9IGh1ID0gaHVkWzFdO1xuICAgICAgICB9IGVsc2UgaWYgKCFodSkgZXJyKDApO1xuICAgICAgICAoczQgPyBkaHU0IDogZGh1KShkYXQuc3ViYXJyYXkoYnQsIChidCArPSBsY3MpKSwgYnVmLnN1YmFycmF5KHNwbCksIGh1KTtcbiAgICAgIH1cbiAgICAgIC8vIG51bSBzZXF1ZW5jZXNcbiAgICAgIHZhciBucyA9IGRhdFtidCsrXTtcbiAgICAgIGlmIChucykge1xuICAgICAgICBpZiAobnMgPT09IDI1NSkgbnMgPSAoZGF0W2J0KytdIHwgKGRhdFtidCsrXSA8PCA4KSkgKyAweDdmMDA7XG4gICAgICAgIGVsc2UgaWYgKG5zID4gMTI3KSBucyA9ICgobnMgLSAxMjgpIDw8IDgpIHwgZGF0W2J0KytdO1xuICAgICAgICAvLyBzeW1ib2wgY29tcHJlc3Npb24gbW9kZXNcbiAgICAgICAgdmFyIHNjbSA9IGRhdFtidCsrXTtcbiAgICAgICAgaWYgKHNjbSAmIDMpIGVycigwKTtcbiAgICAgICAgdmFyIGR0cyA9IFtkbWx0LCBkb2N0LCBkbGx0XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPiAtMTsgLS1pKSB7XG4gICAgICAgICAgdmFyIG1kID0gKHNjbSA+PiAoKGkgPDwgMSkgKyAyKSkgJiAzO1xuICAgICAgICAgIGlmIChtZCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gcmxlIGJ1ZlxuICAgICAgICAgICAgdmFyIHJidWYgPSBuZXcgdTgoWzAsIDAsIGRhdFtidCsrXV0pO1xuICAgICAgICAgICAgZHRzW2ldID0ge1xuICAgICAgICAgICAgICBzOiByYnVmLnN1YmFycmF5KDIsIDMpLFxuICAgICAgICAgICAgICBuOiByYnVmLnN1YmFycmF5KDAsIDEpLFxuICAgICAgICAgICAgICB0OiBuZXcgdTE2KHJidWYuYnVmZmVyLCAwLCAxKSxcbiAgICAgICAgICAgICAgYjogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChtZCA9PT0gMikge1xuICAgICAgICAgICAgLy8gYWNjdXJhY3kgbG9nIDggZm9yIG9mZnNldHMsIDkgZm9yIG90aGVyc1xuICAgICAgICAgICAgKF9hID0gcmZzZShkYXQsIGJ0LCA5IC0gKGkgJiAxKSkpLCAoYnQgPSBfYVswXSksIChkdHNbaV0gPSBfYVsxXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChtZCA9PT0gMykge1xuICAgICAgICAgICAgaWYgKCFzdC50KSBlcnIoMCk7XG4gICAgICAgICAgICBkdHNbaV0gPSBzdC50W2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgX2IgPSAoc3QudCA9IGR0cyksXG4gICAgICAgICAgbWx0ID0gX2JbMF0sXG4gICAgICAgICAgb2N0ID0gX2JbMV0sXG4gICAgICAgICAgbGx0ID0gX2JbMl07XG4gICAgICAgIHZhciBsYiA9IGRhdFtlYnQgLSAxXTtcbiAgICAgICAgaWYgKCFsYikgZXJyKDApO1xuICAgICAgICB2YXIgc3BvcyA9IChlYnQgPDwgMykgLSA4ICsgbXNiKGxiKSAtIGxsdC5iLFxuICAgICAgICAgIGNidCA9IHNwb3MgPj4gMyxcbiAgICAgICAgICBvdWJ0ID0gMDtcbiAgICAgICAgdmFyIGxzdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IGxsdC5iKSAtIDEpO1xuICAgICAgICBjYnQgPSAoc3BvcyAtPSBvY3QuYikgPj4gMztcbiAgICAgICAgdmFyIG9zdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IG9jdC5iKSAtIDEpO1xuICAgICAgICBjYnQgPSAoc3BvcyAtPSBtbHQuYikgPj4gMztcbiAgICAgICAgdmFyIG1zdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IG1sdC5iKSAtIDEpO1xuICAgICAgICBmb3IgKCsrbnM7IC0tbnM7ICkge1xuICAgICAgICAgIHZhciBsbGMgPSBsbHQuc1tsc3RdO1xuICAgICAgICAgIHZhciBsYnRyID0gbGx0Lm5bbHN0XTtcbiAgICAgICAgICB2YXIgbWxjID0gbWx0LnNbbXN0XTtcbiAgICAgICAgICB2YXIgbWJ0ciA9IG1sdC5uW21zdF07XG4gICAgICAgICAgdmFyIG9mYyA9IG9jdC5zW29zdF07XG4gICAgICAgICAgdmFyIG9idHIgPSBvY3Qubltvc3RdO1xuICAgICAgICAgIGNidCA9IChzcG9zIC09IG9mYykgPj4gMztcbiAgICAgICAgICB2YXIgb2ZwID0gMSA8PCBvZmM7XG4gICAgICAgICAgdmFyIG9mZiA9XG4gICAgICAgICAgICBvZnAgK1xuICAgICAgICAgICAgKCgoZGF0W2NidF0gfFxuICAgICAgICAgICAgICAoZGF0W2NidCArIDFdIDw8IDgpIHxcbiAgICAgICAgICAgICAgKGRhdFtjYnQgKyAyXSA8PCAxNikgfFxuICAgICAgICAgICAgICAoZGF0W2NidCArIDNdIDw8IDI0KSkgPj4+XG4gICAgICAgICAgICAgIChzcG9zICYgNykpICZcbiAgICAgICAgICAgICAgKG9mcCAtIDEpKTtcbiAgICAgICAgICBjYnQgPSAoc3BvcyAtPSBtbGJbbWxjXSkgPj4gMztcbiAgICAgICAgICB2YXIgbWwgPVxuICAgICAgICAgICAgbWxibFttbGNdICtcbiAgICAgICAgICAgICgoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSB8IChkYXRbY2J0ICsgMl0gPDwgMTYpKSA+PlxuICAgICAgICAgICAgICAoc3BvcyAmIDcpKSAmXG4gICAgICAgICAgICAgICgoMSA8PCBtbGJbbWxjXSkgLSAxKSk7XG4gICAgICAgICAgY2J0ID0gKHNwb3MgLT0gbGxiW2xsY10pID4+IDM7XG4gICAgICAgICAgdmFyIGxsID1cbiAgICAgICAgICAgIGxsYmxbbGxjXSArXG4gICAgICAgICAgICAoKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkgfCAoZGF0W2NidCArIDJdIDw8IDE2KSkgPj5cbiAgICAgICAgICAgICAgKHNwb3MgJiA3KSkgJlxuICAgICAgICAgICAgICAoKDEgPDwgbGxiW2xsY10pIC0gMSkpO1xuICAgICAgICAgIGNidCA9IChzcG9zIC09IGxidHIpID4+IDM7XG4gICAgICAgICAgbHN0ID1cbiAgICAgICAgICAgIGxsdC50W2xzdF0gK1xuICAgICAgICAgICAgKCgoZGF0W2NidF0gfCAoZGF0W2NidCArIDFdIDw8IDgpKSA+PiAoc3BvcyAmIDcpKSAmXG4gICAgICAgICAgICAgICgoMSA8PCBsYnRyKSAtIDEpKTtcbiAgICAgICAgICBjYnQgPSAoc3BvcyAtPSBtYnRyKSA+PiAzO1xuICAgICAgICAgIG1zdCA9XG4gICAgICAgICAgICBtbHQudFttc3RdICtcbiAgICAgICAgICAgICgoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSkgPj4gKHNwb3MgJiA3KSkgJlxuICAgICAgICAgICAgICAoKDEgPDwgbWJ0cikgLSAxKSk7XG4gICAgICAgICAgY2J0ID0gKHNwb3MgLT0gb2J0cikgPj4gMztcbiAgICAgICAgICBvc3QgPVxuICAgICAgICAgICAgb2N0LnRbb3N0XSArXG4gICAgICAgICAgICAoKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICZcbiAgICAgICAgICAgICAgKCgxIDw8IG9idHIpIC0gMSkpO1xuICAgICAgICAgIGlmIChvZmYgPiAzKSB7XG4gICAgICAgICAgICBzdC5vWzJdID0gc3Qub1sxXTtcbiAgICAgICAgICAgIHN0Lm9bMV0gPSBzdC5vWzBdO1xuICAgICAgICAgICAgc3Qub1swXSA9IG9mZiAtPSAzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gb2ZmIC0gKGxsICE9PSAwKTtcbiAgICAgICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgICAgb2ZmID0gaWR4ID09PSAzID8gc3Qub1swXSAtIDEgOiBzdC5vW2lkeF07XG4gICAgICAgICAgICAgIGlmIChpZHggPiAxKSBzdC5vWzJdID0gc3Qub1sxXTtcbiAgICAgICAgICAgICAgc3Qub1sxXSA9IHN0Lm9bMF07XG4gICAgICAgICAgICAgIHN0Lm9bMF0gPSBvZmY7XG4gICAgICAgICAgICB9IGVsc2Ugb2ZmID0gc3Qub1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsbDsgKytpKSB7XG4gICAgICAgICAgICBidWZbb3VidCArIGldID0gYnVmW3NwbCArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgICAob3VidCArPSBsbCksIChzcGwgKz0gbGwpO1xuICAgICAgICAgIHZhciBzdGluID0gb3VidCAtIG9mZjtcbiAgICAgICAgICBpZiAoc3RpbiA8IDApIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSAtc3RpbjtcbiAgICAgICAgICAgIHZhciBicyA9IHN0LmUgKyBzdGluO1xuICAgICAgICAgICAgaWYgKGxlbiA+IG1sKSBsZW4gPSBtbDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgYnVmW291YnQgKyBpXSA9IHN0LndbYnMgKyBpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChvdWJ0ICs9IGxlbiksIChtbCAtPSBsZW4pLCAoc3RpbiA9IDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1sOyArK2kpIHtcbiAgICAgICAgICAgIGJ1ZltvdWJ0ICsgaV0gPSBidWZbc3RpbiArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdWJ0ICs9IG1sO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdWJ0ICE9PSBzcGwpIHtcbiAgICAgICAgICB3aGlsZSAoc3BsIDwgYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgYnVmW291YnQrK10gPSBidWZbc3BsKytdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIG91YnQgPSBidWYubGVuZ3RoO1xuICAgICAgICBpZiAob3V0KSBzdC55ICs9IG91YnQ7XG4gICAgICAgIGVsc2UgYnVmID0gc2xjKGJ1ZiwgMCwgb3VidCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3V0KSB7XG4gICAgICAgICAgc3QueSArPSBsc3M7XG4gICAgICAgICAgaWYgKHNwbCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsc3M7ICsraSkge1xuICAgICAgICAgICAgICBidWZbaV0gPSBidWZbc3BsICsgaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNwbCkgYnVmID0gc2xjKGJ1Ziwgc3BsKTtcbiAgICAgIH1cbiAgICAgIHN0LmIgPSBlYnQ7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICBlcnIoMik7XG4gIH07XG4gIC8vIGNvbmNhdFxuICB2YXIgY2N0ID0gZnVuY3Rpb24gKGJ1ZnMsIG9sKSB7XG4gICAgaWYgKGJ1ZnMubGVuZ3RoID09PSAxKSByZXR1cm4gYnVmc1swXTtcbiAgICB2YXIgYnVmID0gbmV3IHU4KG9sKTtcbiAgICBmb3IgKHZhciBpID0gMCwgYiA9IDA7IGkgPCBidWZzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY2hrID0gYnVmc1tpXTtcbiAgICAgIGJ1Zi5zZXQoY2hrLCBiKTtcbiAgICAgIGIgKz0gY2hrLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfTtcbiAgLyoqXG4gICAqIERlY29tcHJlc3NlcyBac3RhbmRhcmQgZGF0YVxuICAgKiBAcGFyYW0gZGF0IFRoZSBpbnB1dCBkYXRhXG4gICAqIEBwYXJhbSBidWYgVGhlIG91dHB1dCBidWZmZXIuIElmIHVuc3BlY2lmaWVkLCB0aGUgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZVxuICAgKiAgICAgICAgICAgIGV4YWN0bHkgZW5vdWdoIG1lbW9yeSB0byBmaXQgdGhlIGRlY29tcHJlc3NlZCBkYXRhLiBJZiB5b3VyXG4gICAqICAgICAgICAgICAgZGF0YSBoYXMgbXVsdGlwbGUgZnJhbWVzIGFuZCB5b3Uga25vdyB0aGUgb3V0cHV0IHNpemUsIHNwZWNpZnlpbmdcbiAgICogICAgICAgICAgICBpdCB3aWxsIHlpZWxkIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCBkYXRhXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb21wcmVzcyhkYXQsIGJ1Zikge1xuICAgIHZhciBidCA9IDAsXG4gICAgICBidWZzID0gW10sXG4gICAgICBuYiA9ICshYnVmLFxuICAgICAgb2wgPSAwO1xuICAgIHdoaWxlIChkYXQubGVuZ3RoKSB7XG4gICAgICB2YXIgc3QgPSByemZoKGRhdCwgbmIgfHwgYnVmKTtcbiAgICAgIGlmICh0eXBlb2Ygc3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG5iKSB7XG4gICAgICAgICAgYnVmID0gbnVsbDtcbiAgICAgICAgICBpZiAoc3Qudy5sZW5ndGggPT09IHN0LnUpIHtcbiAgICAgICAgICAgIGJ1ZnMucHVzaCgoYnVmID0gc3QudykpO1xuICAgICAgICAgICAgb2wgKz0gc3QudTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmcy5wdXNoKGJ1Zik7XG4gICAgICAgICAgc3QuZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKCFzdC5sKSB7XG4gICAgICAgICAgdmFyIGJsayA9IHJ6YihkYXQsIHN0LCBidWYpO1xuICAgICAgICAgIGlmICghYmxrKSBlcnIoNSk7XG4gICAgICAgICAgaWYgKGJ1Zikgc3QuZSA9IHN0Lnk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidWZzLnB1c2goYmxrKTtcbiAgICAgICAgICAgIG9sICs9IGJsay5sZW5ndGg7XG4gICAgICAgICAgICBjcHcoc3QudywgMCwgYmxrLmxlbmd0aCk7XG4gICAgICAgICAgICBzdC53LnNldChibGssIHN0LncubGVuZ3RoIC0gYmxrLmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJ0ID0gc3QuYiArIHN0LmMgKiA0O1xuICAgICAgfSBlbHNlIGJ0ID0gc3Q7XG4gICAgICBkYXQgPSBkYXQuc3ViYXJyYXkoYnQpO1xuICAgIH1cbiAgICByZXR1cm4gY2N0KGJ1ZnMsIG9sKTtcbiAgfTtcbn0pKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGVjb21wcmVzc19pbnB1dFxuLy9WZXJzaW9uOiA8IDUuMS4wXG52YXIgY2FtbF9kZWNvbXByZXNzX2lucHV0ID0gbnVsbDtcblxuLy9Qcm92aWRlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1ZlcnNpb246ID49IDUuMS4wXG4vL1ZlcnNpb246IDwgNS4xLjFcbi8vUmVxdWlyZXM6IHpzdGRfZGVjb21wcmVzc1xudmFyIGNhbWxfZGVjb21wcmVzc19pbnB1dCA9IHpzdGRfZGVjb21wcmVzcztcblxuLy9Qcm92aWRlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1ZlcnNpb246ID49IDUuMS4xXG4vL1ZlcnNpb246IDwgNS4yLjBcbnZhciBjYW1sX2RlY29tcHJlc3NfaW5wdXQgPSBudWxsO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbi8vVmVyc2lvbjogPj0gNS4yXG4vL1JlcXVpcmVzOiB6c3RkX2RlY29tcHJlc3NcbnZhciBjYW1sX2RlY29tcHJlc3NfaW5wdXQgPSB6c3RkX2RlY29tcHJlc3M7XG5cbi8vUHJvdmlkZXM6IGNhbWxfenN0ZF9pbml0aWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbi8vUmVxdWlyZXM6IHpzdGRfZGVjb21wcmVzc1xuLy9WZXJzaW9uOiA+PSA1LjEuMVxuZnVuY3Rpb24gY2FtbF96c3RkX2luaXRpYWxpemUoX3VuaXQpIHtcbiAgY2FtbF9kZWNvbXByZXNzX2lucHV0ID0genN0ZF9kZWNvbXByZXNzO1xuICByZXR1cm4gMTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLyBXZWFrIEFQSVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxudmFyIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ID0gMztcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG52YXIgY2FtbF9lcGhlX2RhdGFfb2Zmc2V0ID0gMjtcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX25vbmVcbnZhciBjYW1sX2VwaGVfbm9uZSA9IHsgY2FtbF9lcGhlX25vbmU6IDAgfTtcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3NldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9zZXRfZGF0YV9vcHRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9zZXRfa2V5KHgsIGksIHYpIHtcbiAgdmFyIG9sZCA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiB2IGluc3RhbmNlb2YgT2JqZWN0KSB2ID0gbmV3IGdsb2JhbFRoaXMuV2Vha1JlZih2KTtcbiAgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldID0gdjtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdCh4LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3Vuc2V0X2tleVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX25vbmVcbmZ1bmN0aW9uIGNhbWxfZXBoZV91bnNldF9rZXkoeCwgaSkge1xuICB2YXIgb2xkID0gY2FtbF9lcGhlX2dldF9kYXRhKHgpO1xuICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdCh4LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2NyZWF0ZVxuZnVuY3Rpb24gY2FtbF9lcGhlX2NyZWF0ZShuKSB7XG4gIHJldHVybiBjYW1sX3dlYWtfY3JlYXRlKG4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dlYWtfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX25vbmVcbmZ1bmN0aW9uIGNhbWxfd2Vha19jcmVhdGUobikge1xuICB2YXIgYWxlbiA9IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgbjtcbiAgdmFyIHggPSBuZXcgQXJyYXkoYWxlbik7XG4gIHhbMF0gPSAyNTE7XG4gIHhbMV0gPSBcImNhbWxfZXBoZV9saXN0X2hlYWRcIjtcbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhbGVuOyBpKyspIHtcbiAgICB4W2ldID0gY2FtbF9lcGhlX25vbmU7XG4gIH1cbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9zZXRfa2V5LCBjYW1sX2VwaGVfdW5zZXRfa2V5XG5mdW5jdGlvbiBjYW1sX3dlYWtfc2V0KHgsIGksIHYpIHtcbiAgaWYgKHYgPT09IDApIGNhbWxfZXBoZV91bnNldF9rZXkoeCwgaSk7XG4gIGVsc2UgY2FtbF9lcGhlX3NldF9rZXkoeCwgaSwgdlsxXSk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG4vL0FsaWFzOiBjYW1sX3dlYWtfZ2V0XG5cbmZ1bmN0aW9uIGNhbWxfZXBoZV9nZXRfa2V5KHgsIGkpIHtcbiAgdmFyIHdlYWsgPSB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV07XG4gIGlmICh3ZWFrID09PSBjYW1sX2VwaGVfbm9uZSkgcmV0dXJuIDA7XG4gIGlmIChnbG9iYWxUaGlzLldlYWtSZWYgJiYgd2VhayBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuV2Vha1JlZikge1xuICAgIHdlYWsgPSB3ZWFrLmRlcmVmKCk7XG4gICAgaWYgKHdlYWsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldID0gY2FtbF9lcGhlX25vbmU7XG4gICAgICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWzAsIHdlYWtdO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9rZXlfY29weVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2dldF9rZXksY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX2R1cFxuLy9BbGlhczogY2FtbF93ZWFrX2dldF9jb3B5XG5mdW5jdGlvbiBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5KHgsIGkpIHtcbiAgdmFyIHkgPSBjYW1sX2VwaGVfZ2V0X2tleSh4LCBpKTtcbiAgaWYgKHkgPT09IDApIHJldHVybiB5O1xuICB2YXIgeiA9IHlbMV07XG4gIGlmIChBcnJheS5pc0FycmF5KHopKSByZXR1cm4gWzAsIGNhbWxfb2JqX2R1cCh6KV07XG4gIHJldHVybiB5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfY2hlY2tfa2V5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG4vL0FsaWFzOiBjYW1sX3dlYWtfY2hlY2tcbmZ1bmN0aW9uIGNhbWxfZXBoZV9jaGVja19rZXkoeCwgaSkge1xuICB2YXIgd2VhayA9IHhbY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpXTtcbiAgaWYgKHdlYWsgPT09IGNhbWxfZXBoZV9ub25lKSByZXR1cm4gMDtcbiAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiB3ZWFrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgd2VhayA9IHdlYWsuZGVyZWYoKTtcbiAgICBpZiAod2VhayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfYmxpdF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuLy9BbGlhczogY2FtbF93ZWFrX2JsaXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9ibGl0X2tleShhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIHZhciBvbGQgPSBjYW1sX2VwaGVfZ2V0X2RhdGEoYTEpO1xuICAvLyBtaW51cyBvbmUgYmVjYXVzZSBjYW1sX2FycmF5X2JsaXQgd29ya3Mgb24gb2NhbWwgYXJyYXlcbiAgY2FtbF9hcnJheV9ibGl0KFxuICAgIGExLFxuICAgIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaTEgLSAxLFxuICAgIGEyLFxuICAgIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaTIgLSAxLFxuICAgIGxlbixcbiAgKTtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdChhMiwgb2xkKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9ibGl0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YSwgY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuZnVuY3Rpb24gY2FtbF9lcGhlX2JsaXRfZGF0YShzcmMsIGRzdCkge1xuICB2YXIgb2xkID0gY2FtbF9lcGhlX2dldF9kYXRhKHNyYyk7XG4gIGNhbWxfZXBoZV9zZXRfZGF0YV9vcHQoZHN0LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXQsIGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfbm9uZVxuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhKHgpIHtcbiAgdmFyIGRhdGEgPSB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF07XG4gIGlmIChkYXRhID09PSBjYW1sX2VwaGVfbm9uZSkgcmV0dXJuIDA7XG4gIGZvciAodmFyIGkgPSBjYW1sX2VwaGVfa2V5X29mZnNldDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgayA9IHhbaV07XG4gICAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiBrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgICB2YXIgZCA9IGsuZGVyZWYoKTtcbiAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeFtpXSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBpZiAoZ2xvYmFsVGhpcy5XZWFrTWFwKSB7XG4gICAgICAgIGRhdGEgPSBkYXRhLmdldChrKTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBbMCwgZGF0YV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX2R1cFxuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhX2NvcHkoeCkge1xuICB2YXIgciA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKHIgPT09IDApIHJldHVybiAwO1xuICB2YXIgeiA9IHJbMV07XG4gIGlmIChBcnJheS5pc0FycmF5KHopKSByZXR1cm4gWzAsIGNhbWxfb2JqX2R1cCh6KV07XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldCwgY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGEoeCwgZGF0YSkge1xuICBmb3IgKHZhciBpID0geC5sZW5ndGggLSAxOyBpID49IGNhbWxfZXBoZV9rZXlfb2Zmc2V0OyBpLS0pIHtcbiAgICB2YXIgayA9IHhbaV07XG4gICAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiBrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgICB2YXIgZCA9IGsuZGVyZWYoKTtcbiAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeFtpXSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChnbG9iYWxUaGlzLldlYWtNYXApIHtcbiAgICAgICAgZGF0YSA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKS5zZXQoaywgZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGRhdGE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFfb3B0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV91bnNldF9kYXRhXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGFfb3B0KHgsIGRhdGFfb3B0KSB7XG4gIGlmIChkYXRhX29wdCA9PT0gMCkgY2FtbF9lcGhlX3Vuc2V0X2RhdGEoeCk7XG4gIGVsc2UgY2FtbF9lcGhlX3NldF9kYXRhKHgsIGRhdGFfb3B0WzFdKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV91bnNldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG5mdW5jdGlvbiBjYW1sX2VwaGVfdW5zZXRfZGF0YSh4KSB7XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NoZWNrX2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuZnVuY3Rpb24gY2FtbF9lcGhlX2NoZWNrX2RhdGEoeCkge1xuICB2YXIgZGF0YSA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKGRhdGEgPT09IDApIHJldHVybiAwO1xuICBlbHNlIHJldHVybiAxO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF9nY19taW5vclxuZnVuY3Rpb24gY2FtbF9nY19taW5vcihfdW5pdCkge1xuICAvL2F2YWlsYWJsZSB3aXRoIFtub2RlIC0tZXhwb3NlLWdjXVxuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuZ2MgPT09IFwiZnVuY3Rpb25cIikgZ2xvYmFsVGhpcy5nYyh0cnVlKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX21ham9yKF91bml0KSB7XG4gIC8vYXZhaWxhYmxlIHdpdGggW25vZGUgLS1leHBvc2UtZ2NdXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5nYyA9PT0gXCJmdW5jdGlvblwiKSBnbG9iYWxUaGlzLmdjKCk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nY19mdWxsX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX2Z1bGxfbWFqb3IoX3VuaXQpIHtcbiAgLy9hdmFpbGFibGUgd2l0aCBbbm9kZSAtLWV4cG9zZS1nY11cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLmdjID09PSBcImZ1bmN0aW9uXCIpIGdsb2JhbFRoaXMuZ2MoKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2djX2NvbXBhY3Rpb25cbmZ1bmN0aW9uIGNhbWxfZ2NfY29tcGFjdGlvbihfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfY291bnRlcnNcbmZ1bmN0aW9uIGNhbWxfZ2NfY291bnRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIFsyNTQsIDAsIDAsIDBdO1xufVxuLy9Qcm92aWRlczogY2FtbF9nY19xdWlja19zdGF0XG5mdW5jdGlvbiBjYW1sX2djX3F1aWNrX3N0YXQoX3VuaXQpIHtcbiAgcmV0dXJuIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19zdGF0XG4vL1JlcXVpcmVzOiBjYW1sX2djX3F1aWNrX3N0YXRcbmZ1bmN0aW9uIGNhbWxfZ2Nfc3RhdCh1bml0KSB7XG4gIHJldHVybiBjYW1sX2djX3F1aWNrX3N0YXQodW5pdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2Nfc2V0XG5mdW5jdGlvbiBjYW1sX2djX3NldChfY29udHJvbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19nZXRcbmZ1bmN0aW9uIGNhbWxfZ2NfZ2V0KF91bml0KSB7XG4gIHJldHVybiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluYWxfcmVnaXN0ZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXIoX2YsIF94KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlZ2lzdGVyX2NhbGxlZF93aXRob3V0X3ZhbHVlXG52YXIgYWxsX2ZpbmFsaXplcnMgPSBuZXcgZ2xvYmFsVGhpcy5TZXQoKTtcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUoY2IsIGEpIHtcbiAgaWYgKGdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgYSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIHZhciB4ID0gbmV3IGdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnkoZnVuY3Rpb24gKHgpIHtcbiAgICAgIGFsbF9maW5hbGl6ZXJzLmRlbGV0ZSh4KTtcbiAgICAgIGNiKDApO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICAgIHgucmVnaXN0ZXIoYSwgeCk7XG4gICAgYWxsX2ZpbmFsaXplcnMuYWRkKHgpO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlbGVhc2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVsZWFzZShfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0YXJ0XG5mdW5jdGlvbiBjYW1sX21lbXByb2Zfc3RhcnQoX3JhdGUsIF9zdGFja19zaXplLCBfdHJhY2tlcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0b3BcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9zdG9wKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2ZfZGlzY2FyZFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9kaXNjYXJkKF90KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V2ZW50bG9nX3Jlc3VtZVxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9ldmVudGxvZ19yZXN1bWUoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXZlbnRsb2dfcGF1c2Vcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfZXZlbnRsb2dfcGF1c2UoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9nY19odWdlX2ZhbGxiYWNrX2NvdW50KF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yX3NsaWNlXG5mdW5jdGlvbiBjYW1sX2djX21ham9yX3NsaWNlKF93b3JrKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21pbm9yX3dvcmRzXG5mdW5jdGlvbiBjYW1sX2djX21pbm9yX3dvcmRzKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9taW5vcl9mcmVlXG5mdW5jdGlvbiBjYW1sX2dldF9taW5vcl9mcmVlKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9tYWpvcl9idWNrZXRcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfZ2V0X21ham9yX2J1Y2tldChfbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfbWFqb3JfY3JlZGl0XG4vL1ZlcnNpb246IDwgNS4wXG5mdW5jdGlvbiBjYW1sX2dldF9tYWpvcl9jcmVkaXQoX24pIHtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEZvcm1hdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2Zvcm1hdFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID0ge1xuICAgIGp1c3RpZnk6IFwiK1wiLFxuICAgIHNpZ25zdHlsZTogXCItXCIsXG4gICAgZmlsbGVyOiBcIiBcIixcbiAgICBhbHRlcm5hdGU6IGZhbHNlLFxuICAgIGJhc2U6IDAsXG4gICAgc2lnbmVkY29udjogZmFsc2UsXG4gICAgd2lkdGg6IDAsXG4gICAgdXBwZXJjYXNlOiBmYWxzZSxcbiAgICBzaWduOiAxLFxuICAgIHByZWM6IC0xLFxuICAgIGNvbnY6IFwiZlwiLFxuICB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpO1xuICAgIHN3aXRjaCAoYykge1xuICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgZi5qdXN0aWZ5ID0gXCItXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIitcIjpcbiAgICAgIGNhc2UgXCIgXCI6XG4gICAgICAgIGYuc2lnbnN0eWxlID0gYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiMFwiOlxuICAgICAgICBmLmZpbGxlciA9IFwiMFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCIjXCI6XG4gICAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiMVwiOlxuICAgICAgY2FzZSBcIjJcIjpcbiAgICAgIGNhc2UgXCIzXCI6XG4gICAgICBjYXNlIFwiNFwiOlxuICAgICAgY2FzZSBcIjVcIjpcbiAgICAgIGNhc2UgXCI2XCI6XG4gICAgICBjYXNlIFwiN1wiOlxuICAgICAgY2FzZSBcIjhcIjpcbiAgICAgIGNhc2UgXCI5XCI6XG4gICAgICAgIGYud2lkdGggPSAwO1xuICAgICAgICB3aGlsZSAoKChjID0gZm10LmNoYXJDb2RlQXQoaSkgLSA0OCksIGMgPj0gMCAmJiBjIDw9IDkpKSB7XG4gICAgICAgICAgZi53aWR0aCA9IGYud2lkdGggKiAxMCArIGM7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiLlwiOlxuICAgICAgICBmLnByZWMgPSAwO1xuICAgICAgICBpKys7XG4gICAgICAgIHdoaWxlICgoKGMgPSBmbXQuY2hhckNvZGVBdChpKSAtIDQ4KSwgYyA+PSAwICYmIGMgPD0gOSkpIHtcbiAgICAgICAgICBmLnByZWMgPSBmLnByZWMgKiAxMCArIGM7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZFwiOlxuICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTtcbiAgICAgICAgZi5iYXNlID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgZi5iYXNlID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgZi5iYXNlID0gMTY7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgZi5iYXNlID0gMTY7XG4gICAgICAgIGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwib1wiOlxuICAgICAgICBmLmJhc2UgPSA4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJlXCI6XG4gICAgICBjYXNlIFwiZlwiOlxuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTtcbiAgICAgICAgZi5jb252ID0gYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcIkZcIjpcbiAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7XG4gICAgICAgIGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgICAgZi5jb252ID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcmF3YnVmZmVyKSB7XG4gIGlmIChmLnVwcGVyY2FzZSkgcmF3YnVmZmVyID0gcmF3YnVmZmVyLnRvVXBwZXJDYXNlKCk7XG4gIHZhciBsZW4gPSByYXdidWZmZXIubGVuZ3RoO1xuICAvKiBBZGp1c3QgbGVuIHRvIHJlZmxlY3QgYWRkaXRpb25hbCBjaGFycyAoc2lnbiwgZXRjKSAqL1xuICBpZiAoZi5zaWduZWRjb252ICYmIChmLnNpZ24gPCAwIHx8IGYuc2lnbnN0eWxlICE9PSBcIi1cIikpIGxlbisrO1xuICBpZiAoZi5hbHRlcm5hdGUpIHtcbiAgICBpZiAoZi5iYXNlID09PSA4KSBsZW4gKz0gMTtcbiAgICBpZiAoZi5iYXNlID09PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT09IFwiK1wiICYmIGYuZmlsbGVyID09PSBcIiBcIilcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gXCIgXCI7XG4gIGlmIChmLnNpZ25lZGNvbnYpIHtcbiAgICBpZiAoZi5zaWduIDwgMCkgYnVmZmVyICs9IFwiLVwiO1xuICAgIGVsc2UgaWYgKGYuc2lnbnN0eWxlICE9PSBcIi1cIikgYnVmZmVyICs9IGYuc2lnbnN0eWxlO1xuICB9XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT09IDgpIGJ1ZmZlciArPSBcIjBcIjtcbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PT0gMTYpIGJ1ZmZlciArPSBmLnVwcGVyY2FzZSA/IFwiMFhcIiA6IFwiMHhcIjtcbiAgaWYgKGYuanVzdGlmeSA9PT0gXCIrXCIgJiYgZi5maWxsZXIgPT09IFwiMFwiKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSBcIjBcIjtcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PT0gXCItXCIpIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSBcIiBcIjtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBIdWdvIEhldXphcmRcblxuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVcbnZhciBjYW1sX2dyX3N0YXRlO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX2dyX3N0YXRlX2dldCgpIHtcbiAgaWYgKGNhbWxfZ3Jfc3RhdGUpIHtcbiAgICByZXR1cm4gY2FtbF9ncl9zdGF0ZTtcbiAgfVxuICB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoW1xuICAgIDAsXG4gICAgY2FtbF9uYW1lZF92YWx1ZShcIkdyYXBoaWNzLkdyYXBoaWNfZmFpbHVyZVwiKSxcbiAgICBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiTm90IGluaXRpYWxpemVkXCIpLFxuICBdKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlLGNhbWxfZ3Jfc3RhdGVfaW5pdFxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9zZXQoY3R4KSB7XG4gIGNhbWxfZ3Jfc3RhdGUgPSBjdHg7XG4gIGNhbWxfZ3Jfc3RhdGVfaW5pdCgpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9vcGVuX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fZ3JhcGgoaW5mbykge1xuICB2YXIgaW5mbyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGluZm8pO1xuICBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHZhciByZXMgPSBpbmZvLm1hdGNoKFwiKF58LCkgKlwiICsgbmFtZSArIFwiICo9ICooW2EtekEtWjAtOV9dKykgKigsfCQpXCIpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXNbMl07XG4gIH1cbiAgdmFyIHNwZWNzID0gW107XG4gIGlmICghKGluZm8gPT09IFwiXCIpKSBzcGVjcy5wdXNoKGluZm8pO1xuICB2YXIgdGFyZ2V0ID0gZ2V0KFwidGFyZ2V0XCIpO1xuICBpZiAoIXRhcmdldCkgdGFyZ2V0ID0gXCJcIjtcbiAgdmFyIHN0YXR1cyA9IGdldChcInN0YXR1c1wiKTtcbiAgaWYgKCFzdGF0dXMpIHNwZWNzLnB1c2goXCJzdGF0dXM9MVwiKTtcblxuICB2YXIgdyA9IGdldChcIndpZHRoXCIpO1xuICB3ID0gdyA/IE51bWJlci5wYXJzZUludCh3KSA6IDIwMDtcbiAgc3BlY3MucHVzaChcIndpZHRoPVwiICsgdyk7XG5cbiAgdmFyIGggPSBnZXQoXCJoZWlnaHRcIik7XG4gIGggPSBoID8gTnVtYmVyLnBhcnNlSW50KGgpIDogMjAwO1xuICBzcGVjcy5wdXNoKFwiaGVpZ2h0PVwiICsgaCk7XG5cbiAgdmFyIHdpbiA9IGdsb2JhbFRoaXMub3BlbihcImFib3V0OmJsYW5rXCIsIHRhcmdldCwgc3BlY3Muam9pbihcIixcIikpO1xuICBpZiAoIXdpbikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJHcmFwaGljcy5vcGVuX2dyYXBoOiBjYW5ub3Qgb3BlbiB0aGUgd2luZG93XCIpO1xuICB9XG4gIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG4gIHZhciBjYW52YXMgPSBkb2MuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY2FudmFzLndpZHRoID0gdztcbiAgY2FudmFzLmhlaWdodCA9IGg7XG4gIHZhciBjdHggPSBjYW1sX2dyX3N0YXRlX2NyZWF0ZShjYW52YXMsIHcsIGgpO1xuICBjdHguc2V0X3RpdGxlID0gZnVuY3Rpb24gKHRpdGxlKSB7XG4gICAgZG9jLnRpdGxlID0gdGl0bGU7XG4gIH07XG4gIGNhbWxfZ3Jfc3RhdGVfc2V0KGN0eCk7XG4gIHZhciBib2R5ID0gZG9jLmJvZHk7XG4gIGJvZHkuc3R5bGUubWFyZ2luID0gXCIwcHhcIjtcbiAgYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9pbml0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3NldF9jb2xvcixjYW1sX2dyX21vdmV0byxjYW1sX2dyX3Jlc2l6ZV93aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgsY2FtbF9ncl9zZXRfdGV4dF9zaXplLGNhbWxfZ3Jfc2V0X2ZvbnRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9pbml0KCkge1xuICBjYW1sX2dyX21vdmV0byhjYW1sX2dyX3N0YXRlLngsIGNhbWxfZ3Jfc3RhdGUueSk7XG4gIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyhjYW1sX2dyX3N0YXRlLndpZHRoLCBjYW1sX2dyX3N0YXRlLmhlaWdodCk7XG4gIGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgoY2FtbF9ncl9zdGF0ZS5saW5lX3dpZHRoKTtcbiAgY2FtbF9ncl9zZXRfdGV4dF9zaXplKGNhbWxfZ3Jfc3RhdGUudGV4dF9zaXplKTtcbiAgY2FtbF9ncl9zZXRfZm9udChjYW1sX2dyX3N0YXRlLmZvbnQpO1xuICBjYW1sX2dyX3NldF9jb2xvcihjYW1sX2dyX3N0YXRlLmNvbG9yKTtcbiAgY2FtbF9ncl9zZXRfd2luZG93X3RpdGxlKGNhbWxfZ3Jfc3RhdGUudGl0bGUpO1xuICAvL2NhbWxfZ3JfcmVzaXplX3dpbmRvdyBtaWdodCByZXNldCBzb21lIGNhbnZhcycgcHJvcGVydGllc1xuICBjYW1sX2dyX3N0YXRlLmNvbnRleHQudGV4dEJhc2VsaW5lID0gXCJib3R0b21cIjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfY3JlYXRlKGNhbnZhcywgdywgaCkge1xuICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogY29udGV4dCxcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IHcsXG4gICAgaGVpZ2h0OiBoLFxuICAgIGxpbmVfd2lkdGg6IDEsXG4gICAgZm9udDogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImZpeGVkXCIpLFxuICAgIHRleHRfc2l6ZTogMjYsXG4gICAgY29sb3I6IDB4MDAwMDAwLFxuICAgIHRpdGxlOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpLFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RvY19vZl9zdGF0ZVxuZnVuY3Rpb24gY2FtbF9ncl9kb2Nfb2Zfc3RhdGUoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmNhbnZhcy5vd25lckRvY3VtZW50KSByZXR1cm4gc3RhdGUuY2FudmFzLm93bmVyRG9jdW1lbnQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xvc2VfZ3JhcGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2Nsb3NlX2dyYXBoKCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY2FudmFzLndpZHRoID0gMDtcbiAgcy5jYW52YXMuaGVpZ2h0ID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF93aW5kb3dfdGl0bGUobmFtZSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMudGl0bGUgPSBuYW1lO1xuICB2YXIganNuYW1lID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSk7XG4gIGlmIChzLnNldF90aXRsZSkgcy5zZXRfdGl0bGUoanNuYW1lKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcmVzaXplX3dpbmRvd1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyh3LCBoKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy53aWR0aCA9IHc7XG4gIHMuaGVpZ2h0ID0gaDtcbiAgaWYgKHcgIT09IHMuY2FudmFzLndpZHRoKSBzLmNhbnZhcy53aWR0aCA9IHc7XG4gIGlmIChoICE9PSBzLmNhbnZhcy5oZWlnaHQpIHMuY2FudmFzLmhlaWdodCA9IGg7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2NsZWFyX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jbGVhcl9ncmFwaCgpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHMuY2FudmFzLndpZHRoLCBzLmNhbnZhcy5oZWlnaHQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zaXplX3hcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NpemVfeCgpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICByZXR1cm4gcy53aWR0aDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2l6ZV95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9zaXplX3koKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMuaGVpZ2h0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X2NvbG9yKGNvbG9yKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgZnVuY3Rpb24gY29udmVydChudW1iZXIpIHtcbiAgICB2YXIgc3RyID0gXCJcIiArIG51bWJlci50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCAyKSBzdHIgPSBcIjBcIiArIHN0cjtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHZhciByID0gKGNvbG9yID4+IDE2KSAmIDB4ZmYsXG4gICAgZyA9IChjb2xvciA+PiA4KSAmIDB4ZmYsXG4gICAgYiA9IChjb2xvciA+PiAwKSAmIDB4ZmY7XG4gIHMuY29sb3IgPSBjb2xvcjtcbiAgdmFyIGNfc3RyID0gXCIjXCIgKyBjb252ZXJ0KHIpICsgY29udmVydChnKSArIGNvbnZlcnQoYik7XG4gIHMuY29udGV4dC5maWxsU3R5bGUgPSBjX3N0cjtcbiAgcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gY19zdHI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9wbG90XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9wbG90KHgsIHkpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaW0gPSBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKDEsIDEpO1xuICB2YXIgZCA9IGltLmRhdGE7XG4gIHZhciBjb2xvciA9IHMuY29sb3I7XG4gIGRbMF0gPSAoY29sb3IgPj4gMTYpICYgMHhmZjsgLy9yXG4gIChkWzFdID1cbiAgICAoY29sb3IgPj4gOCkgJlxuICAgIDB4ZmYpLCAvL2dcbiAgICAoZFsyXSA9IChjb2xvciA+PiAwKSAmIDB4ZmYpOyAvL2JcbiAgZFszXSA9IDB4ZmY7IC8vYVxuICBzLnggPSB4O1xuICBzLnkgPSB5O1xuICBzLmNvbnRleHQucHV0SW1hZ2VEYXRhKGltLCB4LCBzLmhlaWdodCAtIHkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9wb2ludF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcG9pbnRfY29sb3IoeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBpbSA9IHMuY29udGV4dC5nZXRJbWFnZURhdGEoeCwgcy5oZWlnaHQgLSB5LCAxLCAxKTtcbiAgdmFyIGQgPSBpbS5kYXRhO1xuICByZXR1cm4gKGRbMF0gPDwgMTYpICsgKGRbMV0gPDwgOCkgKyBkWzJdO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9tb3ZldG9cbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX21vdmV0byh4LCB5KSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy54ID0geDtcbiAgcy55ID0geTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF94XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3goKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3koKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbGluZXRvXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9saW5ldG8oeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgcy5jb250ZXh0Lm1vdmVUbyhzLngsIHMuaGVpZ2h0IC0gcy55KTtcbiAgcy5jb250ZXh0LmxpbmVUbyh4LCBzLmhlaWdodCAtIHkpO1xuICBzLmNvbnRleHQuc3Ryb2tlKCk7XG4gIHMueCA9IHg7XG4gIHMueSA9IHk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X3JlY3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfcmVjdCh4LCB5LCB3LCBoKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LnN0cm9rZVJlY3QoeCwgcy5oZWlnaHQgLSB5LCB3LCAtaCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2FyY19hdXhcbmZ1bmN0aW9uIGNhbWxfZ3JfYXJjX2F1eChjdHgsIGN4LCBjeSwgcnksIHJ4LCBhMSwgYTIpIHtcbiAgd2hpbGUgKGExID4gYTIpIGEyICs9IDM2MDtcbiAgYTEgLz0gMTgwO1xuICBhMiAvPSAxODA7XG4gIHZhciByb3QgPSAwLFxuICAgIHhQb3MsXG4gICAgeVBvcyxcbiAgICB4UG9zX3ByZXYsXG4gICAgeVBvc19wcmV2O1xuICB2YXIgc3BhY2UgPSAyO1xuICB2YXIgbnVtID0gKCgoYTIgLSBhMSkgKiBNYXRoLlBJICogKChyeCArIHJ5KSAvIDIpKSAvIHNwYWNlKSB8IDA7XG4gIHZhciBkZWx0YSA9ICgoYTIgLSBhMSkgKiBNYXRoLlBJKSAvIG51bTtcbiAgdmFyIGkgPSBhMSAqIE1hdGguUEk7XG4gIGZvciAodmFyIGogPSAwOyBqIDw9IG51bTsgaisrKSB7XG4gICAgeFBvcyA9XG4gICAgICBjeCAtXG4gICAgICByeCAqIE1hdGguc2luKGkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgK1xuICAgICAgcnkgKiBNYXRoLmNvcyhpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHhQb3MgPSB4UG9zLnRvRml4ZWQoMik7XG4gICAgeVBvcyA9XG4gICAgICBjeSArXG4gICAgICByeSAqIE1hdGguY29zKGkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgK1xuICAgICAgcnggKiBNYXRoLnNpbihpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHlQb3MgPSB5UG9zLnRvRml4ZWQoMik7XG4gICAgaWYgKGogPT09IDApIHtcbiAgICAgIGN0eC5tb3ZlVG8oeFBvcywgeVBvcyk7XG4gICAgfSBlbHNlIGlmICh4UG9zX3ByZXYgIT09IHhQb3MgfHwgeVBvc19wcmV2ICE9PSB5UG9zKSB7XG4gICAgICBjdHgubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgIH1cbiAgICB4UG9zX3ByZXYgPSB4UG9zO1xuICAgIHlQb3NfcHJldiA9IHlQb3M7XG4gICAgaSAtPSBkZWx0YTsgLy9jY3dcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2FyY1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXQsIGNhbWxfZ3JfYXJjX2F1eFxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X2FyYyh4LCB5LCByeCwgcnksIGExLCBhMikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgY2FtbF9ncl9hcmNfYXV4KHMuY29udGV4dCwgeCwgcy5oZWlnaHQgLSB5LCByeCwgcnksIGExLCBhMik7XG4gIHMuY29udGV4dC5zdHJva2UoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NldF9saW5lX3dpZHRoKHcpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmxpbmVfd2lkdGggPSB3O1xuICBzLmNvbnRleHQubGluZVdpZHRoID0gdztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZmlsbF9yZWN0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9maWxsX3JlY3QoeCwgeSwgdywgaCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5maWxsUmVjdCh4LCBzLmhlaWdodCAtIHksIHcsIC1oKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfcG9seVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZmlsbF9wb2x5KGFyKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBzLmNvbnRleHQubW92ZVRvKGFyWzFdWzFdLCBzLmhlaWdodCAtIGFyWzFdWzJdKTtcbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhci5sZW5ndGg7IGkrKylcbiAgICBzLmNvbnRleHQubGluZVRvKGFyW2ldWzFdLCBzLmhlaWdodCAtIGFyW2ldWzJdKTtcbiAgcy5jb250ZXh0LmxpbmVUbyhhclsxXVsxXSwgcy5oZWlnaHQgLSBhclsxXVsyXSk7XG4gIHMuY29udGV4dC5maWxsKCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfYXJjXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldCwgY2FtbF9ncl9hcmNfYXV4XG5mdW5jdGlvbiBjYW1sX2dyX2ZpbGxfYXJjKHgsIHksIHJ4LCByeSwgYTEsIGEyKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjYW1sX2dyX2FyY19hdXgocy5jb250ZXh0LCB4LCBzLmhlaWdodCAtIHksIHJ4LCByeSwgYTEsIGEyKTtcbiAgcy5jb250ZXh0LmZpbGwoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyKHN0cikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBtID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHN0cik7XG4gIHZhciBkeCA9IG0ud2lkdGg7XG4gIHMuY29udGV4dC5maWxsVGV4dChzdHIsIHMueCwgcy5oZWlnaHQgLSBzLnkpO1xuICBzLnggKz0gZHggfCAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19jaGFyKGMpIHtcbiAgY2FtbF9ncl9kcmF3X3N0cihTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyaW5nKHN0cikge1xuICBjYW1sX2dyX2RyYXdfc3RyKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN0cikpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfZm9udFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF9mb250KGYpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmZvbnQgPSBmO1xuICBzLmNvbnRleHQuZm9udCA9IHMudGV4dF9zaXplICsgXCJweCBcIiArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMuZm9udCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF90ZXh0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9zZXRfdGV4dF9zaXplKHNpemUpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLnRleHRfc2l6ZSA9IHNpemU7XG4gIHMuY29udGV4dC5mb250ID0gcy50ZXh0X3NpemUgKyBcInB4IFwiICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocy5mb250KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfdGV4dF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3JfdGV4dF9zaXplKHR4dCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciB3ID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHR4dCkpLndpZHRoO1xuICByZXR1cm4gWzAsIHcsIHMudGV4dF9zaXplXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9tYWtlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9tYWtlX2ltYWdlKGFycikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBoID0gYXJyLmxlbmd0aCAtIDE7XG4gIHZhciB3ID0gYXJyWzFdLmxlbmd0aCAtIDE7XG4gIHZhciBpbSA9IHMuY29udGV4dC5jcmVhdGVJbWFnZURhdGEodywgaCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB3OyBqKyspIHtcbiAgICAgIHZhciBjID0gYXJyW2kgKyAxXVtqICsgMV07XG4gICAgICB2YXIgbyA9IGkgKiAodyAqIDQpICsgaiAqIDQ7XG4gICAgICBpZiAoYyA9PT0gLTEpIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAwO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IDA7XG4gICAgICAgIGltLmRhdGFbbyArIDJdID0gMDtcbiAgICAgICAgaW0uZGF0YVtvICsgM10gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAoYyA+PiAxNikgJiAweGZmO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IChjID4+IDgpICYgMHhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgMl0gPSAoYyA+PiAwKSAmIDB4ZmY7XG4gICAgICAgIGltLmRhdGFbbyArIDNdID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGltO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kdW1wX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9kdW1wX2ltYWdlKGltKSB7XG4gIHZhciBkYXRhID0gWzBdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltLmhlaWdodDsgaSsrKSB7XG4gICAgZGF0YVtpICsgMV0gPSBbMF07XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbS53aWR0aDsgaisrKSB7XG4gICAgICB2YXIgbyA9IGkgKiAoaW0ud2lkdGggKiA0KSArIGogKiA0LFxuICAgICAgICByID0gaW0uZGF0YVtvICsgMF0sXG4gICAgICAgIGcgPSBpbS5kYXRhW28gKyAxXSxcbiAgICAgICAgYiA9IGltLmRhdGFbbyArIDJdO1xuICAgICAgZGF0YVtpICsgMV1baiArIDFdID0gKHIgPDwgMTYpICsgKGcgPDwgOCkgKyBiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19pbWFnZShpbSwgeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIGlmICghaW0uaW1hZ2UpIHtcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSBzLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBzLmhlaWdodDtcbiAgICBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLnB1dEltYWdlRGF0YShpbSwgMCwgMCk7XG4gICAgdmFyIGltYWdlID0gbmV3IGdsb2JhbFRoaXMuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzLmNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCB4LCBzLmhlaWdodCAtIGltLmhlaWdodCAtIHkpO1xuICAgICAgaW0uaW1hZ2UgPSBpbWFnZTtcbiAgICB9O1xuICAgIGltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7XG4gIH0gZWxzZSB7XG4gICAgcy5jb250ZXh0LmRyYXdJbWFnZShpbS5pbWFnZSwgeCwgcy5oZWlnaHQgLSBpbS5oZWlnaHQgLSB5KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3JlYXRlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jcmVhdGVfaW1hZ2UoeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHgsIHkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9ibGl0X2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9ibGl0X2ltYWdlKGltLCB4LCB5KSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIGltMiA9IHMuY29udGV4dC5nZXRJbWFnZURhdGEoXG4gICAgeCxcbiAgICBzLmhlaWdodCAtIGltLmhlaWdodCAtIHksXG4gICAgaW0ud2lkdGgsXG4gICAgaW0uaGVpZ2h0LFxuICApO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltMi5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgaW0uZGF0YVtpXSA9IGltMi5kYXRhW2ldO1xuICAgIGltLmRhdGFbaSArIDFdID0gaW0yLmRhdGFbaSArIDFdO1xuICAgIGltLmRhdGFbaSArIDJdID0gaW0yLmRhdGFbaSArIDJdO1xuICAgIGltLmRhdGFbaSArIDNdID0gaW0yLmRhdGFbaSArIDNdO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19oYW5kbGVyXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX2hhbmRsZXIoKSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19zaWduYWxcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2lnaW9fc2lnbmFsKCkge1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2FpdF9ldmVudFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl93YWl0X2V2ZW50KF9ldmwpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3Jfd2FpdF9ldmVudCBub3QgSW1wbGVtZW50ZWQ6IHVzZSBHcmFwaGljc19qcyBpbnN0ZWFkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N5bmNocm9uaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3N5bmNocm9uaXplKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl9zeW5jaHJvbml6ZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3JlbWVtYmVyX21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVtZW1iZXJfbW9kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3JfcmVtZW1iZXJfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2Rpc3BsYXlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9kaXNwbGF5X21vZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Rpc3BsYXlfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2luZG93X2lkXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dpbmRvd19pZChfYSkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl93aW5kb3dfaWQgbm90IEltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX29wZW5fc3Vid2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fc3Vid2luZG93KF9hLCBfYiwgX2MsIF9kKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX29wZW5fc3Vid2luZG93IG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9jbG9zZV9zdWJ3aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93KF9hKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWI6IGNvZGUgc3BlY2lmaWMgdG8gSnNfb2Zfb2NhbWxcblxuLy9Qcm92aWRlczogY2FtbF9qc19odG1sX2VzY2FwZSBjb25zdCAoY29uc3QpXG52YXIgY2FtbF9qc19yZWdleHBzID0geyBhbXA6IC8mL2csIGx0OiAvPC9nLCBxdW90OiAvXCIvZywgYWxsOiAvWyY8XCJdLyB9O1xuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VzY2FwZShzKSB7XG4gIGlmICghY2FtbF9qc19yZWdleHBzLmFsbC50ZXN0KHMpKSByZXR1cm4gcztcbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMuYW1wLCBcIiZhbXA7XCIpXG4gICAgLnJlcGxhY2UoY2FtbF9qc19yZWdleHBzLmx0LCBcIiZsdDtcIilcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMucXVvdCwgXCImcXVvdDtcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaHRtbF9lbnRpdGllc1xuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VudGl0aWVzKHMpIHtcbiAgdmFyIGVudGl0eSA9IC9eJiM/WzAtOWEtekEtWl0rOyQvO1xuICBpZiAocy5tYXRjaChlbnRpdHkpKSB7XG4gICAgdmFyIHN0cixcbiAgICAgIHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICB0ZW1wLmlubmVySFRNTCA9IHM7XG4gICAgc3RyID0gdGVtcC50ZXh0Q29udGVudCB8fCB0ZW1wLmlubmVyVGV4dDtcbiAgICB0ZW1wID0gbnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0X2NvbnNvbGUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0X2NvbnNvbGUoKSB7XG4gIHZhciBjID0gY29uc29sZTtcbiAgdmFyIG0gPSBbXG4gICAgXCJsb2dcIixcbiAgICBcImRlYnVnXCIsXG4gICAgXCJpbmZvXCIsXG4gICAgXCJ3YXJuXCIsXG4gICAgXCJlcnJvclwiLFxuICAgIFwiYXNzZXJ0XCIsXG4gICAgXCJkaXJcIixcbiAgICBcImRpcnhtbFwiLFxuICAgIFwidHJhY2VcIixcbiAgICBcImdyb3VwXCIsXG4gICAgXCJncm91cENvbGxhcHNlZFwiLFxuICAgIFwiZ3JvdXBFbmRcIixcbiAgICBcInRpbWVcIixcbiAgICBcInRpbWVFbmRcIixcbiAgXTtcbiAgZnVuY3Rpb24gZigpIHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykgaWYgKCFjW21baV1dKSBjW21baV1dID0gZjtcbiAgcmV0dXJuIGM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlKF91bml0KSB7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiWE1MSHR0cFJlcXVlc3QgaXMgbm90IGF2YWlsYWJsZVwiKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgfSBjYXRjaCB7XG4gICAgY2FtbF9mYWlsd2l0aChcIkZhaWxlZCB0byBjcmVhdGUgWE1MSHR0cFJlcXVlc3RcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vZl9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZiAoZXhuLmpzX2Vycm9yKSB7XG4gICAgcmV0dXJuIGV4bi5qc19lcnJvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNikgPj4gMTY7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYyxcbiAgICBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBsZXhidWZbbGV4X2J1ZmZlcl07XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IgKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlIC0gMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKSB7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT09IDApIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZSBjID0gMjU2O1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChidWZmZXIsIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09PSBzdGF0ZSkgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PT0gLTEpIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZSByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogTmV3IGxleGVyIGVuZ2luZSwgd2l0aCBtZW1vcnkgb2YgcG9zaXRpb25zICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaSsrO1xuICAgIGlmIChkc3QgPT09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGkrKztcbiAgICBpZiAoc3JjID09PSAweGZmKSBtZW1bZHN0ICsgMV0gPSBjdXJyX3BvcztcbiAgICBlbHNlIG1lbVtkc3QgKyAxXSA9IG1lbVtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fdGFnKHMsIGksIG1lbSkge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpKys7XG4gICAgaWYgKGRzdCA9PT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaSsrO1xuICAgIGlmIChzcmMgPT09IDB4ZmYpIG1lbVtkc3QgKyAxXSA9IC0xO1xuICAgIGVsc2UgbWVtW2RzdCArIDFdID0gbWVtW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbmV3X2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9tZW0gPSAxMDtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuICB2YXIgbGV4X2Jhc2VfY29kZSA9IDY7XG4gIHZhciBsZXhfYmFja3Rya19jb2RlID0gNztcbiAgdmFyIGxleF9kZWZhdWx0X2NvZGUgPSA4O1xuICB2YXIgbGV4X3RyYW5zX2NvZGUgPSA5O1xuICB2YXIgbGV4X2NoZWNrX2NvZGUgPSAxMDtcbiAgdmFyIGxleF9jb2RlID0gMTE7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHRfY29kZSkge1xuICAgIHRibC5sZXhfYmFzZV9jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5KHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2RlZmF1bHRfY29kZV0pO1xuICB9XG4gIGlmICh0YmwubGV4X2NvZGUgPT0gbnVsbClcbiAgICB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLFxuICAgIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGxleGJ1ZltsZXhfYnVmZmVyXTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvciAoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZSAtIDE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSkge1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09PSAwKSByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2UgYyA9IDI1NjtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQoYnVmZmVyLCBsZXhidWZbbGV4X2N1cnJfcG9zXSk7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIHZhciBwc3RhdGUgPSBzdGF0ZTtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT09IHN0YXRlKSBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2Ugc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09PSAtMSkgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSxcbiAgICAgICAgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbShcbiAgICAgICAgICB0YmwubGV4X2NvZGUsXG4gICAgICAgICAgcGNfb2ZmLFxuICAgICAgICAgIGxleGJ1ZltsZXhfbWVtXSxcbiAgICAgICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSxcbiAgICAgICAgKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfbHhtX01cbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1XG52YXIgY2FtbF9seG1fTSA9IGNhbWxfaW50NjRfb2Zfc3RyaW5nKFxuICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIjB4ZDEzNDI1NDNkZTgyZWY5NVwiKSxcbik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbHhtX2RhYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1XG52YXIgY2FtbF9seG1fZGFiYSA9IGNhbWxfaW50NjRfb2Zfc3RyaW5nKFxuICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIjB4ZGFiYTBiNmViMDkzMjJlM1wiKSxcbik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbHhtX25leHQgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3hvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbXVsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NldF8xXG4vL1JlcXVpcmVzOiBjYW1sX2x4bV9NXG4vL1JlcXVpcmVzOiBjYW1sX2x4bV9kYWJhXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfbHhtX25leHQodikge1xuICBmdW5jdGlvbiBzaGlmdF9sKHgsIGspIHtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0KHgsIGspO1xuICB9XG4gIGZ1bmN0aW9uIHNoaWZ0X3IoeCwgaykge1xuICAgIHJldHVybiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkKHgsIGspO1xuICB9XG4gIGZ1bmN0aW9uIG9yKGEsIGIpIHtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9vcihhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiB4b3IoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X3hvcihhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBhZGQoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X2FkZChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBtdWwoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X211bChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiByb3RsKHgsIGspIHtcbiAgICByZXR1cm4gb3Ioc2hpZnRfbCh4LCBrKSwgc2hpZnRfcih4LCA2NCAtIGspKTtcbiAgfVxuICBmdW5jdGlvbiBnZXQoYSwgaSkge1xuICAgIHJldHVybiBjYW1sX2JhX2dldF8xKGEsIGkpO1xuICB9XG4gIGZ1bmN0aW9uIHNldChhLCBpLCB4KSB7XG4gICAgcmV0dXJuIGNhbWxfYmFfc2V0XzEoYSwgaSwgeCk7XG4gIH1cbiAgdmFyIE0gPSBjYW1sX2x4bV9NO1xuICB2YXIgZGFiYSA9IGNhbWxfbHhtX2RhYmE7XG4gIHZhciB6LCBxMCwgcTE7XG4gIHZhciBzdCA9IHY7XG4gIHZhciBhID0gZ2V0KHN0LCAwKTtcbiAgdmFyIHMgPSBnZXQoc3QsIDEpO1xuICB2YXIgeDAgPSBnZXQoc3QsIDIpO1xuICB2YXIgeDEgPSBnZXQoc3QsIDMpO1xuICAvKiBDb21iaW5pbmcgb3BlcmF0aW9uICovXG4gIHogPSBhZGQocywgeDApO1xuICAvKiBNaXhpbmcgZnVuY3Rpb24gKi9cbiAgeiA9IG11bCh4b3Ioeiwgc2hpZnRfcih6LCAzMikpLCBkYWJhKTtcbiAgeiA9IG11bCh4b3Ioeiwgc2hpZnRfcih6LCAzMikpLCBkYWJhKTtcbiAgeiA9IHhvcih6LCBzaGlmdF9yKHosIDMyKSk7XG4gIC8qIExDRyB1cGRhdGUgKi9cbiAgc2V0KHN0LCAxLCBhZGQobXVsKHMsIE0pLCBhKSk7XG4gIC8qIFhCRyB1cGRhdGUgKi9cbiAgdmFyIHEwID0geDA7XG4gIHZhciBxMSA9IHgxO1xuICBxMSA9IHhvcihxMSwgcTApO1xuICBxMCA9IHJvdGwocTAsIDI0KTtcbiAgcTAgPSB4b3IoeG9yKHEwLCBxMSksIHNoaWZ0X2wocTEsIDE2KSk7XG4gIHExID0gcm90bChxMSwgMzcpO1xuICBzZXQoc3QsIDIsIHEwKTtcbiAgc2V0KHN0LCAzLCBxMSk7XG4gIC8qIFJldHVybiByZXN1bHQgKi9cbiAgcmV0dXJuIHo7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogcGFyc2luZy5jIDg5ODMgMjAwOC0wOC0wNiAwOTozODoyNVogeGxlcm95ICQgKi9cblxuLyogVGhlIFBEQSBhdXRvbWF0b24gZm9yIHBhcnNlcnMgZ2VuZXJhdGVkIGJ5IGNhbWx5YWNjICovXG5cbi8qIFRoZSBwdXNoZG93biBhdXRvbWF0YSAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlcl90cmFjZVxudmFyIGNhbWxfcGFyc2VyX3RyYWNlID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfbGV4X2FycmF5LCBjYW1sX3BhcnNlcl90cmFjZSxjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG5mdW5jdGlvbiBjYW1sX3BhcnNlX2VuZ2luZSh0YWJsZXMsIGVudiwgY21kLCBhcmcpIHtcbiAgdmFyIEVSUkNPREUgPSAyNTY7XG5cbiAgLy92YXIgU1RBUlQgPSAwO1xuICAvL3ZhciBUT0tFTl9SRUFEID0gMTtcbiAgLy92YXIgU1RBQ0tTX0dST1dOXzEgPSAyO1xuICAvL3ZhciBTVEFDS1NfR1JPV05fMiA9IDM7XG4gIC8vdmFyIFNFTUFOVElDX0FDVElPTl9DT01QVVRFRCA9IDQ7XG4gIC8vdmFyIEVSUk9SX0RFVEVDVEVEID0gNTtcbiAgdmFyIGxvb3AgPSA2O1xuICB2YXIgdGVzdHNoaWZ0ID0gNztcbiAgdmFyIHNoaWZ0ID0gODtcbiAgdmFyIHNoaWZ0X3JlY292ZXIgPSA5O1xuICB2YXIgcmVkdWNlID0gMTA7XG5cbiAgdmFyIFJFQURfVE9LRU4gPSAwO1xuICB2YXIgUkFJU0VfUEFSU0VfRVJST1IgPSAxO1xuICB2YXIgR1JPV19TVEFDS1NfMSA9IDI7XG4gIHZhciBHUk9XX1NUQUNLU18yID0gMztcbiAgdmFyIENPTVBVVEVfU0VNQU5USUNfQUNUSU9OID0gNDtcbiAgdmFyIENBTExfRVJST1JfRlVOQ1RJT04gPSA1O1xuXG4gIHZhciBlbnZfc19zdGFjayA9IDE7XG4gIHZhciBlbnZfdl9zdGFjayA9IDI7XG4gIHZhciBlbnZfc3ltYl9zdGFydF9zdGFjayA9IDM7XG4gIHZhciBlbnZfc3ltYl9lbmRfc3RhY2sgPSA0O1xuICB2YXIgZW52X3N0YWNrc2l6ZSA9IDU7XG4gIHZhciBlbnZfc3RhY2tiYXNlID0gNjtcbiAgdmFyIGVudl9jdXJyX2NoYXIgPSA3O1xuICB2YXIgZW52X2x2YWwgPSA4O1xuICB2YXIgZW52X3N5bWJfc3RhcnQgPSA5O1xuICB2YXIgZW52X3N5bWJfZW5kID0gMTA7XG4gIHZhciBlbnZfYXNwID0gMTE7XG4gIHZhciBlbnZfcnVsZV9sZW4gPSAxMjtcbiAgdmFyIGVudl9ydWxlX251bWJlciA9IDEzO1xuICB2YXIgZW52X3NwID0gMTQ7XG4gIHZhciBlbnZfc3RhdGUgPSAxNTtcbiAgdmFyIGVudl9lcnJmbGFnID0gMTY7XG5cbiAgLy8gdmFyIF90YmxfYWN0aW9ucyA9IDE7XG4gIHZhciB0YmxfdHJhbnNsX2NvbnN0ID0gMjtcbiAgdmFyIHRibF90cmFuc2xfYmxvY2sgPSAzO1xuICB2YXIgdGJsX2xocyA9IDQ7XG4gIHZhciB0YmxfbGVuID0gNTtcbiAgdmFyIHRibF9kZWZyZWQgPSA2O1xuICB2YXIgdGJsX2Rnb3RvID0gNztcbiAgdmFyIHRibF9zaW5kZXggPSA4O1xuICB2YXIgdGJsX3JpbmRleCA9IDk7XG4gIHZhciB0YmxfZ2luZGV4ID0gMTA7XG4gIHZhciB0YmxfdGFibGVzaXplID0gMTE7XG4gIHZhciB0YmxfdGFibGUgPSAxMjtcbiAgdmFyIHRibF9jaGVjayA9IDEzO1xuICAvLyB2YXIgX3RibF9lcnJvcl9mdW5jdGlvbiA9IDE0O1xuICB2YXIgdGJsX25hbWVzX2NvbnN0ID0gMTU7XG4gIHZhciB0YmxfbmFtZXNfYmxvY2sgPSAxNjtcblxuICBmdW5jdGlvbiBsb2coeCkge1xuICAgIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh4ICsgXCJcXG5cIik7XG4gICAgY2FtbF9tbF9vdXRwdXQoY2FtbF9zeXNfZmRzWzJdLmNoYW5pZCwgcywgMCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuX25hbWUobmFtZXMsIG51bWJlcikge1xuICAgIHZhciBzdHIgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lcyk7XG4gICAgaWYgKHN0clswXSA9PT0gXCJcXHgwMFwiKSByZXR1cm4gXCI8dW5rbm93biB0b2tlbj5cIjtcbiAgICByZXR1cm4gc3RyLnNwbGl0KFwiXFx4MDBcIilbbnVtYmVyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByaW50X3Rva2VuKHN0YXRlLCB0b2spIHtcbiAgICB2YXIgdG9rZW4sIGtpbmQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodG9rKSkge1xuICAgICAgdG9rZW4gPSB0b2tlbl9uYW1lKHRhYmxlc1t0YmxfbmFtZXNfYmxvY2tdLCB0b2tbMF0pO1xuICAgICAgaWYgKHR5cGVvZiB0b2tbMV0gPT09IFwibnVtYmVyXCIpIGtpbmQgPSBcIlwiICsgdG9rWzFdO1xuICAgICAgZWxzZSBpZiAodHlwZW9mIHRva1sxXSA9PT0gXCJzdHJpbmdcIikga2luZCA9IHRva1sxXTtcbiAgICAgIGVsc2UgaWYgKHRva1sxXSBpbnN0YW5jZW9mIE1sQnl0ZXMpIGtpbmQgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRva1sxXSk7XG4gICAgICBlbHNlIGtpbmQgPSBcIl9cIjtcbiAgICAgIGxvZyhcIlN0YXRlIFwiICsgc3RhdGUgKyBcIjogcmVhZCB0b2tlbiBcIiArIHRva2VuICsgXCIoXCIgKyBraW5kICsgXCIpXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b2tlbiA9IHRva2VuX25hbWUodGFibGVzW3RibF9uYW1lc19jb25zdF0sIHRvayk7XG4gICAgICBsb2coXCJTdGF0ZSBcIiArIHN0YXRlICsgXCI6IHJlYWQgdG9rZW4gXCIgKyB0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWJsZXMuZGdvdG8pIHtcbiAgICB0YWJsZXMuZGVmcmVkID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF9kZWZyZWRdKTtcbiAgICB0YWJsZXMuc2luZGV4ID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF9zaW5kZXhdKTtcbiAgICB0YWJsZXMuY2hlY2sgPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2NoZWNrXSk7XG4gICAgdGFibGVzLnJpbmRleCA9IGNhbWxfbGV4X2FycmF5KHRhYmxlc1t0YmxfcmluZGV4XSk7XG4gICAgdGFibGVzLnRhYmxlID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF90YWJsZV0pO1xuICAgIHRhYmxlcy5sZW4gPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2xlbl0pO1xuICAgIHRhYmxlcy5saHMgPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2xoc10pO1xuICAgIHRhYmxlcy5naW5kZXggPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2dpbmRleF0pO1xuICAgIHRhYmxlcy5kZ290byA9IGNhbWxfbGV4X2FycmF5KHRhYmxlc1t0YmxfZGdvdG9dKTtcbiAgfVxuXG4gIHZhciByZXMgPSAwLFxuICAgIG4sXG4gICAgbjEsXG4gICAgbjIsXG4gICAgc3RhdGUxO1xuXG4gIC8vIFJFU1RPUkVcbiAgdmFyIHNwID0gZW52W2Vudl9zcF07XG4gIHZhciBzdGF0ZSA9IGVudltlbnZfc3RhdGVdO1xuICB2YXIgZXJyZmxhZyA9IGVudltlbnZfZXJyZmxhZ107XG5cbiAgdGhlX2xvb3A6IGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGNtZCkge1xuICAgICAgY2FzZSAwOiAvL1NUQVJUOlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICAgIHN0YXRlID0gMDtcbiAgICAgICAgZXJyZmxhZyA9IDA7XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBjYXNlIDY6IC8vbG9vcDpcbiAgICAgICAgbiA9IHRhYmxlcy5kZWZyZWRbc3RhdGVdO1xuICAgICAgICBpZiAobiAhPT0gMCkge1xuICAgICAgICAgIGNtZCA9IHJlZHVjZTtcbiAgICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW52W2Vudl9jdXJyX2NoYXJdID49IDApIHtcbiAgICAgICAgICBjbWQgPSB0ZXN0c2hpZnQ7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gUkVBRF9UT0tFTjtcbiAgICAgICAgYnJlYWsgdGhlX2xvb3A7XG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgbGV4ZXIgYW5kIHVwZGF0ZXMgKi9cbiAgICAgIC8qIHN5bWJfc3RhcnQgYW5kIHN5bWJfZW5kICovXG4gICAgICBjYXNlIDE6IC8vVE9LRU5fUkVBRDpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfYmxvY2tdW2FyZ1swXSArIDFdO1xuICAgICAgICAgIGVudltlbnZfbHZhbF0gPSBhcmdbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfY29uc3RdW2FyZyArIDFdO1xuICAgICAgICAgIGVudltlbnZfbHZhbF0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgcHJpbnRfdG9rZW4oc3RhdGUsIGFyZyk7XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBjYXNlIDc6IC8vdGVzdHNoaWZ0OlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICAgIG4xID0gdGFibGVzLnNpbmRleFtzdGF0ZV07XG4gICAgICAgIG4yID0gbjEgKyBlbnZbZW52X2N1cnJfY2hhcl07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBuMSAhPT0gMCAmJlxuICAgICAgICAgIG4yID49IDAgJiZcbiAgICAgICAgICBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09PSBlbnZbZW52X2N1cnJfY2hhcl1cbiAgICAgICAgKSB7XG4gICAgICAgICAgY21kID0gc2hpZnQ7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgbjEgPSB0YWJsZXMucmluZGV4W3N0YXRlXTtcbiAgICAgICAgbjIgPSBuMSArIGVudltlbnZfY3Vycl9jaGFyXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG4xICE9PSAwICYmXG4gICAgICAgICAgbjIgPj0gMCAmJlxuICAgICAgICAgIG4yIDw9IHRhYmxlc1t0YmxfdGFibGVzaXplXSAmJlxuICAgICAgICAgIHRhYmxlcy5jaGVja1tuMl0gPT09IGVudltlbnZfY3Vycl9jaGFyXVxuICAgICAgICApIHtcbiAgICAgICAgICBuID0gdGFibGVzLnRhYmxlW24yXTtcbiAgICAgICAgICBjbWQgPSByZWR1Y2U7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycmZsYWcgPD0gMCkge1xuICAgICAgICAgIHJlcyA9IENBTExfRVJST1JfRlVOQ1RJT047XG4gICAgICAgICAgYnJlYWsgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgZXJyb3IgZnVuY3Rpb24gKi9cbiAgICAgIGNhc2UgNTogLy9FUlJPUl9ERVRFQ1RFRDpcbiAgICAgICAgaWYgKGVycmZsYWcgPCAzKSB7XG4gICAgICAgICAgZXJyZmxhZyA9IDM7XG4gICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgc3RhdGUxID0gZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdO1xuICAgICAgICAgICAgbjEgPSB0YWJsZXMuc2luZGV4W3N0YXRlMV07XG4gICAgICAgICAgICBuMiA9IG4xICsgRVJSQ09ERTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbjEgIT09IDAgJiZcbiAgICAgICAgICAgICAgbjIgPj0gMCAmJlxuICAgICAgICAgICAgICBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PT0gRVJSQ09ERVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiUmVjb3ZlcmluZyBpbiBzdGF0ZSBcIiArIHN0YXRlMSk7XG4gICAgICAgICAgICAgIGNtZCA9IHNoaWZ0X3JlY292ZXI7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIHRoZV9sb29wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKSBsb2coXCJEaXNjYXJkaW5nIHN0YXRlIFwiICsgc3RhdGUxKTtcbiAgICAgICAgICAgICAgaWYgKHNwIDw9IGVudltlbnZfc3RhY2tiYXNlXSkge1xuICAgICAgICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiTm8gbW9yZSBzdGF0ZXMgdG8gZGlzY2FyZFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLyogVGhlIE1MIGNvZGUgcmFpc2VzIFBhcnNlX2Vycm9yICovXG4gICAgICAgICAgICAgIHNwLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlbnZbZW52X2N1cnJfY2hhcl0gPT09IDApXG4gICAgICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7IC8qIFRoZSBNTCBjb2RlIHJhaXNlcyBQYXJzZV9lcnJvciAqL1xuICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiRGlzY2FyZGluZyBsYXN0IHRva2VuIHJlYWRcIik7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gLTE7XG4gICAgICAgICAgY21kID0gbG9vcDtcbiAgICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgLy8gVW5yZWFjaGFibGVcbiAgICAgIGNhc2UgODogLy9zaGlmdDpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBlbnZbZW52X2N1cnJfY2hhcl0gPSAtMTtcbiAgICAgICAgaWYgKGVycmZsYWcgPiAwKSBlcnJmbGFnLS07XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgY2FzZSA5OiAvL3NoaWZ0X3JlY292ZXI6XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKVxuICAgICAgICAgIGxvZyhcIlN0YXRlIFwiICsgc3RhdGUgKyBcIjogc2hpZnQgdG8gc3RhdGUgXCIgKyB0YWJsZXMudGFibGVbbjJdKTtcbiAgICAgICAgc3RhdGUgPSB0YWJsZXMudGFibGVbbjJdO1xuICAgICAgICBzcCsrO1xuICAgICAgICBpZiAoc3AgPj0gZW52W2Vudl9zdGFja3NpemVdKSB7XG4gICAgICAgICAgcmVzID0gR1JPV19TVEFDS1NfMTtcbiAgICAgICAgICBicmVhayB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgIC8qIFRoZSBNTCBjb2RlIHJlc2l6ZXMgdGhlIHN0YWNrcyAqL1xuICAgICAgY2FzZSAyOiAvL1NUQUNLU19HUk9XTl8xOlxuICAgICAgICBlbnZbZW52X3Nfc3RhY2tdW3NwICsgMV0gPSBzdGF0ZTtcbiAgICAgICAgZW52W2Vudl92X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9sdmFsXTtcbiAgICAgICAgZW52W2Vudl9zeW1iX3N0YXJ0X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9zeW1iX3N0YXJ0XTtcbiAgICAgICAgZW52W2Vudl9zeW1iX2VuZF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9lbmRdO1xuICAgICAgICBjbWQgPSBsb29wO1xuICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcblxuICAgICAgY2FzZSAxMDogLy9yZWR1Y2U6XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKSBsb2coXCJTdGF0ZSBcIiArIHN0YXRlICsgXCI6IHJlZHVjZSBieSBydWxlIFwiICsgbik7XG4gICAgICAgIHZhciBtID0gdGFibGVzLmxlbltuXTtcbiAgICAgICAgZW52W2Vudl9hc3BdID0gc3A7XG4gICAgICAgIGVudltlbnZfcnVsZV9udW1iZXJdID0gbjtcbiAgICAgICAgZW52W2Vudl9ydWxlX2xlbl0gPSBtO1xuICAgICAgICBzcCA9IHNwIC0gbSArIDE7XG4gICAgICAgIG0gPSB0YWJsZXMubGhzW25dO1xuICAgICAgICBzdGF0ZTEgPSBlbnZbZW52X3Nfc3RhY2tdW3NwXTtcbiAgICAgICAgbjEgPSB0YWJsZXMuZ2luZGV4W21dO1xuICAgICAgICBuMiA9IG4xICsgc3RhdGUxO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbjEgIT09IDAgJiZcbiAgICAgICAgICBuMiA+PSAwICYmXG4gICAgICAgICAgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PT0gc3RhdGUxXG4gICAgICAgIClcbiAgICAgICAgICBzdGF0ZSA9IHRhYmxlcy50YWJsZVtuMl07XG4gICAgICAgIGVsc2Ugc3RhdGUgPSB0YWJsZXMuZGdvdG9bbV07XG4gICAgICAgIGlmIChzcCA+PSBlbnZbZW52X3N0YWNrc2l6ZV0pIHtcbiAgICAgICAgICByZXMgPSBHUk9XX1NUQUNLU18yO1xuICAgICAgICAgIGJyZWFrIHRoZV9sb29wO1xuICAgICAgICB9XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgLyogVGhlIE1MIGNvZGUgcmVzaXplcyB0aGUgc3RhY2tzICovXG4gICAgICBjYXNlIDM6IC8vU1RBQ0tTX0dST1dOXzI6XG4gICAgICAgIHJlcyA9IENPTVBVVEVfU0VNQU5USUNfQUNUSU9OO1xuICAgICAgICBicmVhayB0aGVfbG9vcDtcbiAgICAgIC8qIFRoZSBNTCBjb2RlIGNhbGxzIHRoZSBzZW1hbnRpYyBhY3Rpb24gKi9cbiAgICAgIGNhc2UgNDogLy9TRU1BTlRJQ19BQ1RJT05fQ09NUFVURUQ6XG4gICAgICAgIGVudltlbnZfc19zdGFja11bc3AgKyAxXSA9IHN0YXRlO1xuICAgICAgICBlbnZbZW52X3Zfc3RhY2tdW3NwICsgMV0gPSBhcmc7XG4gICAgICAgIHZhciBhc3AgPSBlbnZbZW52X2FzcF07XG4gICAgICAgIGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgICAgaWYgKHNwID4gYXNwKSB7XG4gICAgICAgICAgLyogVGhpcyBpcyBhbiBlcHNpbG9uIHByb2R1Y3Rpb24uIFRha2Ugc3ltYl9zdGFydCBlcXVhbCB0byBzeW1iX2VuZC4gKi9cbiAgICAgICAgICBlbnZbZW52X3N5bWJfc3RhcnRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgICAgfVxuICAgICAgICBjbWQgPSBsb29wO1xuICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgIC8qIFNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgfVxuICB9XG4gIC8vIFNBVkVcbiAgZW52W2Vudl9zcF0gPSBzcDtcbiAgZW52W2Vudl9zdGF0ZV0gPSBzdGF0ZTtcbiAgZW52W2Vudl9lcnJmbGFnXSA9IGVycmZsYWc7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3BhcnNlcl90cmFjZVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZXJfdHJhY2VcbmZ1bmN0aW9uIGNhbWxfc2V0X3BhcnNlcl90cmFjZShib29sKSB7XG4gIHZhciBvbGRmbGFnID0gY2FtbF9wYXJzZXJfdHJhY2U7XG4gIGNhbWxfcGFyc2VyX3RyYWNlID0gYm9vbDtcbiAgcmV0dXJuIG9sZGZsYWc7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMjAgLSBIdWdvIEhldXphcmRcbi8vIENvcHlyaWdodCAoQykgMjAyMCAtIFNoYWNoYXIgSXR6aGFreVxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2Jsb2IvNC4wNy9vdGhlcmxpYnMvc3RyL3N0cnN0dWJzLmNcbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qc2NvcS9qc2NvcS9ibG9iL3Y4LjExL2NvcS1qcy9qc19zdHViL3N0ci5qc1xuXG4vL1Byb3ZpZGVzOiByZV9tYXRjaFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfZ2V0XG5cbnZhciByZV9tYXRjaCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZV93b3JkX2xldHRlcnMgPSBbXG4gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAvKiAweDAwLTB4MUY6IG5vbmUgKi8sIDB4MDAsIDB4MDAsIDB4ZmYsXG4gICAgMHgwMyAvKiAweDIwLTB4M0Y6IGRpZ2l0cyAwLTkgKi8sIDB4ZmUsIDB4ZmYsIDB4ZmYsXG4gICAgMHg4NyAvKiAweDQwLTB4NUY6IEEgdG8gWiwgXyAqLywgMHhmZSwgMHhmZiwgMHhmZixcbiAgICAweDA3IC8qIDB4NjAtMHg3RjogYSB0byB6ICovLCAweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIDB4ODAtMHg5Rjogbm9uZSAqLyxcbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIDB4QTAtMHhCRjogbm9uZSAqLywgMHhmZiwgMHhmZiwgMHg3ZixcbiAgICAweGZmIC8qIDB4QzAtMHhERjogTGF0aW4tMSBhY2NlbnRlZCB1cHBlcmNhc2UgKi8sIDB4ZmYsIDB4ZmYsIDB4N2YsXG4gICAgMHhmZiAvKiAweEUwLTB4RkY6IExhdGluLTEgYWNjZW50ZWQgbG93ZXJjYXNlICovLFxuICBdO1xuXG4gIHZhciBvcGNvZGVzID0ge1xuICAgIENIQVI6IDAsXG4gICAgQ0hBUk5PUk06IDEsXG4gICAgU1RSSU5HOiAyLFxuICAgIFNUUklOR05PUk06IDMsXG4gICAgQ0hBUkNMQVNTOiA0LFxuICAgIEJPTDogNSxcbiAgICBFT0w6IDYsXG4gICAgV09SREJPVU5EQVJZOiA3LFxuICAgIEJFR0dST1VQOiA4LFxuICAgIEVOREdST1VQOiA5LFxuICAgIFJFRkdST1VQOiAxMCxcbiAgICBBQ0NFUFQ6IDExLFxuICAgIFNJTVBMRU9QVDogMTIsXG4gICAgU0lNUExFU1RBUjogMTMsXG4gICAgU0lNUExFUExVUzogMTQsXG4gICAgR09UTzogMTUsXG4gICAgUFVTSEJBQ0s6IDE2LFxuICAgIFNFVE1BUks6IDE3LFxuICAgIENIRUNLUFJPR1JFU1M6IDE4LFxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzX3dvcmRfbGV0dGVyKGMpIHtcbiAgICByZXR1cm4gKHJlX3dvcmRfbGV0dGVyc1tjID4+IDNdID4+IChjICYgNykpICYgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluX2JpdHNldChzLCBpKSB7XG4gICAgcmV0dXJuIChjYW1sX3N0cmluZ19nZXQocywgaSA+PiAzKSA+PiAoaSAmIDcpKSAmIDE7XG4gIH1cblxuICBmdW5jdGlvbiByZV9tYXRjaF9pbXBsKHJlLCBzLCBwb3MsIHBhcnRpYWwpIHtcbiAgICB2YXIgcHJvZyA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsxXSksXG4gICAgICBjcG9vbCA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsyXSksXG4gICAgICBub3JtdGFibGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHJlWzNdKSxcbiAgICAgIG51bWdyb3VwcyA9IHJlWzRdIHwgMCxcbiAgICAgIG51bXJlZ2lzdGVycyA9IHJlWzVdIHwgMDtcblxuICAgIHZhciBzID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcocyk7XG5cbiAgICB2YXIgcGMgPSAwLFxuICAgICAgcXVpdCA9IGZhbHNlLFxuICAgICAgc3RhY2sgPSBbXSxcbiAgICAgIGdyb3VwcyA9IG5ldyBBcnJheShudW1ncm91cHMpLFxuICAgICAgcmVfcmVnaXN0ZXIgPSBuZXcgQXJyYXkobnVtcmVnaXN0ZXJzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBncm91cHNbaV0gPSB7IHN0YXJ0OiAtMSwgZW5kOiAtMSB9O1xuICAgIH1cbiAgICBncm91cHNbMF0uc3RhcnQgPSBwb3M7XG5cbiAgICB2YXIgYmFja3RyYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICB2YXIgaXRlbSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoaXRlbS51bmRvKSB7XG4gICAgICAgICAgaXRlbS51bmRvLm9ialtpdGVtLnVuZG8ucHJvcF0gPSBpdGVtLnVuZG8udmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5wb3MpIHtcbiAgICAgICAgICBwYyA9IGl0ZW0ucG9zLnBjO1xuICAgICAgICAgIHBvcyA9IGl0ZW0ucG9zLnR4dDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHF1aXQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB2YXIgcHVzaCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBzdGFjay5wdXNoKGl0ZW0pO1xuICAgIH07XG5cbiAgICB2YXIgYWNjZXB0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZ3JvdXBzWzBdLmVuZCA9IHBvcztcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoMSArIGdyb3Vwcy5sZW5ndGggKiAyKTtcbiAgICAgIHJlc3VsdFswXSA9IDA7IC8vIHRhZ1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGcgPSBncm91cHNbaV07XG4gICAgICAgIGlmIChnLnN0YXJ0IDwgMCB8fCBnLmVuZCA8IDApIHtcbiAgICAgICAgICBnLnN0YXJ0ID0gZy5lbmQgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbMiAqIGkgKyAxXSA9IGcuc3RhcnQ7XG4gICAgICAgIHJlc3VsdFsyICogaSArIDEgKyAxXSA9IGcuZW5kO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdmFyIHByZWZpeF9tYXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChwYXJ0aWFsKSByZXR1cm4gYWNjZXB0KCk7XG4gICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgIH07XG5cbiAgICAvKiBNYWluIERGQSBpbnRlcnByZXRlciBsb29wICovXG4gICAgd2hpbGUgKCFxdWl0KSB7XG4gICAgICB2YXIgb3AgPSBwcm9nW3BjXSAmIDB4ZmYsXG4gICAgICAgIHNhcmcgPSBwcm9nW3BjXSA+PiA4LFxuICAgICAgICB1YXJnID0gc2FyZyAmIDB4ZmYsXG4gICAgICAgIGMgPSBzW3Bvc10sXG4gICAgICAgIGdyb3VwO1xuXG4gICAgICBwYysrO1xuXG4gICAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSOlxuICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmVmaXhfbWF0Y2goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYyA9PT0gdWFyZykgcG9zKys7XG4gICAgICAgICAgZWxzZSBiYWNrdHJhY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkNIQVJOT1JNOlxuICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmVmaXhfbWF0Y2goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICAgIGVsc2UgYmFja3RyYWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TVFJJTkc6XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBhcmcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNwb29sW3VhcmddKSwgaSA9IDA7XG4gICAgICAgICAgICBpIDwgYXJnLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09IGFyZy5jaGFyQ29kZUF0KGkpKSBjID0gc1srK3Bvc107XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLlNUUklOR05PUk06XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBhcmcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNwb29sW3VhcmddKSwgaSA9IDA7XG4gICAgICAgICAgICBpIDwgYXJnLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vcm10YWJsZS5jaGFyQ29kZUF0KGMpID09PSBhcmcuY2hhckNvZGVBdChpKSkgYyA9IHNbKytwb3NdO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSQ0xBU1M6XG4gICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHByZWZpeF9tYXRjaCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbl9iaXRzZXQoY3Bvb2xbdWFyZ10sIGMpKSBwb3MrKztcbiAgICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuQk9MOlxuICAgICAgICAgIGlmIChwb3MgPiAwICYmIHNbcG9zIC0gMV0gIT09IDEwIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuRU9MOlxuICAgICAgICAgIGlmIChwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT09IDEwIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuV09SREJPVU5EQVJZOlxuICAgICAgICAgIGlmIChwb3MgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHByZWZpeF9tYXRjaCgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc193b3JkX2xldHRlcihzWzBdKSkgYnJlYWs7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChpc193b3JkX2xldHRlcihzW3BvcyAtIDFdKSkgYnJlYWs7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzX3dvcmRfbGV0dGVyKHNbcG9zIC0gMV0pICE9PSBpc193b3JkX2xldHRlcihzW3Bvc10pKSBicmVhaztcbiAgICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkJFR0dST1VQOlxuICAgICAgICAgIGdyb3VwID0gZ3JvdXBzW3VhcmddO1xuICAgICAgICAgIHB1c2goeyB1bmRvOiB7IG9iajogZ3JvdXAsIHByb3A6IFwic3RhcnRcIiwgdmFsdWU6IGdyb3VwLnN0YXJ0IH0gfSk7XG4gICAgICAgICAgZ3JvdXAuc3RhcnQgPSBwb3M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5FTkRHUk9VUDpcbiAgICAgICAgICBncm91cCA9IGdyb3Vwc1t1YXJnXTtcbiAgICAgICAgICBwdXNoKHsgdW5kbzogeyBvYmo6IGdyb3VwLCBwcm9wOiBcImVuZFwiLCB2YWx1ZTogZ3JvdXAuZW5kIH0gfSk7XG4gICAgICAgICAgZ3JvdXAuZW5kID0gcG9zO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuUkVGR1JPVVA6XG4gICAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgICAgaWYgKGdyb3VwLnN0YXJ0IDwgMCB8fCBncm91cC5lbmQgPCAwKSB7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gZ3JvdXAuc3RhcnQ7IGkgPCBncm91cC5lbmQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNbaV0gIT09IHNbcG9zXSkge1xuICAgICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TSU1QTEVPUFQ6XG4gICAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuU0lNUExFU1RBUjpcbiAgICAgICAgICB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSkgYyA9IHNbKytwb3NdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuU0lNUExFUExVUzpcbiAgICAgICAgICBpZiAocG9zID09PSBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICAgICAgfSB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSk7XG4gICAgICAgICAgfSBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuQUNDRVBUOlxuICAgICAgICAgIHJldHVybiBhY2NlcHQoKTtcbiAgICAgICAgY2FzZSBvcGNvZGVzLkdPVE86XG4gICAgICAgICAgcGMgPSBwYyArIHNhcmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5QVVNIQkFDSzpcbiAgICAgICAgICBwdXNoKHsgcG9zOiB7IHBjOiBwYyArIHNhcmcsIHR4dDogcG9zIH0gfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TRVRNQVJLOlxuICAgICAgICAgIHB1c2goe1xuICAgICAgICAgICAgdW5kbzogeyBvYmo6IHJlX3JlZ2lzdGVyLCBwcm9wOiB1YXJnLCB2YWx1ZTogcmVfcmVnaXN0ZXJbdWFyZ10gfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZV9yZWdpc3Rlclt1YXJnXSA9IHBvcztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkNIRUNLUFJPR1JFU1M6XG4gICAgICAgICAgaWYgKHJlX3JlZ2lzdGVyW3VhcmddID09PSBwb3MpIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnl0ZWNvZGVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHJlX21hdGNoX2ltcGw7XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiByZV9zZWFyY2hfZm9yd2FyZFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19nZXRcbmZ1bmN0aW9uIHJlX3NlYXJjaF9mb3J3YXJkKHJlLCBzLCBwb3MpIHtcbiAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfZm9yd2FyZFwiKTtcbiAgdmFyIHN0YXJ0Y2hhcnMgPSByZVs2XSB8IDA7XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIGlmIChzdGFydGNoYXJzID49IDApIHtcbiAgICBzdGFydGNoYXJzID0gcmVbMl1bc3RhcnRjaGFycyArIDFdO1xuICAgIGRvIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgcG9zIDwgbGVuICYmXG4gICAgICAgIGNhbWxfc3RyaW5nX2dldChzdGFydGNoYXJzLCBjYW1sX3N0cmluZ19nZXQocywgcG9zKSkgPT09IDBcbiAgICAgIClcbiAgICAgICAgcG9zKys7XG4gICAgICB2YXIgcmVzID0gcmVfbWF0Y2gocmUsIHMsIHBvcywgMCk7XG4gICAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgICAgcG9zKys7XG4gICAgfSB3aGlsZSAocG9zIDw9IGxlbik7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIHBvcysrO1xuICAgIH0gd2hpbGUgKHBvcyA8PSBsZW4pO1xuICB9XG4gIHJldHVybiBbMF07IC8qIFt8fF0gOiBpbnQgYXJyYXkgKi9cbn1cblxuLy9Qcm92aWRlczogcmVfc2VhcmNoX2JhY2t3YXJkXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2dldFxuZnVuY3Rpb24gcmVfc2VhcmNoX2JhY2t3YXJkKHJlLCBzLCBwb3MpIHtcbiAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfYmFja3dhcmRcIik7XG4gIHZhciBzdGFydGNoYXJzID0gcmVbNl0gfCAwO1xuICBpZiAoc3RhcnRjaGFycyA+PSAwKSB7XG4gICAgc3RhcnRjaGFycyA9IHJlWzJdW3N0YXJ0Y2hhcnMgKyAxXTtcbiAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICAgIGRvIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgcG9zID4gMCAmJlxuICAgICAgICBwb3MgPCBsZW4gJiZcbiAgICAgICAgY2FtbF9zdHJpbmdfZ2V0KHN0YXJ0Y2hhcnMsIGNhbWxfc3RyaW5nX2dldChzLCBwb3MpKSA9PT0gMFxuICAgICAgKVxuICAgICAgICBwb3MtLTtcbiAgICAgIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgICBwb3MtLTtcbiAgICB9IHdoaWxlIChwb3MgPj0gMCk7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIHBvcy0tO1xuICAgIH0gd2hpbGUgKHBvcyA+PSAwKTtcbiAgfVxuICByZXR1cm4gWzBdOyAvKiBbfHxdIDogaW50IGFycmF5ICovXG59XG5cbi8vUHJvdmlkZXM6IHJlX3N0cmluZ19tYXRjaFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zdHJpbmdfbWF0Y2gocmUsIHMsIHBvcykge1xuICBpZiAocG9zIDwgMCB8fCBwb3MgPiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyLnN0cmluZ19tYXRjaFwiKTtcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3BhcnRpYWxfbWF0Y2hcbi8vUmVxdWlyZXM6IHJlX21hdGNoLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gcmVfcGFydGlhbF9tYXRjaChyZSwgcywgcG9zKSB7XG4gIGlmIChwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIucGFydGlhbF9tYXRjaFwiKTtcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDEpO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3JlcGxhY2VtZW50X3RleHRcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vLyBleHRlcm5hbCByZV9yZXBsYWNlbWVudF90ZXh0OiBzdHJpbmcgLT4gaW50IGFycmF5IC0+IHN0cmluZyAtPiBzdHJpbmdcbmZ1bmN0aW9uIHJlX3JlcGxhY2VtZW50X3RleHQocmVwbCwgZ3JvdXBzLCBvcmlnKSB7XG4gIHZhciByZXBsID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhyZXBsKTtcbiAgdmFyIGxlbiA9IHJlcGwubGVuZ3RoO1xuICB2YXIgb3JpZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob3JpZyk7XG4gIHZhciByZXMgPSBcIlwiOyAvL3Jlc3VsdFxuICB2YXIgbiA9IDA7IC8vIGN1cnJlbnQgcG9zaXRpb25cbiAgdmFyIGN1cjsgLy9jdXJyZW50IGNoYXJcbiAgdmFyIHN0YXJ0LCBlbmQsIGM7XG4gIHdoaWxlIChuIDwgbGVuKSB7XG4gICAgY3VyID0gcmVwbC5jaGFyQXQobisrKTtcbiAgICBpZiAoY3VyICE9PSBcIlxcXFxcIikge1xuICAgICAgcmVzICs9IGN1cjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG4gPT09IGxlbikgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiBpbGxlZ2FsIGJhY2tzbGFzaCBzZXF1ZW5jZVwiKTtcbiAgICAgIGN1ciA9IHJlcGwuY2hhckF0KG4rKyk7XG4gICAgICBzd2l0Y2ggKGN1cikge1xuICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgIHJlcyArPSBjdXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIwXCI6XG4gICAgICAgIGNhc2UgXCIxXCI6XG4gICAgICAgIGNhc2UgXCIyXCI6XG4gICAgICAgIGNhc2UgXCIzXCI6XG4gICAgICAgIGNhc2UgXCI0XCI6XG4gICAgICAgIGNhc2UgXCI1XCI6XG4gICAgICAgIGNhc2UgXCI2XCI6XG4gICAgICAgIGNhc2UgXCI3XCI6XG4gICAgICAgIGNhc2UgXCI4XCI6XG4gICAgICAgIGNhc2UgXCI5XCI6XG4gICAgICAgICAgYyA9ICtjdXI7XG4gICAgICAgICAgaWYgKGMgKiAyID49IGdyb3Vwcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIpO1xuICAgICAgICAgIHN0YXJ0ID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjICogMik7XG4gICAgICAgICAgZW5kID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjICogMiArIDEpO1xuICAgICAgICAgIGlmIChzdGFydCA9PT0gLTEpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiU3RyLnJlcGxhY2U6IHJlZmVyZW5jZSB0byB1bm1hdGNoZWQgZ3JvdXBcIik7XG4gICAgICAgICAgcmVzICs9IG9yaWcuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzICs9IFwiXFxcXFwiICsgY3VyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhyZXMpO1xufVxuIl0sIm5hbWVzIjpbImNzdF9PdXRfb2ZfbWVtb3J5IiwiY3N0X1N5c19lcnJvciIsImNzdF9GYWlsdXJlIiwiY3N0X0ludmFsaWRfYXJndW1lbnQiLCJjc3RfRW5kX29mX2ZpbGUiLCJjc3RfRGl2aXNpb25fYnlfemVybyIsImNzdF9Ob3RfZm91bmQiLCJjc3RfTWF0Y2hfZmFpbHVyZSIsImNzdF9TdGFja19vdmVyZmxvdyIsImNzdF9TeXNfYmxvY2tlZF9pbyIsImNzdF9Bc3NlcnRfZmFpbHVyZSIsImNzdF9VbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSJdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQTtBQUFBO0FBQUEsR0FBQTtBQUFBO0FBQUE7QUFBQSxRQUFBO0FBQUEsU0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFBO0FBQUEsSUFBQTtBQUFBLElBQUE7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O0FBQUE7QUFBQTtBQUFBLFdBR3FCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FNUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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Q0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosT0FBTztBQUFBLFNBQ1AsT0FBTztBQUFBLFNBQ1AsT0FBTztBQUFBLFNBQ1AsT0FBTyxhQTdFRixDQThFTjtBQUFBLE9BbkdzQjtBQUFBLE9BQUQ7QUFBQTtBQUFBLGlCQWlKWDtBQUFBLElBQ1g7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEtBQ0UsWUFBVyxxQkFBdUI7QUFBQSxLQUdsQztBQUFBLEtBQ0EsWUFBVyxnQkFBa0I7QUFBQTtBQUFBO0FBQUEsS0FHeEIsWUFDTSxxQkFBdUI7QUFBQSxJQUlwQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsWUFDUTtBQUFBLElBQ1IsWUFBVztBQUFBLEtBQ1QsWUFBVyxlQUFpQjtBQUFBLElBQzlCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQTtBQUFBLGNBaEVlO0FBQUEsV0FDSDtBQUFBLFVBQ0Q7QUFBQSxJQUNUO0FBQUE7QUFBQSxZQUVLO0FBQUE7QUFBQSxtQkFHSjtBQUFBLEdBQ0g7QUFBQTtBQUFBLGlCQUthLDRCQUNHO0FBQUEsSUFDZDtBQUFBLElBQ0E7QUFBQSxtQkFDYztBQUFBLEtBQ1o7QUFBQSxNQUNFLFdBQVc7QUFBQSxNQUNYLE1BQU07QUFBQTtBQUFBLEtBRVIsV0FBVztBQUFBLEtBQ1g7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFFRjtBQUFBLEtBQ0UsV0FBVztBQUFBLEtBQ1g7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFFRjtBQUFBLEtBQ0UsV0FBVztBQUFBLEdBQ2Y7QUFBQSxnQ0N5RUUsT0FBTyxhQUFhLENBQ3RCO0FBQUE7QUFBQTtBQUFBLFNkdFBRO0FBQUEsZUFDTTtBQUFBLFNBQ047QUFBQSxJQUNOO0FBQUEsS0FBYSxPQUFPLFVBQVU7QUFBQTtBQUFBLGFBRXBCLEtBQUs7QUFBQSxLQUNiLDRCQUE2QixRQUFRO0FBQUEsS0FDckMsT0FBTyxpQkFBaUIsY0FBYztBQUFBO0FBQUE7QUFBQSxLQUV0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFFVTtBQUFBLHlCQUNRO0FBQUEsYUFDWixZQUFXLHFCQUF1QjtBQUFBLGFBQ2xDO0FBQUEsYUFDQSxPQUFPLFdBQVc7QUFBQSxZQUpaO0FBQUEsU0FNUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUdNO0FBQUEseUJBQ1E7QUFBQSxhQUNaLFlBQVcscUJBQXVCO0FBQUEsYUFDbEM7QUFBQSxhQUNBO0FBQUEsYUFDQSxPQUFPLFdBQVc7QUFBQSxZQUxaO0FBQUEsU0FPUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FHTTtBQUFBLFlBQ0osNEJBQTZCO0FBQUEsWUFDN0IsT0FBTyxpQkFBaUIsd0JBQXdCO0FBQUEsV0FGMUM7QUFBQTtBQUFBLEtBTVo7QUFBQSxLQUNBLFFBQVE7QUFBQTtBQUFBLEdBRVo7QUFBQTtBQUFBLEllMUJFLHFCQUNFLE9BQU8seUJBQXlCLENBRDNCLENBRU47QUFBQSxHQUNIO0FBQUEsNENDd01FLFFBQVEsQ0FDVjtBQUFBO0FBQUE7QUFBQSxNbEJ0RmdCO0FBQUEsc0JBQ0YsMkJBQ0gsZ0JBQ0E7QUFBQSxRQUVUO0FBQUEsb0JBQ1c7QUFBQSxTQUVUO0FBQUEsU0FDQSxPQUFPO0FBQUE7QUFBQSxnQkFHRCx1Q0FDRTtBQUFBLFFBQ1YsWUFBVztBQUFBLFNBQ1QsV0FBVztBQUFBLFFBQ2IsWUFBWTtBQUFBLE9BaEJHO0FBQUEsT0FBRDtBQUFBO0FBQUEsYW1CN0dQLGdCQUNGLGVBQ0MsaUJBQ0U7QUFBQSxJQUNSO0FBQUEsWUFDTSxPQUNGO0FBQUEsSUFDSixtQkFBb0I7QUFBQSxJQUNwQix1QkFBd0I7QUFBQSxJQUN4QixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUFxREU7QUFBQSxLQUFjLFlBQ0Qsa0JBQW9CO0FBQUE7QUFBQSxLQUMxQixZQUNNLGtCQUFvQjtBQUFBLElBRWpDLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZQXpDUTtBQUFBLElBQ047QUFBQSxhQUNRO0FBQUEsS0FDTixZQUFXLHNCQUF3QjtBQUFBLEtBQ25DO0FBQUE7QUFBQSxJQUVGLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQXlFRSxZQUFXLGlCQUFtQjtBQUFBLElBRzlCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQVZFLDJDQUE0QztBQUFBLElBQzVDLHVCQUF1QjtBQUFBLEdBQ3pCO0FBQUE7QUFBQSxJQTJDRSxzQ0FBeUM7QUFBQSxjQUNqQyxpQkFDQTtBQUFBLElBQ1I7QUFBQSxJQUNBLFlBQVcsaUJBQW1CO0FBQUEsSUFDOUIsUUFBUTtBQUFBLEdBQ1Y7QUFBQSxtQ3RCa3BCRSxPQUFPLDRCQUE0QixDQUNyQztBQUFBLG9DQVJFLE9BQU8sNkJBQTZCLENBQ3RDO0FBQUE7QUFBQSxJc0Ixc0JFLDJDQUE0QztBQUFBLElBQzVDO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsYUF0SFc7QUFBQSxJQUNUO0FBQUEsSUFDQSxhQUFZLFFBQVEsOEJBQWdDO0FBQUEsSUFHcEQsU0FBUztBQUFBLEdBQ1g7QUFBQSxnQ0h5UEUsT0FBTyxhQUFhLENBQ3RCO0FBQUEsZ0NBT0UsT0FBTyxhQUFhLENBQ3RCO0FBQUE7QUFBQSxJSW5QRSxpQkFDRSxZQUNBLFFBQVE7QUFBQSxJQUVWLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZQStCUTtBQUFBLElBQ047QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxjQW5CVTtBQUFBLElBQ1I7QUFBQSxJQUNBLFVBQVU7QUFBQSxHQUNaO0FBQUEsa0NBbkNFLGFBQWEsQ0FDZjtBQUFBLDBDQStERSxhQUFhLENBQ2Y7QUFBQTtBQUFBLElSOGpCRTtBQUFBLEtBQ0U7QUFBQSxJQUNGLFlBQVc7QUFBQSxLQUNUO0FBQUEsTUFDRTtBQUFBLElBQ0o7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQXBMRSx5QkFBMEIsU0FBUztBQUFBLG1CQUN0QjtBQUFBLElBQ2IsWUFBVztBQUFBLEtBQ1Q7QUFBQSxJQUNGLE9BQU8seURBQXlEO0FBQUEsR0FDbEU7QUFBQSx5Q0F4Q0UsT0FBTyxtQkFBbUIsQ0FDNUI7QUFBQTtBQUFBO0FBQUEsSUF2UUU7QUFBQTtBQUFBLE9BRUkscUJBQ0E7QUFBQTtBQUFBLE9BRUEscUJBQ0E7QUFBQTtBQUFBLE9BRUEsa0JBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsb0JBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEscUJBQ0E7QUFBQTtBQUFBLE9BRUEscUJBQ0E7QUFBQTtBQUFBLE9BRUEsbUJBQ0E7QUFBQTtBQUFBLE9BRUEsb0JBQ0E7QUFBQTtBQUFBLElBRUosV0FBVztBQUFBLGVBQ0EsZ0JBQWdCO0FBQUEsSUFDM0IsV0FBVztBQUFBLEdBQ2I7QUFBQSxrQ1RSRSxPQUFPLFVBQVUsQ0FDbkI7QUFBQTtBQUFBO0FBQUEsWVN5UGE7QUFBQSxZQUNBLDRCQUE0QjtBQUFBLElBQ3ZDLE9BQU8sK0NBQStDO0FBQUEsR0FDeEQ7QUFBQTtBQUFBLElBZ2VFLFlBQWE7QUFBQSxLQUNYO0FBQUE7QUFBQSxJQUlGLE9BQU8sZ0RBQWdEO0FBQUEsR0FDekQ7QUFBQSx1Qkk3N0JvQixhQUFhO0FBQUE7QUFBQSxJQStIL0I7QUFBQSxJQUNBLE9BQU8saUNBQWlDO0FBQUEsR0FDMUM7QUFBQTtBQUFBLElSMlRFLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxtQ0FJTjtBQUFBLEdBQ0g7QUFBQTtBQUFBLGFRdFdTLFdBQ0EsV0FDQTtBQUFBLElBSVAsMkRBQThEO0FBQUEsSUFDOUQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxPQUFPLGlDQUFpQztBQUFBLEdBQzFDO0FBQUE7QUFBQSxJWjVFRTtBQUFBLEtBQ0UsaUNBQWlDO0FBQUEsSUFDbkM7QUFBQSxHQUNGO0FBQUE7QUFBQSxtQlF5eUJpQjtBQUFBLElBQ2Y7QUFBQSxLQUNFO0FBQUE7QUFBQSxXQUNRO0FBQUEsWUFDRDtBQUFBLGNBQ0U7QUFBQSxZQUNGO0FBQUEsSUFDVDtBQUFBLEtBQ0UsWUFBVztBQUFBLHFCQUNNO0FBQUEsTUFDZjtBQUFBLHlCQUNvQixnQ0FDQTtBQUFBLE9BQ2xCO0FBQUEsUUFDRTtBQUFBLE9BQ0Y7QUFBQTtBQUFBLE1BRUY7QUFBQTtBQUFBO0FBQUEsS0FFQyxZQUFXLHNCQUF3QixVQUFVO0FBQUE7QUFBQSxZQUN2QztBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsSUFDVDtBQUFBO0FBQUEsT0FFSSxZQUFXLGtCQUFvQixVQUNuQixpQkFFWjtBQUFBO0FBQUE7QUFBQSxPQUdBLFlBQVcsa0JBQW9CLFVBQ25CLGlCQUVaO0FBQUE7QUFBQSxPQUVBLFlBQVcsa0JBQW9CLFVBQ25CLGtCQUVaO0FBQUE7QUFBQSxPQUVBLFlBQVcsa0JBQW9CLFVBQ25CLGtCQUVaO0FBQUE7QUFBQSxPQUVBLFlBQVcsa0JBQW9CLFVBQ25CLGtCQUVaO0FBQUE7QUFBQTtBQUFBLG1CQUdZO0FBQUEsT0FDWjtBQUFBLFFBQ0U7QUFBQTtBQUFBLE9BR0YsWUFBVyxrQkFBb0IsVUFDbkI7QUFBQSxPQUVaO0FBQUE7QUFBQSxlQUVRO0FBQUEsT0FDUixZQUFXO0FBQUEsUUFDVCxZQUFXLGVBQWlCLE9BQU87QUFBQSxvQkFDdkI7QUFBQSxRQUNaO0FBQUE7QUFBQSxPQUVGO0FBQUE7QUFBQSxlQUVRO0FBQUEsT0FDUixZQUFXO0FBQUEsUUFDVCxZQUFXLGVBQWlCLE9BQU87QUFBQSxnQkFDM0IseUJBQXlCO0FBQUEsUUFDakM7QUFBQTtBQUFBLE9BRUY7QUFBQTtBQUFBLE9BRUEsWUFBVyxrQkFBb0IsVUFDbkIsa0JBRVo7QUFBQTtBQUFBLE9BRUEsWUFBVztBQUFBLGdCQUNELHlCQUF5QjtBQUFBLFFBQ2pDO0FBQUE7QUFBQSxPQUVGO0FBQUE7QUFBQSxPQUVBLFlBQVc7QUFBQTtBQUFBLGNBQ0EseUJBQXlCO0FBQUEsY0FDekIseUJBQXlCO0FBQUEsUUFDbEM7QUFBQTtBQUFBLE9BRUY7QUFBQTtBQUFBLGVBRVE7QUFBQSxPQUNSLFlBQVc7QUFBQSxRQUNULFlBQVcsZUFBaUIsT0FBTztBQUFBLGlCQUMxQix5QkFBeUI7QUFBQSxRQUNsQyxZQUFXLGVBQWlCLE9BQU87QUFBQSxpQkFDMUIseUJBQXlCO0FBQUEsUUFDbEM7QUFBQTtBQUFBLE9BRUY7QUFBQTtBQUFBLElBRUo7QUFBQSxJQUNBLE9BQU8sK0NBQStDO0FBQUEsR0FDeEQ7QUFBQTtBQUFBLElBNWJFLGlDQUFrQztBQUFBLElBQ2xDLGlCQUFpQjtBQUFBLEdBQ25CO0FBQUEsOEJBS0UsT0FBTyxrQkFBa0IsQ0FDM0I7QUFBQSw4QkFLRSxPQUFPLGtCQUFrQixDQUMzQjtBQUFBLDhCQUtFLE9BQU8sa0JBQWtCLENBQzNCO0FBQUEsZ0NBeUhFLFlBQ0EsUUFBUSxDQUNWO0FBQUE7QUFBQTtBQUFBLElBNmJFO0FBQUEsS0FBZ0M7QUFBQTtBQUFBLEtBQ0s7QUFBQTtBQUFBLEtBQ0g7QUFBQTtBQUFBLEtBQ0M7QUFBQTtBQUFBLEtBQ087QUFBQTtBQUFBLEtBQ1A7QUFBQTtBQUFBLEtBQ0M7QUFBQTtBQUFBLEtBQ0Q7QUFBQTtBQUFBLEtBQ0M7QUFBQTtBQUFBLEtBQy9CO0FBQUEsSUFDTCxXQUFXO0FBQUEsR0FDYjtBQUFBO0FBQUE7QUFBQSxZQU1hO0FBQUE7QUFBQSxPQUNKO0FBQUEsVUFJRDtBQUFBO0FBQUEsSUFFTixPQUFPLCtDQUErQztBQUFBLEdBQ3hEO0FBQUEsa0NBaGlCRSxPQUFPLE9BQU8sY0FBYyxDQUM5QjtBQUFBLHNDQUlFLE9BQU8sT0FBTyxvQkFBb0IsQ0FDcEM7QUFBQTtBQUFBLElBSUUsT0FBTyxPQUFPLHdCQUF3QjtBQUFBLEdBQ3hDO0FBQUE7QUFBQSxjQXZEWSxVQUFVO0FBQUEsSUFDcEIsT0FBTyxXQUFXO0FBQUEsR0FDcEI7QUFBQSwyQlN6WkUsT0FBTyxlQUFlLENBQ3hCO0FBQUE7QUFBQSxJQ3JIRSxJQUFJO0FBQUEsSUFDSjtBQUFBLElBQ0EsSUFBSTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQSxnREFBb0Q7QUFBQSxHQUN0RDtBQUFBO0FBQUEsSVZvaENFO0FBQUEsS0FBbUQ7QUFBQSwwQkFFMUI7QUFBQSxJQUl6QixPQUFPLDBCQUEwQjtBQUFBLEdBQ25DO0FBQUE7QUFBQSxJSTlnQ0U7QUFBQSxJQUNBLE9BQU8sb0NBQW9DO0FBQUEsR0FDN0M7QUFBQTtBQUFBLFlKa2hDVTtBQUFBLElBRVI7QUFBQSxLQUE2RDtBQUFBLG9DQUUxQjtBQUFBLElBTW5DLE9BQU87QUFBQSxJQUNQLFdBQVc7QUFBQSxHQUNiO0FBQUEsbURKbHBCRSxPQUFPLHVCQUF1QjtBQUFBLEdBQ2hDO0FBQUE7QUFBQSxJUS9aRTtBQUFBO0FBQUEsWUFDVztBQUFBLFlBQ0E7QUFBQSxVQUNKO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxJQUlQLDJEQUE4RDtBQUFBLElBQzlELE9BQU8sc0NBQXNDO0FBQUEsR0FDL0M7QUFBQTtBQUFBO0FBQUEsV01VWTtBQUFBLFNBQ0Y7QUFBQSxTQUNBO0FBQUEsSUFFUiwrREFDRSxnQkFDQTtBQUFBLCtDQUM0QztBQUFBLElBTTlDLE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxJQUNQLFdBQVc7QUFBQSxHQUNiO0FBQUE7QUFBQSxtQlZ3NUJpQiwrQkFDVDtBQUFBLElBQ047QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUlJLG1CQUFvQjtBQUFBLGVBQ2QsT0FDRjtBQUFBLE9BQ0o7QUFBQSxRQUNFO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJO0FBQUE7QUFBQSxPQUVOO0FBQUEsT0FDQTtBQUFBO0FBQUEsVUFHSTtBQUFBO0FBQUEsVUFJQTtBQUFBO0FBQUEsVUFHQSxxQkFDQSxJQUFJO0FBQUE7QUFBQSxPQUVSO0FBQUE7QUFBQTtBQUFBLE9BR0EsbUJBQW9CO0FBQUEsZUFDZCxPQUNGO0FBQUEsT0FDSjtBQUFBLFFBQ0U7QUFBQSxRQUNBLElBQUk7QUFBQTtBQUFBLE9BRU4seUJBQTBCLElBQUk7QUFBQSxPQUM5QjtBQUFBO0FBQUEsT0FFQSxrQkFBbUI7QUFBQSxPQUNuQixZQUFXLHNCQUF3QixJQUFJO0FBQUEsT0FDdkM7QUFBQTtBQUFBO0FBQUEsT0FHQSxrQkFBbUI7QUFBQSxPQUNuQixZQUFXLHNCQUF3QixJQUFJO0FBQUEsT0FDdkM7QUFBQTtBQUFBLE9BRUEsa0JBQW1CO0FBQUEsT0FDbkI7QUFBQSxPQUNBLFlBQVcsc0JBQXdCLElBQzdCO0FBQUEsT0FFTjtBQUFBO0FBQUEsT0FHQTtBQUFBO0FBQUEsT0FHQSxrQkFBbUI7QUFBQSxPQUNuQixZQUFXO0FBQUEsUUFDVCxJQUFJO0FBQUEsT0FDTjtBQUFBO0FBQUEsT0FHQTtBQUFBO0FBQUEsT0FHQSxrQkFBbUI7QUFBQSxPQUNuQixZQUFXO0FBQUEsUUFBd0IsSUFBSTtBQUFBLE9BQ3ZDO0FBQUE7QUFBQSxPQUVBLG1CQUFvQjtBQUFBLE9BQ3BCLFlBQVc7QUFBQSxRQUF3QixJQUM3QjtBQUFBLE9BRU47QUFBQTtBQUFBLElBRUosUUFBUTtBQUFBLEdBQ1Y7QUFBQSwyQkEvZ0NFLFFBQVEsQ0FDVjtBQUFBLDZCQTRkRSxjQUFjLENBQ2hCO0FBQUEsK0JBSUUsZ0JBQWdCLENBQ2xCO0FBQUEseUVOcE5FO0FBQUEsR0FDRjtBQUFBO0FBQUEsSUFNRSxPQUFPO0FBQUEsa0VBQXNFO0FBQUEsR0FDL0U7QUFBQSxpQ01nTkUscUJBQXFCLENBQ3ZCO0FBQUE7QUFBQSxJQWdPRSxPQUFPO0FBQUEsa0JBQ0ssZUFDQztBQUFBLElBRWI7QUFBQSxLQUNFO0FBQUEsbUJBRVc7QUFBQSxJQUNiLFlBQVc7QUFBQSxLQUNUO0FBQUEsS0FDQTtBQUFBLE1BQ0U7QUFBQSxLQUNGO0FBQUE7QUFBQSxlQUdTO0FBQUEsSUFFWDtBQUFBLEtBQ0U7QUFBQSxJQUNGLE9BQU8sMkRBQTJEO0FBQUEsR0FDcEU7QUFBQSxtQ0poU0UsT0FBTyxXQUFXLENBQ3BCO0FBQUE7QUFBQSxJSXNTRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsS0FDRSxZQUFXO0FBQUEsTUFBOEI7QUFBQSxPQUNkO0FBQUE7QUFBQSxPQUV2QjtBQUFBLE9BQ0E7QUFBQSxPQUNBO0FBQUE7QUFBQTtBQUFBLEtBR0QsWUFBVyw0QkFBOEI7QUFBQSxJQUM5QztBQUFBO0FBQUE7QUFBQTtBQUFBLE9BSUksWUFBVyw0QkFDVDtBQUFBLE9BRUY7QUFBQTtBQUFBO0FBQUEsT0FHQSxZQUFXLDRCQUNUO0FBQUEsT0FFRjtBQUFBO0FBQUEsT0FFQSxZQUFXLDRCQUNUO0FBQUEsT0FFRjtBQUFBO0FBQUE7QUFBQSxPQUdBO0FBQUEsT0FDQSxZQUFXLDRCQUNUO0FBQUEsT0FFRjtBQUFBO0FBQUEsT0FFQSxZQUFXO0FBQUEsZ0JBQ0Qsb0JBQW9CO0FBQUEsUUFDNUIsWUFBVyxlQUFpQjtBQUFBO0FBQUEsT0FFOUI7QUFBQTtBQUFBLE9BRUEsWUFBVztBQUFBLGdCQUNELG9CQUFvQix5QkFBeUI7QUFBQSxRQUNyRCxZQUFXLGVBQWlCO0FBQUE7QUFBQSxPQUU5QjtBQUFBO0FBQUEsT0FFQSxZQUFXLDRCQUNUO0FBQUEsT0FFRjtBQUFBO0FBQUEsT0FFQSxZQUFXO0FBQUEsZ0JBQ0QseUJBQXlCO0FBQUEsUUFDakM7QUFBQTtBQUFBLE9BRUY7QUFBQTtBQUFBLE9BRUEsWUFBVztBQUFBLGdCQUNEO0FBQUEsUUFDUixpQkFBaUI7QUFBQSxRQUNqQixpQkFBaUI7QUFBQTtBQUFBLE9BRW5CO0FBQUE7QUFBQSxPQUVBLFlBQVc7QUFBQTtBQUFBLG1CQUNLO0FBQUEsYUFDTixvQkFBb0I7QUFBQSxRQUM1QixZQUFXLGVBQWlCO0FBQUEsZ0JBQ3BCLG9CQUFvQjtBQUFBLFFBQzVCLFlBQVcsZUFBaUI7QUFBQTtBQUFBLE9BRTlCO0FBQUE7QUFBQSxJQUVKO0FBQUEsSUFDQTtBQUFBLEdBQ0Y7QUFBQSxxQ0EzTUUsT0FBTyxtQkFDUCxRQUFRLENBQ1Y7QUFBQTtBQUFBLElBSUUsT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBSUUsT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBcERFLE9BQU8sVUFBVTtBQUFBLElBQ2pCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQW1HRSxPQUFPO0FBQUEsbUJBQ00scUJBQ0gsZUFDRztBQUFBLElBR2I7QUFBQSxLQUNFO0FBQUEsSUFHRjtBQUFBLEtBQ0UsWUFBVyxzQkFBd0I7QUFBQSxLQUNuQywrQkFBZ0M7QUFBQSxLQUNoQyxXQUFXO0FBQUE7QUFBQTtBQUFBLEtBRVgsWUFBVztBQUFBLE1BQ1Q7QUFBQSxLQUNGLFlBQVcsdUNBQXlDO0FBQUEsS0FDcEQsV0FBVztBQUFBO0FBQUEsSUFFYixNQUFNO0FBQUE7QUFBQSxZQUNLO0FBQUEsd0JBQ1k7QUFBQTtBQUFBLE9BQ1I7QUFBQTtBQUFBLElBSWYsT0FBTyw2REFBNkQ7QUFBQSxHQUN0RTtBQUFBO0FBQUEsMkJBcERVO0FBQUEsSUFDUjtBQUFBLEtBQ0UsWUFBVyw0QkFBOEI7QUFBQSxLQUN6QztBQUFBO0FBQUE7QUFBQSxLQUVBLFlBQVcsZ0NBQWtDO0FBQUEsS0FDN0M7QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGO0FBQUEsS0FDRTtBQUFBLG1CQUVXO0FBQUEsSUFDYixZQUFXLDRCQUE4QjtBQUFBLElBQ3pDO0FBQUEsSUFDQSxPQUFPO0FBQUEsbUJBQ1E7QUFBQSxJQUNmLE9BQU8sNkRBQTZEO0FBQUEsR0FDdEU7QUFBQSx1Q0FpWkUsY0FBYyxDQUNoQjtBQUFBO0FBQUEsY0F0aUJZO0FBQUEsSUFDViw4QkFBK0I7QUFBQSxhQUN0QixrQkFDQTtBQUFBLElBQ1QsbUJBQXFCO0FBQUEsR0FDdkI7QUFBQTtBQUFBLGNBS1k7QUFBQSxJQUNWLDhCQUErQjtBQUFBO0FBQUEsVUFDdEI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxJQUNULDhDQUFzRDtBQUFBLEdBQ3hEO0FBQUE7QUFBQSxjQUtZO0FBQUEsSUFDViw4QkFBK0I7QUFBQTtBQUFBLFVBQ3RCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLElBQ1QsT0FBTyxxREFBcUQ7QUFBQSxHQUM5RDtBQUFBO0FBQUEsY0EyQlk7QUFBQSxJQUNWLDhCQUErQjtBQUFBLElBQy9CO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGNBS1k7QUFBQSxJQUNWLDhCQUErQjtBQUFBLElBQy9CO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsY0FLWTtBQUFBLElBQ1YsOEJBQStCO0FBQUEsWUFDdkI7QUFBQSxJQUNSLFlBQVcsZUFBaUI7QUFBQSxJQUM1QixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSVhqbEJFLGlEQUFpRDtBQUFBLEdBQ25EO0FBQUE7QUFBQSxJWUdFO0FBQUEsS0FDRTtBQUFBLElBQ0Y7QUFBQSxLQUNFO0FBQUEsSUFDRixjQUFlLFFBQVE7QUFBQSxlQUNaLHlCQUNBO0FBQUEsSUFDWCxpQ0FDRTtBQUFBLElBRUYsaUNBQ0U7QUFBQSxnQkFFVTtBQUFBLElBQ1o7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQTZDRTtBQUFBLEtBQ0U7QUFBQSxJQUNGLGNBQWUsUUFBUTtBQUFBLGVBQ1o7QUFBQSxJQUNYLGlDQUNFO0FBQUEsSUFFRixnQkFBaUIsOEJBQ2Y7QUFBQSxnQkFFVTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBakNFO0FBQUEsS0FDRTtBQUFBLElBQ0YsY0FBZSxRQUFRO0FBQUEsZUFDWjtBQUFBLElBQ1gsZ0JBQWlCLDRCQUNmO0FBQUEsSUFFRixpQ0FDRTtBQUFBLGdCQUVVO0FBQUEsSUFDWjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBaENFO0FBQUEsS0FDRTtBQUFBLElBQ0YsY0FBZSxRQUFRO0FBQUEsZUFDWjtBQUFBLElBQ1gsZ0JBQWlCLDZCQUNmO0FBQUEsSUFFRixpQ0FDRTtBQUFBLGdCQUVVO0FBQUEsSUFDWjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBL0NFLFlBQVc7QUFBQSxhQUNELGlDQUNBO0FBQUEsS0FDUixVQUFXLFVBQVM7QUFBQSxLQUNwQixVQUFXLFFBQVE7QUFBQTtBQUFBLElBRXJCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQ3VRRSxNQUFNO0FBQUEsSUFDTixvQkFDRTtBQUFBLElBRUYsT0FBTywwQkFBMEI7QUFBQSxHQUNuQztBQUFBO0FBQUEsWUFRVTtBQUFBLElBQ1IsT0FBTyw2QkFBNkI7QUFBQSxHQUN0QztBQUFBO0FBQUEsZ0JBT2M7QUFBQSxJQUNaLFFBQVE7QUFBQSxJQUNSO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsY0FtQlk7QUFBQSxJQUNWO0FBQUEsSUFDQSxPQUFPLCtCQUErQjtBQUFBLEdBQ3hDO0FBQUE7QUFBQSxJakJpTkUsZ0JBQWdCO0FBQUEsSUFDaEIsUUFBUTtBQUFBLEdBQ1Y7QUFBQSw0QndCcFpFLDRDQUFnRCxDQUNsRDtBQUFBLGdDeEIwZTZCO0FBQUE7QUFBQSxJQVEzQixHQUFJLGtCQUFrQixRQUFRO0FBQUE7QUFBQTtBQUFBLE9BQ3hCO0FBQUEsVUFFQTtBQUFBLFVBQ0E7QUFBQSxJQUNOLFlBQVcsc0JBQXdCLE9BQzFCO0FBQUEsSUFFVCxPQUFPLDJCQUEyQjtBQUFBLEdBQ3BDO0FBQUE7QUFBQSxZSzVhUSxVQUNFO0FBQUEsSUFDUjtBQUFBLEtBQVUsWUFDRztBQUFBLGdCQUNEO0FBQUEsTUFDUixNQUFNO0FBQUEsTUFDTixFQUFFO0FBQUE7QUFBQSxJQUdOO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUxvTEUsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osOENBQTZDO0FBQUEsR0FDL0M7QUFBQTtBQUFBLElBS0UsY0FBZSxRQUFRO0FBQUEsSUFDdkIsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osNEJBQTRCO0FBQUEsR0FDOUI7QUFBQTtBQUFBLElBaFdFO0FBQUE7QUFBQSxPQUVJLE9BQU8saUJBQWlCO0FBQUE7QUFBQSxPQUV4QixvQkFBcUIsUUFBUSxFQUM3QixPQUFPLGlCQUFpQjtBQUFBO0FBQUEsT0FFeEIsYUFBYTtBQUFBO0FBQUEsR0FFbkI7QUFBQTtBQUFBLElBNkdFLG1CQUFvQjtBQUFBLElBQ3BCLE9BQU8sMkJBQTJCO0FBQUEsR0FDcEM7QUFBQTtBQUFBLElBM0RFLHVCQUF3QjtBQUFBO0FBQUEsVUFDZjtBQUFBLFVBQ0Y7QUFBQSxJQUNQLG1CQUFxQjtBQUFBLEdBQ3ZCO0FBQUE7QUFBQSxJQWlCRSx1QkFBd0I7QUFBQTtBQUFBLFVBQ2Y7QUFBQSxVQUNGO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxJQUNQLHlDQUErQztBQUFBLEdBQ2pEO0FBQUE7QUFBQSxJQW1CRSx1QkFBd0I7QUFBQSxZQUNoQjtBQUFBLElBQ1IsWUFBVyxlQUFpQixXQUNmO0FBQUEsSUFFYixPQUFPLHNCQUFzQjtBQUFBLEdBQy9CO0FBQUE7QUFBQSxJQWdRRSxZQUFZO0FBQUEsSUFDWixZQUFZO0FBQUEsSUFDWiwyQkFBMkI7QUFBQSxHQUM3QjtBQUFBLDRDQWtCRSxPQUFPLDRCQUE0QjtBQUFBLEdBQ3JDO0FBQUE7QUFBQSxJQWRFLFlBQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxJQUNaLDBCQUEwQjtBQUFBLEdBQzVCO0FBQUEsMkNBc0JFLE9BQU8sMkJBQTJCO0FBQUEsR0FDcEM7QUFBQSx3Q0F4Q0UsV0FBVyx3QkFBd0IsQ0FDckM7QUFBQTtBQUFBLElBNUtFLEdBQUk7QUFBQSxLQUFrQixPQUNiLDJCQUEyQjtBQUFBO0FBQUEsYUFFMUI7QUFBQSxLQUNSLE9BQU8sMkJBQTJCO0FBQUE7QUFBQSxHQUV0QztBQUFBO0FBQUEsSUExREUsdUJBQXdCO0FBQUEsYUFDakIsc0JBQ0Y7QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBS0UsdUJBQXdCO0FBQUE7QUFBQSxVQUNqQjtBQUFBLFVBQ0Y7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQU1FLHVCQUF3QjtBQUFBLFlBQ2hCO0FBQUEsSUFDUixZQUFXLGVBQ1Q7QUFBQSxJQUVGLFFBQVE7QUFBQSxHQUNWO0FBQUEsdUJNM0xrQjtBQUFBLCtCYXlOaEIsT0FBTyxZQUFZLENBQ3JCO0FBQUE7QUFBQTtBQUFBLE1qQnRLSSxXQUFXO0FBQUEsTUFDWCxjQUFjO0FBQUEsS0FGaEI7QUFBQSxtQkFNRSwyQkFERjtBQUFBLGlCQUtFLE9BQU8sb0JBQW9CLENBRDdCO0FBQUE7QUFBQSxNQUtFLGVBQWdCO0FBQUEsTUFDaEIsT0FBTyx5QkFBeUI7QUFBQSxLQUZsQztBQUFBLFdBTUUsT0FBTyxvQkFBb0IsQ0FEN0I7QUFBQTtBQUFBLDBCQUtxQjtBQUFBLG9DQUtyQixPQUFPLHdCQUF3QixDQUNqQztBQUFBO0FBQUEsZUFzR2E7QUFBQSxJQUNYLGNBQWM7QUFBQSxHQUNoQjtBQUFBO0FBQUEsSW9CaEZFLG9DQUFxQztBQUFBLElBQ3JDLFlBQVk7QUFBQSxHQUNkO0FBQUE7QUFBQSxJSGxDRSxHQUFJO0FBQUEsS0FDRixHQUFJLHdDQUF3QyxRQUFRO0FBQUEsS0FDcEQsWUFBYSxRQUFRO0FBQUEsS0FDckIsUUFBUTtBQUFBO0FBQUEsSUFFVixPQUFPLHVCQUF1QjtBQUFBLEdBQ2hDO0FBQUEsd0NDOEhFLHdCQUF3QixDQUMxQjtBQUFBLCtDbkJwRUUsYUFDQSxPQUFPLGdCQUFnQjtBQUFBLEdBQ3pCO0FBQUE7QUFBQSxJQUtFLE9BQVE7QUFBQTtBQUFBLE9BRUosYUFDQSxPQUFPLGdCQUFnQjtBQUFBO0FBQUEsT0FFdkIsOERBQ0E7QUFBQSxlQUVBO0FBQUE7QUFBQSxHQUVOO0FBQUE7QUFBQSxZQWxDVTtBQUFBLElBQ1IsWUFBVyxlQUFpQixPQUFPO0FBQUEsSUFDbkM7QUFBQSxJQUNBLE9BQU8sc0JBQXNCO0FBQUEsR0FDL0I7QUFBQTtBQUFBLFlBS1U7QUFBQSxJQUNSLFlBQVcsZUFBaUI7QUFBQSxJQUM1QjtBQUFBLElBQ0E7QUFBQSxHQUNGO0FBQUEsNkNVbURFLE9BQU8sWUFBWSxDQUNyQjtBQUFBLCtCQW1ORSxPQUFPLFdBQVcsUUFBUSxDQUM1QjtBQUFBO0FBQUE7QUFBQSxNVjdPb0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBa0JkLE9BQU8sNENBQTRDO0FBQUEsUUFEeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQVNYLE9BQU8sNENBQTRDO0FBQUEsUUFEeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEl5QnZOZjtBQUFBLG9EQUVDO0FBQUEsR0FDSDtBQUFBO0FBQUEsZUFLYTtBQUFBLElBQ1g7QUFBQSxhQUNRLFdBQWEsMkJBQTJCO0FBQUEsS0FDOUMsWUFBYSxpQkFBaUIsV0FBVztBQUFBLEtBQ3pDLEdBQUksbUJBQWtCLFVBQVM7QUFBQSxLQUMvQixrQkFBbUIsWUFBWTtBQUFBO0FBQUEsSUFFakMsV0FBVztBQUFBLEdBQ2I7QUFBQTtBQUFBLElBL0NFO0FBQUEsS0FDRSxXQUFXO0FBQUEsWUFDSjtBQUFBLEtBQ1AsVUFBVTtBQUFBLFlBQ0g7QUFBQSxLQUNQLFdBQVc7QUFBQSxZQUNKLGtFQUVDLFVBR1IsNEJBQTRCO0FBQUE7QUFBQSxLQUU1QixZQUFZO0FBQUE7QUFBQSxLQUVaLFlBQVk7QUFBQTtBQUFBLEtBRVosV0FBVztBQUFBO0FBQUEsS0FFWCxXQUFXO0FBQUE7QUFBQSxLQUVYLFdBQVc7QUFBQTtBQUFBLEtBRVgsV0FBVztBQUFBLG1DQUNtQixXQUFXO0FBQUEsSUFDM0MsV0FBVztBQUFBLEdBQ2I7QUFBQTtBQUFBLElBMk5FLFVBQVcsVUFBUztBQUFBLElBQ3BCLFlBQWEsUUFBUTtBQUFBLElBQ3JCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJMUJpVkUsc0NBQXFDO0FBQUEsR0FDdkM7QUFBQTtBQUFBLGdCMEJsaEJZO0FBQUEsSUFDVjtBQUFBLEtBQ0U7QUFBQSxrQkFDYztBQUFBLE1BRVosa0JBQ0UsVUFDQTtBQUFBLGtCQUdVO0FBQUEsTUFFWixrQkFDRSxVQUNBO0FBQUEsTUFJRjtBQUFBLE9BQ0U7QUFBQSxRQUNFO0FBQUEsU0FBb0IsT0FFWCxnREFBK0M7QUFBQSxRQUV4RCxVQUFTO0FBQUE7QUFBQSxPQUVYO0FBQUEsUUFDRTtBQUFBLFNBQW9CLE9BRVgsOENBQThDO0FBQUEsUUFFdkQsUUFBUTtBQUFBO0FBQUEsT0FFViw4QkFBNkI7QUFBQTtBQUFBLE1BRy9CO0FBQUE7QUFBQSxTQUlJLG9EQUNBO0FBQUE7QUFBQSxpQkFFUTtBQUFBLFNBQ1IsWUFBYSxRQUFRO0FBQUEsU0FDckI7QUFBQTtBQUFBLFNBR0Esb0RBQ0E7QUFBQTtBQUFBLFNBR0E7QUFBQSxTQUNBO0FBQUE7QUFBQSxTQUVBLGdEQUNBO0FBQUE7QUFBQSxTQUVBO0FBQUEsa0JBQ1U7QUFBQSxVQUNSLFlBQWEsUUFBUTtBQUFBO0FBQUEsU0FFdkI7QUFBQTtBQUFBLFNBR0E7QUFBQSxTQUNBO0FBQUE7QUFBQSxTQUdBO0FBQUE7QUFBQSxTQUdBO0FBQUE7QUFBQSxTQUVBO0FBQUEsU0FDQTtBQUFBO0FBQUEsU0FFQSxvREFDQTtBQUFBO0FBQUEsb0JBRVc7QUFBQSxTQUNYLFlBQWE7QUFBQSxVQUFnQyw4Q0FDRTtBQUFBLFNBRS9DLFdBQVc7QUFBQSxpQkFDSDtBQUFBLFNBQ1IsR0FBSSxpQkFBaUIsc0JBRUU7QUFBQSxTQUV2QixrQkFBbUIsVUFFUjtBQUFBLFNBRVgsWUFBYSxZQUFZO0FBQUEsU0FDekI7QUFBQTtBQUFBLGlCQUVRO0FBQUEsU0FDUixHQUFJLGlCQUFpQixzQkFFRTtBQUFBLFNBRXZCLGtCQUFtQixVQUVSO0FBQUEsU0FFWCxZQUFhLFlBQVk7QUFBQSxTQUN6QjtBQUFBO0FBQUEsU0FFQTtBQUFBLFNBQ0E7QUFBQSxTQUNBLFVBQVcsVUFBUztBQUFBLFNBQ3BCLFVBQVcsUUFBUTtBQUFBLFNBQ25CO0FBQUEsVUFDRSxZQUFZLGlCQUFpQjtBQUFBLFVBQzdCLEtBQUssaUJBQWlCLFFBQVE7QUFBQSxVQUM5QixLQUFLLGlCQUFpQixVQUFTO0FBQUE7QUFBQSxTQUVqQztBQUFBO0FBQUEsU0FhQSxVQUFXLFVBQVM7QUFBQSxTQUNwQixVQUFXLFFBQVE7QUFBQSxTQUNuQixZQUFhLDZCQUNrQjtBQUFBLFNBRS9CO0FBQUE7QUFBQSxTQUVBLFlBQWEsNkJBQ2tCLEVBRS9CO0FBQUE7QUFBQSxpQkFFUSwrQkFDQTtBQUFBLFNBQ1IsWUFDRSxVQUFXLFVBQVMsRUFDcEIsVUFBVyxRQUFRO0FBQUEsU0FFckI7QUFBQTtBQUFBLGlCQUVRLGtCQUNBO0FBQUEsU0FDUixZQUNFLFVBQVcsVUFBUyxFQUNwQixVQUFXLFFBQVE7QUFBQSxTQUVyQjtBQUFBO0FBQUEsU0FFQSxHQUFJO0FBQUEsVUFDRjtBQUFBLFVBQ0E7QUFBQTtBQUFBLFNBRUYsMEJBQTJCLG9DQUFtQztBQUFBLFNBQzlELGlCQUFrQjtBQUFBLFNBQ2xCO0FBQUE7QUFBQTtBQUFBLEtBR04sdUJBQXdCLFFBQVE7QUFBQSxhQUN4QjtBQUFBLEtBQ1IsSUFBSTtBQUFBLEtBQ0osSUFBSTtBQUFBLEtBQ0oscUJBQXNCO0FBQUEsS0FDdEI7QUFBQSxLQUNBO0FBQUE7QUFBQSxHQUVKO0FBQUEsK0JBTUUsT0FBTyw0QkFBNEIsQ0FDckM7QUFBQTtBQUFBLGdCTGRZO0FBQUEsSUFDVjtBQUFBLElBQ0EsWUFBWTtBQUFBLEdBQ2Q7QUFBQTtBQUFBO0FBQUEsZ0JBV2M7QUFBQSxJQUNaLGdCQUFpQixZQUFZO0FBQUEsZUFDcEI7QUFBQSxJQUNUO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFlBQVk7QUFBQSxHQUNkO0FBQUEseUNqQnpNRSxVQUFVLENBQ1o7QUFBQTtBQUFBLElBMEJFO0FBQUEsR0FDRjtBQUFBO0FBQUEsSWVxSUUsWUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLElBQ0osc0JBQXFCO0FBQUEsR0FDdkI7QUFBQSwrQkFtQ0UsT0FBTyxZQUFZLENBQ3JCO0FBQUE7QUFBQSxJTC9PRSx1REFBdUQ7QUFBQSxHQUN6RDtBQUFBO0FBQUE7QUFBQSxLTDRCSSxHQUFJLHdCQUF3QixZQUFZLGNBQWM7QUFBQSxLQUN0RCxNQUFNO0FBQUEsSUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSW9CO0FBQUEsZUFFTDtBQUFBLGVBQ0Y7QUFBQSxjQUNELHFCQUF1QjtBQUFBLEtBR2pDO0FBQUEsaUJBQ1csdUJBQ0Q7QUFBQSxNQUNSLGNBQWMscUNBQXFDO0FBQUE7QUFBQSxLQUVyRCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0Esb0NBQW9DO0FBQUEsR0FDdEM7QUFBQSwwQkFDdUI7QUFBQTtBQUFBLElBdERyQixPQUFPLDJDQUEwQztBQUFBLEdBQ25EO0FBQUEsR0FJQSxHQUFJO0FBQUEsMkJBQ3FCO0FBQUE7QUFBQSwyQkFDQztBQUFBLEdBQzFCLG1CQUFtQjtBQUFBO0FBQUEsSUFvRGpCLE9BQU87QUFBQSxJQUNQLEtBQUssd0JBQXdCO0FBQUE7QUFBQSxhQUNqQjtBQUFBLFlBQ0Q7QUFBQSxhQUNEO0FBQUEsSUFDVixZQUFXO0FBQUEsS0FBMkI7QUFBQTtBQUFBLFFBR2hDLGFBQ0E7QUFBQSxpQkFFQTtBQUFBLGdCQUVBO0FBQUEsZ0JBRUEscUJBQ0E7QUFBQTtBQUFBLElBR047QUFBQSxJQUNBO0FBQUEsSUFDQSxZQUFZO0FBQUEsR0FDZDtBQUFBO0FBQUEsWUFyRVU7QUFBQSxJQUNSLFFBQVEsTUFBTTtBQUFBLElBQ2QsaUJBQWlCO0FBQUEsR0FDbkI7QUFBQTtBQUFBO0FBQUEsTUFLRTtBQUFBLFNBQ0E7QUFBQSx1QkFnRW1CO0FBQUEsR0FDckIsR0FBSTtBQUFBLElBQ0Y7QUFBQSxnQ0FFVTtBQUFBO0FBQUEsSUFHVjtBQUFBLGdDQUVVO0FBQUEsR0FHWjtBQUFBLGdDQUVVO0FBQUE7QUFBQTtBQUFBLFlBaUJHO0FBQUEsWUFDQTtBQUFBLGtCQUNNO0FBQUE7QUFBQSxJQUVqQixZQUFXO0FBQUEsYUFDSDtBQUFBLEtBQ047QUFBQSxPQUNFO0FBQUE7QUFBQSxNQUdBO0FBQUE7QUFBQTtBQUFBLGNBR1E7QUFBQTtBQUFBLElBR1osWUFBWTtBQUFBLGdCQUNDO0FBQUEsS0FDWCxHQUFRO0FBQUEsY0FDQSxxQkFBd0I7QUFBQSxNQUM5QjtBQUFBLE1BQ0E7QUFBQTtBQUFBO0FBQUEsY0FHUTtBQUFBO0FBQUE7QUFBQSxJQUlaLFFBQVMsVUFBVTtBQUFBLElBQ25CO0FBQUEsR0FDRjtBQUFBO0FBQUEsZUFzS2E7QUFBQSxJQUNYLDJCQUEyQjtBQUFBLElBQzNCO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBLHFDVCtDRSx1Q0FDRjtBQUFBLGlDMkJsWTRCO0FBQUE7QUFBQSxJUGlTMUIsT0FBTyw0Q0FBNEM7QUFBQSxHQUNyRDtBQUFBO0FBQUE7QUFBQSxNUWxTc0I7QUFBQTtBQUFBLGNBRWI7QUFBQSxjQUNGO0FBQUEsZUFDQztBQUFBLGVBQ0E7QUFBQSxlQUNBO0FBQUE7QUFBQSxTQUVKLHVCQUF3QixPQUFPLGdDQUFnQztBQUFBLFNBQy9ELHVCQUF3QjtBQUFBLFNBQ3hCLDhCQUErQjtBQUFBLGlCQUN2QjtBQUFBLFNBQ1IsTUFBTTtBQUFBLFNBQ04sUUFBUTtBQUFBLFFBTkE7QUFBQTtBQUFBLFNBU1Isc0JBQXVCLE9BQU8sa0NBQWtDO0FBQUEsU0FDaEUsdUJBQXdCO0FBQUEsU0FDeEIsOEJBQStCO0FBQUEsU0FDL0Isa0JBQW1CO0FBQUEsU0FDbkIsUUFBUTtBQUFBLFFBTEM7QUFBQTtBQUFBLFNBUVQ7QUFBQSxVQUNFLE9BQU8sd0NBQXdDO0FBQUEsU0FDakQsdUJBQXdCO0FBQUEsU0FDeEIsOEJBQStCO0FBQUEsU0FDL0IsYUFBYztBQUFBLFFBTE47QUFBQTtBQUFBO0FBQUEsV0FhSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQVNHO0FBQUEsU0FDUjtBQUFBLFNBQ0EsU0FBUztBQUFBLFNBQ1QsUUFBUTtBQUFBLFFBSkE7QUFBQTtBQUFBLGlCQU9GLE9BQ0Y7QUFBQSxTQUNKLGtCQUFtQjtBQUFBLFNBQ25CLFFBQVE7QUFBQSxRQUpEO0FBQUE7QUFBQSxTQU9QLHFFQUEyRTtBQUFBLFFBRHBFO0FBQUE7QUFBQSxrQkFLQTtBQUFBLFNBQ1A7QUFBQTtBQUFBLGlCQUVVO0FBQUEsZ0JBRUQ7QUFBQSxnQkFDRjtBQUFBLGdCQUNBO0FBQUEsaUJBQ0M7QUFBQSxVQUNOLFlBQWE7QUFBQSxtQkFFTixhQUVBLHdCQUVFO0FBQUEsVUFDVDtBQUFBO0FBQUEsaUJBRVE7QUFBQSxpQkFFRTtBQUFBLGdCQUVIO0FBQUEsVUFDUDtBQUFBLG9CQUVTO0FBQUEsV0FDUDtBQUFBO0FBQUEsVUFFRixvQkFBcUI7QUFBQSxvQkFDWDtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0NBS3dCO0FBQUE7QUFBQSxxQkFFbkI7QUFBQTtBQUFBO0FBQUEscUJBR0EscUJBQ0o7QUFBQTtBQUFBO0FBQUEsVUFDb0QsT0FFOUMsY0FBYztBQUFBLFNBRXZCO0FBQUEsUUFoRFM7QUFBQTtBQUFBLG9CQW9EQTtBQUFBLFNBQ1Q7QUFBQSxTQUNBLGVBQWU7QUFBQSxRQUhQO0FBQUE7QUFBQSxvQkFRQyxvQkFFRjtBQUFBLFNBQ1AsYUFBYztBQUFBO0FBQUEsZUFFUDtBQUFBLGtCQUVHO0FBQUEsZ0JBQ0o7QUFBQSxlQUNEO0FBQUEsY0FDRDtBQUFBLGVBQ0M7QUFBQSxnQkFFSztBQUFBLGlCQUNDO0FBQUEsbUJBRUU7QUFBQSxtQkFDQTtBQUFBLGdCQUNMO0FBQUEsaUJBQ0c7QUFBQSxrQkFDQztBQUFBLFNBQ1o7QUFBQTtBQUFBLGtCQUNhO0FBQUEsaUJBQ0g7QUFBQSxpQkFFQTtBQUFBO0FBQUEsYUFDQTtBQUFBO0FBQUEsb0JBS0c7QUFBQSxpQkFFSDtBQUFBLGtCQUVDO0FBQUEsVUFDVDtBQUFBLFdBQWdCO0FBQUEsZUFFZCxrQkFDQSxpQkFBa0I7QUFBQSxVQUVwQjtBQUFBLFVBQ0EsZ0JBQ0UsY0FDQSx3QkFDSztBQUFBLFVBQ1A7QUFBQSxXQUFVO0FBQUEsc0JBR0U7QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBSU4sdUJBQXdCO0FBQUEsc0JBQ2IsV0FFRCxtQ0FFQTtBQUFBLFNBQ1YsWUFBVztBQUFBLG1CQUNGO0FBQUEsVUFDUCxXQUNFLGtCQUNBO0FBQUEsVUFHRjtBQUFBLFdBQ0U7QUFBQSxXQUNBLEdBQUc7QUFBQTtBQUFBO0FBQUEsU0FNUCxXQUFZO0FBQUEsU0FDWjtBQUFBLG1CQUVTLHdCQUVBLGdCQUFtQjtBQUFBLFVBQzFCO0FBQUE7QUFBQSxTQUVGLDZEQVFDO0FBQUEsUUEvRlE7QUFBQTtBQUFBO0FBQUEsY0FvR0g7QUFBQSxlQUNEO0FBQUEsZ0JBRUs7QUFBQSxlQUNMO0FBQUEsZUFFSTtBQUFBLGVBRUE7QUFBQSxlQUVBO0FBQUEsU0FFVDtBQUFBLG1CQUVXLDRCQUNILGFBQ0E7QUFBQSxVQUNOO0FBQUEscUJBQ1MsZUFFRjtBQUFBLFVBQ1AsU0FBUztBQUFBO0FBQUEsaUJBRUQ7QUFBQSxpQkFDRjtBQUFBLGtCQUNDO0FBQUEsa0JBQ0E7QUFBQSxrQkFHRSxrQkFBb0I7QUFBQSxVQUM3QjtBQUFBLFdBQ0U7QUFBQSxXQUNBLGdCQUFpQjtBQUFBLHFCQUNUO0FBQUEsV0FDUjtBQUFBO0FBQUEsV0FFQTtBQUFBLFdBQ0E7QUFBQSxXQUNBLGdCQUFpQjtBQUFBLFdBQ2pCO0FBQUEsV0FDQTtBQUFBO0FBQUEsV0FFQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQTtBQUFBLFVBRUYsZUFBZ0I7QUFBQTtBQUFBO0FBQUEsVUFFaEI7QUFBQSxVQUNBO0FBQUEsc0JBQ1c7QUFBQSxXQUNUO0FBQUEsV0FDQTtBQUFBO0FBQUEsVUFFRjtBQUFBO0FBQUEsbUJBR007QUFBQSxTQUNSO0FBQUEsbUJBQ1M7QUFBQSxVQUVQLFlBQWE7QUFBQSxVQUNiO0FBQUE7QUFBQSxrQkFHTyxtQkFFRixlQUVDO0FBQUEsU0FFUixrQkFBcUI7QUFBQSxTQUNyQixXQUFXO0FBQUEsU0FDWDtBQUFBLG1CQUNTO0FBQUEsVUFDUDtBQUFBO0FBQUE7QUFBQSxpQkFHUztBQUFBLGlCQUVBO0FBQUEsZUFDSjtBQUFBLFNBQ1A7QUFBQSxTQUNBO0FBQUEsbUJBQ1M7QUFBQSxVQUNQO0FBQUE7QUFBQSxTQUVGLGlCQUFrQjtBQUFBLFNBQ2xCO0FBQUEscUJBQ1c7QUFBQSxVQUNUO0FBQUEsc0JBQ1c7QUFBQSxXQUNUO0FBQUE7QUFBQTtBQUFBLFNBR0osb0NBT0M7QUFBQSxRQTFHTztBQUFBO0FBQUE7QUFBQSxXQStHZTtBQUFBLGNBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQVFTO0FBQUEsY0FDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQVFVO0FBQUEsY0FDVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBTU4sZUFDRDtBQUFBLFNBQ1AsWUFBVyxpQkFDVCxXQUNBO0FBQUEsU0FFRixTQUFTO0FBQUEsUUFQQTtBQUFBO0FBQUE7QUFBQSxXQVVjO0FBQUE7QUFBQSxhQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBT1M7QUFBQTtBQUFBLFdBRUQ7QUFBQTtBQUFBLGFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBUVM7QUFBQTtBQUFBO0FBQUEsZ0JBR2hCO0FBQUEsZUFDSDtBQUFBLGVBQ0E7QUFBQSxnQkFDQztBQUFBLGVBQ0Q7QUFBQSxTQUNMLFNBQVM7QUFBQTtBQUFBLGVBQ0Y7QUFBQSxnQkFDRDtBQUFBLGdCQUNBLGlCQUFtQjtBQUFBLGNBQ3JCO0FBQUEsU0FDSjtBQUFBO0FBQUEsaUJBQ1U7QUFBQTtBQUFBLGFBQ0E7QUFBQSxVQUVSO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQTtBQUFBLFNBRUYsK0JBQWdDO0FBQUEsUUFuQnhCO0FBQUE7QUFBQTtBQUFBLGVBd0JEO0FBQUEsZUFDQTtBQUFBLGdCQUNEO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLFNBQ047QUFBQSxXQUNFO0FBQUEsV0FDQTtBQUFBO0FBQUEsU0FHRjtBQUFBLFdBQ0U7QUFBQSxXQUNBO0FBQUE7QUFBQSxTQUdGO0FBQUEsV0FDRTtBQUFBLFdBQ0E7QUFBQTtBQUFBLFNBR0YsSUFBSSxrQkFBa0I7QUFBQSxRQXJCYjtBQUFBO0FBQUEsc0JBMEJGLFdBRUEsaUJBQ0M7QUFBQSxTQUNSO0FBQUE7QUFBQSxlQUNPO0FBQUEsZ0JBRUM7QUFBQSxTQUNSO0FBQUEsVUFDRSxxQkFBc0IsTUFBTTtBQUFBLFVBQzVCO0FBQUEsVUFDQSxRQUNFLHNDQUNBLFVBQVU7QUFBQSxVQUVaLE9BQU8sS0FBSyxvQkFBb0I7QUFBQTtBQUFBLFNBRWxDLHFCQUFzQixNQUFNO0FBQUEsU0FDNUI7QUFBQSxVQUNFO0FBQUEsVUFDQTtBQUFBLFdBQ0UsUUFBUTtBQUFBLFdBQ1I7QUFBQSxXQUNBLFVBQVU7QUFBQTtBQUFBLFVBRVosT0FBTyxpQkFBaUI7QUFBQTtBQUFBLFNBRTFCO0FBQUE7QUFBQSxnQkFFUztBQUFBLGlCQUNEO0FBQUEsZ0JBQ0Q7QUFBQSxpQkFFRztBQUFBLGlCQUNGO0FBQUEsZ0JBQ0Q7QUFBQSxVQUNMO0FBQUEsV0FBYTtBQUFBLFlBQ0M7QUFBQTtBQUFBLFlBQ1A7QUFBQTtBQUFBLFdBRUw7QUFBQSxXQUNBO0FBQUEsWUFDRTtBQUFBO0FBQUEsWUFHQTtBQUFBO0FBQUE7QUFBQSxZQUdBO0FBQUE7QUFBQTtBQUFBLFVBR0o7QUFBQTtBQUFBLGlCQUVRLE1BQVEsa0NBQWtDO0FBQUEsaUJBRTFDO0FBQUEsVUFDUjtBQUFBLFdBQWUsUUFBUTtBQUFBO0FBQUEsV0FDSDtBQUFBO0FBQUEsb0JBR1g7QUFBQSxXQUNQO0FBQUEsc0JBQ1k7QUFBQSxZQUVWO0FBQUEsWUFDQTtBQUFBO0FBQUEseUJBQ2M7QUFBQSxXQUNoQjtBQUFBLGFBQWtCLDZCQUErQjtBQUFBO0FBQUEsbUJBRzVDO0FBQUEsVUFDUDtBQUFBLFdBQ0U7QUFBQSxZQUFnQjtBQUFBLDZCQUNHO0FBQUEscUJBRVg7QUFBQSxXQUNSLFlBQWE7QUFBQSxxQkFDTDtBQUFBLFdBQ1IsWUFBVztBQUFBLHFCQUNGO0FBQUEsWUFDUDtBQUFBLHdCQUVhO0FBQUEsYUFDWDtBQUFBLGtCQUNLO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBR2MsS0FFYjtBQUFBLDhCQUVOLFdBQVcsUUFDWDtBQUFBO0FBQUE7QUFBQSxpQkFHRztBQUFBLGtCQUNEO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBLGlCQUNDO0FBQUEsV0FDUCxTQUFTO0FBQUE7QUFBQSxtQkFDQSxpQkFBbUI7QUFBQSxrQkFDdEI7QUFBQSxtQkFDQztBQUFBO0FBQUEsY0FDQztBQUFBLFdBRVI7QUFBQTtBQUFBO0FBQUEsY0FDUTtBQUFBLFdBRVI7QUFBQTtBQUFBO0FBQUEsY0FDUTtBQUFBLFdBRVI7QUFBQTtBQUFBLG1CQUNVO0FBQUEsb0JBQ0M7QUFBQSxtQkFDRDtBQUFBLG9CQUNDO0FBQUEsbUJBQ0Q7QUFBQSxvQkFDQztBQUFBLFlBQ1Q7QUFBQTtBQUFBLG1CQUNRO0FBQUE7QUFBQSxlQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBUVI7QUFBQTtBQUFBO0FBQUEsZUFDTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFLUDtBQUFBO0FBQUE7QUFBQSxlQUNPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUtQO0FBQUEsWUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBSUE7QUFBQSxZQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJQTtBQUFBLFlBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlBO0FBQUEsYUFDRTtBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBQUE7QUFBQTtBQUFBLHVCQUVRO0FBQUEsYUFDUjtBQUFBLGNBQ0U7QUFBQSxjQUNBLFlBQWE7QUFBQSxjQUNiO0FBQUEsY0FDQTtBQUFBO0FBQUE7QUFBQSxjQUNLO0FBQUE7QUFBQSxZQUVULFlBQVcsZ0JBQWtCO0FBQUEsWUFHN0I7QUFBQSx1QkFDUztBQUFBLFlBQ1Q7QUFBQSx1QkFDVSxhQUNEO0FBQUEsYUFDUCxhQUFjO0FBQUEsYUFDZCxZQUFXLGlCQUFtQjtBQUFBLGFBRzlCO0FBQUE7QUFBQSxZQUVGLFlBQVcsZ0JBQWtCO0FBQUEsWUFHN0I7QUFBQTtBQUFBLFdBRUY7QUFBQSxZQUFrQix3QkFDUztBQUFBO0FBQUEsWUFHcEI7QUFBQSxXQUNQLFFBQVMsbUJBQ0osTUFBTTtBQUFBO0FBQUE7QUFBQSxXQUdUO0FBQUEsV0FDQSxRQUFTLFlBQ0ksaUJBQW1CO0FBQUE7QUFBQSx1QkFJbEIsTUFBTTtBQUFBLFVBRXhCO0FBQUEsVUFDQSxVQUFVO0FBQUE7QUFBQSxTQUVaO0FBQUEsUUFwTlE7QUFBQTtBQUFBLFNBd05SLHNCQUF1QixjQUFjO0FBQUEsbUJBQzNCO0FBQUEsU0FDVixZQUFXLE9BQU87QUFBQSxvQkFDUjtBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUE7QUFBQSxTQUVGLFVBQVU7QUFBQSxRQVJGO0FBQUEsUUFtQlY7QUFBQSxrQkFDUyxVQUNBLFNBQ0YsY0FDQTtBQUFBLFNBQ0w7QUFBQSxtQkFDVztBQUFBLFVBQ1Q7QUFBQSxXQUNFO0FBQUEsWUFDRTtBQUFBLFlBQ0EseUJBQ0UsdUJBQ0E7QUFBQTtBQUFBLGdCQUdGLGdCQUNBO0FBQUEsV0FFRjtBQUFBLHNCQUNZO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVjtBQUFBLGFBQVM7QUFBQTtBQUFBLGFBRVA7QUFBQSxhQUNBO0FBQUEsYUFDQTtBQUFBLGFBQ0E7QUFBQTtBQUFBO0FBQUEsV0FHSjtBQUFBO0FBQUE7QUFBQSxXQUNLO0FBQUEsVUFDUCxNQUFNO0FBQUE7QUFBQSxTQUVSLE9BQU8sYUFBYSxDQWpDZixDQWtDTjtBQUFBLE9BdnJCb0I7QUFBQSxPQUFEO0FBQUEsNEJBNHNCSTtBQUFBO0FBQUEsSUoxakJ4QixZQUFhO0FBQUEsSUFDYixnQkFBa0I7QUFBQSxHQUNwQjtBQUFBLHlCRHBKb0I7QUFBQTtBQUFBLElBYWxCLDRCQUE2QixRQUFRO0FBQUEsSUFDckM7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUEsdUNBTUUsc0JBQXNCLENBQ3hCO0FBQUEsbUNBakJFLG9CQUNGO0FBQUEsd0JBOEdtQjtBQUFBLG9DWHZGakIsa0JBQ0EsUUFBUSxDQUNWO0FBQUEsZ0NXNEYyQjtBQUFBO0FBQUEsYUFFbEIsZ0NBQ0M7QUFBQSxJQUNSO0FBQUEsY0FDVTtBQUFBLElBQ1Y7QUFBQSxJQUNBO0FBQUEsSUFFQTtBQUFBLElBQ0EsU0FBUztBQUFBLEdBQ1g7QUFBQTtBQUFBLHFCTTdHbUI7QUFBQSw0QkFITztBQUFBLDJCQUhEO0FBQUE7QUFBQSxlQTJJZDtBQUFBLElBQ1QsNEJBQTZCLFFBQVE7QUFBQSxJQUNyQyxZQUFXO0FBQUEsYUFDSDtBQUFBLEtBQ047QUFBQSxjQUNVO0FBQUEsTUFDUjtBQUFBLE9BQ0U7QUFBQSxPQUNBO0FBQUEsT0FDQSxRQUFRO0FBQUE7QUFBQSxNQUVWO0FBQUEsT0FDRSxPQUFPO0FBQUEsT0FDUDtBQUFBLFFBQ0U7QUFBQSxRQUNBLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2hCLGdCQUFnQjtBQUFBLEdBQ2xCO0FBQUE7QUFBQSxJQStDRTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBaENFLFlBQVc7QUFBQSxhQUNIO0FBQUEsS0FDTjtBQUFBLGNBQ1U7QUFBQSxNQUNSLG9CQUNFLHVCQUNBO0FBQUEsTUFFRix1QkFBd0IsT0FDZjtBQUFBO0FBQUE7QUFBQSxJQUliO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUFNRTtBQUFBLEtBQW9CO0FBQUE7QUFBQSxLQUNmO0FBQUEsSUFDTCxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsY0F2RVk7QUFBQSxJQUNWO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsY0FuQlk7QUFBQSxJQUVWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQXlGYTtBQUFBLElBQ1gseUI5QjdPRjtBQUFBLEc4QitPQTtBQUFBO0FBQUEsZUEzSFc7QUFBQSxJQUNULDRCQUE2QixRQUFRO0FBQUEsSUFDckM7QUFBQSxLQUNFLE9BQU87QUFBQSxLQUNQO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFFBQVE7QUFBQTtBQUFBO0FBQUEsSUFHWixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsZUEvRFcsOEJBQ0Q7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0EsWUFBVyxrQkFBb0I7QUFBQSxJQUcvQixRQUFRO0FBQUEsR0FDVjtBQUFBLGdDQWZFLE9BQU8sbUJBQW1CLENBQzVCO0FBQUEsNEJUNkNFLG1DQUFtQyxTQUFTLENBQzlDO0FBQUE7QUFBQSxZU29GVTtBQUFBLElBQ1IsWUFBYSxRQUFRO0FBQUEsWUFDZjtBQUFBLElBQ04sR0FBSSxrQkFBa0IsV0FBVyxnQkFBZ0I7QUFBQSxJQUNqRCxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsZUExR1c7QUFBQSxJQUNULDRCQUE2QixRQUFRO0FBQUEsSUFDckM7QUFBQSxLQUNFLE9BQU87QUFBQSxLQUNQO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFFBQVE7QUFBQTtBQUFBO0FBQUEsSUFHWixnQkFBZ0I7QUFBQSxHQUNsQjtBQUFBO0FBQUEsWUFNVTtBQUFBLElBQ1IsWUFBYSxRQUFRO0FBQUEsWUFDZjtBQUFBLElBQ04sR0FBSSxrQkFBa0IsV0FBVyxnQkFBZ0I7QUFBQSxJQUNqRCxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsY0ExRVk7QUFBQSxJQUNWO0FBQUEsS0FBK0MsSUFBSTtBQUFBLElBQ25EO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGNBUVk7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQSw2Qkg4TkUsVUFBUyxvQ0FBb0MsQ0FDL0M7QUFBQTtBQUFBO0FBQUEsVVA0QlM7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsU0FDRDtBQUFBLFlBRUc7QUFBQSxJQUNULFVBQVc7QUFBQSxJQUdYLElBQUk7QUFBQTtBQUFBLFNBQ0U7QUFBQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLDZEQUN1RDtBQUFBLElBRTdELGVBQWU7QUFBQSxHQUNqQjtBQUFBLCtCQUtFLFdBQVcsaUJBQWlCLENBQzlCO0FBQUEsOEJoQnZKeUI7QUFBQSwrQmdCcUV2QixPQUFPLGNBQWMsQ0FDdkI7QUFBQSxnQ0FMRSxPQUFPLGFBQWEsQ0FDdEI7QUFBQTtBQUFBLEloQjNNRSw2Q0FJSSxRQUFRLFVBRVIsUUFBUTtBQUFBO0FBQUEsR0FFZDtBQUFBO0FBQUEsWUFLUTtBQUFBLElBQ047QUFBQSxLQUNFO0FBQUEsS0FDQTtBQUFBO0FBQUEsVUFHRTtBQUFBLG1CQUVXLGdCQUNEO0FBQUE7QUFBQSxrQkFFQSxZQUNDO0FBQUEsS0FFYjtBQUFBLEtBQ0EsWUFBVztBQUFBLE1BQ1QsY0FBZTtBQUFBLGNBQ1Q7QUFBQSxNQUNOO0FBQUEsT0FBMkIsS0FBSztBQUFBO0FBQUEsT0FDRCxXQUNsQjtBQUFBO0FBQUEsT0FDcUIsV0FDckI7QUFBQTtBQUFBLE9BQ047QUFBQTtBQUFBLEtBRVQ7QUFBQTtBQUFBLDRCQUN5QjtBQUFBLElBRzNCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQUtFLEdBQUk7QUFBQSxtQkFDWTtBQUFBLEtBQ2Q7QUFBQSxNQUFhO0FBQUE7QUFBQTtBQUFBLGFBRUQ7QUFBQSxpQkFDSTtBQUFBLE1BQ2QsWUFBYTtBQUFBLE1BQ2I7QUFBQSxNQUNBLGlCQUFrQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBRWY7QUFBQSxHQUdUO0FBQUE7QUFBQSxJSHFaRTtBQUFBLEtBQVc7QUFBQSxNQUNrRTtBQUFBLE9BRXZFO0FBQUEsT0FDQTtBQUFBO0FBQUE7QUFBQSxPQUVBLE1BQU0sbUJBQW1CO0FBQUEsT0FDekI7QUFBQTtBQUFBO0FBQUEsTUFHRixjQUEyQjtBQUFBLE1BQzNCLHdCQUF5QjtBQUFBO0FBQUEsSUFHN0IsUUFBUTtBQUFBLEdBQ1Y7QUFBQSx3QzhCdGRFLFFBQVEsQ0FDVjtBQUFBLHdCQUdxQjtBQUFBO0FBQUEsSUFFbkI7QUFBQTtBQUFBO0FBQUEsUUFDVTtBQUFBO0FBQUEsc0JBQ04sMEJBQ0EsT0FDQSxNQUFNLENBSG9DO0FBQUEsS0FLNUM7QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGLFFBQVE7QUFBQSxHQUNWO0FBQUEsc0NBSUUsUUFBUSxDQUNWO0FBQUE7QUFBQSxJQ2dERSxnQkFBaUIsWUFBWTtBQUFBLGNBQ3JCO0FBQUEsSUFFUix3REFBeUQ7QUFBQSxJQUN6RCxnQkFDRSxpQkFBa0IsVUFDbEIsa0JBQW1CO0FBQUEsaUJBR1Y7QUFBQSxJQUNYO0FBQUEsS0FDRSxZQUFXLHVCQUF5QjtBQUFBLElBQ3RDO0FBQUEsS0FBa0I7QUFBQSxNQUNBO0FBQUEsa0NBQ2M7QUFBQSxJQUVoQyxnQ0FBaUM7QUFBQSxJQUNqQyxpQ0FBa0M7QUFBQSxJQUNsQztBQUFBLEtBQ0UsWUFBVyx1QkFBeUI7QUFBQSxJQUN0QztBQUFBLElBQ0Esc0JBQXVCLFlBQVcsdUJBQXlCO0FBQUEsSUFDM0QsT0FBTyw4QkFBOEI7QUFBQSxHQUN2QztBQUFBO0FBQUEsSVoyRUUsWUFBYSxRQUFRO0FBQUEsSUFDckIsVUFBVyxVQUFTO0FBQUEsSUFDcEIsVUFBVyxRQUFRO0FBQUEsSUFDbkIsS0FBSyxpQkFBaUIsUUFBUTtBQUFBLElBQzlCLEtBQUssaUJBQWlCLFVBQVM7QUFBQSxJQUMvQixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSWxCekNFLE9BQU8seUJBQXlCLHVCQUF1QjtBQUFBLEdBQ3pEO0FBQUE7QUFBQSx1QmtCNFVjO0FBQUEsSUFDWixJQUFJO0FBQUEsSUFDSjtBQUFBLElBRUEsS0FBSyxxQkFBcUIsaUJBQWlCLFVBQVU7QUFBQSxJQUNyRCxJQUFJO0FBQUEsSUFDSjtBQUFBLElBQ0EsS0FBTSxxQkFBcUIsbUJBQW9CO0FBQUEsS0FDN0MsVUFBVTtBQUFBO0FBQUEsU0FDSjtBQUFBLElBRVI7QUFBQTtBQUFBLFdBQ1c7QUFBQSxpQkFDTTtBQUFBLGlCQUNGO0FBQUEsS0FDYixpQkFBaUI7QUFBQSxLQUNqQixVQUFVO0FBQUE7QUFBQSxJQUVaLEdBQUksNkJBQTZCLCtCQUErQjtBQUFBLElBQ2hFLEdBQUksMkJBQTJCLCtCQUErQjtBQUFBLElBQzlEO0FBQUEsR0FDRjtBQUFBLHNER2hhRSxPQUFPLG9DQUFvQztBQUFBLEdBQzdDO0FBQUE7QUFBQSxJQStHRSxzQ0FBeUM7QUFBQSxjQUNqQyxpQkFDQTtBQUFBLElBQ1I7QUFBQSxJQUNBLFlBQVcsaUJBQW1CO0FBQUEsSUFDOUIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsYUg2RmM7QUFBQSxpQkFDSTtBQUFBLGVBQ0Y7QUFBQSxTQUNSO0FBQUEsU0FDRTtBQUFBLFNBQ0E7QUFBQTtBQUFBO0FBQUEsV0FHQztBQUFBLFlBQ0M7QUFBQSxZQUNBO0FBQUEsV0FDRDtBQUFBLFlBQ0M7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFVBQ0E7QUFBQSxLQUNOLG1CQUdDO0FBQUEsSUFDSDtBQUFBO0FBQUEsYUFHUSxXQUNBLFdBQ0E7QUFBQSxLQUNOLG1CQUdDO0FBQUEsSUFDSDtBQUFBO0FBQUEsS0FHRTtBQUFBO0FBQUEsZ0JBRUs7QUFBQSxJQUNQO0FBQUEsSUFFQSwyQkFBMkIsd0JBQXVCO0FBQUEsS0FBb0IsZ0JBQ3BEO0FBQUEsSUFFbEIsWUFBYSxZQUNDO0FBQUEsSUFFZCxLQUFLLG9CQUFvQixRQUNmO0FBQUEsZ0JBR0E7QUFBQSxJQUNWLE1BQU8saUJBQ0wsWUFDQTtBQUFBLElBRUYsTUFBTyxpQkFDTCxZQUNBO0FBQUEsSUFFRixvQkFBcUIsb0JBQ0M7QUFBQSxJQUV0QixNQUFPLGlCQUNMLFlBQ0E7QUFBQSxJQUVGLE1BQU8saUJBQ0wsWUFDQTtBQUFBLElBRUYsZ0JBQWlCLFFBQ1A7QUFBQSxhQUdILFFBQ0EsUUFDQTtBQUFBLElBRVAsR0FBSSxlQUFnQixpQ0FBa0MsUUFDNUM7QUFBQSxJQUVWLEdBQUksZUFBa0I7QUFBQSxLQUFrRDtBQUFBO0FBQUEsVUFJL0Q7QUFBQSxTQUNEO0FBQUEsU0FDQTtBQUFBLFNBQ0E7QUFBQSxTQUVGLE1BQVE7QUFBQSxJQUNkLFlBQWEsUUFDSDtBQUFBLGFBR0g7QUFBQSxJQUNQLEdBQUksMEJBQTBCLFNBQ25CO0FBQUEsSUFJWCxZQUFZLG1DQUFtQztBQUFBLEdBQ2pEO0FBQUE7QUFBQSxJWXhaRSxNQUFNO0FBQUEsY0FDRTtBQUFBLElBQ1IsYUFBYztBQUFBO0FBQUE7QUFBQSxPQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQWFOLFlBQVc7QUFBQSxhQUNEO0FBQUEsS0FDUjtBQUFBO0FBQUEsUUFFSSxpQkFDQTtBQUFBO0FBQUE7QUFBQSxRQUdBLGlCQUNBO0FBQUE7QUFBQSxRQUVBLGdCQUNBO0FBQUE7QUFBQSxRQUVBLG9CQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQTtBQUFBLFFBQ0EsVUFBYSwwQ0FDWCw0QkFDQTtBQUFBLFFBRUY7QUFBQSxRQUNBO0FBQUE7QUFBQSxRQUVBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsVUFBYSwwQ0FDWCwwQkFDQTtBQUFBLFFBRUY7QUFBQSxRQUNBO0FBQUE7QUFBQTtBQUFBLFFBR0EscUJBQ0EsYUFDQTtBQUFBO0FBQUEsUUFFQSxhQUNBO0FBQUE7QUFBQSxRQUVBLGFBQ0E7QUFBQTtBQUFBLFFBRUEsYUFDQSxvQkFDQTtBQUFBO0FBQUEsUUFFQSxZQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJQSxxQkFDQSxZQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLFNBQVM7QUFBQSxRQUNUO0FBQUE7QUFBQTtBQUFBLElBR04sUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsS1ptVUksR0FBSTtBQUFBLE1BQW1CLE9BQ2QsYUFBYTtBQUFBO0FBQUEsY0FFWixnQkFBZ0I7QUFBQSxNQUN4QjtBQUFBLE9BQ0U7QUFBQSxPQUNBLEtBQUs7QUFBQSxPQUNMLEtBQUs7QUFBQSxPQUNMLFdBQVksY0FDSTtBQUFBLE9BRWhCLFFBQVE7QUFBQTtBQUFBO0FBQUEsT0FDSCxPQUFPLGFBQWE7QUFBQTtBQUFBLElBRS9CO0FBQUEsZUFFTSwrQkFDRztBQUFBLElBQ1QsMkRBQ0UsY0FDQTtBQUFBLElBRUYsR0FBSTtBQUFBLEtBQ0Y7QUFBQSxLQUNBO0FBQUE7QUFBQSxjQUNVLG9CQUNWLFdBQ0E7QUFBQTtBQUFBLEtBRUE7QUFBQTtBQUFBLGdCQUVZLDJCQUVGO0FBQUEsUUFDTixHQUFJO0FBQUEsU0FDRixJQUFJLDBCQUEwQjtBQUFBLFFBQ2hDO0FBQUE7QUFBQSxRQUVBLElBQUksa0JBQ0o7QUFBQTtBQUFBLFFBRUE7QUFBQSxRQUNBLElBQUk7QUFBQSxnQkFDSSxzQkFDQSxFQUFHO0FBQUEsUUFDWCw2QkFBNkI7QUFBQSxpQkFFckI7QUFBQSxTQUNOLE1BQU8scUJBQXFCO0FBQUEsU0FDNUIsR0FBSSxxQkFBcUI7QUFBQSxTQUN6QixJQUFJLG9CQUFvQjtBQUFBLFNBQ3hCO0FBQUEsU0FDQSxHQUFJO0FBQUEsVUFDRixJQUFJLDBCQUEwQjtBQUFBLFNBQ2hDO0FBQUE7QUFBQTtBQUFBLGlCQUVNO0FBQUEsU0FDTjtBQUFBLFVBQ0U7QUFBQSxVQUNBLElBQUk7QUFBQTtBQUFBO0FBQUEsVUFDQyxVQUFhLG1DQUFxQztBQUFBLFNBQ3pEO0FBQUEsa0JBRVE7QUFBQSxVQUNOLE1BQU8scUJBQXFCO0FBQUEsVUFDNUIsR0FBSSxxQkFBcUI7QUFBQSxVQUN6QixJQUFJO0FBQUE7QUFBQTtBQUFBLFFBR1I7QUFBQTtBQUFBLElBRU4sT0FBTyw0QkFBNEI7QUFBQSxHQUNyQztBQUFBO0FBQUEsSUtyZUUsR0FBSTtBQUFBLEtBQ0YsT0FBTyw4QkFBOEI7QUFBQSxZQUMvQjtBQUFBLElBQ1IsVUFBVyxpQkFFUCxjQUNBLGVBQ0s7QUFBQSxZQUVEO0FBQUEsSUFDUjtBQUFBLEtBQ0U7QUFBQSxhQUNNO0FBQUEsS0FDTixVQUFXLElBQUk7QUFBQTtBQUFBLElBRWpCLE9BQU8sNEJBQTRCO0FBQUEsR0FDckM7QUFBQSx5Qkp5Sm9CO0FBQUEsK0JBWWxCLHdCQUF3QixDQUMxQjtBQUFBO0FBQUEsSURSRSxnQkFBZ0Isb0JBQW9CLGdCQUFnQjtBQUFBLGNBQzVDO0FBQUEsSUFDUixRQUFTO0FBQUEsY0FDQyxpQkFBZ0IsV0FBVztBQUFBLElBQ3JDLEtBQUs7QUFBQSxJQUNMLGVBQ0UsUUFDQTtBQUFBLElBRUYsY0FDRSxVQUNBO0FBQUEsSUFFRixRQUFTO0FBQUEsSUFDVCxrQkFBa0I7QUFBQSxHQUNwQjtBQUFBO0FBQUE7QUFBQSxZVnFJYTtBQUFBLGVBQ0c7QUFBQSxJQUNkLE9BQU8sK0JBQStCO0FBQUEsR0FDeEM7QUFBQTtBQUFBLGNBMUJVO0FBQUEsSUFDUjtBQUFBLEtBQVMsWUFDSTtBQUFBLE1BQ1Q7QUFBQSxJQUdKO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQSxzQ3FCdlRFLFFBQVEsQ0FDVjtBQUFBLG9DQUdFLHFCQUFxQixDQUN2QjtBQUFBO0FBQUEsSUFWRSx3Q0FBeUM7QUFBQSxJQUN6QyxRQUFRO0FBQUEsR0FDVjtBQUFBLCtCQTJCRSwyQ0FBMkMsQ0FDN0M7QUFBQTtBQUFBLElBcENFLHdDQUF5QztBQUFBLElBQ3pDLFFBQVE7QUFBQSxHQUNWO0FBQUEsdUNBaUdFLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSUExR0Usd0NBQXlDO0FBQUEsSUFDekMsUUFBUTtBQUFBLEdBQ1Y7QUFBQSx1Q0E0R0UsUUFBUSxDQUNWO0FBQUE7QUFBQSxJQXRGRSw2REFBNkQ7QUFBQSxHQUMvRDtBQUFBLGtDQVVFLFFBQVEsQ0FDVjtBQUFBLCtCQU5FLE9BQU8sd0JBQXdCLENBQ2pDO0FBQUEsMkJWOEdzQjtBQUFBO0FBQUEsZ0JBY1YsY0FDRjtBQUFBLElBQ1IsMkJBQTRCLHFCQUNMO0FBQUEsYUFFaEIsUUFDRjtBQUFBLElBRUw7QUFBQSxLQUNFO0FBQUEsS0FDQSx3QkFBeUIsa0JBQ3BCO0FBQUE7QUFBQSxJQUVQO0FBQUEsSUFDQSxnQkFBZ0I7QUFBQSxHQUNsQjtBQUFBLDhDQ2lHRSxVQUFVLENBQ1o7QUFBQSx5Q2pCMUxFLFVBQVUsQ0FDWjtBQUFBLDJDQXBDRSxRQUFRLENBQ1Y7QUFBQSxvREFHRSxVQUFVLENBQ1o7QUFBQSx3Q0MwT0UsdUJBQXVCLENBQ3pCO0FBQUEsdUN5QjdLRSxRQUFRLENBQ1Y7QUFBQTtBQUFBLGdCVjJEWSxhQUNILFFBQ0Y7QUFBQSxJQUVMO0FBQUEsS0FDRTtBQUFBLEtBQ0Esd0JBQXlCLGtCQUNwQjtBQUFBO0FBQUEsSUFHUCw0Q0FBNEM7QUFBQSxHQUM5QztBQUFBO0FBQUEsSVlnRkUsZUFBZ0I7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQTtBQUFBLFdBQ1E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBS0U7QUFBQSxXQUNGO0FBQUEsYUFDRTtBQUFBLFNBQ0o7QUFBQSxJQUNOLFlBQVc7QUFBQSxLQUNUO0FBQUEsZ0JBRU8sY0FBYztBQUFBLGFBQ2QsY0FBYztBQUFBLEtBQ3JCLE9BQU87QUFBQSxLQUNQO0FBQUEsZ0JBRU8sY0FBYztBQUFBLGFBQ2QsY0FBYztBQUFBLEtBQ3JCLE9BQU87QUFBQSxLQUNQO0FBQUEsTUFDRTtBQUFBLHVEQUVBO0FBQUEsS0FFRjtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQTtBQUFBLElBcFJFLGtCQUFtQixvQkFDRztBQUFBLElBRXRCLE1BQU07QUFBQTtBQUFBLGFBRUo7QUFBQSxhQUNBO0FBQUEsR0FFSjtBQUFBO0FBQUE7QUFBQSxTQTZiVTtBQUFBO0FBQUEsT0FDRTtBQUFBO0FBQUEsSUFNVixZQUFXO0FBQUEsS0FDVDtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFFRixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUExVVU7QUFBQSxJQUNSO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUFsQ1U7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBbVpFO0FBQUEsR0FDRjtBQUFBO0FBQUEsWUFuRVU7QUFBQSxJQUNSLE9BQU8sK0JBQStCO0FBQUEsR0FDeEM7QUFBQSx3Q0E3T1UscUJBQ1IsVUFBVSxDQUNaO0FBQUEsd0NBSVUscUJBQ1IsVUFBVSxDQUNaO0FBQUE7QUFBQSxJQW1SRTtBQUFBLEdBQ0Y7QUFBQTtBQUFBLElBNVlFLCtCQUFnQyxpQ0FBaUM7QUFBQSxHQUNuRTtBQUFBO0FBQUEsWUFvTFU7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZQTRDVSx5QkFDQSxpQ0FDRDtBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUFLRSxpQkFBaUI7QUFBQSxJQUNqQixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUFvRlU7QUFBQSxJQUNSO0FBQUEsa0JBQ2U7QUFBQSxLQUNiO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQSxpQkFDWTtBQUFBLEtBQ1o7QUFBQTtBQUFBLE9BQ0U7QUFBQSxPQUNBO0FBQUEsTUFGYTtBQUFBLEtBSWYsWUFBWTtBQUFBO0FBQUE7QUFBQSxLQUVaO0FBQUEsSUFFRixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUEvTVU7QUFBQSxJQUNSO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUE4R0UsaUJBQWlCO0FBQUEsSUFDakIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBNERXO0FBQUEsSUFDVCxZQUFXO0FBQUEsS0FDVDtBQUFBLEtBQ0EsWUFBVztBQUFBO0FBQUEsV0FDSDtBQUFBLFdBQ0Y7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLE1BQ0o7QUFBQTtBQUFBO0FBQUEsSUFHSixXQUFXO0FBQUEsR0FDYjtBQUFBO0FBQUEsWUF2R1U7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZQWxCVTtBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsSUFDQSxZQUFXO0FBQUEsS0FDVDtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUFmVTtBQUFBLElBQ1I7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZQS9FVTtBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsU0F5SlU7QUFBQSxTQUNGO0FBQUEsU0FDQTtBQUFBLFVBQ0c7QUFBQSxJQUNULFlBQVc7QUFBQSxLQUFpQixZQUNmO0FBQUEsY0FDSCx1QkFDQTtBQUFBLE1BQ047QUFBQSxPQUNFO0FBQUEsT0FDQTtBQUFBLE9BQ0E7QUFBQSxPQUNBO0FBQUE7QUFBQTtBQUFBLE9BRUE7QUFBQSxPQUNBO0FBQUEsT0FDQTtBQUFBLE9BQ0E7QUFBQTtBQUFBO0FBQUEsSUFJTixTQUFTO0FBQUEsR0FDWDtBQUFBO0FBQUEsWUE1TVU7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLFlBM0ZVO0FBQUEsSUFDUjtBQUFBLGlCQUNhO0FBQUEsSUFDYixnQkFBaUI7QUFBQSxJQUNqQixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUEwS1U7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLFlBd0VVO0FBQUEsSUFDUjtBQUFBLElBQ0EsdUNBQXVDO0FBQUEsSUFDdkMsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLFlBZFU7QUFBQSxJQUNSO0FBQUEsSUFDQSx1Q0FBdUM7QUFBQSxJQUN2QyxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUEzTVU7QUFBQTtBQUFBLGVBRUUsS0FBTztBQUFBLEtBQ2Ysc0JBQXVCO0FBQUEsS0FDdkIsVUFBVTtBQUFBLElBQ1o7QUFBQSxZQUNNLHdCQUNGLHVCQUNBO0FBQUEsSUFDSjtBQUFBLGdCQUNVLE1BQVEsYUFBYSxhQUFhO0FBQUEsSUFDNUM7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUE5Q1U7QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLElBQ0EseUJBQTBCO0FBQUEsSUFDMUIsMEJBQTJCO0FBQUEsSUFDM0IsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBaEVFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQTtBQUFBLEdBQ0Y7QUFBQTtBQUFBLElBakVFO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGtCQW1FZ0I7QUFBQSxJQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0JBUVE7QUFBQTtBQUFBO0FBQUEsbUJBR0MsMkJBQ1I7QUFBQSxHQUNIO0FBQUE7QUFBQSxlQXpFYTtBQUFBO0FBQUEsZUFFQztBQUFBLEtBQ1YsUUFBUyxhQUFhO0FBQUEsSUFDeEI7QUFBQSxnQkFDVTtBQUFBLElBQ1Ysb0JBQW9CO0FBQUEsaUJBQ1A7QUFBQSxJQUNiLGFBQWE7QUFBQSxpQkFDQTtBQUFBLElBQ2IsYUFBYTtBQUFBLFlBRUw7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSO0FBQUEsWUFFUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1I7QUFBQSxjQUVVLHVDQUF1QztBQUFBLElBQ2pELFVBQ0U7QUFBQSxjQUVNLHVCQUNLO0FBQUEsSUFDYjtBQUFBLElBQ0E7QUFBQSxjQUNVO0FBQUEsSUFDVixnQ0FDRSxrQkFEYztBQUFBLElBR2hCO0FBQUEsZUFDUztBQUFBLElBQ1Q7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUErYkU7QUFBQSxHQUNGO0FBQUE7QUFBQTtBQUFBLFNBNVVVO0FBQUEsVUFDQztBQUFBLFNBQ0g7QUFBQSxhQUNJO0FBQUEsSUFDVjtBQUFBLElBQ0E7QUFBQSxJQUlBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUE7QUFBQSxTQUtVO0FBQUEsVUFDQztBQUFBLFNBQ0g7QUFBQSxJQUNOLHdDQUF3QztBQUFBLEdBQzFDO0FBQUE7QUFBQSxJQW1TRTtBQUFBLEdBQ0Y7QUFBQSxvQ0FyQkUsUUFBUSxDQUNWO0FBQUEsbUNBR0UsUUFBUSxDQUNWO0FBQUEscUNBMVVVLHFCQUNSLGNBQWMsQ0FDaEI7QUFBQSxxQ0FJVSxxQkFDUixlQUFlLENBQ2pCO0FBQUE7QUFBQSxJQTRVRTtBQUFBLEdBQ0Y7QUFBQTtBQUFBO0FBQUEsU0E3R1U7QUFBQSxTQUNBLHNCQUFzQjtBQUFBLElBQzlCLDBCQUEwQjtBQUFBLEdBQzVCO0FBQUE7QUFBQSxJQW1HRTtBQUFBO0FBQUEsR0FDRjtBQUFBO0FBQUEsSUFxQkU7QUFBQSxHQUNGO0FBQUE7QUFBQSxJTmhQRSxVQUFTLG1DQUFtQztBQUFBLEdBQzlDO0FBQUE7QUFBQSxJQU1FLFVBQVMsa0NBQWtDO0FBQUEsR0FDN0M7QUFBQTtBQUFBLGNENU5VO0FBQUEsSUFHUjtBQUFBLEtBQ0U7QUFBQSxNQUNFLGtCQUNDLDJCQUNBO0FBQUEsUUFDQTtBQUFBLEtBQ0gsSUFBSTtBQUFBO0FBQUEsSUFFTjtBQUFBLElBQ0E7QUFBQTtBQUFBLE9BR0ksSUFBSTtBQUFBO0FBQUEsT0FJSixLQUFLO0FBQUE7QUFBQSxPQUdMLEtBQUssaUJBQ0wsSUFBSTtBQUFBO0FBQUEsSUFFUjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBMkNFLE9BQU8seUJBQXlCLDBCQUEwQjtBQUFBLEdBQzVEO0FBQUE7QUFBQSxjQXZDVTtBQUFBLElBR1I7QUFBQSxLQUNFO0FBQUEsS0FDQSxJQUFJO0FBQUE7QUFBQSxJQUVOO0FBQUEsSUFDQTtBQUFBO0FBQUEsT0FHSTtBQUFBO0FBQUEsT0FJQTtBQUFBO0FBQUEsT0FHQSxXQUNBLElBQUk7QUFBQTtBQUFBLElBRVI7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJekJxcEJFO0FBQUE7QUFBQSxPQUVJLGlDQUNBLFVBQVU7QUFBQSxlQUVWLFVBQVU7QUFBQTtBQUFBLEdBRWhCO0FBQUE7QUFBQSxrQnlCcnBCZ0I7QUFBQSxJQUNkO0FBQUEsY0FBd0M7QUFBQSxjQUNoQixtQzFCNUkxQjtBQUFBLEcwQjZJQTtBQUFBO0FBQUEsSUEzR0U7QUFBQSxJQUNBLElBQUk7QUFBQSxJQUNKO0FBQUEsSUFDQSxJQUFJO0FBQUEsSUFDSjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsSUFxSEU7QUFBQSxJQUNBLHVCQUF3QjtBQUFBLElBQ3hCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxLQUNFO0FBQUEsS0FDQTtBQUFBLE1BQW9CO0FBQUE7QUFBQSxnQkFLUDtBQUFBLE9BQ1QsSUFBSTtBQUFBLE9BQ0o7QUFBQTtBQUFBO0FBQUEsYUFFTztBQUFBLE1BQXlDO0FBQUE7QUFBQSxTQUk5QyxJQUFJLDRCQUNKLE9BQ0E7QUFBQTtBQUFBLFNBR0Esb0JBQ0E7QUFBQTtBQUFBLFNBRUEsR0FBSSxnQ0FBZ0M7QUFBQSxtQkFLNUI7QUFBQSxTQUNSLElBQUk7QUFBQSxTQUNKLHlDQUNFLGFBQWMsT0FDZDtBQUFBO0FBQUEsU0FFRjtBQUFBO0FBQUEsYUFFSztBQUFBLE1BQ1QsSUFBSTtBQUFBLE1BQ0o7QUFBQTtBQUFBLGFBQ1M7QUFBQSxNQUNULElBQUk7QUFBQSxNQUNKO0FBQUE7QUFBQTtBQUFBLE1BRUEsSUFBSTtBQUFBLE1BQ0o7QUFBQTtBQUFBO0FBQUEsTUFHQSxJQUFJO0FBQUEsTUFDSjtBQUFBO0FBQUEsb0NBR0EsSUFBSSwyQkFDSjtBQUFBO0FBQUEsSUFHSixJQUFJO0FBQUEsSUFDSixxQkFBcUI7QUFBQSxHQUN2QjtBQUFBO0FBQUEsSVR4TkUsT0FBTyxtQ0FBbUM7QUFBQSxHQUM1QztBQUFBO0FBQUEsSVM4REUsSUFBSSxxQkFBcUI7QUFBQSxJQUN6QixJQUFJLHFCQUFxQjtBQUFBLElBQ3pCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJWjJCRSxZQUFXO0FBQUEsS0FBd0IsNEJBQ0osWUFBWTtBQUFBLElBRTNDLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxjQXpFWSx5Q0FDSjtBQUFBLElBQ04sWUFBVyxpQkFBbUIsSUFDeEI7QUFBQSxJQUVOLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJTWlCRSxLQUFLO0FBQUEsS0FDSCxHQUFJLGlCQUFpQixPQUFPLDhCQUE4QjtBQUFBLEtBQzFELE9BQU8seURBQXlEO0FBQUE7QUFBQTtBQUFBLFlBRXpEO0FBQUEsSUFDVCxTQUFVO0FBQUEsY0FDRjtBQUFBLElBQ1I7QUFBQTtBQUFBO0FBQUEsS0FDa0IsNkJBRWQsUUFDQTtBQUFBO0FBQUEsS0FFRyxjQUVILFFBQ0E7QUFBQSxtQkFHUywrQkFDQTtBQUFBLElBQ2I7QUFBQSxLQUFVO0FBQUE7QUFBQSxLQUNMO0FBQUE7QUFBQSxRQUdDLGdCQUNBO0FBQUE7QUFBQSxRQUVBLGdCQUNBO0FBQUEsZ0JBRUE7QUFBQTtBQUFBLElBR047QUFBQSxlQUVZO0FBQUEsS0FDVixJQUFJO0FBQUE7QUFBQSxnQkFFTTtBQUFBLElBQ1o7QUFBQSxlQUNZO0FBQUEsS0FDVjtBQUFBLE1BQWEsZUFDSTtBQUFBO0FBQUEsaUJBRU47QUFBQSxNQUNUO0FBQUEsT0FDRSxTQUFTO0FBQUE7QUFBQSxPQUNOLFFBQVE7QUFBQTtBQUFBO0FBQUEsSUFHakIsT0FBTztBQUFBLHdEQUNzQyxpQkFDNUM7QUFBQSxHQUNIO0FBQUEsbUNBc0pFLE9BQU8sZ0JBQWdCLENBQ3pCO0FBQUEsa0NsQnFSNkI7QUFBQTtBQUFBLElDbk0zQjtBQUFBLGVBQ1ksdUJBQ0U7QUFBQSxLQUNaO0FBQUEsTUFBd0I7QUFBQTtBQUFBLE1BR3RCO0FBQUEsZUFDVTtBQUFBLE9BQ1I7QUFBQSxPQUNBO0FBQUE7QUFBQSxNQUVGO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUdGLG9CQUNFO0FBQUE7QUFBQTtBQUFBLFFBRVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBTVo7QUFBQSxLQUNBO0FBQUE7QUFBQSxHQUVKO0FBQUE7QUFBQSxJS3BURTtBQUFBLEdBQ0Y7QUFBQTtBQUFBLFlOa2VVLHFCQUFxQjtBQUFBO0FBQUEsYUFFbkIsZ0JBQ0Y7QUFBQSxLQUNOO0FBQUEsTUFDRSxJQUFJO0FBQUEsZUFDRztBQUFBLE1BQ1Asa0JBQW1CO0FBQUEsTUFDbkI7QUFBQTtBQUFBLEtBRUYsUUFBUTtBQUFBLElBQ1Y7QUFBQSxJQUVBLE9BQVE7QUFBQTtBQUFBLHdCQUVXLGVBQ0EsYUFDZjtBQUFBO0FBQUE7QUFBQSxxQkFFaUI7QUFBQSxtQkFDSjtBQUFBLG1CQUNFO0FBQUEsT0FDZjtBQUFBLFFBQ0U7QUFBQTtBQUFBLE9BSUY7QUFBQTtBQUFBLE9BRUE7QUFBQTtBQUFBLE9BR0E7QUFBQSxlQUVBLGdEQUNBO0FBQUE7QUFBQSxJQUVKLHVEQUF1RDtBQUFBLEdBQ3pEO0FBQUEsOEJtQi9YRSwwQkFDQSxRQUFRLENBQ1Y7QUFBQTtBQUFBO0FBQUEsYW5Cb0ZZLHFCQUNGO0FBQUEsS0FDTjtBQUFBLE1BQ0UsSUFBSTtBQUFBLGVBQ0c7QUFBQSxNQUNQLGtCQUFtQjtBQUFBLE1BQ25CO0FBQUE7QUFBQSxLQUVGLFFBQVE7QUFBQSxJQUNWO0FBQUEsa0JBQ1ksa0JBQ0E7QUFBQSxJQUNaO0FBQUE7QUFBQTtBQUFBLHFCQUVtQjtBQUFBLHFCQUNBO0FBQUEsbUJBQ0E7QUFBQSxnQ0FDVztBQUFBLHNCQUNSO0FBQUEsbUJBQ0g7QUFBQSxtQkFDQTtBQUFBLE9BQ2Y7QUFBQTtBQUFBO0FBQUEscUJBRWlCO0FBQUEscUJBQ0Y7QUFBQSxtQkFDRjtBQUFBLG1CQUNFO0FBQUEsZ0NBQ2E7QUFBQSxzQkFDVjtBQUFBLG1CQUNIO0FBQUEsbUJBQ0E7QUFBQSxPQUNmO0FBQUEsUUFDRTtBQUFBO0FBQUEsT0FJRjtBQUFBO0FBQUEsT0FFQTtBQUFBO0FBQUEsT0FHQTtBQUFBO0FBQUEsT0FFQSwyREFDQTtBQUFBO0FBQUEsSUFFSjtBQUFBLEtBQ0U7QUFBQTtBQUFBLGFBRVE7QUFBQSxlQUNFO0FBQUEsd0JBQ1M7QUFBQSxtQkFDTDtBQUFBO0FBQUEsZ0JBRUg7QUFBQSxLQUNYO0FBQUEsTUFBMkM7QUFBQSxpQkFFL0IsbUJBQ0MscUJBQ0g7QUFBQSxPQUNOLGVBQWdCLFFBQVE7QUFBQSxPQUN4QixxQkFBc0I7QUFBQSxPQUN0QixnQkFBaUI7QUFBQSxPQUNqQjtBQUFBLE9BQ0EsUUFBUTtBQUFBO0FBQUE7QUFBQSxPQUNILGtCQUFrQjtBQUFBO0FBQUEsZ0JBR2YsaUJBQ0E7QUFBQSxNQUNSLHFCQUFzQjtBQUFBLE1BQ3RCLFFBQVE7QUFBQTtBQUFBO0FBQUEsTUFDSDtBQUFBO0FBQUEsU0FHRCxPQUFPLGVBQWU7QUFBQTtBQUFBLFNBRXRCLE9BQU8sZ0JBQWdCO0FBQUE7QUFBQSxTQUV2QixPQUFPLGdCQUFnQjtBQUFBO0FBQUEsU0FFdkIsaURBQ0E7QUFBQTtBQUFBLHNCQUVhO0FBQUEsU0FDYixxQkFBc0I7QUFBQSxTQUN0QiwrQkFBK0I7QUFBQTtBQUFBLHNCQUVsQjtBQUFBLFNBQ2IscUJBQXNCO0FBQUEsU0FDdEIsK0JBQStCO0FBQUE7QUFBQSxzQkFFbEI7QUFBQSxTQUNiLHFCQUFzQjtBQUFBLFNBQ3RCLCtCQUErQjtBQUFBO0FBQUE7QUFBQSxtQkFFbEI7QUFBQSxnQkFDTDtBQUFBLGlCQUNDO0FBQUEsY0FDSDtBQUFBLFNBQ04sZUFBZ0IsUUFBUTtBQUFBLFNBQ3hCLHFCQUFzQjtBQUFBLFNBQ3RCLGdCQUFpQjtBQUFBLFNBQ2pCO0FBQUEsU0FDQSxRQUFRO0FBQUE7QUFBQSxTQUVSLG9EQUNBO0FBQUE7QUFBQSxtQkFFVSxxQkFDRjtBQUFBLFNBQ1IscUJBQXNCO0FBQUEsU0FDdEIsUUFBUTtBQUFBO0FBQUEsbUJBRUUsc0JBQ0Y7QUFBQSxTQUNSLHFCQUFzQjtBQUFBLFNBQ3RCLFFBQVE7QUFBQTtBQUFBLGlCQUVBO0FBQUEsU0FDUixZQUFXLGVBQWlCLFdBQVc7QUFBQSxpQkFDL0I7QUFBQSxTQUNSLHFCQUFzQjtBQUFBLFNBQ3RCLFFBQVE7QUFBQTtBQUFBLGlCQUVBO0FBQUEsU0FDUixZQUFXLGVBQWlCLE9BQU87QUFBQSxpQkFDM0I7QUFBQSxTQUNSLHFCQUFzQjtBQUFBLFNBQ3RCLFFBQVE7QUFBQTtBQUFBLG1CQUVFLHFCQUNGO0FBQUEsU0FDUjtBQUFBLGlCQUNRO0FBQUEsU0FDUixxQkFBc0I7QUFBQSxTQUN0QixZQUFXO0FBQUEsVUFDVCxZQUFXLGVBQWlCLFdBQVc7QUFBQSxVQUN2QyxPQUFPO0FBQUE7QUFBQSxTQUVULFFBQVE7QUFBQTtBQUFBLG1CQUVFLHFCQUNGO0FBQUEsU0FDUjtBQUFBLGlCQUNRO0FBQUEsU0FDUixxQkFBc0I7QUFBQSxTQUN0QixZQUFXO0FBQUEsVUFDVCxZQUFXLGVBQWlCLE9BQU87QUFBQSxVQUNuQyxPQUFPO0FBQUE7QUFBQSxTQUVULFFBQVE7QUFBQTtBQUFBLG1CQUVFLHNCQUNGO0FBQUEsU0FDUjtBQUFBLFNBQ0EscUJBQXNCO0FBQUEsaUJBQ2Q7QUFBQSxTQUNSLFlBQVc7QUFBQSxVQUNULFlBQVcsZUFBaUIsV0FBVztBQUFBLFVBQ3ZDLE9BQU87QUFBQTtBQUFBLFNBRVQsUUFBUTtBQUFBO0FBQUEsbUJBRUUsc0JBQ0Y7QUFBQSxTQUNSO0FBQUEsaUJBQ1E7QUFBQSxTQUNSLFlBQVc7QUFBQSxVQUNULFlBQVcsZUFBaUIsT0FBTztBQUFBLFVBQ25DLE9BQU87QUFBQTtBQUFBLFNBRVQsUUFBUTtBQUFBO0FBQUE7QUFBQSxTQUdSLDRDQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBS0k7QUFBQSxTQUNKLFdBQVksd0JBQXdCLEtBQUs7QUFBQSxtQkFDakM7QUFBQSxTQUVSO0FBQUEsVUFDRTtBQUFBLFNBQ0Y7QUFBQSxzQkFFSTtBQUFBO0FBQUEsWUFFQTtBQUFBLGFBQ0U7QUFBQSxZQUdGO0FBQUEsWUFDQTtBQUFBO0FBQUEsWUFFQSxnQkFBZ0I7QUFBQSxZQUVoQjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUE7QUFBQSxvQkFFSyxTQUNEO0FBQUEsU0FDUjtBQUFBLFVBQWlDO0FBQUEsV0FFN0I7QUFBQTtBQUFBLFNBSUoscUJBQXNCO0FBQUEsU0FDdEIsUUFBUTtBQUFBLGlCQUVSO0FBQUE7QUFBQSxJQUlWO0FBQUEsSUFDQTtBQUFBLEtBQWdCO0FBQUE7QUFBQSxjQUVEO0FBQUEsYUFDRDtBQUFBLGFBQ0E7QUFBQSxnQkFDRztBQUFBO0FBQUEsTUFFYjtBQUFBLGNBR007QUFBQSxJQUNWO0FBQUEsZ0JBQ2EsaUJBQ0gsaUJBQ0Y7QUFBQSxLQUNOLGFBQWM7QUFBQSxLQUNkLE9BQU87QUFBQTtBQUFBLElBRVQ7QUFBQSxhQUNVO0FBQUEsS0FDUixjQUFlO0FBQUE7QUFBQSxJQUVqQixVQUFVO0FBQUEsR0FDWjtBQUFBO0FBQUE7QUFBQSxTQWpWVTtBQUFBLFdBQ0E7QUFBQTtBQUFBLE9BQ0c7QUFBQSxVQUVMO0FBQUEsVUFDQTtBQUFBLElBQ04sT0FBTyxvQ0FBb0M7QUFBQSxHQUM3QztBQUFBO0FBQUE7QUFBQSxZQzROYTtBQUFBLGNBQ0U7QUFBQTtBQUFBLGFBRUw7QUFBQSxLQUNOO0FBQUEsTUFDRTtBQUFBLE9BQ0U7QUFBQSxPQUNBO0FBQUEsT0FDQTtBQUFBO0FBQUEsTUFFRix3Q0FBeUM7QUFBQSxNQUN6QztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUE7QUFBQSxLQUVGLFFBQVE7QUFBQSxJQUNWO0FBQUEsWUFDUTtBQUFBLElBQ1I7QUFBQSxLQUFhO0FBQUE7QUFBQSxLQUVYO0FBQUE7QUFBQSxXQUNRLHVCQUF1QjtBQUFBLFdBQ3ZCO0FBQUEsSUFDVjtBQUFBLFlBQ1E7QUFBQSxJQUNSO0FBQUEsS0FBYTtBQUFBLGNBQ0gsNEJBQTRCO0FBQUEsSUFDdEMsVUFBVTtBQUFBLEdBQ1o7QUFBQSxnREFNRSxPQUFPLG1CQUFtQixDQUM1QjtBQUFBLDBDQzVIRSxRQUFRLENBQ1Y7QUFBQTtBQUFBLElxQjlKRTtBQUFBO0FBQUEsb0NBS0M7QUFBQSxHQUNIO0FBQUEsaUNibUdFLE9BQU8sUUFBUSxDQUNqQjtBQUFBLGlDQXlCRSxPQUFPLFFBQVEsQ0FDakI7QUFBQTtBQUFBLFlhMUhVO0FBQUEsSUFDUixPQUFPO0FBQUEsOERBQXFFO0FBQUEsR0FDOUU7QUFBQSxpQ2JxSkUsT0FBTyxRQUFRLENBQ2pCO0FBQUEsa0NBekNFLFNBQVEsVUFBVSxDQUNwQjtBQUFBO0FBQUEsSUFvREUsT0FBTywrREFBbUU7QUFBQSxHQUM1RTtBQUFBLG1DQU1FLE9BQU8sU0FBUyxDQUNsQjtBQUFBLHNDQXhERSxTQUFRLFNBQVMsQ0FDbkI7QUFBQSw4QkEzQkUsT0FBTyxPQUFPLENBQ2hCO0FBQUE7QUFBQSxZQXlHVTtBQUFBLElBQ1IsbUJBQW9CLDJCQUNsQixjQUNBLElBQUk7QUFBQTtBQUFBLGNBRUs7QUFBQSxhQUNDO0FBQUEsYUFDRjtBQUFBLElBQ1Y7QUFBQSxhQUNVO0FBQUEsS0FDUjtBQUFBLEtBQ0EsU0FBUyxhQUFhO0FBQUE7QUFBQTtBQUFBLFFBQ2Q7QUFBQSxJQUNWO0FBQUEsS0FDRTtBQUFBLGFBQ007QUFBQSxLQUNOLFVBQVcsU0FBUztBQUFBO0FBQUEsSUFFdEIsT0FBTyxpQ0FBaUM7QUFBQSxHQUMxQztBQUFBLGlDQTNERSxPQUFPLFFBQVEsQ0FDakI7QUFBQSxpQ0FuREUsT0FBTyxRQUFRLENBQ2pCO0FBQUEsaUNBM0JFLE9BQU8saUJBQWlCLENBQzFCO0FBQUE7QUFBQTtBQUFBLFNhek5RO0FBQUEsV0FDRTtBQUFBLFlBQ0Q7QUFBQSxZQUNBO0FBQUEsa0JBQ007QUFBQSxJQUNiO0FBQUEsS0FBYSxPQUNIO0FBQUE7QUFBQSxRQUVKLEtBQ0EsWUFDQTtBQUFBO0FBQUEsUUFFQSxLQUNBLFVBQ0E7QUFBQTtBQUFBLElBR04sa0JBQW1CO0FBQUEsS0FDakIsT0FBUTtBQUFBO0FBQUE7QUFBQSxRQUdKLGdCQUNBLFdBQ0EsUUFDQTtBQUFBO0FBQUE7QUFBQSxRQUdBLGdCQUNBLFVBQ0EsUUFDQTtBQUFBO0FBQUE7QUFBQSxRQUdBLGdCQUNBLFVBQ0EsUUFDQTtBQUFBO0FBQUE7QUFBQSxRQUdBLGdCQUNBLFFBQ0E7QUFBQTtBQUFBLElBRU4sa0NBQWtDO0FBQUEsR0FDcEM7QUFBQTtBQUFBLElBSUUsdUJBQXdCLGFBQWE7QUFBQSxJQUNyQyx1QkFBd0IsYUFBYTtBQUFBLElBQ3JDLHdCQUF5QixhQUFhO0FBQUEsSUFDdEMsVUFBUztBQUFBLEdBQ1g7QUFBQTtBQUFBO0FBQUEsU2JtVFU7QUFBQSxTQUNGO0FBQUEsWUFDQztBQUFBLFlBQ0E7QUFBQSxrQkFDTTtBQUFBLGNBQ0E7QUFBQSxpQkFDRztBQUFBLFNBQ1I7QUFBQSxTQUNBO0FBQUEsSUFDUix1QkFBd0I7QUFBQSxjQUNkO0FBQUEsSUFDVjtBQUFBLEtBQ0U7QUFBQSxLQUNBLElBQUk7QUFBQSxLQUNKLGFBQWM7QUFBQSxLQUNkLElBQUk7QUFBQSxLQUNKLHVCQUF3QjtBQUFBLEtBRXhCLEdBQUksZ0NBQWdDO0FBQUEsS0FDcEMsSUFBSTtBQUFBLEtBQ0osTUFBTSxlQUFlO0FBQUEsS0FFckIsR0FBSSx3QkFBd0I7QUFBQTtBQUFBLElBRTlCLFNBQVUsMEJBQTBCO0FBQUEsSUFDcEM7QUFBQTtBQUFBO0FBQUEsT0FFRTtBQUFBLEtBRUE7QUFBQSxJQUNGLGFBQWMsTUFBTTtBQUFBLElBQ3BCLFVBQVU7QUFBQSxHQUNaO0FBQUEsZ0NBaklFLE9BQU8sT0FBTyxDQUNoQjtBQUFBLHdDQVNFLE9BQU8sZUFBZSxDQUN4QjtBQUFBLHlDQVNFLE9BQU8sZ0JBQWdCLENBQ3pCO0FBQUEsa0RBTkUsT0FBTyx5QkFBeUI7QUFBQSxHQUNsQztBQUFBLGlDQTFDRSxPQUFPLFFBQVEsQ0FDakI7QUFBQSxtQ0EyRUUsT0FBTyxXQUFXLENBQ3BCO0FBQUEsaUNBOUNFLE9BQU8sUUFBUSxDQUNqQjtBQUFBO0FBQUE7QUFBQSxTYWhOVTtBQUFBLFNBQ0Y7QUFBQSxZQUNDO0FBQUEsWUFDQTtBQUFBLGtCQUNNO0FBQUEsV0FDSDtBQUFBLGlCQUNJO0FBQUEsU0FDUixVQUFZO0FBQUEsU0FDVjtBQUFBLElBQ1IsdUJBQXdCO0FBQUEsY0FDaEI7QUFBQSxJQUNSO0FBQUEsS0FDRSxJQUFJO0FBQUEsS0FDSixhQUFjO0FBQUEsS0FDZCxJQUFJO0FBQUEsS0FDSix1QkFBd0I7QUFBQSxLQUN4QjtBQUFBLEtBQ0Esb0JBQXFCO0FBQUE7QUFBQSxJQUV2QixjQUFlO0FBQUEsSUFJZjtBQUFBLElBQ0Esb0NBRUU7QUFBQSxJQUNGLGNBQWM7QUFBQSxHQUNoQjtBQUFBLDZCckIwT3dCO0FBQUEseUJHL090QixRQUFRLENBQ1Y7QUFBQSxpQ0R1S0UsNEJBQTJCLENBQzdCO0FBQUE7QUFBQSxJQ1RFLE9BQU8sV0FBVyx5QkFBeUI7QUFBQSxHQUM3QztBQUFBLGlDQTFQRSxhQUNBLFFBQVEsQ0FDVjtBQUFBLGlDQTZhRSxpQkFBZ0IsQ0FDbEI7QUFBQTtBQUFBLEkyQmhZRSxpQkFBa0IsbUJBQ0c7QUFBQSxJQUVyQixXQUFXO0FBQUEsR0FDYjtBQUFBO0FBQUEsSTNCK0dFLGlCQUFrQix3QkFDUTtBQUFBLElBRTFCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQXlSRSxPQUFXLHlCQUFxQiwyQkFBMkI7QUFBQSxHQUM3RDtBQUFBO0FBQUEsSUFLRTtBQUFBLElBS0EsT0FBVywwQkFBc0IsaUNBQWlDO0FBQUEsR0FDcEU7QUFBQSxpQ0E1UkUsWUFBVSxDQUNaO0FBQUEsa0NBU0UsUUFBUSxDQUNWO0FBQUEsbUNOMmxCRSxPQUFPLDBCQUEwQixDQUNuQztBQUFBO0FBQUEsSU16aEJFO0FBQUE7QUFBQSxPQUVJLE9BQU8sR0FBRztBQUFBO0FBQUEsT0FFVixPQUFPLE9BQU87QUFBQTtBQUFBLE9BRWQsT0FBTyxhQUFhO0FBQUE7QUFBQSxPQUVwQixPQUFPLG1CQUFtQjtBQUFBO0FBQUEsT0FFMUIsT0FBTyx5QkFBeUI7QUFBQTtBQUFBLE9BRWhDLE9BQU8sK0JBQStCO0FBQUE7QUFBQSxPQUV0QyxPQUFPLHFDQUFxQztBQUFBO0FBQUEsT0FFNUMsT0FBTywyQ0FBMkM7QUFBQTtBQUFBLElBRXRELE9BQU8sY0FBYyxzQkFBc0I7QUFBQSxHQUM3QztBQUFBLHNDQXdJRSxzQ0FBd0MsQ0FDMUM7QUFBQSw4QkE5WkUsV0FBVyxDQUNiO0FBQUE7QUFBQTtBQUFBLFMyQmFRO0FBQUE7QUFBQSxPQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxpQkFnQlE7QUFBQSxJQUNkLFlBQVcsc0JBQXdCLGNBQWM7QUFBQSxJQUNqRCxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsaUJBbkNhO0FBQUEsSUFDWCxHQUFJO0FBQUEscUJBRU87QUFBQSxLQUNUO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQSxLQUNBLFVBQVU7QUFBQTtBQUFBO0FBQUEsS0FDTCxXQUNNO0FBQUEsR0FFZjtBQUFBLHlCQXRCb0I7QUFBQTtBQUFBLElBRWxCLEtBQUssNkJBQTZCLFFBQVE7QUFBQSxJQUMxQyxPQUFPO0FBQUE7QUFBQSw0Q0FHbUM7QUFBQSxHQUM1QztBQUFBLHFDM0JlRSw2QkFBNkIsQ0FDL0I7QUFBQTtBQUFBLElBK1FFLE9BQU8sRUFBRSxpQ0FBRixJQUF1Qyx5QkFBeUI7QUFBQSxHQUN6RTtBQUFBO0FBQUEsSUFJRTtBQUFBO0FBQUEsT0FFSSxPQUFPLE9BQU87QUFBQTtBQUFBLE9BRWQsT0FBTyxXQUFXO0FBQUE7QUFBQSxPQUVsQixPQUFPLGlCQUFpQjtBQUFBO0FBQUEsT0FFeEIsT0FBTyx1QkFBdUI7QUFBQTtBQUFBLE9BRTlCLE9BQU8sNkJBQTZCO0FBQUE7QUFBQSxPQUVwQyxPQUFPLG1DQUFtQztBQUFBO0FBQUEsT0FFMUMsT0FBTyx5Q0FBeUM7QUFBQTtBQUFBLE9BRWhELE9BQU8sK0NBQStDO0FBQUE7QUFBQSxpQkFHeEQsT0FBTyxjQUFjLHNCQUFzQixDQUM3QztBQUFBLElBQ0E7QUFBQSxJQUNBLE9BQU8sT0FBTztBQUFBLEdBQ2hCO0FBQUE7QUFBQSxZQXVLUTtBQUFBLElBQ04sWUFBVztBQUFBLGFBQ0g7QUFBQSxLQUNOLEVBQUU7QUFBQTtBQUFBLElBRUosUUFBUTtBQUFBLEdBQ1Y7QUFBQSxpQ0E3ZUUsT0FBTyxxQkFBcUIsQ0FDOUI7QUFBQSxpQ0FJRSxVQUNBLFFBQVEsQ0FDVjtBQUFBLHdDQTJiRSxrQkFBaUIsQ0FDbkI7QUFBQTtBQUFBLGNBek9VLGNBQ0E7QUFBQSxJQUNSO0FBQUEsSUFDQSxZQUFXLGlCQUFtQjtBQUFBLElBQzlCLFFBQVE7QUFBQSxHQUNWO0FBQUEsK0JBN0JFLFVBQVMsQ0FDWDtBQUFBLHNDTjBsQkUsT0FBTyx5QkFBeUIsQ0FDbEM7QUFBQSxnQ01sbEJFLFFBQVEsQ0FDVjtBQUFBLGdDQUlFLFlBQVksQ0FDZDtBQUFBLGlDTmdtQkUsT0FBTywwQkFBMEIsQ0FDbkM7QUFBQSw4Qk0xeEJFLGVBQWUsQ0FDakI7QUFBQTtBQUFBLFlBNk5VO0FBQUEsSUFFUixLQUFLO0FBQUEsS0FDSDtBQUFBO0FBQUE7QUFBQSxJQVFGLE9BQVcsU0FBSztBQUFBLEdBQ2xCO0FBQUE7QUFBQSxJQTRGRTtBQUFBLEtBQ0Usc0JBQXVCO0FBQUEsZUFHYjtBQUFBLEtBQ1YsaUNBQWlDLGdDQUFnQyxDQUw1RCxDQU1OO0FBQUEsR0FDSDtBQUFBO0FBQUEsSUFLRSx5QkFDRSxPQUFPLHdCQUF3QixDQUQxQixDQUVOO0FBQUEsR0FDSDtBQUFBO0FBQUEsSUFJRTtBQUFBLEtBQ0U7QUFBQSxLQUNBLE9BQU8sc0JBQXNCLENBRnhCLENBR047QUFBQSxHQUNIO0FBQUE7QUFBQSxJQUlFO0FBQUEsZUFDWTtBQUFBLEtBQ1Y7QUFBQSxLQUNBLE9BQU8sc0JBQXNCLENBSHhCLENBSU47QUFBQSxHQUNIO0FBQUE7QUFBQSxJQUlFO0FBQUEsS0FDRTtBQUFBLGVBQ1U7QUFBQSxLQUNWLGlDQUFpQyxnQ0FBZ0MsQ0FINUQsQ0FJTjtBQUFBLEdBQ0g7QUFBQTtBQUFBLElBSUUseUJBQ0UsT0FBTyw4QkFBOEIsQ0FEaEMsQ0FFTjtBQUFBLEdBQ0g7QUFBQTtBQUFBLElBSUU7QUFBQSxLQUNFO0FBQUEsS0FDQTtBQUFBLEtBQ0EsT0FBTyxzQkFBc0IsQ0FIeEIsQ0FJTjtBQUFBLEdBQ0g7QUFBQTtBQUFBLElBSUU7QUFBQSxlQUNZO0FBQUEsS0FDVjtBQUFBLEtBQ0E7QUFBQSxLQUNBLE9BQU8sc0JBQXNCLENBSnhCLENBS047QUFBQSxHQUNIO0FBQUE7QUFBQSxJQWhURSxPQUFPLG1DQUEwQztBQUFBLEdBQ25EO0FBQUEsaURBUEUsUUFBNEIsQ0FDOUI7QUFBQSxzQ2NRRSxlQUFlLENBQ2pCO0FBQUE7QUFBQSxJQXpFRSxHQUFJO0FBQUEsS0FBeUMsV0FBVztBQUFBLFlBQy9DO0FBQUEsS0FBcUIsVUFBVTtBQUFBLFlBQy9CO0FBQUEsS0FBc0IsVUFBVTtBQUFBO0FBQUEsS0FDa0IsVUFBVTtBQUFBLDRCQUM1QyxVQUFVLE9BQzlCLFdBQVc7QUFBQSxHQUNsQjtBQUFBO0FBQUEsSUFzTUUsT0FBTyxrQ0FBa0M7QUFBQSxHQUMzQztBQUFBO0FBQUEsSUEzQ0UsZUFDRSxVQUNBLFFBQVE7QUFBQSxJQUVWLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQTZCRTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBekJFLE9BQ0U7QUFBQSxlQUVBO0FBQUE7QUFBQSxlckJyUEo7QUFBQSxHcUIyUEE7QUFBQTtBQUFBLElBTUU7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJRGpGRTtBQUFBLElBQ0E7QUFBQSxLQUNFO0FBQUEsS0FDQSxLQUFLO0FBQUEsS0FDTCxlQUVFLGFBQ0EsS0FBSztBQUFBO0FBQUEsSUFHVCxpQkFDRSxhQUNBLEtBQUs7QUFBQSxJQUVQLEtBQUs7QUFBQSxJQUNMLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJTzRHRSxVQUFTLG1DQUFtQztBQUFBLEdBQzlDO0FBQUEsZ0NBTUUsVUFBUyxrQ0FBa0MsQ0FDN0M7QUFBQTtBQUFBLElRbFNFLElBQUk7QUFBQSxZQUNFLGtCQUNFO0FBQUEsSUFDUixZQUFXO0FBQUEsS0FDVCxRQUFTLHNCQUF1QjtBQUFBLElBQ2xDLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQTtBQUFBLGtCQU1pQjtBQUFBLHNCQUNJO0FBQUEscUJBQ0Q7QUFBQSxvQkFDRDtBQUFBLG9CQUNBO0FBQUEsdUJBQ0c7QUFBQSx1QkFDQTtBQUFBLGdCQUNQO0FBQUEsbUJBQ0c7QUFBQSxtQkFDQTtBQUFBLGlCQUNGO0FBQUEsaUJBQ0E7QUFBQSxJQUVkO0FBQUEsS0FDRSxlQUFlO0FBQUEsS0FDZixrQkFBa0I7QUFBQSxLQUNsQixnQkFBZ0I7QUFBQSxLQUNoQixnQkFBZ0I7QUFBQSxLQUNoQixrQkFBa0I7QUFBQTtBQUFBLG1CQUlaLHNCQUVHO0FBQUEsSUFFWDtBQUFBLEtBRUU7QUFBQSxLQUNBO0FBQUE7QUFBQTtBQUFBLEtBQ0s7QUFBQSxJQUlQO0FBQUEsZ0JBRVc7QUFBQSxLQUNULGFBQWMsaUJBQWdCO0FBQUEsbUJBRWxCO0FBQUEsS0FDWjtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUE7QUFBQSxLQUdGO0FBQUEsTUFBb0Qsa0NBQ2Ysa0JBQWlCLE9BQy9DO0FBQUE7QUFBQSxNQUdMLElBQUk7QUFBQSxNQUNKO0FBQUE7QUFBQSxLQUdGO0FBQUEsTUFBdUM7QUFBQTtBQUFBLE1BQ2xDO0FBQUEsS0FFTDtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsT0FBb0M7QUFBQTtBQUFBLE9BQy9CLDhCQUE4QjtBQUFBO0FBQUEsd0JBS3BCO0FBQUE7QUFBQSxHQUdyQjtBQUFBO0FBQUEsZXpCNkJXO0FBQUEsSUFDVCxZQUFXO0FBQUEsZUFDRDtBQUFBLEtBQ1IsV0FBVztBQUFBO0FBQUEsSUFFYixXQUFXO0FBQUEsR0FDYjtBQUFBO0FBQUEsWUhvSFE7QUFBQSxJQUNOLFlBQVcsbUNBQ0gsTUFDTjtBQUFBLElBRUYsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLFlBSVE7QUFBQSxJQUNOLHlCQUNFO0FBQUEsSUFFRixRQUFRO0FBQUEsR0FDVjtBQUFBLGdDYU5FLE9BQU8sYUFBYSxDQUN0QjtBQUFBLGdDQWJFLE9BQU8sYUFBYSxDQUN0QjtBQUFBLCtCQUdFLE9BQU8sWUFBWSxDQUNyQjtBQUFBO0FBQUE7QUFBQSxNZ0J6UGlCLHFCQUNmO0FBQUE7QUFBQSxNQU9rQixxQkFDbEI7QUFBQTtBQUFBLDJCQWlCRSxPQUFPLDJCQUEyQixDQUNwQztBQUFBLDJCQUVFLE9BQU8scUNBQXFDLENBQzlDO0FBQUEsc0JBRUUsT0FBTyxtQkFBbUIsQ0FDNUI7QUFBQSx1QkFFRSxPQUFPLG9CQUFvQixDQUM3QjtBQUFBLHVCQUVFLE9BQU8sb0JBQW9CLENBQzdCO0FBQUEsdUJBRUUsT0FBTyxvQkFBb0IsQ0FDN0I7QUFBQSx3QkFFRSxPQUFPLEdBQUcsZUFBZSxtQkFBbUIsQ0FDOUM7QUFBQSx1QkFFRSxPQUFPLG1CQUFtQixDQUM1QjtBQUFBLDBCQUVFLE9BQU8sc0JBQXNCLENBQy9CO0FBQUE7QUFBQSxTQUNNO0FBQUEsWUFDRztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBRUY7QUFBQSxTQUNDO0FBQUEsU0FDQTtBQUFBLFVBQ0M7QUFBQSxVQUNBO0FBQUEsSUFFVCxJQUFJO0FBQUEsSUFFSixJQUFJLElBQUksT0FBTztBQUFBLElBQ2YsSUFBSSxJQUFJLE9BQU87QUFBQSxJQUNmLElBQUksT0FBTztBQUFBLElBRVgsV0FBVyxJQUFJO0FBQUEsYUFFUixTQUNBO0FBQUEsSUFDUCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLLElBQUksYUFBYTtBQUFBLElBQ3RCLEtBQUs7QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLEliOEhFLHNDQUF5QztBQUFBLGNBQ2pDLGlCQUNBO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBVyxpQkFBbUI7QUFBQSxJQUM5QixRQUFRO0FBQUEsR0FDVjtBQUFBLHNDQVpFLE9BQU8sMEJBQTBCLENBQ25DO0FBQUE7QUFBQTtBQUFBLE1yQnhMMkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwwQ0l3UnpCLFFBQVEsQ0FDVjtBQUFBO0FBQUEsY2F4RVksb0JBQ0Y7QUFBQSxJQUNSLG9CQUFvQjtBQUFBLElBQ3BCLE9BQU8sMkJBQTJCLG1CQUFtQjtBQUFBLEdBQ3ZEO0FBQUE7QUFBQTtBQUFBLFloQjRKYTtBQUFBLFNBQ0w7QUFBQSxhQUNJO0FBQUEsSUFDVjtBQUFBLEtBQ0UsT0FBTztBQUFBLEtBQ1A7QUFBQTtBQUFBO0FBQUEsS0FFQTtBQUFBLE9BQU87QUFBQSxLQUNQO0FBQUEsS0FDQTtBQUFBO0FBQUE7QUFBQSxLQUVBO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQSxpQkFDVTtBQUFBLEtBQ1YsY0FBZTtBQUFBLEtBQ2YsT0FBTztBQUFBLEtBQ1A7QUFBQTtBQUFBLElBRUYsWUFBWTtBQUFBLEdBQ2Q7QUFBQTtBQUFBLGNnQmpZWSx5QkFDRztBQUFBLElBQ2I7QUFBQSxLQUFnQjtBQUFBLGlCQUVEO0FBQUEsTUFDWCxlQUFnQjtBQUFBLE1BQ2hCLG9CQUFvQjtBQUFBO0FBQUE7QUFBQSxLQUVqQjtBQUFBO0FBQUE7QUFBQSxTQUVRO0FBQUE7QUFBQSxNQU1YLGVBQWdCO0FBQUEsTUFDaEIsb0JBQW9CO0FBQUEsTUFDcEI7QUFBQTtBQUFBLElBR0osT0FBTywyQkFBMkIsbUJBQW1CO0FBQUEsR0FDdkQ7QUFBQTtBQUFBLElBS0UsT0FBTyxlQUFlLGtDQUFrQztBQUFBLEdBQzFEO0FBQUEscUNZaUNFLFFBQVEsQ0FDVjtBQUFBLDZEQVpFLFFBQVEsQ0FDVjtBQUFBLHFDQUlFLFFBQVEsQ0FDVjtBQUFBO0FBQUE7QUFBQSxrQjVCc0ZtQjtBQUFBLFlBQ047QUFBQSxJQUNYO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxHQUNuQjtBQUFBLDBEQUtFLDRDQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQWtJYTtBQUFBLElBQ1gsT0FBTyxzQkFBc0I7QUFBQSxHQUMvQjtBQUFBO0FBQUEsZUFLYTtBQUFBLElBQ1gsT0FBTyxvQkFBb0IsbUJBQW1CO0FBQUEsR0FDaEQ7QUFBQSxzQkF0U21CO0FBQUE7QUFBQSxZQUtYO0FBQUEsSUFDTixNQUNFLHFCQUNBO0FBQUEsSUFFRixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsZUFpaEJhO0FBQUEsSUFDWCxrQkFBa0I7QUFBQSxJQUNsQiw0Q0FBNEMsUUFBUTtBQUFBLElBQ3BEO0FBQUEsS0FDRTtBQUFBLE9BQ0U7QUFBQTtBQUFBLEtBRUcsY0FDUTtBQUFBLE1BQStCLE9BQ25DO0FBQUEsSUFHWDtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQTlSYTtBQUFBLElBQ1g7QUFBQSxLQUNFO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUEsS0FDQSxjQUFjO0FBQUEsS0FDZDtBQUFBLEtBQ0E7QUFBQTtBQUFBLElBRUYsUUFBUTtBQUFBLEdBQ1Y7QUFBQSw0Q21CYkUsUUFBUSxDQUNWO0FBQUEseUNBYkUscUJBQXVCLENBQ3pCO0FBQUEseUNBaUJFLFFBQVEsQ0FDVjtBQUFBLGdEQWJFLFFBQVEsQ0FDVjtBQUFBLHdDakJsUEUsUUFBUSxDQUNWO0FBQUEsNENtQjBIRSxRQUFRLENBQ1Y7QUFBQSxxQ0FQRSxxQkFBcUIsQ0FDdkI7QUFBQSwrQnBCMkswQjtBQUFBLGtEQUt4Qiw4QkFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsYURtQ1c7QUFBQSxJQUNULE9BQU8scUNBQXFDO0FBQUEsR0FDOUM7QUFBQTtBQUFBLGFBT1c7QUFBQSxJQUNULE9BQU8scUNBQXFDO0FBQUEsR0FDOUM7QUFBQTtBQUFBLGVBeUVhO0FBQUEsSUFDWDtBQUFBLEtBQ0U7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFFRix3Q0FBeUM7QUFBQSxjQUNqQztBQUFBLElBQ1I7QUFBQSxJQUNBLFVBQVU7QUFBQSxHQUNaO0FBQUE7QUFBQSxjQUtVO0FBQUEsSUFDUixZQUFXO0FBQUEsS0FBaUIsbUJBQ047QUFBQSxJQUV0QixjQUFjO0FBQUEsR0FDaEI7QUFBQTtBQUFBLGVBMERhLGlDQUNMO0FBQUEsSUFDTjtBQUFBLEtBQUc7QUFBQSxNQUVDO0FBQUEsT0FDRSxnQkFBZ0I7QUFBQSxPQUNoQjtBQUFBLE9BQ0E7QUFBQSxPQUNBO0FBQUE7QUFBQSxNQUVGLDBDQUEyQyw0QkFDZDtBQUFBLHFCQUVoQjtBQUFBLE1BQ2I7QUFBQSxNQUNBLGlDQUFrQyw0QkFDTDtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSWpDLCtCQUFpQztBQUFBLEdBQ25DO0FBQUE7QUFBQSxlQXBSYTtBQUFBLElBQ1gsNkJBQTZCO0FBQUEsR0FDL0I7QUFBQTtBQUFBLElBbWJFLE9BQU8sNENBQTRDO0FBQUEsR0FDckQ7QUFBQTtBQUFBLElVOXJCRTtBQUFBLEtBQWM7QUFBQTtBQUFBLEtBQ1Q7QUFBQSxJQUNMLFFBQVE7QUFBQSxHQUNWO0FBQUEscUNBVEUsT0FBTyxhQUFhLENBQ3RCO0FBQUE7QUFBQSxJQVlFLGVBQ0UsaUJBQ0EsUUFBUTtBQUFBLElBRVYsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElFNGhCRTtBQUFBLEtBQW1CO0FBQUEsZUFFTiwwQkFDQztBQUFBLE1BQ1YsT0FBTyx3QkFBd0I7QUFBQTtBQUFBO0FBQUEsSUFHbkMsT0FBTyx1QkFBdUI7QUFBQSxHQUNoQztBQUFBO0FBQUE7QUFBQSxJWjlnQkU7QUFBQSxLQUNFO0FBQUEsS0FDQSxTQUFTO0FBQUE7QUFBQTtBQUFBLEtBQ21CO0FBQUE7QUFBQSxLQUV2QixTQUFTO0FBQUEsSUFDaEI7QUFBQSxJQUNBLGNBQWM7QUFBQSxHQUNoQjtBQUFBO0FBQUEsWUFFUTtBQUFBLElBQ047QUFBQSxLQUNFO0FBQUE7QUFBQSxRQUVJLGNBQ0E7QUFBQTtBQUFBLFFBRUEsY0FDQTtBQUFBO0FBQUEsUUFFQSxjQUNBLGlCQUNBO0FBQUE7QUFBQSxRQUVBLGNBQ0E7QUFBQTtBQUFBLFFBRUEsZ0JBQ0E7QUFBQTtBQUFBLFFBRUEsWUFDQTtBQUFBO0FBQUEsUUFFQSxjQUNBO0FBQUE7QUFBQSxRQUVBLFlBQ0E7QUFBQTtBQUFBLFFBRUEsZ0JBQ0E7QUFBQTtBQUFBLEtBRUo7QUFBQTtBQUFBO0FBQUEsWUFFUztBQUFBLFlBQ0E7QUFBQSxJQUNYLE9BQU8sdUNBQXVDO0FBQUEsR0FDaEQ7QUFBQSxHQUNBO0FBQUEsb0JBQ2dCO0FBQUE7QUFBQSxPQUVaO0FBQUEsaUJBQ1M7QUFBQSxpQkFDSywyQkh2R2xCO0FBQUEsTUd3R0U7QUFBQSxNQUNBO0FBQUEsUUFDRTtBQUFBO0FBQUEsTUFHRjtBQUFBLFFBQ0U7QUFBQTtBQUFBO0FBQUEsTUFHRjtBQUFBLFFBQ0U7QUFBQTtBQUFBO0FBQUEsS0FoQkg7QUFBQSxLQUFEO0FBQUE7QUFBQSxrQkE4SGM7QUFBQSxJQUNaO0FBQUEsS0FDRTtBQUFBO0FBQUEsWUFDTztBQUFBLGNBQ0U7QUFBQSxjQUNBO0FBQUE7QUFBQSxPQUNDO0FBQUEsZ0JBRUY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBTUE7QUFBQTtBQUFBLElBR1Y7QUFBQSxJQUNBLGFBQWE7QUFBQSxHQUNmO0FBQUEsOERBTUUsT0FBTyw4QkFBOEI7QUFBQSxHQUN2QztBQUFBO0FBQUEsa0JBcERjO0FBQUEsSUFDWjtBQUFBLEtBQ0U7QUFBQTtBQUFBLFlBQ087QUFBQSxjQUNFO0FBQUEsZ0JBQ0U7QUFBQTtBQUFBLE9BQ0Q7QUFBQSxnQkFFRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBS0E7QUFBQTtBQUFBLElBR1Y7QUFBQSxJQUNBLGFBQWE7QUFBQSxHQUNmO0FBQUEsK0RBd0NFLE9BQU8sK0JBQStCO0FBQUEsR0FDeEM7QUFBQTtBQUFBLFlBMUVRLFVBQ0s7QUFBQSxJQUNYO0FBQUEsZ0JBQ2E7QUFBQSxLQUNYLDRCQUE2QjtBQUFBO0FBQUEsSUFFL0IsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBMllhO0FBQUEsSUFDWDtBQUFBLEtBQWtCO0FBQUEsSUFDbEIsU0FBUztBQUFBLElBQ1Q7QUFBQSxhQUNVO0FBQUEsS0FDUjtBQUFBLEtBQ0E7QUFBQTtBQUFBLElBRUY7QUFBQTtBQUFBLE9BRUk7QUFBQSxPQUNBO0FBQUEsT0FDQTtBQUFBLE9BQ0E7QUFBQTtBQUFBLE9BRUE7QUFBQSxPQUNBO0FBQUEsT0FDQSwyQ0FBNEM7QUFBQSxPQUM1QztBQUFBO0FBQUEsZ0JBRVM7QUFBQSxPQUNUO0FBQUEsUUFDRTtBQUFBLFFBQ0E7QUFBQSxRQUNBLDJDQUE0QztBQUFBO0FBQUE7QUFBQSxRQUU1QyxnQkFBZ0I7QUFBQSxRQUNoQjtBQUFBLFFBQ0E7QUFBQSxRQUNBLGdCQUFnQjtBQUFBLFFBQ2hCO0FBQUE7QUFBQSxPQUVGO0FBQUE7QUFBQSxJQUVKLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxpQkFLZTtBQUFBLElBQ2IsT0FBTyw4Q0FBOEM7QUFBQSxHQUN2RDtBQUFBO0FBQUEsSUFhRSxPQUFPO0FBQUEscUJBRUwsMENBR0Q7QUFBQSxHQUNIO0FBQUE7QUFBQSxpQkFiZTtBQUFBLElBQ2IsT0FBTyw4Q0FBOEM7QUFBQSxHQUN2RDtBQUFBO0FBQUEsWUFpQlUsdUJBQXVCO0FBQUEsSUFDL0I7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxjQXNEVTtBQUFBLElBQ1IsMEJBQTBCO0FBQUEsSUFDMUIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBck1hO0FBQUEsSUFDWCx5REFBeUQ7QUFBQSxHQUMzRDtBQUFBLG1DQUtFLE9BQU8sdUJBQXVCLENBQ2hDO0FBQUE7QUFBQSxJQUtFLE9BQU8sb0JBQW9CLG9CQUFvQjtBQUFBLEdBQ2pEO0FBQUE7QUFBQSxlQWlLYTtBQUFBLElBQ1gscUNBQXFDO0FBQUEsR0FDdkM7QUFBQSxvQ0FLRSxPQUFPLHdCQUF3QixDQUNqQztBQUFBO0FBQUEsSUFLRSxPQUFPLG9CQUFvQixxQkFBcUI7QUFBQSxHQUNsRDtBQUFBLGdEeUI3b0JFLFFBQVEsQ0FDVjtBQUFBLDJDQWJFLFFBQVEsQ0FDVjtBQUFBLDRDQXVCRSxRQUFRLENBQ1Y7QUFBQSwyQ0FyQ0UsUUFBUSxDQUNWO0FBQUEsb0R4QjJURSw0QkFBNEI7QUFBQSxHQUM5QjtBQUFBO0FBQUEsZUQwSWE7QUFBQSxJQUNYLHdCQUF5QjtBQUFBLElBQ3pCO0FBQUE7QUFBQTtBQUFBLEtBSUU7QUFBQTtBQUFBLEtBR0E7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQTtBQUFBLElBRUYsUUFBUTtBQUFBLEdBQ1Y7QUFBQSx5Q0FLRSxPQUFPLHlCQUF5QixDQUNsQztBQUFBO0FBQUEsY0FLWTtBQUFBLElBQ1YsT0FBTyx5QkFBeUI7QUFBQSxHQUNsQztBQUFBO0FBQUEsSUE4SkU7QUFBQSxlQUNXO0FBQUEsSUFDWDtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUEsMENBS0UsT0FBTywwQkFBMEIsQ0FDbkM7QUFBQTtBQUFBLGNBSVk7QUFBQSxJQUNWLE9BQU8sMEJBQTBCO0FBQUEsR0FDbkM7QUFBQTtBQUFBLGVBL1phO0FBQUEsSUFDWDtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQWljRTtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBMWxCYTtBQUFBLElBQ1g7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQWtNYTtBQUFBLElBQ1gsMEJBQ0UsS0FEWTtBQUFBLElBR2QsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBS0U7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJc0IvS0UsWUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLEdBQ2Q7QUFBQTtBQUFBLElMRUUsR0FBSTtBQUFBLGVBQ007QUFBQSxLQUNSLElBQUk7QUFBQSxhQUNJLG1CQUNGO0FBQUEsS0FDTixRQUNFLFNBQ0E7QUFBQSxLQUVGLGdCQUFnQjtBQUFBO0FBQUEsSUFFbEIsR0FBSSxpQkFBaUIsa0NBQWtDO0FBQUEsSUFDdkQsb0JBQW9CO0FBQUEsR0FDdEI7QUFBQTtBQUFBO0FBQUEsWVZBYTtBQUFBLFlBQ0Esb0JBQW9CO0FBQUEsSUFDL0IsMkNBQTRDO0FBQUEsSUFDNUMsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLEl5QnBFRTtBQUFBLGVBQ1k7QUFBQSxLQUNWO0FBQUEsS0FDQSxpQkFBa0IsTUFBTTtBQUFBLGVBQ2Q7QUFBQSxLQUNWO0FBQUEsS0FDQTtBQUFBLE1BQWtCO0FBQUE7QUFBQSxNQUNiO0FBQUE7QUFBQSxHQUVUO0FBQUE7QUFBQSxJQUdFO0FBQUEsZUFDWTtBQUFBLEtBQ1Y7QUFBQSxLQUNBLGlCQUFrQixNQUFNO0FBQUEsZUFDZDtBQUFBLEtBQ1Y7QUFBQSxLQUNBLGlCQUFrQix5QkFDYjtBQUFBO0FBQUEsR0FFVDtBQUFBO0FBQUE7QUFBQSxrQkFHaUI7QUFBQSxzQkFDSTtBQUFBLHFCQUNEO0FBQUEsb0JBQ0Q7QUFBQSxvQkFDQTtBQUFBLHVCQUNHO0FBQUEsdUJBQ0E7QUFBQSxlQUNSO0FBQUEsZ0JBQ0M7QUFBQSxtQkFDRztBQUFBLG1CQUNBO0FBQUEsaUJBQ0Y7QUFBQSxpQkFDQTtBQUFBLHFCQUNJO0FBQUEsd0JBQ0c7QUFBQSx3QkFDQTtBQUFBLHNCQUNGO0FBQUEsc0JBQ0E7QUFBQSxnQkFDTjtBQUFBLElBRWI7QUFBQSxLQUNFLGVBQWU7QUFBQSxLQUNmLGtCQUFrQjtBQUFBLEtBQ2xCLGdCQUFnQjtBQUFBLEtBQ2hCLGdCQUFnQjtBQUFBLEtBQ2hCLGtCQUFrQjtBQUFBO0FBQUEsSUFFcEI7QUFBQSxLQUNFLG9CQUFvQjtBQUFBLEtBQ3BCLHVCQUF1QjtBQUFBLEtBQ3ZCLHFCQUFxQjtBQUFBLEtBQ3JCLHFCQUFxQjtBQUFBLEtBQ3JCLHVCQUF1QjtBQUFBO0FBQUEsSUFFekI7QUFBQSxLQUNFLGVBQWU7QUFBQSxtQkFHVCxzQkFFRztBQUFBLElBRVg7QUFBQSxLQUVFO0FBQUEsS0FDQTtBQUFBO0FBQUE7QUFBQSxLQUNLO0FBQUEsSUFJUDtBQUFBLGdCQUVXO0FBQUEsS0FDVDtBQUFBLG1CQUNhO0FBQUEsTUFDWDtBQUFBLE1BQ0EsaUJBQWdCO0FBQUE7QUFBQSxtQkFHTjtBQUFBLEtBQ1o7QUFBQSxtQkFDYTtBQUFBLE1BQ1g7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBO0FBQUEsS0FHRjtBQUFBLE1BQW9ELGtDQUNmLGtCQUFpQixPQUMvQztBQUFBO0FBQUEsTUFHTCxJQUFJO0FBQUEsTUFDSjtBQUFBO0FBQUEsa0JBR1M7QUFBQSxLQUNYO0FBQUEsTUFBdUM7QUFBQTtBQUFBLE1BQ2xDO0FBQUEsS0FFTDtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsT0FBb0M7QUFBQTtBQUFBLE9BQy9CLDhCQUE4QjtBQUFBO0FBQUE7QUFBQSxzQkFHckI7QUFBQSxNQUVkO0FBQUEsT0FDRTtBQUFBO0FBQUEsT0FDRztBQUFBLE1BQ0w7QUFBQSxPQUNFO0FBQUE7QUFBQSxNQVNGLGNBQWU7QUFBQTtBQUFBO0FBQUEsR0FHckI7QUFBQSwrQmxDZ25CRSxPQUFPLHlCQUF5QixDQUNsQztBQUFBO0FBQUEsSW1CbHVCRSxHQUFJLG1CQUFtQixpQkFBaUIsaUJBQWlCO0FBQUEsSUFDekQsWUFBYSxRQUFRO0FBQUEsSUFDckIsWUFBYSxpQkFDUSxzQkFDUCxtQnBCbEloQjtBQUFBLGVvQm9JYSxtQ0FDRDtBQUFBLElBQ1Y7QUFBQSxLQUFxQixPQUFPO0FBQUE7QUFBQSxLQUN2QixPQUFPO0FBQUEsSUFDWixPQUFPLDhCQUE4QjtBQUFBLEdBQ3ZDO0FBQUE7QUFBQSxJT2dKRSxVQUFTLG9DQUFvQztBQUFBLEdBQy9DO0FBQUE7QUFBQSxJTnpERTtBQUFBLEdBQ0Y7QUFBQTtBQUFBLFlBNUlVO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBVyxtQkFBcUI7QUFBQSxJQUNoQyxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUFvQ0UscUJBQ0UsY0FDQSxRQUFRO0FBQUEsSUFFVixRQUFRO0FBQUEsR0FDVjtBQUFBLG1DQUtFLFFBQVEsQ0FDVjtBQUFBLHFDQXdFRSxlQUFlLENBQ2pCO0FBQUEseUNBU0UsUUFBUSxDQUNWO0FBQUEsNENBTkUsbUJBQXFCLENBQ3ZCO0FBQUE7QUFBQSxZQXpIUSxjQUNFO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBVyxlQUFpQjtBQUFBLElBQzVCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJZHlQRTtBQUFBO0FBQUEsT0FFSSxPQUFPLE9BQU87QUFBQTtBQUFBLE9BRWQsT0FBTyxXQUFXO0FBQUE7QUFBQSxPQUVsQixPQUFPLGlCQUFpQjtBQUFBO0FBQUEsT0FFeEIsT0FBTyx1QkFBdUI7QUFBQTtBQUFBLE9BRTlCLE9BQU8sNkJBQTZCO0FBQUE7QUFBQSxPQUVwQyxPQUFPLG1DQUFtQztBQUFBO0FBQUEsT0FFMUMsT0FBTyx5Q0FBeUM7QUFBQTtBQUFBLE9BRWhELE9BQU8sK0NBQStDO0FBQUE7QUFBQSxpQkFHeEQsT0FBTyxnQkFBZ0IsQ0FDekI7QUFBQSxJQUNBO0FBQUEsSUFDQSxPQUFPLE9BQU87QUFBQSxHQUNoQjtBQUFBO0FBQUEsa0JjN05jO0FBQUEsSUFDWjtBQUFBLEdBRUY7QUFBQTtBQUFBO0FBQUEsTW5Cd2NzQjtBQUFBO0FBQUE7QUFBQSxXQUdoQjtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsVUFORjtBQUFBO0FBQUEsV0FVRSxZQUFXO0FBQUEsWUFDVDtBQUFBLFVBRko7QUFBQTtBQUFBLHFCQU1VO0FBQUEsV0FDUixZQUFXO0FBQUEsWUFDVDtBQUFBLFVBSEo7QUFBQTtBQUFBLFdBT0U7QUFBQSxXQUNBLFlBQVc7QUFBQSxZQUNUO0FBQUEsVUFISjtBQUFBO0FBQUEsV0FPRTtBQUFBLFlBQ0U7QUFBQTtBQUFBLFlBRUE7QUFBQTtBQUFBLFlBQ0c7QUFBQSxVQUxQO0FBQUEsZ0JBU0UscUJBQXFCLENBRHZCO0FBQUE7QUFBQSxXQUtFO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBLFdBQ0E7QUFBQSxXQUNBO0FBQUEsV0FDQSxpQkFBaUI7QUFBQSxVQVJuQjtBQUFBO0FBQUEsUUFXRjtBQUFBLFNBQ0UsUUFBUTtBQUFBO0FBQUEsdUJBRVM7QUFBQSxxQkFDSjtBQUFBLFNBR2I7QUFBQSxVQUNFO0FBQUE7QUFBQTtBQUFBLG1CQUlXO0FBQUEsa0JBQ0g7QUFBQSw2QkFDVyxvQkFBc0I7QUFBQTtBQUFBLFVBR3pDLGVBQWdCLFlBQVk7QUFBQSxnQ0FDTjtBQUFBLFVBQ3RCO0FBQUEsV0FDRTtBQUFBLFdBQ0EsV0FBVztBQUFBO0FBQUEsZUFFWCwyQkFDQSxZQUFZO0FBQUEsU0FFaEI7QUFBQTtBQUFBLFVBR0U7QUFBQSxXQUNFLEdBQUksU0FBUyxNQUFNO0FBQUE7QUFBQSxtQkFDVjtBQUFBLGtCQUNEO0FBQUEsdUJBQ0s7QUFBQSxXQUNiO0FBQUEsWUFDRTtBQUFBLFdBQ0Y7QUFBQSxZQUNFO0FBQUEsWUFDQSxZQUFXO0FBQUEsYUFDVCxnQkFBZ0I7QUFBQSxZQUNsQjtBQUFBLDZCQUNpQjtBQUFBLFlBQ2pCLFlBQVcsZ0JBQ1Q7QUFBQSxZQUVGO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUE7QUFBQTtBQUFBLFlBRUE7QUFBQSxZQUNBLFlBQVc7QUFBQSxhQUNULGdCQUFnQjtBQUFBLFlBQ2xCO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxhQUNFO0FBQUE7QUFBQTtBQUFBLFdBSUo7QUFBQSxXQUNBO0FBQUE7QUFBQSxrQkFDUztBQUFBLFdBQ1Q7QUFBQSxZQUNFO0FBQUEsV0FFRixHQUFJO0FBQUEsWUFDRjtBQUFBLFdBQ0YsbUJBQW9CLFNBQVMsTUFBTTtBQUFBLFdBQ25DO0FBQUEsWUFDRTtBQUFBO0FBQUEsWUFLQTtBQUFBLFdBS0Y7QUFBQSxXQUNBO0FBQUEsV0FDQSxpQkFBa0I7QUFBQTtBQUFBLGtCQUNUO0FBQUEsV0FDVCxLQUFLLGlCQUFpQjtBQUFBLFlBQ3BCO0FBQUE7QUFBQSxXQUlGLEdBQUksU0FBUyxNQUFNO0FBQUEscUJBQ1Q7QUFBQSxXQUNWO0FBQUEsWUFBZ0I7QUFBQTtBQUFBLFlBRWQ7QUFBQTtBQUFBLFlBQ0c7QUFBQSxXQUNMLFlBQVc7QUFBQSxZQUNULGdCQUFnQjtBQUFBLFdBQ2xCO0FBQUEsV0FDQTtBQUFBO0FBQUEsa0JBQ1M7QUFBQSxXQUNULEdBQUksU0FBUyxNQUFNO0FBQUEscUJBQ1Q7QUFBQSxXQUNWO0FBQUEsWUFBZ0I7QUFBQTtBQUFBLFlBRWQ7QUFBQTtBQUFBLFlBQ0c7QUFBQSxXQUNMLFlBQVc7QUFBQSxZQUNULGdCQUFnQjtBQUFBLFdBQ2xCO0FBQUEsV0FDQTtBQUFBO0FBQUE7QUFBQSwyQkFHZ0I7QUFBQSxXQUNkO0FBQUEsWUFDRTtBQUFBLFdBS0YsR0FBSSxTQUFTLE1BQU07QUFBQSxtQkFDWCxvQkFBb0I7QUFBQSxXQUM1QjtBQUFBLFdBQ0EsWUFBVyxlQUNUO0FBQUEsV0FFRjtBQUFBLFdBQ0E7QUFBQTtBQUFBO0FBQUEsV0FFQTtBQUFBO0FBQUEsV0FHRTtBQUFBO0FBQUEsV0FFQTtBQUFBO0FBQUEsV0FDRztBQUFBLFNBR1g7QUFBQSxTQUNBO0FBQUEsU0FDQTtBQUFBLGtCQUNVLGlCQUNBO0FBQUEsVUFDUixxQkFBc0I7QUFBQSxVQUN0QjtBQUFBO0FBQUEsU0FFRjtBQUFBLFVBQXNCO0FBQUEsU0FDdEI7QUFBQSxTQUNBLE9BQU8sNEJBQTRCLENBbko5QixDQW9KTjtBQUFBLE9Bdk1vQjtBQUFBLE9BQUQ7QUFBQTtBQUFBLElBNk1wQixPQUFPLDJCQUEyQiwwQkFBMEI7QUFBQSxHQUM5RDtBQUFBO0FBQUEsWUMzSlU7QUFBQSxJQUNSLDZCQUE2QjtBQUFBLElBQzdCLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxZRG1LVTtBQUFBLElBQ1IsbUJBQW9CO0FBQUEsSUFDcEIsZ0JBQWdCO0FBQUEsSUFDaEIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBVkUsT0FBTywwQkFBMEIsMEJBQTBCO0FBQUEsR0FDN0Q7QUFBQSwyQm1DanlCc0I7QUFBQTtBQUFBO0FBQUEsZUFRUjtBQUFBLFlBUUg7QUFBQSxpQkFDSztBQUFBLGFBQ0o7QUFBQSxxQkFDUTtBQUFBLGNBQ1A7QUFBQSxrQkFFSTtBQUFBLHlCQUNPO0FBQUEscUJBQ0o7QUFBQSxxQkFDQTtBQUFBLCtCQUNVO0FBQUEsMkJBQ0o7QUFBQSxtQkFFUjtBQUFBLG1CQUNBO0FBQUEsNEJBQ1M7QUFBQSwwQkFDRjtBQUFBLHFCQUNMO0FBQUEscUJBQ0E7QUFBQSxxQkFDQTtBQUFBLGdCQUNMO0FBQUEsc0JBQ007QUFBQSxvQkFDRjtBQUFBLGVBQ0w7QUFBQSxvQkFDSztBQUFBLHVCQUNHO0FBQUEsY0FDVDtBQUFBLGlCQUNHO0FBQUEsbUJBQ0U7QUFBQSx3QkFHSztBQUFBLHdCQUNBO0FBQUEsZUFDVDtBQUFBLGVBQ0E7QUFBQSxrQkFDRztBQUFBLGlCQUNEO0FBQUEsa0JBQ0M7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEscUJBQ0c7QUFBQSxpQkFDSjtBQUFBLGlCQUNBO0FBQUEsdUJBRU07QUFBQSx1QkFDQTtBQUFBO0FBQUEsYUFHVjtBQUFBLEtBQ1IsNkNBQTZDO0FBQUEsSUFDL0M7QUFBQTtBQUFBLGVBR1k7QUFBQSxLQUNWLHNCQUF1Qix3QkFBd0I7QUFBQSxLQUMvQyxPQUFPLHlCQUF5QjtBQUFBLElBQ2xDO0FBQUE7QUFBQTtBQUFBLEtBSUUsR0FBSTtBQUFBLE1BQ0YsUUFBUTtBQUFBLE1BQ1I7QUFBQSxPQUFnQztBQUFBO0FBQUEsT0FDSztBQUFBO0FBQUEsT0FDRCxPQUFPO0FBQUE7QUFBQSxPQUN0QztBQUFBLE1BQ0w7QUFBQTtBQUFBO0FBQUEsTUFFQSxRQUFRO0FBQUEsTUFDUjtBQUFBO0FBQUEsSUFFSjtBQUFBLElBRUE7QUFBQSxLQUNFLGdCQUFnQjtBQUFBLEtBQ2hCLGdCQUFnQjtBQUFBLEtBQ2hCLGVBQWU7QUFBQSxLQUNmLGdCQUFnQjtBQUFBLEtBQ2hCLGVBQWU7QUFBQSxLQUNmLGFBQWE7QUFBQSxLQUNiLGFBQWE7QUFBQSxLQUNiLGdCQUFnQjtBQUFBLEtBQ2hCLGVBQWU7QUFBQTtBQUFBO0FBQUEsV0FHVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFPRDtBQUFBLGFBQ0c7QUFBQSxlQUNFO0FBQUE7QUFBQSxJQUVGO0FBQUEsS0FBUztBQUFBO0FBQUEsUUFJYixXQUNBO0FBQUE7QUFBQSxRQUlBO0FBQUEsUUFDQSxZQUNFLGNBQ0E7QUFBQSxRQUVGLDRCQUNFLGlCQUNBO0FBQUEsUUFFRjtBQUFBLFFBQ0E7QUFBQTtBQUFBLFFBS0EsR0FBSTtBQUFBLFNBQ0Y7QUFBQSxTQUNBO0FBQUE7QUFBQTtBQUFBLFNBRUE7QUFBQSxTQUNBO0FBQUE7QUFBQSxRQUVGLHNCQUF1QjtBQUFBO0FBQUEsUUFLdkI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBO0FBQUEsc0RBTUUsYUFDQTtBQUFBLFFBRUY7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBO0FBQUE7QUFBQSxTQU1FO0FBQUEsU0FDQTtBQUFBLFNBQ0E7QUFBQTtBQUFBLFFBRUYsaUJBQ0UsMkJBQ0E7QUFBQTtBQUFBLFFBS0Y7QUFBQSxTQUNFO0FBQUEsU0FDQTtBQUFBLFVBQ0U7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQTtBQUFBO0FBQUEsV0FNRSxzQkFBdUI7QUFBQSxXQUN2QjtBQUFBLFdBQ0E7QUFBQTtBQUFBO0FBQUEsV0FFQSxzQkFBdUI7QUFBQSxXQUN2QjtBQUFBLFlBQ0Usc0JBQXVCO0FBQUEsWUFDdkIsd0JBQXdCO0FBQUE7QUFBQSxXQUcxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FJSiw2QkFDRSx3QkFBd0I7QUFBQSxTQUMxQixzQkFBdUI7QUFBQSxTQUN2QjtBQUFBLFNBQ0E7QUFBQSxTQUNBO0FBQUE7QUFBQTtBQUFBLFFBS0YsMEJBQ0EsZ0JBQWlCO0FBQUE7QUFBQSxRQUlqQjtBQUFBLFNBQ0U7QUFBQSxRQUNGO0FBQUEsUUFDQTtBQUFBLFFBQ0EsNkJBQ0UscUJBQ0E7QUFBQTtBQUFBLFFBS0Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBO0FBQUEsUUFJQSxzQkFBdUI7QUFBQSxnQkFDakI7QUFBQSxRQUNOO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQTtBQUFBO0FBQUEsU0FNRTtBQUFBO0FBQUEsU0FDRztBQUFBLFFBQ0wsNkJBQ0UscUJBQ0E7QUFBQTtBQUFBLFFBS0YsK0JBQ0E7QUFBQTtBQUFBLFFBR0E7QUFBQSxRQUNBO0FBQUEsa0JBQ1E7QUFBQSxRQUNSO0FBQUEsUUFDQTtBQUFBLFNBQWM7QUFBQSxRQUlkO0FBQUEsUUFDQTtBQUFBLGdCQUdBLHdCQUF3QjtBQUFBO0FBQUEsSUFJOUI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsVUFBVTtBQUFBLEdBQ1o7QUFBQTtBQUFBLEk5Qm1NRTtBQUFBLElBRUEsT0FBVywwQkFBc0IsaUNBQWlDO0FBQUEsR0FDcEU7QUFBQTtBQUFBLElDbmJFO0FBQUEsR0FDRjtBQUFBLHdDSEhFLFFBQVEsQ0FDVjtBQUFBLGdEQUdFLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSUFJRTtBQUFBO0FBQUEsR0FDRjtBQUFBO0FBQUE7QUFBQSxZS21SVywyQkFBNkI7QUFBQSxZQUMzQjtBQUFBLElBQ1gsR0FBSTtBQUFBO0FBQUEsYUFDUztBQUFBLFlBQ0Q7QUFBQSxZQUNBO0FBQUEsS0FDVjtBQUFBLEtBQ0EsT0FBTywrQkFBK0I7QUFBQTtBQUFBLElBRXhDLHdCQUF3QjtBQUFBLEdBQzFCO0FBQUEsaURjalFFLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSW5CaERFO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBLDZCQ29Nd0I7QUFBQTtBQUFBLElBT3RCO0FBQUEsZ0JBQ1c7QUFBQSxLQUNUO0FBQUEsTUFBeUIsSUFDbkI7QUFBQTtBQUFBLE1BRUo7QUFBQSxPQUE4QiwwQkFDRjtBQUFBLGdCQUVwQjtBQUFBLE1BQ1I7QUFBQSxPQUFjO0FBQUE7QUFBQSxlQUlOO0FBQUEsT0FDTjtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSU47QUFBQSxJQUNBLGFBQWM7QUFBQSxHQUNoQjtBQUFBO0FBQUEsSUF6REUsa0JBQWtCO0FBQUEsSUFDbEIsUUFBUTtBQUFBLEdBQ1Y7QUFBQSxrRERwSkUsUUFBUSxDQUNWO0FBQUE7QUFBQSxJZTZNRTtBQUFBLGFBQ1U7QUFBQSxLQUNSLCtCQUErQjtBQUFBO0FBQUEsaUJBRXZCLGNBQ1IsK0JBQStCO0FBQUEsR0FFbkM7QUFBQSx1RFFsT0UsU0FBUyxDQUNYO0FBQUEscURBS0UsUUFBUSxDQUNWO0FBQUEscUVBS0UsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsSUExRUU7QUFBQSxJQUNBLHNFQUFzRTtBQUFBLEdBQ3hFO0FBQUEsK0NBV0UsUUFBUSxDQUNWO0FBQUEsbUVBUEUsUUFBUSxDQUNWO0FBQUEsMkN4QmtURSxPQUFPLDBCQUEwQixDQUNuQztBQUFBLHdDQU5FLE9BQU8sMEJBQTBCLENBQ25DO0FBQUE7QUFBQSxrQmlDTGM7QUFBQSxJQUNaO0FBQUEsSUFDQSxjQUFjO0FBQUEsR0FDaEI7QUFBQSxzQ2pDak5FLHdCQUNBLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSWdCNkhFLFlBQWE7QUFBQSxJQUNiLG9CQUFvQjtBQUFBLEdBQ3RCO0FBQUEsK0JBb0NFLE9BQU8sWUFBWSxDQUNyQjtBQUFBO0FBQUEsaUJYMURlO0FBQUEsSUFDYjtBQUFBLGtCQUNhO0FBQUEsS0FDWCxPQUFPLDJDQUdRLGdCQUFnQixPQUFPO0FBQUE7QUFBQTtBQUFBLEtBQ2pDLE9BQ0UsaUNBQWlDO0FBQUEsR0FFNUM7QUFBQTtBQUFBLElSbkdFO0FBQUEsR0FDRjtBQUFBLHFDQW1jRSxZQUFZLENBQ2Q7QUFBQSxzQ0FnQ0UsY0FBZSxRQUFRLEVBQ3ZCLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSUExZEUsY0FBZSwwQkFBMEI7QUFBQSxJQUN6QyxPQUFPLDRCQUE0QjtBQUFBLEdBQ3JDO0FBQUE7QUFBQSxJQU1FLGNBQWUsOEJBQThCO0FBQUE7QUFBQSxVQUNwQztBQUFBLFVBQ0Y7QUFBQSxJQUNQLG1CQUFxQjtBQUFBLEdBQ3ZCO0FBQUE7QUFBQSxJQWVFLGNBQWUsOEJBQThCO0FBQUE7QUFBQSxVQUNwQztBQUFBLFVBQ0Y7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLElBQ1AseUNBQStDO0FBQUEsR0FDakQ7QUFBQTtBQUFBLElBa0JFLGNBQWUsOEJBQThCO0FBQUEsWUFDckM7QUFBQSxJQUNSLFlBQVcsZUFBaUIsV0FDZjtBQUFBLElBRWIsT0FBTyxzQkFBc0I7QUFBQSxHQUMvQjtBQUFBLDBDQXNhRSx1QkFBdUIsQ0FDekI7QUFBQSw2Q0EzSUUsT0FBTyw2QkFBNkI7QUFBQSxHQUN0QztBQUFBLHlDQStJRSxzQkFBc0IsQ0FDeEI7QUFBQSw0Q0F0SUUsT0FBTyw0QkFBNEI7QUFBQSxHQUNyQztBQUFBO0FBQUEsWXlCelFVLGdDQUNBO0FBQUEsSUFDUixxQkFBcUI7QUFBQSxHQUN2QjtBQUFBO0FBQUEsSXpCOE5FLFdBQVcseUJBQXlCO0FBQUEsR0FDdEM7QUFBQTtBQUFBLElBa0xFLFdBQVc7QUFBQSxJQUNYLE9BQU8sMkJBQTJCO0FBQUEsR0FDcEM7QUFBQSx3Q0E1WkUsaUNBQ0Y7QUFBQSxpQ0dwQ0UsZ0JBQWdCLENBQ2xCO0FBQUE7QUFBQSxlTWlCYTtBQUFBLElBQ1gsR0FBSTtBQUFBLEtBQ0Y7QUFBQSxNQUNFLG1CQUFtQjtBQUFBO0FBQUEsTUFDaEI7QUFBQSxLQUNMLFFBQVE7QUFBQTtBQUFBLFlBQ0M7QUFBQSxLQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUtFO0FBQUE7QUFBQSxLQUdGLHdCQUF3QjtBQUFBLEdBRTVCO0FBQUE7QUFBQSxJTjJFRSxXQUFXLHNDQUFzQztBQUFBLEdBQ25EO0FBQUEsd0NBeENFLFFBQVEsQ0FDVjtBQUFBLHNDQVNFLFNBQVMsQ0FDWDtBQUFBLHdDQU1FLHlCQUEyQixDQUM3QjtBQUFBLHlEQXlFRSxRQUFRLENBQ1Y7QUFBQSxpQkFoRFk7QUFBQSwyQ0FYVixtQ0FBbUM7QUFBQSxHQUNyQztBQUFBLHlDQVhFLGlDQUFpQyxDQUNuQztBQUFBLDBDQUlFLGtDQUFrQyxDQUNwQztBQUFBLHVDQXhCRSxTQUFTLENBQ1g7QUFBQSw0Q0FoRUUsMkJBQTJCLENBQzdCO0FBQUE7QUFBQSxJQTFLRSxvQkFBcUI7QUFBQSxJQUVyQiw2QkFBOEI7QUFBQSxJQUM5QjtBQUFBLEdBQ0Y7QUFBQTtBQUFBLGVNMk1hO0FBQUEsSUFDWCxPQUFPLDZCQUE2QjtBQUFBLEdBQ3RDO0FBQUEscUNOM0RFLG1DQUFtQyxDQUNyQztBQUFBO0FBQUEsSUE2SEUsV0FBVyx1Q0FBdUM7QUFBQSxHQUNwRDtBQUFBO0FBQUEsSU03R0UsT0FBTyx5Q0FBeUM7QUFBQSxHQUNsRDtBQUFBO0FBQUEsWU5yRVUsZ0JBQWdCO0FBQUEsSUFDeEIsb0JBQXFCO0FBQUEsSUFDckIsT0FBTywwQkFBMEI7QUFBQSxHQUNuQztBQUFBO0FBQUEsZU1rSWEsNkJBQ0g7QUFBQSxJQUNSLGdCQUFnQjtBQUFBLEdBQ2xCO0FBQUE7QUFBQSxlTitGYTtBQUFBLElBQ1gsT0FBTyw2QkFBNkI7QUFBQSxHQUN0QztBQUFBLG1DQXBERSxRQUFRLENBQ1Y7QUFBQTtBQUFBLGVNOUJhO0FBQUEsSUFDWDtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQSxzQ043RkUsaUJBQ0EsUUFBUSxDQUNWO0FBQUE7QUFBQSxJQStDRTtBQUFBLEtBQXVCO0FBQUEsY0FFWCxrQ0FBa0M7QUFBQSxNQUMxQyxrQ0FBa0M7QUFBQTtBQUFBO0FBQUEsY0FFMUIsZUFBZTtBQUFBLE1BQ3ZCLGtDQUFrQztBQUFBO0FBQUEsY0FHNUIsMEJBQ0osbUJBQXNCO0FBQUEsSUFDNUIsYUFBYTtBQUFBLEdBQ2Y7QUFBQTtBQUFBO0FBQUEsWU1SYTtBQUFBLFNBQ0g7QUFBQSxTQUNBO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBVztBQUFBLEtBQXdCLFdBQVc7QUFBQSxJQUM5QyxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsZUFLYTtBQUFBLElBQ1gsT0FBTyw2QkFBNkI7QUFBQSxHQUN0QztBQUFBO0FBQUEsaUJBYWUsK0JBQ0E7QUFBQSxJQUNiO0FBQUEsS0FDRTtBQUFBLElBQ0Y7QUFBQSxLQUEyQjtBQUFBLElBQzNCO0FBQUEsR0FDRjtBQUFBO0FBQUEsZUFhYTtBQUFBLElBQ1g7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxjTnhGWTtBQUFBLElBQ1Y7QUFBQSx5QkFDc0I7QUFBQSxLQUNwQjtBQUFBLE1BQ0UsSUFDRSxpREFDQSxRQUFRO0FBQUEsZUFFUixRQUFRO0FBQUE7QUFBQTtBQUFBLEtBRVAsVUFBVTtBQUFBLEdBQ25CO0FBQUEsMkJBVXdCO0FBQUE7QUFBQSxjQUVaO0FBQUEsSUFDVixzQ0FBc0M7QUFBQSxHQUN4QztBQUFBLCtDQUtFLE9BQU8sZUFBZSxDQUN4QjtBQUFBLHlDQXZGRSxPQUFPLHFCQUFxQixDQUM5QjtBQUFBLCtCZ0JrSUUsT0FBTyxZQUFZLENBQ3JCO0FBQUEseUNieEVFLFVBQ0Y7QUFBQSxpQ05pbkJFLE9BQU8sMEJBQTBCLENBQ25DO0FBQUE7QUFBQSxZTTl3QlE7QUFBQSxJQUNOLHNCQUNFLE1BQU0seUNBQ047QUFBQSxJQUVGLFVBQVU7QUFBQSxHQUNaO0FBQUE7QUFBQSxJQUlFLHlEQUEyRDtBQUFBLEdBQzdEO0FBQUEsZ0NhNEVFLE9BQU8sYUFBYSxDQUN0QjtBQUFBO0FBQUEsWVgrVFE7QUFBQSxJQUNOO0FBQUEsS0FDRTtBQUFBO0FBQUEsUUFFSSxTQUNBO0FBQUE7QUFBQSxRQUVBLFNBQ0E7QUFBQTtBQUFBLFFBRUEsU0FDQTtBQUFBO0FBQUEsUUFFQSxTQUNBO0FBQUE7QUFBQSxLQUVKO0FBQUE7QUFBQSxlQUVTO0FBQUEsSUFDWDtBQUFBLEtBQ0U7QUFBQSxJQUVGO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBLGlDQTlPRSxPQUFPLHlCQUFnRCxDQUN6RDtBQUFBO0FBQUEsZUFrRWE7QUFBQSxJQUNYLHdCQUNFO0FBQUEsSUFFRixPQUFPLG1DQUFtQztBQUFBLEdBQzVDO0FBQUEsZ0NBcE84QjtBQUFBO0FBQUEsa0JBa2NoQjtBQUFBLElBQ1osMEJBQ0U7QUFBQSxJQUNGLG1CQUFtQjtBQUFBLEdBQ3JCO0FBQUE7QUFBQSxlQWdLYTtBQUFBLElBQ1g7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQWlIRSxJQUNFO0FBQUEsYUFFQTtBQUFBLEdBRUo7QUFBQTtBQUFBLGVBN1BhO0FBQUEsSUFDWCxpQkFDRTtBQUFBLElBRUYsT0FBTyxpQkFBaUI7QUFBQSxHQUMxQjtBQUFBLHlDQWxlRSxRQUFRLENBQ1Y7QUFBQSw0Q0Fnd0JFLE9BQU8sOEJBQThCO0FBQUEsR0FDdkM7QUFBQTtBQUFBLGVBNUVhO0FBQUEsSUFDWDtBQUFBLEtBQ0U7QUFBQSxxQkFFZTtBQUFBLElBQ2pCLHdDQUEwQztBQUFBLEdBQzVDO0FBQUE7QUFBQTtBQUFBLElBU0UsSUFDRSxRQUFRO0FBQUEsYUFFUjtBQUFBLElBRUY7QUFBQSxLQUNFO0FBQUE7QUFBQSxLQUNLLE9BQ0UsbUNBQW1DO0FBQUEsR0FFOUM7QUFBQTtBQUFBLGtCQTZCZ0I7QUFBQSxJQUNkLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQTtBQUFBLGtCQUVVO0FBQUEsbUJBQ0M7QUFBQSxJQUVsQixtQ0FBbUM7QUFBQSxHQUNyQztBQUFBLDJDQU1FLE9BQU8sNkJBQTZCO0FBQUEsR0FDdEM7QUFBQTtBQUFBLGVBcFRhO0FBQUEsSUFDWCxnQkFDRTtBQUFBLElBRUYsT0FBTyxnQkFBNEI7QUFBQSxHQUNyQztBQUFBO0FBQUEsZUFNYTtBQUFBLElBQ1gsZ0JBQ0U7QUFBQSxJQUVGLE9BQU8sZUFBMkI7QUFBQSxHQUNwQztBQUFBO0FBQUEsZUFpQmE7QUFBQSxJQUNYLGdCQUNFO0FBQUEsSUFFRixPQUFPLFdBQVc7QUFBQSxHQUNwQjtBQUFBO0FBQUEsZUE0RmE7QUFBQSxJQUNYLG9CQUNFO0FBQUEsSUFFRjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBTWE7QUFBQSxJQUNYO0FBQUEsS0FDRTtBQUFBLElBRUYsY0FBYztBQUFBLElBQ2QsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBNkRFLGdDQUFpQyxPQUN4Qiw0QkFBNEI7QUFBQSxJQUVyQyxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUF0QkUsZ0NBQWlDLE9BQ3hCLDRCQUE0QjtBQUFBLElBRXJDLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQUtFLCtCQUFnQyxPQUN2QiwyQkFBMkI7QUFBQSxJQUVwQyxRQUFRO0FBQUEsR0FDVjtBQUFBLHNDQXFCRSx1QkFDRjtBQUFBLHFDQXR3QkUsT0FBTywyQkFBMkIsQ0FDcEM7QUFBQTtBQUFBLElBeXRCRSwrQkFBZ0MsT0FDdkIsMkJBQTJCO0FBQUEsSUFFcEMsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsU0Fuc0JVO0FBQUEsYUFDSTtBQUFBLG9CQUNPLFNBQVMsU0FBUyxrQ0FBbEI7QUFBQSxXQUNUO0FBQUEsSUFDVjtBQUFBLFlBRUU7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQTtBQUFBLHNCQUdEO0FBQUEsR0FDSDtBQUFBLHlDQWl1QkUsT0FBTywyQkFBMkIsQ0FDcEM7QUFBQTtBQUFBLGVBckVhO0FBQUEsSUFDWDtBQUFBLElBQ0EsT0FBTyw4QkFBOEI7QUFBQSxHQUN2QztBQUFBLDRDQXlKRSxRQUFRLENBQ1Y7QUFBQTtBQUFBLGVBandCYTtBQUFBLElBQ1gsa0JBQWtCLFFBQVE7QUFBQSxJQUMxQixPQUFPLGFBQWE7QUFBQSxHQUN0QjtBQUFBO0FBQUEsbUJBOFBpQixtQ0FDQTtBQUFBLElBQ2Y7QUFBQSxLQUNFO0FBQUEsSUFJRjtBQUFBLEtBQ0U7QUFBQSxJQUNGO0FBQUEsS0FDRTtBQUFBLElBQ0YsT0FBTyx3REFJTjtBQUFBLEdBQ0g7QUFBQTtBQUFBO0FBQUEsU0FyVVU7QUFBQSxhQUNJO0FBQUEsb0JBQ08sU0FBUyw4QkFBVDtBQUFBLFdBQ1Q7QUFBQSxXQUNBLFNBQVM7QUFBQSxXQUNULFNBQVM7QUFBQTtBQUFBLE9BQ0ssU0FDdEIseUJBQ0E7QUFBQSxJQUVGO0FBQUEsWUFFRTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBO0FBQUEsWUFFQyw4Q0FFRjtBQUFBLEdBQ0g7QUFBQTtBQUFBLGVBK2tCYTtBQUFBLElBQ1gsT0FBTyx5QkFBZ0Q7QUFBQSxHQUN6RDtBQUFBO0FBQUEsZUFNYTtBQUFBLElBQ1gsT0FBTyxVQUFVLG9DQUEyRDtBQUFBLEdBQzlFO0FBQUE7QUFBQSxlQXZZYTtBQUFBLElBQ1gsd0JBQ0U7QUFBQSxJQUVGLE9BQU8seUNBSU47QUFBQSxHQUNIO0FBQUE7QUFBQSxlQU1hO0FBQUEsSUFDWDtBQUFBLEtBQ0U7QUFBQSxJQUVGLE9BQU8sd0NBSU47QUFBQSxHQUNIO0FBQUE7QUFBQSxlQThCYTtBQUFBLElBQ1gsd0JBQ0U7QUFBQSxJQUVGLE9BQU8sd0NBQStEO0FBQUEsR0FDeEU7QUFBQTtBQUFBO0FBQUEsU0F2UVU7QUFBQSxTQUNBO0FBQUEsV0FDRTtBQUFBLElBQ1Ysa0JBQXVCO0FBQUEsR0FDekI7QUFBQTtBQUFBLFlBdVpRO0FBQUEsSUFDTjtBQUFBLEtBQ0U7QUFBQTtBQUFBLFFBRUksY0FDQTtBQUFBO0FBQUEsUUFFQSxjQUNBO0FBQUE7QUFBQSxRQUVBLFlBQ0E7QUFBQTtBQUFBLFFBRUEsZ0JBQ0E7QUFBQTtBQUFBLFFBRUEsY0FDQTtBQUFBO0FBQUEsUUFFQSxjQUNBO0FBQUE7QUFBQSxRQUVBLGdCQUNBO0FBQUE7QUFBQSxRQUVBLFlBQ0E7QUFBQTtBQUFBLFFBRUEsY0FDQTtBQUFBO0FBQUEsUUFFQSxhQUNBO0FBQUE7QUFBQSxRQUVBLFlBQ0E7QUFBQTtBQUFBLEtBRUo7QUFBQTtBQUFBO0FBQUEsWUFFUztBQUFBLFlBQ0E7QUFBQSxXQUNIO0FBQUEsY0FDSztBQUFBLElBQ2I7QUFBQSxJQUNBLGNBQWM7QUFBQSxHQUNoQjtBQUFBO0FBQUEsZUE2TGE7QUFBQSxJQUNYO0FBQUEsSUFDQSxPQUFPLCtCQUErQjtBQUFBLEdBQ3hDO0FBQUE7QUFBQSxlQXRGYTtBQUFBLElBQ1gsT0FBTyxVQUNMLDRDQUlEO0FBQUEsR0FDSDtBQUFBO0FBQUE7QUFBQSxTQU9VO0FBQUEsWUFDRztBQUFBLElBQ1gsT0FBTyx5QkFBZ0Q7QUFBQSxHQUN6RDtBQUFBO0FBQUEsZUFyUWE7QUFBQSxJQUNYO0FBQUEsS0FDRTtBQUFBLElBRUYsT0FBTyxxQ0FBNEQ7QUFBQSxHQUNyRTtBQUFBO0FBQUEsaUJBN0VlLCtCQUNBO0FBQUEsSUFDYjtBQUFBLEtBQ0U7QUFBQSxJQUNGO0FBQUEsS0FBMkI7QUFBQSxJQUMzQjtBQUFBLEdBQ0Y7QUFBQTtBQUFBLElBb2ZFO0FBQUEseUJBQ3FCO0FBQUEsSUFDckI7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQXZlYTtBQUFBLElBQ1gsd0JBQ0U7QUFBQSxJQUVGLE9BQU8sa0NBQXlEO0FBQUEsR0FDbEU7QUFBQTtBQUFBLGVBaVFhO0FBQUEsSUFDWCxjQUFlLFFBQVE7QUFBQSxJQUN2QixPQUFPLFdBQ0wsNENBSUQ7QUFBQSxHQUNIO0FBQUEsZ0NBcGhCOEI7QUFBQTtBQUFBLGVBdUtqQjtBQUFBLElBQ1gsdUJBQ0U7QUFBQSxJQUVGLE9BQU8sd0NBSU47QUFBQSxHQUNIO0FBQUE7QUFBQSxlQU1hO0FBQUEsSUFDWDtBQUFBLEtBQ0U7QUFBQSxJQUVGLE9BQU8sdUNBSU47QUFBQSxHQUNIO0FBQUE7QUFBQSxtQkF3R2lCO0FBQUEsSUFDZjtBQUFBLEtBQ0U7QUFBQSxJQUVGLE9BQU87QUFBQSxxQkFFTCxrREFHRDtBQUFBLEdBQ0g7QUFBQSw2QkE5WEUsT0FBTyxXQUFXLHlCQUF5QixDQUM3QztBQUFBO0FBQUEsSUFNRTtBQUFBLGFBQ1U7QUFBQSxLQUNSLDhDQUFtRDtBQUFBO0FBQUE7QUFBQSxLQUNiLFdBQ3RCLDZDQUE2QztBQUFBO0FBQUEsS0FFN0Q7QUFBQSxHQUVKO0FBQUE7QUFBQSxlQXdaYTtBQUFBLElBQ1g7QUFBQSxLQUNFO0FBQUEsSUFFRjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBTWE7QUFBQSxJQUNYO0FBQUEsS0FDRTtBQUFBLElBRUYsZ0NBRUU7QUFBQSxJQUdGLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxlQTlDYTtBQUFBLElBQ1g7QUFBQSxLQUNFO0FBQUEsSUFFRjtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGVBTWE7QUFBQSxJQUNYO0FBQUEsS0FDRTtBQUFBLElBRUY7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQTtBQUFBLFlBd0thO0FBQUEsU0FDSDtBQUFBLGVBQ0k7QUFBQSxJQUNaO0FBQUEsYUFDVTtBQUFBLEtBQ1I7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBO0FBQUEsSUFFRixjQUFjO0FBQUEsR0FDaEI7QUFBQTtBQUFBO0FBQUEsU0FxQlU7QUFBQSxZQUNHO0FBQUEsZUFDQztBQUFBLElBQ1o7QUFBQSxhQUNVO0FBQUEsS0FDUjtBQUFBLEtBQ0E7QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGLGNBQWM7QUFBQSxHQUNoQjtBQUFBO0FBQUE7QUFBQSxZQ3BjYTtBQUFBLFlBQ0Esb0JBQW9CO0FBQUEsV0FDdkI7QUFBQSxJQUNSLFlBQVc7QUFBQSxLQUNULHNDQUF1QztBQUFBLElBQ3pDLGNBQWM7QUFBQSxJQUNkLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJVzVLRSxVQUNFLGVBQ0EsUUFBUTtBQUFBLElBRVYsNEJBQ0UsV0FDQSxRQUFRO0FBQUEsWUFFSjtBQUFBLElBQ04sV0FBWTtBQUFBLElBQ1osUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElTK0NFLFlBQWEsZ0NBQ1I7QUFBQSxJQUNMLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQTtBQUFBLEt2QmlFSSxHQUFJLGtCQUFrQixRQUFRO0FBQUE7QUFBQSxLQUc5QjtBQUFBO0FBQUE7QUFBQSxVQUlFO0FBQUEsTUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBTUE7QUFBQSxNQUVBO0FBQUEsOENBRXdDO0FBQUEsTUFDeEMsVUFBVTtBQUFBO0FBQUEsTUFHVixvQ0FBb0Msd0JBQXdCO0FBQUEsS0FFOUQsa0NBQW1DO0FBQUEsS0FDbkMsVUFBVTtBQUFBO0FBQUEsR0FFZDtBQUFBLHFDSHFMRSxRQUFRLENBQ1Y7QUFBQTtBQUFBLEk4QnpSRTtBQUFBLEtBQ0U7QUFBQSxJQUVGLElBQ0UsT0FBTyxvQkFBb0I7QUFBQSxVQUUzQjtBQUFBLEdBRUo7QUFBQTtBQUFBLElMbW9CRTtBQUFBLElBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElmaFVFLHNDQUF1QyxRQUFRO0FBQUEsSUFDL0Msc0NBQXVDLFVBQVM7QUFBQSxJQUNoRCxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUE7QUFBQSxTQUtVO0FBQUEsU0FDQTtBQUFBLElBQ1IsVUFBVyxRQUFRO0FBQUEsSUFDbkIsVUFBVyxVQUFTO0FBQUEsSUFDcEIsWUFBVztBQUFBLEtBQ1QsMERBQTJELFFBQVE7QUFBQSxLQUNuRSwwREFBMkQsVUFBUztBQUFBO0FBQUEsSUFFdEUsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLElBeE9FLFlBQVc7QUFBQSxLQUFtQjtBQUFBLEdBR2hDO0FBQUE7QUFBQSxjQWhKWTtBQUFBLElBQ1YsWUFBVyxrQkFBb0I7QUFBQSxJQUcvQixVQUFVO0FBQUEsR0FDWjtBQUFBO0FBQUEsaUJBZ0phO0FBQUEsSUFDWCxZQUFXO0FBQUEsYUFDSDtBQUFBLEtBQ047QUFBQSxLQUNBLFdBQ0UsWUFDQSxhQUNLO0FBQUE7QUFBQSxJQUlULDJCQUEyQjtBQUFBLEdBQzdCO0FBQUE7QUFBQSxjQXNQWSx3QkFDQTtBQUFBLElBQ1YsWUFBVyxpQkFBbUIsY0FDZDtBQUFBLElBRWhCO0FBQUEsSUFDQSxVQUFVO0FBQUEsR0FDWjtBQUFBO0FBQUE7QUFBQSxTQW5KUTtBQUFBLFNBQ0U7QUFBQSxTQUNGO0FBQUEsU0FDQTtBQUFBLElBQ04sWUFBWSx5QkFBeUI7QUFBQSxHQUN2QztBQUFBO0FBQUEsY0FNVTtBQUFBLElBR1IsWUFBVztBQUFBO0FBQUEsVUFDRDtBQUFBLEtBQ1I7QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsWUF6T1EsbUJBQ0E7QUFBQSxJQUNOLG1CQUNFLFNBQ0E7QUFBQSxJQUVGLGVBQ0UsUUFDQTtBQUFBLElBRUYsYUFDRSxRQUNBO0FBQUEsSUFFRixXQUNFLFFBQ0E7QUFBQSxJQUVGLFVBQ0UsUUFDQTtBQUFBLElBRUYsVUFBVztBQUFBLElBR1gsYUFBYTtBQUFBLEdBQ2Y7QUFBQTtBQUFBLElBeUtFLGdCQUNFLHFCQUNBLFFBQVE7QUFBQSxlQUVEO0FBQUEsSUFDVCxZQUFXO0FBQUEsYUFDSDtBQUFBLEtBQ047QUFBQSxLQUNBO0FBQUE7QUFBQSxJQUVGO0FBQUEsSUFDQSxRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSUE4RUUsZ0JBQ0UscUJBQ0EsUUFBUTtBQUFBLGVBRUQ7QUFBQSxJQUNULFlBQVc7QUFBQSxhQUNIO0FBQUEsS0FDTjtBQUFBLEtBQ0E7QUFBQTtBQUFBLElBRUY7QUFBQSxJQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJQXZWRSxZQUFXLGlCQUFtQjtBQUFBLElBRzlCLFFBQVE7QUFBQSxHQUNWO0FBQUEsNEJBbkJFLE9BQU8sWUFBWSxDQUNyQjtBQUFBO0FBQUEsZ0JBK0xZLE9BQ0o7QUFBQSxJQUNOLFlBQVc7QUFBQTtBQUFBO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQSxXQUlBO0FBQUEsS0FDUCxRQUFRO0FBQUEsY0FDRDtBQUFBLEtBQ1A7QUFBQSxLQUNBLFNBQVM7QUFBQTtBQUFBLElBR1g7QUFBQSxjQUNTO0FBQUEsK0NBSUw7QUFBQSxtQmRoUU47QUFBQSxHY3dRQTtBQUFBO0FBQUEsaUJBN0NhO0FBQUEsSUFDWCxZQUFXO0FBQUE7QUFBQSxVQUNIO0FBQUEsS0FDTjtBQUFBLEtBQ0EsV0FBWSxpQkFFTDtBQUFBO0FBQUEsSUFJVCxPQUFPLDhEQUE4RDtBQUFBLEdBQ3ZFO0FBQUE7QUFBQSxJQXFIRTtBQUFBLEtBQ0U7QUFBQSxLQUNBLFFBQVE7QUFBQTtBQUFBLFlBR0Y7QUFBQSxJQUNSLGlDQUFpQztBQUFBLElBQ2pDLGlDQUFpQztBQUFBLFlBRTNCLDRDQUNFO0FBQUEsSUFDUixZQUFXO0FBQUE7QUFBQTtBQUFBLFFBRUQ7QUFBQTtBQUFBLFdBR0Y7QUFBQTtBQUFBO0FBQUEsS0FLTjtBQUFBLEtBQ0EsaURBQWlEO0FBQUEsS0FDakQ7QUFBQSxLQUVBO0FBQUE7QUFBQSxTQUVFO0FBQUEsTUFFQTtBQUFBLE1BQ0E7QUFBQTtBQUFBLEtBR0Y7QUFBQTtBQUFBLElBR0Ysa0NBQWtDO0FBQUEsSUFDbEMsa0NBQWtDO0FBQUEsSUFDbEMsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGNBNERVO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBVyxpQkFDVDtBQUFBLElBRUY7QUFBQSxJQUNBO0FBQUEsR0FDRjtBQUFBO0FBQUEsSUFqY0U7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUtGO0FBQUEsbUNBK0hFLHVCQUF3QixRQUFRLEVBQ2hDLFFBQVEsQ0FDVjtBQUFBLDRDQVVFLFFBQVEsQ0FDVjtBQUFBLG1DQUlFLHNCQUF1QixRQUFRLEVBQy9CLFFBQVEsQ0FDVjtBQUFBO0FBQUEsSUFiRSx3QkFBeUIsUUFBUTtBQUFBLElBQ2pDLFFBQVE7QUFBQSxHQUNWO0FBQUE7QUFBQSxJSnVLRTtBQUFBLEtBQWlDO0FBQUE7QUFBQSxLQUUvQiw2QkFBNkI7QUFBQSxLQUM3QjtBQUFBO0FBQUEsSUFFRixRQUFRO0FBQUEsR0FDVjtBQUFBO0FBQUEsSVlkRTtBQUFBLEdBQ0Y7QUFBQSxtRFI0SEUsb0NBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQSwwQkF2WUUsb0JBQW9CLENBQ3RCO0FBQUEsa0RBMFlFLG9DQUNBLFFBQVE7QUFBQSxHQUNWO0FBQUEsbURBSUUsb0NBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGdCQTNLWTtBQUFBLElBQ1YsWUFBVztBQUFBLEtBQW9CO0FBQUEsTUFDcEI7QUFBQTtBQUFBLElBV1gsWUFBWTtBQUFBLEdBQ2Q7QUFBQSxvQ0EzTUUsb0JBQW9CLENBQ3RCO0FBQUEsMkNBVUUsb0JBQW9CLENBQ3RCO0FBQUE7QUFBQTtBQUFBLE13QnBFZTtBQUFBO0FBQUE7QUFBQSxXQUNPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBVVI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBdUJWLDZDQUErQztBQUFBLFFBQ2pEO0FBQUE7QUFBQSxTQUdFLE9BQVEseUNBQTBDO0FBQUEsUUFDcEQ7QUFBQTtBQUFBO0FBQUEsaUJBR2E7QUFBQSxrQkFDRDtBQUFBLHNCQUNJO0FBQUEsc0JBQ0Y7QUFBQSx5QkFDRztBQUFBLGNBRVA7QUFBQSxlQUVEO0FBQUEsaUJBQ0E7QUFBQSxrQkFDQztBQUFBLG1CQUNHO0FBQUEsd0JBQ0s7QUFBQSxTQUVoQixZQUFXO0FBQUEsVUFBNkI7QUFBQSxTQUd4QztBQUFBO0FBQUEsVUFHRTtBQUFBLHNCQUNhO0FBQUEsV0FDWDtBQUFBLFlBQWU7QUFBQSw2QkFHYixrQkFDQSxvQkFDQSxNQUFNO0FBQUE7QUFBQSxVQUdWO0FBQUEsU0FYYztBQUFBLDZCQWVkLGlCQURTO0FBQUE7QUFBQSxVQUtUO0FBQUEsdUJBQ2E7QUFBQSxVQUNiO0FBQUEsVUFDQSxZQUFXO0FBQUEsbUJBQ0g7QUFBQSxXQUNOLDZCQUE4QjtBQUFBLFdBRzlCO0FBQUEsV0FDQTtBQUFBO0FBQUEsVUFFRixhQUFhO0FBQUEsU0FaRjtBQUFBO0FBQUEsVUFnQlgsWUFBYSxPQUFPLFFBQVEsT0FDdkI7QUFBQSxTQUZZO0FBQUEsU0FNbkI7QUFBQTtBQUFBLGdCQUNTO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBLGVBQ0g7QUFBQTtBQUFBLFVBR0o7QUFBQSxVQUVBO0FBQUE7QUFBQSxhQUVJLHFCQUNFLGdCQUNBO0FBQUEsYUFFRixlQUFnQixZQUNYO0FBQUEsYUFDTDtBQUFBO0FBQUEsYUFFQSxxQkFDRSxnQkFDQTtBQUFBLGFBRUYsR0FBSSxrQ0FBa0MsWUFDakM7QUFBQSxhQUNMO0FBQUE7QUFBQSxhQUVBO0FBQUEsd0JBQ1kseUNBQXVDO0FBQUE7QUFBQTtBQUFBLGNBSWpELHFCQUNFLGdCQUNBO0FBQUEsY0FFRixTQUFVO0FBQUEsZUFBbUI7QUFBQSxtQkFFM0IsYUFDQTtBQUFBO0FBQUEsYUFHSjtBQUFBO0FBQUEsYUFFQTtBQUFBLHdCQUNZLHlDQUF1QztBQUFBO0FBQUE7QUFBQSxjQUlqRCxxQkFDRSxnQkFDQTtBQUFBLGNBRUYsR0FBSSw0QkFBNEI7QUFBQSxlQUFtQjtBQUFBLG1CQUVqRCxhQUNBO0FBQUE7QUFBQSxhQUdKO0FBQUE7QUFBQSxhQUVBLHFCQUNFLGdCQUNBO0FBQUEsYUFFRixHQUFJLDJCQUEyQixZQUMxQjtBQUFBLGFBQ0w7QUFBQTtBQUFBLGFBRUEsaUNBQ0UsYUFFRjtBQUFBO0FBQUEsYUFFQSxvQ0FDRSxhQUVGO0FBQUE7QUFBQSxhQUVBO0FBQUEsY0FDRSxxQkFDRSxnQkFDQTtBQUFBLGNBRUYsR0FBSSxzQkFBc0I7QUFBQSxjQUMxQjtBQUFBO0FBQUE7QUFBQSxjQUVBLEdBQUksNEJBQTRCO0FBQUEsY0FDaEM7QUFBQTtBQUFBO0FBQUEsY0FFQSxHQUFJLCtCQUErQix3QkFBd0I7QUFBQSxjQUMzRDtBQUFBO0FBQUEsYUFFRjtBQUFBO0FBQUEsYUFFQTtBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBQUEsYUFDQTtBQUFBO0FBQUEsYUFFQTtBQUFBLGFBQ0E7QUFBQSxhQUNBO0FBQUEsYUFDQTtBQUFBO0FBQUEsYUFFQTtBQUFBLGFBQ0EscUNBQ0UsYUFDQTtBQUFBLGFBRUYsWUFBVztBQUFBLGNBQ1QscUJBQ0UsZ0JBQ0E7QUFBQSxjQUVGLG9CQUNFLGFBQ0E7QUFBQSxjQUVGO0FBQUE7QUFBQSxhQUVGO0FBQUE7QUFBQSxhQUVBLEdBQUksMkJBQTJCLE9BQy9CO0FBQUE7QUFBQSxhQUVBLE1BQU8sMkJBQTJCLGNBQ2xDO0FBQUE7QUFBQSxhQUVBLHFCQUNFLGdCQUNBO0FBQUEsYUFFRixHQUFJO0FBQUEsY0FBMkIsR0FDMUIsbUJBRU07QUFBQTtBQUFBLGNBQ0o7QUFBQSxhQUNQO0FBQUEsaUNBRUEsT0FBTyxRQUFRO0FBQUE7QUFBQSxhQUVmLGdCQUNBO0FBQUE7QUFBQSxhQUVBLHdDQUNBO0FBQUE7QUFBQSxhQUVBO0FBQUE7QUFBQSxhQUdBO0FBQUEsYUFDQTtBQUFBO0FBQUEsYUFFQSw4QkFBK0IsYUFDL0I7QUFBQSxxQkFFQSxNQUFNO0FBQUE7QUFBQTtBQUFBLFNBR1osUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUVBLG9CQUFvQjtBQUFBLE9BdlFOO0FBQUEsT0FBRDtBQUFBO0FBQUEsSUFvVmIsb0JBQXFCO0FBQUEsS0FDbkI7QUFBQSxjQUNRO0FBQUEsSUFDVixzQnRDalhGO0FBQUEsR3NDbVhBO0FBQUE7QUFBQTtBQUFBLFlBUWE7QUFBQSxXQUNIO0FBQUEsWUFDRztBQUFBLFdBQ0g7QUFBQSxTQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUdOO0FBQUEsS0FDRSxNQUFNO0FBQUEsS0FDTjtBQUFBLE1BQWtCO0FBQUE7QUFBQSxNQUdoQixjQUFlO0FBQUEsTUFDZixNQUFNO0FBQUEsTUFDTjtBQUFBO0FBQUEsU0FFSSxZQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQVdBO0FBQUEsU0FDQTtBQUFBLFVBQ0U7QUFBQSxTQUNGLFFBQVE7QUFBQSxTQUNSLE1BQU07QUFBQSxTQUNOO0FBQUEsVUFDRTtBQUFBLFNBQ0YsT0FBTztBQUFBLFNBQ1A7QUFBQSxpQkFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSVIsT0FBTywyQkFBMkI7QUFBQSxHQUNwQztBQUFBO0FBQUEsSUFoR0Usb0JBQXFCO0FBQUEsS0FDbkI7QUFBQSxxQkFDYTtBQUFBLElBQ2Y7QUFBQSxLQUNFO0FBQUEsZUFDVTtBQUFBLEtBQ1Y7QUFBQSxNQUNFO0FBQUE7QUFBQSxVQUdFLDRCQUE0QjtBQUFBLE9BRTVCO0FBQUEsZ0JBQ1E7QUFBQSxNQUNWLFFBQVMsVUFBVTtBQUFBLE1BQ25CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBRUcsYUFFTyx5QkFDVixRQUFTLFVBQVUsRUFDbkI7QUFBQTtBQUFBO0FBQUEsSUFHSixVQUFVO0FBQUEsR0FDWjtBQUFBO0FBQUEsSUF2REUsb0JBQXFCO0FBQUEsS0FDbkI7QUFBQSxxQkFDYSxpQkFDTDtBQUFBLElBQ1Y7QUFBQSxLQUNFO0FBQUEsS0FDQTtBQUFBLE1BQ0U7QUFBQSxvQkFFRSw0QkFBNEI7QUFBQSxPQUU1QjtBQUFBLGdCQUNRO0FBQUEsTUFDVixRQUFTLFVBQVU7QUFBQSxNQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUVHLGFBRU8seUJBQ1YsUUFBUyxVQUFVLEVBQ25CO0FBQUE7QUFBQTtBQUFBLElBR0osVUFBVTtBQUFBLEdBQ1o7QUFBQTtBQUFBLElBb0NFLG9CQUFxQjtBQUFBLEtBQ25CO0FBQUEsY0FDUTtBQUFBLElBQ1Ysc0J0Q3ZXRjtBQUFBLEdzQ3lXQTtBQUFBLDJDeEI3UkUsdUJBQ0EsUUFBUSxDQUNWO0FBQUEsa0RBU0UsdUJBQ0EsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBLGdCQTJNWTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsWUFBWTtBQUFBLEdBQ2Q7QUFBQTtBQUFBLGtCTHpEYztBQUFBLElBQ1osT0FBTyx3QkFBd0IscUJBQXFCO0FBQUEsR0FDdEQ7QUFBQTtBQUFBLGtCTDBLYztBQUFBLElBQ1o7QUFBQSxLQUNFO0FBQUE7QUFBQTtBQUFBLFFBQ0U7QUFBQSxRQUNBO0FBQUEsT0FGOEI7QUFBQTtBQUFBLEtBS2hDO0FBQUE7QUFBQTtBQUFBLFFBQ0UsZ0JBQ0U7QUFBQSxPQUZpQztBQUFBLEdBTXpDO0FBQUEsR0FDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0p6YUE7QUFBQSxPQUFBQSxvQkFBQTtBQUFBO0FBQUEsT0FBQUMsZ0JBQUE7QUFBQTtBQUFBLE9BQUFDLGNBQUE7QUFBQTtBQUFBLE9BQUFDLHVCQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUFDLGtCQUFBO0FBQUE7QUFBQSxPQUFBQyx1QkFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBQyxnQkFBQTtBQUFBO0FBQUEsT0FBQUMsb0JBQUE7QUFBQTtBQUFBLE9BQUFDLHFCQUFBO0FBQUE7QUFBQSxPQUFBQyxxQkFBQTtBQUFBO0FBQUEsT0FBQUMscUJBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQUMsaUNBQUEiLCJpZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOF19fSx7Im9mZnNldCI6eyJsaW5lIjo5MzE0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUGFkZGluZyBwb3NpdGlvbi4gKilcbnR5cGUgcGFkdHkgPVxuICB8IExlZnQgICAoKiBUZXh0IGlzIGxlZnQganVzdGlmaWVkICgnLScgb3B0aW9uKS4gICAgICAgICAgICAgICAqKVxuICB8IFJpZ2h0ICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCAobm8gJy0nIG9wdGlvbikuICAgICAgICAgICAqKVxuICB8IFplcm9zICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCBieSB6ZXJvcyAoc2VlICcwJyBvcHRpb24pLiAqKVxuXG4oKioqKVxuXG4oKiBJbnRlZ2VyIGNvbnZlcnNpb24uICopXG50eXBlIGludF9jb252ID1cbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCAgICAgICAgKCogICVkIHwgJStkIHwgJSBkICAqKVxuICB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpICAgICAgICAoKiAgJWkgfCAlK2kgfCAlIGkgICopXG4gIHwgSW50X3ggfCBJbnRfQ3ggICAgICAgICAgICAgICAgICgqICAleCB8ICUjeCAgICAgICAgKilcbiAgfCBJbnRfWCB8IEludF9DWCAgICAgICAgICAgICAgICAgKCogICVYIHwgJSNYICAgICAgICAqKVxuICB8IEludF9vIHwgSW50X0NvICAgICAgICAgICAgICAgICAoKiAgJW8gfCAlI28gICAgICAgICopXG4gIHwgSW50X3UgICAgICAgICAgICAgICAgICAgICAgICAgICgqICAldSAgICAgICAgICAgICAgKilcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgICAgICAgKCogICUjZCB8ICUjaSB8ICUjdSAqKVxuXG4oKiBGbG9hdCBjb252ZXJzaW9uLiAqKVxudHlwZSBmbG9hdF9mbGFnX2NvbnYgPVxuICB8IEZsb2F0X2ZsYWdfICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcCAgICAgICAgICAgICAgICAgICAoKiAlK1tmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3MgICAgICAgICAgICAgICAgICAgKCogJSBbZmVFZ0dGaEhdICopXG50eXBlIGZsb2F0X2tpbmRfY29udiA9XG4gIHwgRmxvYXRfZiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZiB8ICUrZiB8ICUgZiAgKilcbiAgfCBGbG9hdF9lICAgICAgICAgICAgICAgICAgICAgICAgKCogICVlIHwgJStlIHwgJSBlICAqKVxuICB8IEZsb2F0X0UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUUgfCAlK0UgfCAlIEUgICopXG4gIHwgRmxvYXRfZyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZyB8ICUrZyB8ICUgZyAgKilcbiAgfCBGbG9hdF9HICAgICAgICAgICAgICAgICAgICAgICAgKCogICVHIHwgJStHIHwgJSBHICAqKVxuICB8IEZsb2F0X0YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUYgfCAlK0YgfCAlIEYgICopXG4gIHwgRmxvYXRfaCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlaCB8ICUraCB8ICUgaCAgKilcbiAgfCBGbG9hdF9IICAgICAgICAgICAgICAgICAgICAgICAgKCogICVIIHwgJStIIHwgJSBIICAqKVxuICB8IEZsb2F0X0NGICAgICAgICAgICAgICAgICAgICAgICAoKiAgJSNGfCAlKyNGfCAlICNGICopXG50eXBlIGZsb2F0X2NvbnYgPSBmbG9hdF9mbGFnX2NvbnYgKiBmbG9hdF9raW5kX2NvbnZcblxuKCoqKilcblxuKCogQ2hhciBzZXRzIChzZWUgJVsuLi5dKSBhcmUgYml0bWFwcyBpbXBsZW1lbnRlZCBhcyAzMi1jaGFyIHN0cmluZ3MuICopXG50eXBlIGNoYXJfc2V0ID0gc3RyaW5nXG5cbigqKiopXG5cbigqIENvdW50ZXIgdXNlZCBpbiBTY2FuZi4gKilcbnR5cGUgY291bnRlciA9XG4gIHwgTGluZV9jb3VudGVyICAgICAoKiAgJWwgICAgICAqKVxuICB8IENoYXJfY291bnRlciAgICAgKCogICVuICAgICAgKilcbiAgfCBUb2tlbl9jb3VudGVyICAgICgqICAlTiwgJUwgICopXG5cbigqKiopXG5cbigqIFBhZGRpbmcgb2Ygc3RyaW5ncyBhbmQgbnVtYmVycy4gKilcbnR5cGUgKCdhLCAnYikgcGFkZGluZyA9XG4gICgqIE5vIHBhZGRpbmcgKGV4OiBcIiVkXCIpICopXG4gIHwgTm9fcGFkZGluZyAgOiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIExpdGVyYWwgcGFkZGluZyAoZXg6IFwiJThkXCIpICopXG4gIHwgTGl0X3BhZGRpbmcgOiBwYWR0eSAqIGludCAtPiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIFBhZGRpbmcgYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqZFwiKSAqKVxuICB8IEFyZ19wYWRkaW5nIDogcGFkdHkgLT4gKGludCAtPiAnYSwgJ2EpIHBhZGRpbmdcblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZCxcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwYWRkaW5nIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHBhZF9vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIFByZWNpc2lvbiBvZiBmbG9hdHMgYW5kICcwJy1wYWRkaW5nIG9mIGludGVnZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwcmVjaXNpb24gPVxuICAoKiBObyBwcmVjaXNpb24gKGV4OiBcIiVmXCIpICopXG4gIHwgTm9fcHJlY2lzaW9uIDogKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIExpdGVyYWwgcHJlY2lzaW9uIChleDogXCIlLjNmXCIpICopXG4gIHwgTGl0X3ByZWNpc2lvbiA6IGludCAtPiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogUHJlY2lzaW9uIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpICopXG4gIHwgQXJnX3ByZWNpc2lvbiA6IChpbnQgLT4gJ2EsICdhKSBwcmVjaXNpb25cblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZixcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwcmVjaXNpb24gb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcHJlY19vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIHNlZSB0aGUgQ3VzdG9tIGZvcm1hdCBjb21iaW5hdG9yICopXG50eXBlICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgPVxuICB8IEN1c3RvbV96ZXJvIDogKCdhLCBzdHJpbmcsICdhKSBjdXN0b21fYXJpdHlcbiAgfCBDdXN0b21fc3VjYyA6ICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgLT5cbiAgICAoJ2EsICd4IC0+ICdiLCAneCAtPiAnYykgY3VzdG9tX2FyaXR5XG5cbigqKiopXG5cbigqICAgICAgICBSZWxhdGlvbmFsIGZvcm1hdCB0eXBlc1xuXG5JbiB0aGUgZmlyc3QgZm9ybWF0K2dhZHRzIGltcGxlbWVudGF0aW9uLCB0aGUgdHlwZSBmb3IgJSguLiUpIGluIHRoZVxuZm10IEdBRFQgd2FzIGFzIGZvbGxvd3M6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKiAoJ2QxLCAncTEsICdkMiwgJ3EyKSByZWFkZXJfbmJfdW5pZmllciAqXG4gICAgKCd4LCAnYiwgJ2MsICdkMSwgJ3ExLCAndSkgZm10dHkgKlxuICAgICgndSwgJ2IsICdjLCAncTEsICdlMSwgJ2YpIGZtdCAtPlxuICAgICAgKCgneCwgJ2IsICdjLCAnZDIsICdxMiwgJ3UpIGZvcm1hdDYgLT4gJ3gsICdiLCAnYywgJ2QxLCAnZTEsICdmKSBmbXRcblxuTm90aWNlIHRoYXQgdGhlICd1IHBhcmFtZXRlciBpbiAnZiBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0IGFyZ3VtZW50XG4oKCd4LCAuLiwgJ3UpIGZvcm1hdDYgLT4gLi4pIGlzIGVxdWFsIHRvIHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2FcbnBvc2l0aW9uIGluIHRoZSBmb3JtYXQgdGFpbCAoKCd1LCAuLiwgJ2YpIGZtdCkuIFRoaXMgbWVhbnMgdGhhdCB0aGVcbnR5cGUgb2YgdGhlIGV4cGVjdGVkIGZvcm1hdCBwYXJhbWV0ZXIgZGVwZW5kcyBvZiB3aGVyZSB0aGUgJSguLi4lKVxuYXJlIGluIHRoZSBmb3JtYXQgc3RyaW5nOlxuXG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSlcIlxuICAtIDogKHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IHVuaXRcbiAgPSA8ZnVuPlxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpJWRcIlxuICAtIDogKGludCAtPiB1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIGludCAtPiB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gaW50IC0+IHVuaXRcbiAgPSA8ZnVuPlxuXG5PbiB0aGUgY29udHJhcnksIHRoZSBsZWdhY3kgdHlwZXIgZ2l2ZXMgYSBjbGV2ZXIgdHlwZSB0aGF0IGRvZXMgbm90XG5kZXBlbmQgb24gdGhlIHBvc2l0aW9uIG9mICUoLi4lKSBpbiB0aGUgZm9ybWF0IHN0cmluZy4gRm9yIGV4YW1wbGUsXG4lKCUpIHdpbGwgaGF2ZSB0aGUgcG9seW1vcnBoaWMgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSk6IGl0IGNhblxuYmUgY29uY2F0ZW5hdGVkIHRvIGFueSBmb3JtYXQgdHlwZSwgYW5kIG9ubHkgZW5mb3JjZXMgdGhlIGNvbnN0cmFpbnRcbnRoYXQgaXRzICdhIGFuZCAnZiBwYXJhbWV0ZXJzIGFyZSBlcXVhbCAobm8gZm9ybWF0IGFyZ3VtZW50cykgYW5kICdkXG5hbmQgJ2UgYXJlIGVxdWFsIChubyByZWFkZXIgYXJndW1lbnQpLlxuXG5UaGUgd2Vha2VuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIHR5cGUgaW4gdGhlIEdBRFQgdmVyc2lvbiBicm9rZSB1c2VyXG5jb2RlIChpbiBmYWN0IGl0IGVzc2VudGlhbGx5IG1hZGUgJSguLi4lKSB1bnVzYWJsZSBleGNlcHQgYXQgdGhlIGxhc3RcbnBvc2l0aW9uIG9mIGEgZm9ybWF0KS4gSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3Qgd29ya1xuYW55bW9yZTpcblxuICBmdW4gc2VwIC0+XG4gICAgRm9ybWF0LnByaW50ZiBcImZvbyUoJSliYXIlKCUpYmF6XCIgc2VwIHNlcFxuXG5BcyB0aGUgdHlwZS1jaGVja2VyIHdvdWxkIHJlcXVpcmUgdHdvICppbmNvbXBhdGlibGUqIHR5cGVzIGZvciB0aGUgJSglKVxuaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cblxuVGhlIHNvbHV0aW9uIHRvIHJlZ2FpbiBhIGdlbmVyYWwgdHlwZSBmb3IgJSguLiUpIGlzIHRvIGdlbmVyYWxpemUgdGhpc1xudGVjaG5pcXVlLCBub3Qgb25seSBvbiB0aGUgJ2QsICdlIHBhcmFtZXRlcnMsIGJ1dCBvbiBhbGwgc2l4XG5wYXJhbWV0ZXJzIG9mIGEgZm9ybWF0OiB3ZSBpbnRyb2R1Y2UgYSBcInJlbGF0aW9uYWxcIiB0eXBlXG4gICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG53aG9zZSB2YWx1ZXMgYXJlIHByb29mcyB0aGF0ICgnYTEsIC4uLCAnZjEpIGFuZCAoJ2EyLCAuLiwgJ2YyKSBtb3JhbGx5XG5jb3JyZXNwb25kIHRvIHRoZSBzYW1lIGZvcm1hdCB0eXBlOiAnYTEgaXMgb2J0YWluZWQgZnJvbSAnZjEsJ2IxLCdjMVxuaW4gdGhlIGV4YWN0IHNhbWUgd2F5IHRoYXQgJ2EyIGlzIG9idGFpbmVkIGZyb20gJ2YyLCdiMiwnYzIsIGV0Yy5cblxuRm9yIGV4YW1wbGUsIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHR3byBmb3JtYXQgdHlwZXMgYmVnaW5uaW5nIHdpdGggYSBDaGFyXG5wYXJhbWV0ZXIgaXMgYXMgZm9sbG93czpcblxufCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbkluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB0ZXJtIHN0cnVjdHVyZSBvZiBmbXR0eV9yZWwgaXMgKGFsbW9zdFsxXSlcbmlzb21vcnBoaWMgdG8gdGhlIGZtdHR5IG9mIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbjogZXZlcnlcbmNvbnN0cnVjdG9yIGlzIHJlLXJlYWQgd2l0aCBhIGJpbmFyeSwgcmVsYXRpb25hbCB0eXBlLCBpbnN0ZWFkIG9mIHRoZVxucHJldmlvdXMgdW5hcnkgdHlwaW5nLiBmbXR0eSBjYW4gdGhlbiBiZSByZS1kZWZpbmVkIGFzIHRoZSBkaWFnb25hbCBvZlxuZm10dHlfcmVsOlxuXG4gIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5cbk9uY2Ugd2UgaGF2ZSB0aGlzIGZtdHR5X3JlbCB0eXBlIGluIHBsYWNlLCB3ZSBjYW4gZ2l2ZSB0aGUgbW9yZVxuZ2VuZXJhbCB0eXBlIHRvICUoLi4uJSk6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG5XZSBhY2NlcHQgYW55IGZvcm1hdCAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYpICh0aGlzIGlzXG5jb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmb3JtYXQpLCBidXQgYWxzb1xucmVxdWlyZSBhIHByb29mIHRoYXQgdGhpcyBmb3JtYXQgaXMgaW4gcmVsYXRpb24gdG8gYW5vdGhlciBmb3JtYXQgdGhhdFxuaXMgY29uY2F0ZW5hYmxlIHRvIHRoZSBmb3JtYXQgdGFpbC4gV2hlbiBleGVjdXRpbmcgYSAlKC4uLiUpIGZvcm1hdFxuKGluIGNhbWxpbnRlcm5hbEZvcm1hdC5tbDptYWtlX3ByaW50ZiBvciBzY2FuZi5tbDptYWtlX3NjYW5mKSwgd2VcbnRyYW5zdHlwZSB0aGUgZm9ybWF0IGFsb25nIHRoaXMgcmVsYXRpb24gdXNpbmcgdGhlICdyZWNhc3QnIGZ1bmN0aW9uXG50byB0cmFuc3Bvc2UgYmV0d2VlbiByZWxhdGVkIGZvcm1hdCB0eXBlcy5cblxuICB2YWwgcmVjYXN0IDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEpIGZtdFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10XG5cbk5PVEUgWzFdOiB0aGUgdHlwaW5nIG9mIEZvcm1hdF9zdWJzdF90eSByZXF1aXJlcyBub3Qgb25lIGZvcm1hdCB0eXBlLCBidXRcbnR3bywgb25lIHRvIGVzdGFibGlzaCB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXQgYXJndW1lbnQgYW5kIHRoZVxuZmlyc3Qgc2l4IHBhcmFtZXRlcnMsIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdFxuYXJndW1lbnQgYW5kIHRoZSBsYXN0IHNpeCBwYXJhbWV0ZXJzLlxuXG58IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuV2hlbiB3ZSBnZW5lcmF0ZSBhIGZvcm1hdCBBU1QsIHdlIGdlbmVyYXRlIGV4YWN0bHkgdGhlIHNhbWUgd2l0bmVzc1xuZm9yIGJvdGggcmVsYXRpb25zLCBhbmQgdGhlIHdpdG5lc3MtY29udmVyc2lvbiBmdW5jdGlvbnMgaW5cbmNhbWxpbnRlcm5hbEZvcm1hdCBkbyByZWx5IG9uIHRoaXMgaW52YXJpYW50LiBGb3IgZXhhbXBsZSwgdGhlXG5mdW5jdGlvbiB0aGF0IHByb3ZlcyB0aGF0IHRoZSByZWxhdGlvbiBpcyB0cmFuc2l0aXZlXG5cbiAgdmFsIHRyYW5zIDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcblxuZG9lcyBhc3N1bWUgdGhhdCB0aGUgdHdvIGlucHV0cyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgdGVybSBzdHJ1Y3R1cmVcbihhbmQgaXMgb25seSBldmVyeSB1c2VkIGZvciBhcmd1bWVudCB3aXRuZXNzZXMgb2YgdGhlXG5Gb3JtYXRfc3Vic3RfdHkgY29uc3RydWN0b3IpLlxuKilcblxuKCogVHlwZSBvZiBhIGJsb2NrIHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCAgICgqIEhvcml6b250YWwgYmxvY2sgbm8gbGluZSBicmVha2luZyAqKVxuICB8IFBwX3Zib3ggICAoKiBWZXJ0aWNhbCBibG9jayBlYWNoIGJyZWFrIGxlYWRzIHRvIGEgbmV3IGxpbmUgKilcbiAgfCBQcF9odmJveCAgKCogSG9yaXpvbnRhbC12ZXJ0aWNhbCBibG9jazogc2FtZSBhcyB2Ym94LCBleGNlcHQgaWYgdGhpcyBibG9ja1xuICAgICAgICAgICAgICAgICBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IG9uIGEgc2luZ2xlIGxpbmUgKilcbiAgfCBQcF9ob3Zib3ggKCogSG9yaXpvbnRhbCBvciBWZXJ0aWNhbCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2sgKilcbiAgfCBQcF9ib3ggICAgKCogSG9yaXpvbnRhbCBvciBJbmRlbnQgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrLCBvclxuICAgICAgICAgICAgICAgICB3aGVuIGl0IGxlYWRzIHRvIGEgbmV3IGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgKilcbiAgfCBQcF9maXRzICAgKCogSW50ZXJuYWwgdXNhZ2U6IHdoZW4gYSBibG9jayBmaXRzIG9uIGEgc2luZ2xlIGxpbmUgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgZm9ybWF0dGluZ19saXQgPVxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXSAgICopXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEB9ICAgKilcbiAgfCBCcmVhayBvZiBzdHJpbmcgKiBpbnQgKiBpbnQgICAgICAgICAgKCogQCwgfCBAICB8IEA7IHwgQDs8PiAqKVxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPyAgICopXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBcXG4gICopXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAuICAgKilcbiAgfCBNYWdpY19zaXplIG9mIHN0cmluZyAqIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQDxuPiAqKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAQCAgICopXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAlJSAgKilcbiAgfCBTY2FuX2luZGljIG9mIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFggICAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW4gPVxuICB8IE9wZW5fdGFnIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAeyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG4gIHwgT3Blbl9ib3ggOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEBbICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgdHlwZSBlbGVtZW50cy4gKilcbigqIEluIHBhcnRpY3VsYXIgdXNlZCB0byByZXByZXNlbnQgJSguLi4lKSBhbmQgJXsuLi4lfSBjb250ZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuYW5kICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgPVxuICB8IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFN0cmluZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKHN0cmluZyAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIHN0cmluZyAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50MzJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50MzIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQzMiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBOYXRpdmVpbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5kICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChuYXRpdmVpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBuYXRpdmVpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50NjRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50NjQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQ2NCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBGbG9hdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWYgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChmbG9hdCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGZsb2F0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEJvb2xfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGJvb2wgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBib29sIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRm9ybWF0X2FyZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuICB8IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzLiAqKVxuICB8IEFscGhhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ3ggLT4gJ2MxKSAtPiAneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ3ggLT4gJ2MyKSAtPiAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBUaGV0YV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICdjMSkgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICdjMikgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQW55X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBVc2VkIGZvciBjdXN0b20gZm9ybWF0cyAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBSZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IElnbm9yZWRfcmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRW5kX29mX2ZtdHR5IDpcbiAgICAgICgnZjEsICdiMSwgJ2MxLCAnZDEsICdkMSwgJ2YxLFxuICAgICAgICdmMiwgJ2IyLCAnYzIsICdkMiwgJ2QyLCAnZjIpIGZtdHR5X3JlbFxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCBlbGVtZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ID1cbiAgfCBDaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlUyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQzMiAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IE5hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgbmF0aXZlaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQ2NCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gICAgICBmbG9hdF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgZmxvYXQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBCb29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2JCXSAqKVxuICAgICAgKCd4LCBib29sIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmx1c2ggOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogYWJjICopXG4gICAgICBzdHJpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDaGFyX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiB4ICopXG4gICAgICBjaGFyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBGb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgQWxwaGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAneCAtPiAnYykgLT4gJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgVGhldGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAnYykgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICBmb3JtYXR0aW5nX2xpdCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdHRpbmdfZ2VuIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgKCdhMSwgJ2IsICdjLCAnZDEsICdlMSwgJ2YxKSBmb3JtYXR0aW5nX2dlbiAqXG4gICAgICAoJ2YxLCAnYiwgJ2MsICdlMSwgJ2UyLCAnZjIpIGZtdCAtPiAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UyLCAnZjIpIGZtdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3ggLT4gJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKHN0cmluZyAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW25sTkxdICopXG4gICAgICBjb3VudGVyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoaW50IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUwYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSWdub3JlZF9wYXJhbSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8gKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBpZ25vcmVkICogKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogQ3VzdG9tIHByaW50aW5nIGZvcm1hdCAoUFIjNjQ1MiwgR1BSIzE0MClcblxuICAgICBXZSBpbmNsdWRlIGEgdHlwZSBDdXN0b20gb2YgXCJjdXN0b20gY29udmVydGVyc1wiLCB3aGVyZSBhblxuICAgICBhcmJpdHJhcnkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29udmVydCBvbmUgb3IgbW9yZVxuICAgICBhcmd1bWVudHMuIFRoZXJlIGlzIG5vIHN5bnRheCBmb3IgY3VzdG9tIGNvbnZlcnRlcnMsIGl0IGlzIG9ubHlcbiAgICAgaW50ZW5kZWQgZm9yIGN1c3RvbSBwcm9jZXNzb3JzIHRoYXQgd2lzaCB0byByZWx5IG9uIHRoZVxuICAgICBzdGRsaWItZGVmaW5lZCBmb3JtYXQgR0FEVHMuXG5cbiAgICAgRm9yIGluc3RhbmNlIGEgcHJlLXByb2Nlc3NvciBjb3VsZCBjaG9vc2UgdG8gaW50ZXJwcmV0IHN0cmluZ3NcbiAgICAgcHJlZml4ZWQgd2l0aCBbXCIhXCJdIGFzIGZvcm1hdCBzdHJpbmdzIHdoZXJlIFsle3sgLi4uIH19XSBpc1xuICAgICBhIHNwZWNpYWwgZm9ybSB0byBwYXNzIGEgdG9fc3RyaW5nIGZ1bmN0aW9uLCBzbyB0aGF0IG9uZSBjb3VsZFxuICAgICB3cml0ZTpcblxuICAgICB7W1xuICAgICAgIHR5cGUgdCA9IHsgeCA6IGludDsgeSA6IGludCB9XG5cbiAgICAgICBsZXQgc3RyaW5nX29mX3QgdCA9IFByaW50Zi5zcHJpbnRmIFwieyB4ID0gJWQ7IHkgPSAlZCB9XCIgdC54IHQueVxuXG4gICAgICAgUHJpbnRmLnByaW50ZiAhXCJ0ID0gJXt7c3RyaW5nX29mX3R9fVwiIHsgeCA9IDQyOyB5ID0gNDIgfVxuICAgICBdfVxuICAqKVxuICB8IEN1c3RvbSA6XG4gICAgICAoJ2EsICd4LCAneSkgY3VzdG9tX2FyaXR5ICogKHVuaXQgLT4gJ3gpICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIGVuZCBvZiBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uICopXG4gIHwgRW5kX29mX2Zvcm1hdCA6XG4gICAgICAgICgnZiwgJ2IsICdjLCAnZSwgJ2UsICdmKSBmbXRcblxuKCoqKilcblxuKCogVHlwZSBmb3IgaWdub3JlZCBwYXJhbWV0ZXJzIChzZWUgXCIlX1wiKS4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZCA9XG4gIHwgSWdub3JlZF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9jICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2QgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfbmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbmQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfTGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZiAqKVxuICAgICAgcGFkX29wdGlvbiAqIHByZWNfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9ib29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9CICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV97Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZFxuICB8IElnbm9yZWRfcmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfW25sTkxdICopXG4gICAgICBjb3VudGVyIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8wYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcblxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgKiBzdHJpbmdcblxubGV0IHJlYyBlcmFzZV9yZWwgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYsXG4gICBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5XG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCBfdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTEsIGVyYXNlX3JlbCByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBlIGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdCB0eXBlcy4gKilcbigqIFVzZWQgYnk6XG4gICAqIHJlYWRlcl9uYl91bmlmaWVyX29mX2ZtdHR5IHRvIGNvdW50IHJlYWRlcnMgaW4gYW4gZm10dHksXG4gICAqIFNjYW5mLnRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgdG8gZXh0cmFjdCByZWFkZXJzIGluc2lkZSAlKC4uLiUpLFxuICAgKiBDYW1saW50ZXJuYWxGb3JtYXQuZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgdG8gZXh0cmFjdCBmb3JtYXQgdHlwZS4gKilcblxuKCpcbmxldCByZWMgY29uY2F0X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXR0eSA9XG4qKVxubGV0IHJlYyBjb25jYXRfZm10dHkgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgICAgICBnMSBqMSBnMiBqMlxuICAuXG4gICAgKGcxLCBiMSwgYzEsIGoxLCBkMSwgYTEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBkMiwgYTIpIGZtdHR5X3JlbCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGUxLCBmMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGUyLCBmMikgZm10dHlfcmVsID1cbmZ1biBmbXR0eTEgZm10dHkyIC0+IG1hdGNoIGZtdHR5MSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBFbmRfb2ZfZm10dHkgLT4gZm10dHkyXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0cy4gKilcbmxldCByZWMgY29uY2F0X2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXQgPVxuZnVuIGZtdDEgZm10MiAtPiBtYXRjaCBmbXQxIHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBTdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBDYW1sX3N0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDMyIChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgQ2hhciAocmVzdCkgLT5cbiAgICBDaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIENhbWxfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIEJvb2wgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIEFscGhhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgVGhldGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgQ3VzdG9tIChhcml0eSwgZiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgUmVhZGVyIHJlc3QgLT5cbiAgICBSZWFkZXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBGbHVzaCAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIFN0cmluZ19saXRlcmFsIChzdHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIENoYXJfbGl0ZXJhbCAgIChjaHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnICAgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fbmV4dF9jaGFyIChyZXN0KSAtPlxuICAgIFNjYW5fbmV4dF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgSWdub3JlZF9wYXJhbSAoaWduLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgZm10MlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJlcmFzZV9yZWwiLCJwYXJhbSIsInJlc3QiLCJ0eSIsInR5MSIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInByZWMiLCJpY29udiIsImZjb252Iiwic3RyIiwiY2hyIiwiZm10dHkiLCJmbXRpbmdfbGl0IiwiZm10aW5nX2dlbiIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwiY291bnRlciIsImlnbiIsImYiLCJhcml0eSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxVQUFBQztBQUFBQSxJQytnQlEsOEJBa0NZO0FBQUEsSUFsQ1o7QUFBQTtBQUFBLFdBQUFDLE9BQUEsVUFLSSwyQkFBZ0I7QUFBQTtBQUFBLFdBQUFBLFNBTHBCLFVBT00sNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQVB0QixVQVNHLDZCQUFnQjtBQUFBO0FBQUEsV0FBQUEsU0FUbkIsVUFXSyw2QkFBZ0I7QUFBQTtBQUFBLFdBQUFBLFNBWHJCLFVBZVMsNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQWZ6QixVQWFLLDZCQUFnQjtBQUFBO0FBQUEsV0FBQUEsU0FickIsVUFpQkssNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQWpCckIsVUFtQkksNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQW5CcEIsVUFBQUMsS0FBQTtBQUFBLE9BcUJlLGlDQUFjO0FBQUE7QUFBQSxXQUFBRCxTQXJCN0IsVUFBQUUsTUFBQTtBQUFBLE9BdUJ1Qix1Q0FBYztBQUFBO0FBQUEsV0FBQUYsU0F2QnJDLFVBeUJLLDhCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUF6QnJCLFVBMkJLLCtCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUEzQnJCLFVBNkJHLCtCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUE3Qm5CLFVBK0JNLCtCQUFnQjtBQUFBLG1CQUFBQSxVQS9CdEIsVUFpQ2Ms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QUEsT0F3RGUsa0RBQW9CO0FBQUE7QUFBQSxXQUFBbEIsVUF4RG5DLFNBOEJOLHNDQUFzQjtBQUFBO0FBQUEsV0FBQUEsVUE5QmhCLFNBQUFtQixXQUFBLFNBQUFDLFlBQUE7QUFBQSxPQTZDdUIsMkRBQW9CO0FBQUE7QUFBQSxXQUFBcEIsVUE3QzNDLFNBQUFxQixVQUFBO0FBQUEsT0ErQ2MsK0NBQW9CO0FBQUE7QUFBQSxXQUFBckIsVUEvQ2xDLFNBaURFLHNDQUFzQjtBQUFBO0FBQUEsV0FBQUEsVUFqRHhCLFNBQUFzQixNQUFBO0FBQUEsT0FtRE8sMkNBQW9CO0FBQUE7QUFBQSxXQUFBdEIsVUFuRDNCLFNBQUF1QixJQUFBLFNBQUFDLFFBQUE7QUFBQSxPQTRCSyxnREFBb0I7QUFBQTtBQUFBLEdBK0JsQztBQUFBLEdEanJCUiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjk0ODksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RkbGliLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuXG4oKiBJbnRlZ2VyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LSApIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCAoIH4rICkgOiBpbnQgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsICggLSApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgKCAqICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCAoIC8gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsICggbW9kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5cbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxuXG5leHRlcm5hbCAoIGxhbmQgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsICggbG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsICggbHhvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxuXG5sZXQgbG5vdCB4ID0geCBseG9yICgtMSlcblxuZXh0ZXJuYWwgKCBsc2wgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsICggbHNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5leHRlcm5hbCAoIGFzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuXG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcblxuKCogRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCAoIH4rLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCAoICsuICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsICggLS4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgKCAqLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCAoIC8uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsICggKiogKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Bvd2VyX2Zsb2F0XCIgXCJwb3dcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwX2Zsb2F0XCIgXCJleHBcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwbTEgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBtMV9mbG9hdFwiIFwiY2FtbF9leHBtMVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NoX2Zsb2F0XCIgXCJjYW1sX2Fjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luaF9mbG9hdFwiIFwiY2FtbF9hc2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5oX2Zsb2F0XCIgXCJjYW1sX2F0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFic19mbG9hdCA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWJzZmxvYXRcIlxuZXh0ZXJuYWwgY29weXNpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZF9mbG9hdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbmV4dGVybmFsIGZsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GOF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgaDEgOjogW10gLT4gaDEgOjogbDJcbiAgfCBoMSA6OiBoMiA6OiBbXSAtPiBoMSA6OiBoMiA6OiBsMlxuICB8IGgxIDo6IGgyIDo6IGgzIDo6IHRsIC0+IGgxIDo6IGgyIDo6IGgzIDo6ICh0bCBAIGwyKVxuXG4oKiBJL08gb3BlcmF0aW9ucyAqKVxuXG50eXBlIGluX2NoYW5uZWxcbnR5cGUgb3V0X2NoYW5uZWxcblxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX291dCA6IGludCAtPiBvdXRfY2hhbm5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XCJcbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9pbiA6IGludCAtPiBpbl9jaGFubmVsID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblwiXG5cbmxldCBzdGRpbiA9IG9wZW5fZGVzY3JpcHRvcl9pbiAwXG5sZXQgc3Rkb3V0ID0gb3Blbl9kZXNjcmlwdG9yX291dCAxXG5sZXQgc3RkZXJyID0gb3Blbl9kZXNjcmlwdG9yX291dCAyXG5cbigqIEdlbmVyYWwgb3V0cHV0IGZ1bmN0aW9ucyAqKVxuXG50eXBlIG9wZW5fZmxhZyA9XG4gICAgT3Blbl9yZG9ubHkgfCBPcGVuX3dyb25seSB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdCB8IE9wZW5fdHJ1bmMgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeSB8IE9wZW5fdGV4dCB8IE9wZW5fbm9uYmxvY2tcblxuZXh0ZXJuYWwgb3Blbl9kZXNjIDogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuXG5leHRlcm5hbCBzZXRfb3V0X2NoYW5uZWxfbmFtZTogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX291dF9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9vdXQob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfb3V0X2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5fb3V0IG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX3RleHRdIDBvNjY2IG5hbWVcblxubGV0IG9wZW5fb3V0X2JpbiBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl9iaW5hcnldIDBvNjY2IG5hbWVcblxuZXh0ZXJuYWwgZmx1c2ggOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2ZsdXNoXCJcblxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxzX2xpc3QgOiB1bml0IC0+IG91dF9jaGFubmVsIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dF9jaGFubmVsc19saXN0XCJcblxubGV0IGZsdXNoX2FsbCAoKSA9XG4gIGxldCByZWMgaXRlciA9IGZ1bmN0aW9uXG4gICAgICBbXSAtPiAoKVxuICAgIHwgYTo6bCAtPlxuICAgICAgICBiZWdpbiB0cnlcbiAgICAgICAgICAgIGZsdXNoIGFcbiAgICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgICAgICgpICgqIGlnbm9yZSBjaGFubmVscyBjbG9zZWQgZHVyaW5nIGEgcHJlY2VkaW5nIGZsdXNoLiAqKVxuICAgICAgICBlbmQ7XG4gICAgICAgIGl0ZXIgbFxuICBpbiBpdGVyIChvdXRfY2hhbm5lbHNfbGlzdCAoKSlcblxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dCA6IG91dF9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dF9zdHJpbmcgOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRcIlxuXG5leHRlcm5hbCBvdXRwdXRfY2hhciA6IG91dF9jaGFubmVsIC0+IGNoYXIgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5cbmxldCBvdXRwdXRfYnl0ZXMgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXQgb2MgcyAwIChieXRlc19sZW5ndGggcylcblxubGV0IG91dHB1dF9zdHJpbmcgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgMCAoc3RyaW5nX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0IG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0XCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0IG9jIHMgb2ZzIGxlblxuXG5sZXQgb3V0cHV0X3N1YnN0cmluZyBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gc3RyaW5nX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRfc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIG9mcyBsZW5cblxuZXh0ZXJuYWwgb3V0cHV0X2J5dGUgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5leHRlcm5hbCBvdXRwdXRfYmluYXJ5X2ludCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9pbnRcIlxuXG5leHRlcm5hbCBtYXJzaGFsX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSAtPiB1bml0IGxpc3QgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVcIlxubGV0IG91dHB1dF92YWx1ZSBjaGFuIHYgPSBtYXJzaGFsX3RvX2NoYW5uZWwgY2hhbiB2IFtdXG5cbmV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRcIlxuZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3Nfb3V0XCJcbmV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2Vfb3V0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX291dCBvYyA9IGZsdXNoIG9jOyBjbG9zZV9vdXRfY2hhbm5lbCBvY1xubGV0IGNsb3NlX291dF9ub2VyciBvYyA9XG4gICh0cnkgZmx1c2ggb2Mgd2l0aCBfIC0+ICgpKTtcbiAgKHRyeSBjbG9zZV9vdXRfY2hhbm5lbCBvYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfb3V0IDogb3V0X2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIEdlbmVyYWwgaW5wdXQgZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIHNldF9pbl9jaGFubmVsX25hbWU6IGluX2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX2luX2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX2luKG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X2luX2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5faW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl90ZXh0XSAwIG5hbWVcblxubGV0IG9wZW5faW5fYmluIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fYmluYXJ5XSAwIG5hbWVcblxuZXh0ZXJuYWwgaW5wdXRfY2hhciA6IGluX2NoYW5uZWwgLT4gY2hhciA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0IDogaW5fY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2lucHV0XCJcblxubGV0IGlucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gKCkgZWxzZSBiZWdpblxuICAgIGxldCByID0gdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIChvZnMgKyByKSAobGVuIC0gcilcbiAgZW5kXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIGxlbiBpblxuICByZWFsbHlfaW5wdXQgaWMgcyAwIGxlbjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbmV4dGVybmFsIGlucHV0X3NjYW5fbGluZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X3NjYW5fbGluZVwiXG5cbmxldCBpbnB1dF9saW5lIGNoYW4gPVxuICBsZXQgcmVjIGJ1aWxkX3Jlc3VsdCBidWYgcG9zID0gZnVuY3Rpb25cbiAgICBbXSAtPiBidWZcbiAgfCBoZCA6OiB0bCAtPlxuICAgICAgbGV0IGxlbiA9IGJ5dGVzX2xlbmd0aCBoZCBpblxuICAgICAgYnl0ZXNfYmxpdCBoZCAwIGJ1ZiAocG9zIC0gbGVuKSBsZW47XG4gICAgICBidWlsZF9yZXN1bHQgYnVmIChwb3MgLSBsZW4pIHRsIGluXG4gIGxldCByZWMgc2NhbiBhY2N1IGxlbiA9XG4gICAgbGV0IG4gPSBpbnB1dF9zY2FuX2xpbmUgY2hhbiBpblxuICAgIGlmIG4gPSAwIHRoZW4gYmVnaW4gICAgICAgICAgICAgICAgICAgKCogbiA9IDA6IHdlIGFyZSBhdCBFT0YgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgfCBfICAtPiBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiBhY2N1XG4gICAgZW5kIGVsc2UgaWYgbiA+IDAgdGhlbiBiZWdpbiAgICAgICAgICAoKiBuID4gMDogbmV3bGluZSBmb3VuZCBpbiBidWZmZXIgKilcbiAgICAgIGxldCByZXMgPSBieXRlc19jcmVhdGUgKG4gLSAxKSBpblxuICAgICAgaWdub3JlICh1bnNhZmVfaW5wdXQgY2hhbiByZXMgMCAobiAtIDEpKTtcbiAgICAgIGlnbm9yZSAoaW5wdXRfY2hhciBjaGFuKTsgICAgICAgICAgICgqIHNraXAgdGhlIG5ld2xpbmUgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByZXNcbiAgICAgIHwgIF8gLT4gbGV0IGxlbiA9IGxlbiArIG4gLSAxIGluXG4gICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIChyZXMgOjogYWNjdSlcbiAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICgqIG4gPCAwOiBuZXdsaW5lIG5vdCBmb3VuZCAqKVxuICAgICAgbGV0IGJlZyA9IGJ5dGVzX2NyZWF0ZSAoLW4pIGluXG4gICAgICBpZ25vcmUodW5zYWZlX2lucHV0IGNoYW4gYmVnIDAgKC1uKSk7XG4gICAgICBzY2FuIChiZWcgOjogYWNjdSkgKGxlbiAtIG4pXG4gICAgZW5kXG4gIGluIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgKHNjYW4gW10gMClcblxuZXh0ZXJuYWwgaW5wdXRfYnl0ZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuZXh0ZXJuYWwgaW5wdXRfYmluYXJ5X2ludCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2ludFwiXG5leHRlcm5hbCBpbnB1dF92YWx1ZSA6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pblwiXG5leHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3NfaW5cIlxuZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2VfaW5fbm9lcnIgaWMgPSAodHJ5IGNsb3NlX2luIGljIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9pbiA6IGluX2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBvdXRwdXQgKilcblxubGV0IHByaW50X2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZG91dCBjXG5sZXQgcHJpbnRfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzXG5sZXQgcHJpbnRfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRvdXQgc1xubGV0IHByaW50X2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmludF9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByaW50X2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3Rkb3V0IHM7IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5sZXQgcHJpbnRfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgZXJyb3IgKilcblxubGV0IHByZXJyX2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZGVyciBjXG5sZXQgcHJlcnJfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzXG5sZXQgcHJlcnJfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRlcnIgc1xubGV0IHByZXJyX2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmVycl9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByZXJyX2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3RkZXJyIHM7IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5sZXQgcHJlcnJfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5cbigqIElucHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBpbnB1dCAqKVxuXG5sZXQgcmVhZF9saW5lICgpID0gZmx1c2ggc3Rkb3V0OyBpbnB1dF9saW5lIHN0ZGluXG5sZXQgcmVhZF9pbnQgKCkgPSBpbnRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfaW50X29wdCAoKSA9IGludF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXQgKCkgPSBmbG9hdF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdF9vcHQgKCkgPSBmbG9hdF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxuXG4oKiBPcGVyYXRpb25zIG9uIGxhcmdlIGZpbGVzICopXG5cbm1vZHVsZSBMYXJnZUZpbGUgPVxuICBzdHJ1Y3RcbiAgICBleHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRfNjRcIlxuICAgIGV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3Nfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICAgIGV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pbl82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3NfaW5fNjRcIlxuICAgIGV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICBlbmRcblxuKCogRm9ybWF0cyAqKVxuXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2XG4gICA9ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NlxuICAgPSBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mbXRcbiAgICAgICAgICAgICAgICogc3RyaW5nXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBmb3JtYXQ0ID0gKCdhLCAnYiwgJ2MsICdjLCAnYywgJ2QpIGZvcm1hdDZcblxudHlwZSAoJ2EsICdiLCAnYykgZm9ybWF0ID0gKCdhLCAnYiwgJ2MsICdjKSBmb3JtYXQ0XG5cbmxldCBzdHJpbmdfb2ZfZm9ybWF0IChGb3JtYXQgKF9mbXQsIHN0cikpID0gc3RyXG5cbmV4dGVybmFsIGZvcm1hdF9vZl9zdHJpbmcgOlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPSBcIiVpZGVudGl0eVwiXG5cbmxldCAoIF5eICkgKEZvcm1hdCAoZm10MSwgc3RyMSkpIChGb3JtYXQgKGZtdDIsIHN0cjIpKSA9XG4gIEZvcm1hdCAoQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmNvbmNhdF9mbXQgZm10MSBmbXQyLFxuICAgICAgICAgIHN0cjEgXiBcIiUsXCIgXiBzdHIyKVxuXG4oKiBNaXNjZWxsYW5lb3VzICopXG5cbmV4dGVybmFsIHN5c19leGl0IDogaW50IC0+ICdhID0gXCJjYW1sX3N5c19leGl0XCJcblxuKCogZm9yIGF0X2V4aXQgKilcbnR5cGUgJ2EgYXRvbWljX3RcbmV4dGVybmFsIGF0b21pY19tYWtlIDogJ2EgLT4gJ2EgYXRvbWljX3QgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCBhdG9taWNfZ2V0IDogJ2EgYXRvbWljX3QgLT4gJ2EgPSBcIiVhdG9taWNfbG9hZFwiXG5leHRlcm5hbCBhdG9taWNfY29tcGFyZV9hbmRfc2V0IDogJ2EgYXRvbWljX3QgLT4gJ2EgLT4gJ2EgLT4gYm9vbFxuICA9IFwiJWF0b21pY19jYXNcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IGF0b21pY19tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gYXRvbWljX21ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBhdG9taWNfZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBhdG9taWNfY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBhdG9taWNfY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2RvbWFpbl9sb2NhbF9hdF9leGl0ID0gcmVmIChmdW4gKCkgLT4gKCkpXG5cbmxldCBkb19hdF9leGl0ICgpID1cbiAgKCFkb19kb21haW5fbG9jYWxfYXRfZXhpdCkgKCk7XG4gIChhdG9taWNfZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgICAgPSBBcnJheVxubW9kdWxlIEFycmF5TGFiZWxzICAgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICAgID0gQmlnYXJyYXlcbm1vZHVsZSBCb29sICAgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICAgID0gQnl0ZXNcbm1vZHVsZSBCeXRlc0xhYmVscyAgICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICAgID0gQ2hhclxubW9kdWxlIENvbXBsZXggICAgICAgID0gQ29tcGxleFxubW9kdWxlIENvbmRpdGlvbiAgICAgID0gQ29uZGl0aW9uXG5tb2R1bGUgRGlnZXN0ICAgICAgICAgPSBEaWdlc3Rcbm1vZHVsZSBEb21haW4gICAgICAgICA9IERvbWFpblxubW9kdWxlIER5bmFycmF5ICAgICAgID0gRHluYXJyYXlcbm1vZHVsZSBFZmZlY3QgICAgICAgICA9IEVmZmVjdFxubW9kdWxlIEVpdGhlciAgICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgICAgPSBFcGhlbWVyb25cbm1vZHVsZSBGaWxlbmFtZSAgICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICAgID0gRm9ybWF0XG5tb2R1bGUgRnVuICAgICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgICA9IEdjXG5tb2R1bGUgSGFzaHRibCAgICAgICAgPSBIYXNodGJsXG5tb2R1bGUgSW5fY2hhbm5lbCAgICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgICAgPSBJbnRcbm1vZHVsZSBJbnQzMiAgICAgICAgICA9IEludDMyXG5tb2R1bGUgSW50NjQgICAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICAgID0gTGF6eVxubW9kdWxlIExleGluZyAgICAgICAgID0gTGV4aW5nXG5tb2R1bGUgTGlzdCAgICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgICAgPSBMaXN0TGFiZWxzXG5tb2R1bGUgTWFwICAgICAgICAgICAgPSBNYXBcbm1vZHVsZSBNYXJzaGFsICAgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgICA9IE1vcmVMYWJlbHNcbm1vZHVsZSBNdXRleCAgICAgICAgICA9IE11dGV4XG5tb2R1bGUgTmF0aXZlaW50ICAgICAgPSBOYXRpdmVpbnRcbm1vZHVsZSBPYmogICAgICAgICAgICA9IE9ialxubW9kdWxlIE9vICAgICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgICA9IE9wdGlvblxubW9kdWxlIE91dF9jaGFubmVsICAgID0gT3V0X2NoYW5uZWxcbm1vZHVsZSBQYXJzaW5nICAgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQcmludGV4YyAgICAgICA9IFByaW50ZXhjXG5tb2R1bGUgUHJpbnRmICAgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgICAgPSBSYW5kb21cbm1vZHVsZSBSZXN1bHQgICAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZW1hcGhvcmUgICAgICA9IFNlbWFwaG9yZVxubW9kdWxlIFNlcSAgICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgICA9IFN0YWNrXG5tb2R1bGUgU3RkTGFiZWxzICAgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJpbmcgICAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyAgID0gU3RyaW5nTGFiZWxzXG5tb2R1bGUgU3lzICAgICAgICAgICAgPSBTeXNcbm1vZHVsZSBUeXBlICAgICAgICAgICA9IFR5cGVcbm1vZHVsZSBVY2hhciAgICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgICAgPSBVbml0XG5tb2R1bGUgV2VhayAgICAgICAgICAgPSBXZWFrXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYXRvbWljX2NhcyIsImNhbWxfYXRvbWljX2xvYWQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfZmxvYXRfb2Zfc3RyaW5nIiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJjYW1sX21sX2NoYW5uZWxfc2l6ZSIsImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0IiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9mbHVzaCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX21sX2lucHV0X2NoYXIiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJjYW1sX21sX291dHB1dF9jaGFyIiwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUiLCJjYW1sX21sX3NldF9jaGFubmVsX25hbWUiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19jb25jYXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX29wZW4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImdsb2JhbF9kYXRhIiwiQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzIiwiSW52YWxpZF9hcmd1bWVudCIsIkZhaWx1cmUiLCJNYXRjaF9mYWlsdXJlIiwiQXNzZXJ0X2ZhaWx1cmUiLCJOb3RfZm91bmQiLCJPdXRfb2ZfbWVtb3J5IiwiU3RhY2tfb3ZlcmZsb3ciLCJTeXNfZXJyb3IiLCJFbmRfb2ZfZmlsZSIsIkRpdmlzaW9uX2J5X3plcm8iLCJTeXNfYmxvY2tlZF9pbyIsIlVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlIiwiZmFpbHdpdGgiLCJzIiwiaW52YWxpZF9hcmciLCJFeGl0IiwibWluIiwieCIsInkiLCJtYXgiLCJhYnMiLCJsbm90IiwiY2hhcl9vZl9pbnQiLCJuIiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJzdHJpbmdfb2ZfYm9vbCIsImIiLCJib29sX29mX3N0cmluZyIsInBhcmFtIiwiYm9vbF9vZl9zdHJpbmdfb3B0Iiwic3RyaW5nX29mX2ludCIsImludF9vZl9zdHJpbmdfb3B0IiwiZXhuIiwidmFsaWRfZmxvYXRfbGV4ZW0iLCJzMSIsImwiLCJpIiwibWF0Y2giLCJzdHJpbmdfb2ZfZmxvYXQiLCJmbG9hdF9vZl9zdHJpbmdfb3B0Iiwic3ltYm9sIiwibDEiLCJsMiIsImgxIiwiaDIiLCJ0bCIsImgzIiwiYmxvY2siLCJkc3QiLCJvZmZzZXQiLCJzdGRpbiIsInN0ZG91dCIsInN0ZGVyciIsIm9wZW5fb3V0X2dlbiIsIm1vZGUiLCJwZXJtIiwibmFtZSIsImMiLCJvcGVuX291dCIsIm9wZW5fb3V0X2JpbiIsImZsdXNoX2FsbCIsImEiLCJvdXRwdXRfYnl0ZXMiLCJvYyIsIm91dHB1dF9zdHJpbmciLCJvdXRwdXQiLCJvZnMiLCJsZW4iLCJvdXRwdXRfc3Vic3RyaW5nIiwib3V0cHV0X3ZhbHVlIiwiY2hhbiIsInYiLCJjbG9zZV9vdXQiLCJjbG9zZV9vdXRfbm9lcnIiLCJvcGVuX2luX2dlbiIsIm9wZW5faW4iLCJvcGVuX2luX2JpbiIsImlucHV0IiwiaWMiLCJ1bnNhZmVfcmVhbGx5X2lucHV0IiwiciIsInJlYWxseV9pbnB1dCIsInJlYWxseV9pbnB1dF9zdHJpbmciLCJpbnB1dF9saW5lIiwiYnVpbGRfcmVzdWx0IiwiYnVmIiwicG9zIiwiaGQiLCJhY2N1IiwiYmVnIiwicmVzIiwiY2xvc2VfaW5fbm9lcnIiLCJwcmludF9jaGFyIiwicHJpbnRfc3RyaW5nIiwicHJpbnRfYnl0ZXMiLCJwcmludF9pbnQiLCJwcmludF9mbG9hdCIsInByaW50X2VuZGxpbmUiLCJwcmludF9uZXdsaW5lIiwicHJlcnJfY2hhciIsInByZXJyX3N0cmluZyIsInByZXJyX2J5dGVzIiwicHJlcnJfaW50IiwicHJlcnJfZmxvYXQiLCJwcmVycl9lbmRsaW5lIiwicHJlcnJfbmV3bGluZSIsInJlYWRfbGluZSIsInJlYWRfaW50IiwicmVhZF9pbnRfb3B0IiwicmVhZF9mbG9hdCIsInJlYWRfZmxvYXRfb3B0Iiwic3RyaW5nX29mX2Zvcm1hdCIsInN0ciIsInN0cjIiLCJmbXQyIiwic3RyMSIsImZtdDEiLCJzMiIsImV4aXRfZnVuY3Rpb24iLCJhdF9leGl0Iiwib2xkX2V4aXQiLCJmX3lldF90b19ydW4iLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19kb21haW5fbG9jYWxfYXRfZXhpdCIsImRvX2F0X2V4aXQiLCJleGl0IiwicmV0Y29kZSIsIlN0ZGxpYiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLHFCQUFB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJrQi9EIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6OTk1NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zeXMubWwuaW4iXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBAY29uZmlndXJlX2lucHV0QCAqKVxuIzMgXCJzeXMubWwuaW5cIlxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIGJhY2tlbmRfdHlwZSA9XG4gIHwgTmF0aXZlXG4gIHwgQnl0ZWNvZGVcbiAgfCBPdGhlciBvZiBzdHJpbmdcbigqIFN5c3RlbSBpbnRlcmZhY2UgKilcblxuZXh0ZXJuYWwgZ2V0X2NvbmZpZzogdW5pdCAtPiBzdHJpbmcgKiBpbnQgKiBib29sID0gXCJjYW1sX3N5c19nZXRfY29uZmlnXCJcbmV4dGVybmFsIGdldF9leGVjdXRhYmxlX25hbWUgOiB1bml0IC0+IHN0cmluZyA9IFwiY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lXCJcbmV4dGVybmFsIGFyZ3YgOiBzdHJpbmcgYXJyYXkgPSBcIiVzeXNfYXJndlwiXG5leHRlcm5hbCBiaWdfZW5kaWFuIDogdW5pdCAtPiBib29sID0gXCIlYmlnX2VuZGlhblwiXG5leHRlcm5hbCB3b3JkX3NpemUgOiB1bml0IC0+IGludCA9IFwiJXdvcmRfc2l6ZVwiXG5leHRlcm5hbCBpbnRfc2l6ZSA6IHVuaXQgLT4gaW50ID0gXCIlaW50X3NpemVcIlxuZXh0ZXJuYWwgbWF4X3dvc2l6ZSA6IHVuaXQgLT4gaW50ID0gXCIlbWF4X3dvc2l6ZVwiXG5leHRlcm5hbCB1bml4IDogdW5pdCAtPiBib29sID0gXCIlb3N0eXBlX3VuaXhcIlxuZXh0ZXJuYWwgd2luMzIgOiB1bml0IC0+IGJvb2wgPSBcIiVvc3R5cGVfd2luMzJcIlxuZXh0ZXJuYWwgY3lnd2luIDogdW5pdCAtPiBib29sID0gXCIlb3N0eXBlX2N5Z3dpblwiXG5leHRlcm5hbCBnZXRfYmFja2VuZF90eXBlIDogdW5pdCAtPiBiYWNrZW5kX3R5cGUgPSBcIiViYWNrZW5kX3R5cGVcIlxuXG5sZXQgZXhlY3V0YWJsZV9uYW1lID0gZ2V0X2V4ZWN1dGFibGVfbmFtZSgpXG5sZXQgKG9zX3R5cGUsIF8sIF8pID0gZ2V0X2NvbmZpZygpXG5sZXQgYmFja2VuZF90eXBlID0gZ2V0X2JhY2tlbmRfdHlwZSAoKVxubGV0IGJpZ19lbmRpYW4gPSBiaWdfZW5kaWFuICgpXG5sZXQgd29yZF9zaXplID0gd29yZF9zaXplICgpXG5sZXQgaW50X3NpemUgPSBpbnRfc2l6ZSAoKVxubGV0IHVuaXggPSB1bml4ICgpXG5sZXQgd2luMzIgPSB3aW4zMiAoKVxubGV0IGN5Z3dpbiA9IGN5Z3dpbiAoKVxubGV0IG1heF9hcnJheV9sZW5ndGggPSBtYXhfd29zaXplICgpXG5sZXQgbWF4X2Zsb2F0YXJyYXlfbGVuZ3RoID0gbWF4X2FycmF5X2xlbmd0aCAvICg2NCAvIHdvcmRfc2l6ZSlcbmxldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMVxuZXh0ZXJuYWwgcnVudGltZV92YXJpYW50IDogdW5pdCAtPiBzdHJpbmcgPSBcImNhbWxfcnVudGltZV92YXJpYW50XCJcbmV4dGVybmFsIHJ1bnRpbWVfcGFyYW1ldGVycyA6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1wiXG5cbmV4dGVybmFsIGZpbGVfZXhpc3RzOiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zeXNfZmlsZV9leGlzdHNcIlxuZXh0ZXJuYWwgaXNfZGlyZWN0b3J5IDogc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3lzX2lzX2RpcmVjdG9yeVwiXG5leHRlcm5hbCBpc19yZWd1bGFyX2ZpbGUgOiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlXCJcbmV4dGVybmFsIHJlbW92ZTogc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfc3lzX3JlbW92ZVwiXG5leHRlcm5hbCByZW5hbWUgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfc3lzX3JlbmFtZVwiXG5leHRlcm5hbCBnZXRlbnY6IHN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfc3lzX2dldGVudlwiXG5cbmxldCBnZXRlbnZfb3B0IHMgPVxuICAoKiBUT0RPOiBleHBvc2UgYSBub24tcmFpc2luZyBwcmltaXRpdmUgZGlyZWN0bHkuICopXG4gIHRyeSBTb21lIChnZXRlbnYgcylcbiAgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5leHRlcm5hbCBjb21tYW5kOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFwiXG5leHRlcm5hbCB0aW1lOiB1bml0IC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9zeXNfdGltZVwiIFwiY2FtbF9zeXNfdGltZV91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGNoZGlyOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF9zeXNfY2hkaXJcIlxuZXh0ZXJuYWwgbWtkaXI6IHN0cmluZyAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9zeXNfbWtkaXJcIlxuZXh0ZXJuYWwgcm1kaXI6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3N5c19ybWRpclwiXG5leHRlcm5hbCBnZXRjd2Q6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX3N5c19nZXRjd2RcIlxuZXh0ZXJuYWwgcmVhZGRpciA6IHN0cmluZyAtPiBzdHJpbmcgYXJyYXkgPSBcImNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5XCJcblxubGV0IGludGVyYWN0aXZlID0gcmVmIGZhbHNlXG5cbnR5cGUgc2lnbmFsX2JlaGF2aW9yID1cbiAgICBTaWduYWxfZGVmYXVsdFxuICB8IFNpZ25hbF9pZ25vcmVcbiAgfCBTaWduYWxfaGFuZGxlIG9mIChpbnQgLT4gdW5pdClcblxuZXh0ZXJuYWwgc2lnbmFsIDogaW50IC0+IHNpZ25hbF9iZWhhdmlvciAtPiBzaWduYWxfYmVoYXZpb3JcbiAgICAgICAgICAgICAgICA9IFwiY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyXCJcblxubGV0IHNldF9zaWduYWwgc2lnX251bSBzaWdfYmVoID0gaWdub3JlKHNpZ25hbCBzaWdfbnVtIHNpZ19iZWgpXG5cbmxldCBzaWdhYnJ0ID0gLTFcbmxldCBzaWdhbHJtID0gLTJcbmxldCBzaWdmcGUgPSAtM1xubGV0IHNpZ2h1cCA9IC00XG5sZXQgc2lnaWxsID0gLTVcbmxldCBzaWdpbnQgPSAtNlxubGV0IHNpZ2tpbGwgPSAtN1xubGV0IHNpZ3BpcGUgPSAtOFxubGV0IHNpZ3F1aXQgPSAtOVxubGV0IHNpZ3NlZ3YgPSAtMTBcbmxldCBzaWd0ZXJtID0gLTExXG5sZXQgc2lndXNyMSA9IC0xMlxubGV0IHNpZ3VzcjIgPSAtMTNcbmxldCBzaWdjaGxkID0gLTE0XG5sZXQgc2lnY29udCA9IC0xNVxubGV0IHNpZ3N0b3AgPSAtMTZcbmxldCBzaWd0c3RwID0gLTE3XG5sZXQgc2lndHRpbiA9IC0xOFxubGV0IHNpZ3R0b3UgPSAtMTlcbmxldCBzaWd2dGFscm0gPSAtMjBcbmxldCBzaWdwcm9mID0gLTIxXG5sZXQgc2lnYnVzID0gLTIyXG5sZXQgc2lncG9sbCA9IC0yM1xubGV0IHNpZ3N5cyA9IC0yNFxubGV0IHNpZ3RyYXAgPSAtMjVcbmxldCBzaWd1cmcgPSAtMjZcbmxldCBzaWd4Y3B1ID0gLTI3XG5sZXQgc2lneGZzeiA9IC0yOFxuXG5leGNlcHRpb24gQnJlYWtcblxubGV0IGNhdGNoX2JyZWFrIG9uID1cbiAgaWYgb24gdGhlblxuICAgIHNldF9zaWduYWwgc2lnaW50IChTaWduYWxfaGFuZGxlKGZ1biBfIC0+IHJhaXNlIEJyZWFrKSlcbiAgZWxzZVxuICAgIHNldF9zaWduYWwgc2lnaW50IFNpZ25hbF9kZWZhdWx0XG5cblxuZXh0ZXJuYWwgZW5hYmxlX3J1bnRpbWVfd2FybmluZ3M6IGJvb2wgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5nc1wiXG5leHRlcm5hbCBydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQ6IHVuaXQgLT4gYm9vbCA9XG4gIFwiY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcIlxuXG4oKiBUaGUgdmVyc2lvbiBzdHJpbmcgaXMgZm91bmQgaW4gZmlsZSAuLi9WRVJTSU9OICopXG5cbmxldCBvY2FtbF92ZXJzaW9uID0gXCJAVkVSU0lPTkBcIlxuXG5sZXQgZGV2ZWxvcG1lbnRfdmVyc2lvbiA9IEBPQ0FNTF9ERVZFTE9QTUVOVF9WRVJTSU9OQFxuXG50eXBlIGV4dHJhX3ByZWZpeCA9IFBsdXMgfCBUaWxkZVxuXG50eXBlIGV4dHJhX2luZm8gPSBleHRyYV9wcmVmaXggKiBzdHJpbmdcblxudHlwZSBvY2FtbF9yZWxlYXNlX2luZm8gPSB7XG4gIG1ham9yIDogaW50O1xuICBtaW5vciA6IGludDtcbiAgcGF0Y2hsZXZlbCA6IGludDtcbiAgZXh0cmEgOiBleHRyYV9pbmZvIG9wdGlvblxufVxuXG5sZXQgb2NhbWxfcmVsZWFzZSA9IHtcbiAgbWFqb3IgPSBAT0NBTUxfVkVSU0lPTl9NQUpPUkA7XG4gIG1pbm9yID0gQE9DQU1MX1ZFUlNJT05fTUlOT1JAO1xuICBwYXRjaGxldmVsID0gQE9DQU1MX1ZFUlNJT05fUEFUQ0hMRVZFTEA7XG4gIGV4dHJhID0gQE9DQU1MX1JFTEVBU0VfRVhUUkFAXG59XG5cbigqIE9wdGltaXphdGlvbiAqKVxuXG5leHRlcm5hbCBvcGFxdWVfaWRlbnRpdHkgOiAnYSAtPiAnYSA9IFwiJW9wYXF1ZVwiXG5cbm1vZHVsZSBJbW1lZGlhdGU2NCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBOb25faW1tZWRpYXRlID0gc2lnXG4gICAgdHlwZSB0XG4gIGVuZFxuICBtb2R1bGUgdHlwZSBJbW1lZGlhdGUgPSBzaWdcbiAgICB0eXBlIHQgW0BAaW1tZWRpYXRlXVxuICBlbmRcblxuICBtb2R1bGUgTWFrZShJbW1lZGlhdGUgOiBJbW1lZGlhdGUpKE5vbl9pbW1lZGlhdGUgOiBOb25faW1tZWRpYXRlKSA9IHN0cnVjdFxuICAgIHR5cGUgdCBbQEBpbW1lZGlhdGU2NF1cbiAgICB0eXBlICdhIHJlcHIgPVxuICAgICAgfCBJbW1lZGlhdGUgOiBJbW1lZGlhdGUudCByZXByXG4gICAgICB8IE5vbl9pbW1lZGlhdGUgOiBOb25faW1tZWRpYXRlLnQgcmVwclxuICAgIGV4dGVybmFsIG1hZ2ljIDogXyByZXByIC0+IHQgcmVwciA9IFwiJWlkZW50aXR5XCJcbiAgICBsZXQgcmVwciA9XG4gICAgICBpZiB3b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIG1hZ2ljIEltbWVkaWF0ZVxuICAgICAgZWxzZVxuICAgICAgICBtYWdpYyBOb25faW1tZWRpYXRlXG4gIGVuZFxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJTdGRsaWIiLCJleGVjdXRhYmxlX25hbWUiLCJvc190eXBlIiwidW5peCIsIndpbjMyIiwiY3lnd2luIiwibWF4X2FycmF5X2xlbmd0aCIsIm1heF9mbG9hdGFycmF5X2xlbmd0aCIsIm1heF9zdHJpbmdfbGVuZ3RoIiwiZ2V0ZW52X29wdCIsInMiLCJleG4iLCJzZXRfc2lnbmFsIiwic2lnX251bSIsInNpZ19iZWgiLCJCcmVhayIsImNhdGNoX2JyZWFrIiwib24iLCJNYWtlIiwiSW1tZWRpYXRlIiwiTm9uX2ltbWVkaWF0ZSIsIlN0ZGxpYl9TeXMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxrQkNtQ3NCO0FBQUEsSUFBQUMsVUFDQTtBQUFBLElBQUFDLE9BQVk7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLFlBQUFDLFdBQUFDO0FBQUFBLElBdUJoQyxZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUQzRFg7QUFBQSwyQkM0RG9CO0FBQUEsS0Q1RHBCO0FBQUE7QUFBQSxHQzREd0I7QUFBQSxZQUFBQyxXQUFBQyxTQUFBQyxTQXFCdUM7QUFBQSxPQUFBQyxRQTdDN0I7QUFBQSxZQUFBQyxZQUFBQyxJQStFaEMsaUJBR2tDO0FBQUEsWUFBQUMsS0FBQUMsV0FBQUMsZUFzRDVCO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNQXhJMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURwQ2xDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAwNDYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvb2JqLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBPcGVyYXRpb25zIG9uIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyBvZiB2YWx1ZXMgKilcblxudHlwZSB0XG5cbnR5cGUgcmF3X2RhdGEgPSBuYXRpdmVpbnRcblxuZXh0ZXJuYWwgcmVwciA6ICdhIC0+IHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBvYmogOiB0IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgbWFnaWMgOiAnYSAtPiAnYiA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGlzX2ludCA6IHQgLT4gYm9vbCA9IFwiJW9ial9pc19pbnRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gaXNfYmxvY2sgYSA9IG5vdCAoaXNfaW50IGEpXG5leHRlcm5hbCB0YWcgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfdGFnXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpemUgOiB0IC0+IGludCA9IFwiJW9ial9zaXplXCJcbmV4dGVybmFsIHJlYWNoYWJsZV93b3JkcyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial9yZWFjaGFibGVfd29yZHNcIlxuZXh0ZXJuYWwgZmllbGQgOiB0IC0+IGludCAtPiB0ID0gXCIlb2JqX2ZpZWxkXCJcbmV4dGVybmFsIHNldF9maWVsZCA6IHQgLT4gaW50IC0+IHQgLT4gdW5pdCA9IFwiJW9ial9zZXRfZmllbGRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdGFycmF5X2dldFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X3NldCA6XG4gICAgZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiY2FtbF9mbG9hdGFycmF5X3NldFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBkb3VibGVfZmllbGQgeCBpID0gZmxvYXRhcnJheV9nZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaVxubGV0IFtAaW5saW5lIGFsd2F5c10gc2V0X2RvdWJsZV9maWVsZCB4IGkgdiA9XG4gIGZsb2F0YXJyYXlfc2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGkgdlxuZXh0ZXJuYWwgcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgPSBcImNhbWxfb2JqX3Jhd19maWVsZFwiXG5leHRlcm5hbCBzZXRfcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfb2JqX3NldF9yYXdfZmllbGRcIlxuXG5leHRlcm5hbCBuZXdfYmxvY2sgOiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfb2JqX2Jsb2NrXCJcbmV4dGVybmFsIGR1cCA6IHQgLT4gdCA9IFwiY2FtbF9vYmpfZHVwXCJcbmV4dGVybmFsIGFkZF9vZmZzZXQgOiB0IC0+IEludDMyLnQgLT4gdCA9IFwiY2FtbF9vYmpfYWRkX29mZnNldFwiXG5leHRlcm5hbCB3aXRoX3RhZyA6IGludCAtPiB0IC0+IHQgPSBcImNhbWxfb2JqX3dpdGhfdGFnXCJcblxubGV0IGZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAwXG5sZXQgbGFzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMjQzXG5cbmxldCBmb3JjaW5nX3RhZyA9IDI0NFxubGV0IGNvbnRfdGFnID0gMjQ1XG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcblxuXG5sZXQgaW50X3RhZyA9IDEwMDBcbmxldCBvdXRfb2ZfaGVhcF90YWcgPSAxMDAxXG5sZXQgdW5hbGlnbmVkX3RhZyA9IDEwMDJcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbm1vZHVsZSBFcGhlbWVyb24gPSBzdHJ1Y3RcbiAgdHlwZSBvYmpfdCA9IHRcblxuICB0eXBlIHQgKCoqIGVwaGVtZXJvbiAqKVxuXG4gICAoKiogVG8gY2hhbmdlIGluIHN5bmMgd2l0aCB3ZWFrLmggKilcbiAgbGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuICBsZXQgbWF4X2VwaGVfbGVuZ3RoID0gU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2VwaGVfY3JlYXRlXCJcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX29ial90YWciLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9TeXMiLCJpc19ibG9jayIsImEiLCJkb3VibGVfZmllbGQiLCJ4IiwiaSIsInNldF9kb3VibGVfZmllbGQiLCJ2Iiwib2ZfdmFsIiwic2xvdCIsImNzdF9PYmpfZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIiwibmFtZSIsImlkIiwibWF4X2VwaGVfbGVuZ3RoIiwiY3JlYXRlIiwibCIsImxlbmd0aCIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IiwiZSIsIm8iLCJtc2ciLCJnZXRfa2V5IiwiZ2V0X2tleV9jb3B5Iiwic2V0X2tleSIsInVuc2V0X2tleSIsImNoZWNrX2tleSIsImJsaXRfa2V5IiwiZTEiLCJvMSIsImUyIiwibzIiLCJTdGRsaWJfT2JqIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLFNBQUFDLEdDeUJrQyxtQ0FBYztBQUFBLFlBQUFDLGFBQUFDLEdBQUFDLEdBU1Isb0NBQXFDO0FBQUEsWUFBQUMsaUJBQUFGLEdBQUFDLEdBQUFFO0FBQUFBLElBRTNFO0FBQUEsSUFBdUM7QUFBQTtBQUFBLFlBQUFDLE9BQUFKO0FBQUFBO0FBQUFBLEtBQUFLO0FBQUFBLE9Bd0NoQztBQUFBLFVBQWdCO0FBQUE7QUFBQSxLQUFBQyxnQ0Q1RXpCO0FBQUE7QUFBQTtBQUFBLEtDZ0ZTLHFCQUFtQixnQ0FBQUMsT0FBeUM7QUFBQSxTQUFBQSxPQUMxRDtBQUFBO0FBQUEsSUFFRjtBQUFBO0FBQUEsY0FDRSxtREFBdUM7QUFBQTtBQUFBLFlBQUFBLEtBQUFGLE1BR3BCO0FBQUEsWUFBQUcsR0FBQUgsTUFHQTtBQUFBLE9BQUFJLGtCRDFGOUI7QUFBQSxZQUFBQyxPQUFBQztBQUFBQSxRQUFBLElDd0dJO0FBQUEsY0FDRTtBQUFBLElBQ0Ysa0NBQVE7QUFBQTtBQUFBLFlBQUFDLE9BQUFaLEdBRUssd0JBQWdDO0FBQUEsWUFBQWEsd0JBQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFFBQUEsSUFHN0Msb0JBQXNCLG1CQUF0QjtBQUFBLGVBQ0UsNkJBQWU7QUFBQTtBQUFBLFlBQUFDLFFBQUFILEdBQUFDO0FBQUFBLElBSWpCO0FBQUEsSUFDQSxzQ0FBVztBQUFBO0FBQUEsWUFBQUcsYUFBQUosR0FBQUM7QUFBQUEsSUFJWDtBQUFBLElBQ0EsMkNBQWdCO0FBQUE7QUFBQSxZQUFBSSxRQUFBTCxHQUFBQyxHQUFBZjtBQUFBQSxJQUloQjtBQUFBLElBQ0EseUNBQWE7QUFBQTtBQUFBLFlBQUFvQixVQUFBTixHQUFBQztBQUFBQSxJQUliO0FBQUEsSUFDQSx3Q0FBYTtBQUFBO0FBQUEsWUFBQU0sVUFBQVAsR0FBQUM7QUFBQUEsSUFJYjtBQUFBLElBQ0Esd0NBQWE7QUFBQTtBQUFBLFlBQUFPLFNBQUFDLElBQUFDLElBQUFDLElBQUFDLElBQUFmO0FBQUFBLElBTWI7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUEyQix5Q0FDTjtBQUFBO0FBQUEsVUFFaEI7QUFBQSxjQUFlO0FBQUEsS0FBZjtBQUFBO0FBQUEsSUFEQSxxREFDcUM7QUFBQTtBQUFBO0FBQUEsSUFBQWdCO0FBQUFBLE1EbEo5QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEwMTcyLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2F0b21pYy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICBTdGVwaGVuIERvbGFuLCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTctMjAxOCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4gICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAhJ2EgdFxuXG5leHRlcm5hbCBtYWtlIDogJ2EgLT4gJ2EgdCA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsIG1ha2VfY29udGVuZGVkIDogJ2EgLT4gJ2EgdCA9IFwiY2FtbF9hdG9taWNfbWFrZV9jb250ZW5kZWRcIlxuZXh0ZXJuYWwgZ2V0IDogJ2EgdCAtPiAnYSA9IFwiJWF0b21pY19sb2FkXCJcbmV4dGVybmFsIGV4Y2hhbmdlIDogJ2EgdCAtPiAnYSAtPiAnYSA9IFwiJWF0b21pY19leGNoYW5nZVwiXG5leHRlcm5hbCBjb21wYXJlX2FuZF9zZXQgOiAnYSB0IC0+ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVhdG9taWNfY2FzXCJcbmV4dGVybmFsIGZldGNoX2FuZF9hZGQgOiBpbnQgdCAtPiBpbnQgLT4gaW50ID0gXCIlYXRvbWljX2ZldGNoX2FkZFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxubGV0IHNldCByIHggPSBpZ25vcmUgKGV4Y2hhbmdlIHIgeClcbmxldCBpbmNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAxKVxubGV0IGRlY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByICgtMSkpXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYXRvbWljX2V4Y2hhbmdlIiwiY2FtbF9hdG9taWNfZmV0Y2hfYWRkIiwic2V0IiwiciIsIngiLCJpbmNyIiwiZGVjciIsIlN0ZGxpYl9BdG9taWMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLElBQUFDLEdBQUFDLEdDd0JjLHFDQUFxQjtBQUFBLFlBQUFDLEtBQUFGLEdBQ3RCLHNDQUEwQjtBQUFBLFlBQUFHLEtBQUFILEdBQzFCLHVDQUE2QjtBQUFBO0FBQUEsSUFBQUk7QUFBQUEsTUQxQjFDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAyMDEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSW50ZXJuYWxzIG9mIGZvcmNpbmcgbGF6eSB2YWx1ZXMuICopXG5cbnR5cGUgJ2EgdCA9ICdhIGxhenlfdFxuXG5leGNlcHRpb24gVW5kZWZpbmVkXG5cbigqIFt1cGRhdGVfdG9fZm9yY2luZyBibGtdIHRyaWVzIHRvIHVwZGF0ZSBhIFtibGtdIHdpdGggW2xhenlfdGFnXSB0b1xuICAgW2ZvcmNpbmdfdGFnXSB1c2luZyBjb21wYXJlLWFuZC1zd2FwIChDQVMpLCB0YWtpbmcgY2FyZSB0byBoYW5kbGUgY29uY3VycmVudFxuICAgbWFya2luZyBvZiB0aGUgaGVhZGVyIHdvcmQgYnkgYSBjb25jdXJyZW50IEdDIHRocmVhZC4gUmV0dXJucyBbMF0gaWYgdGhlXG4gICBDQVMgaXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIENBUyBmYWlscywgdGhlbiB0aGUgdGFnIHdhcyBvYnNlcnZlZCB0byBiZVxuICAgc29tZXRoaW5nIG90aGVyIHRoYW4gW2xhenlfdGFnXSBkdWUgdG8gYSBjb25jdXJyZW50IG11dGF0b3IuIEluIHRoaXMgY2FzZSxcbiAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIFsxXS4gKilcbmV4dGVybmFsIHVwZGF0ZV90b19mb3JjaW5nIDogT2JqLnQgLT4gaW50ID1cbiAgXCJjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmdcIiBbQEBub2FsbG9jXVxuXG4oKiBbcmVzZXRfdG9fbGF6eSBibGtdIGV4cGVjdHMgW2Jsa10gdG8gYmUgYSBsYXp5IG9iamVjdCB3aXRoIFtPYmouZm9yY2luZ190YWddXG4gICBhbmQgdXBkYXRlcyB0aGUgdGFnIHRvIFtPYmoubGF6eV90YWddLCB0YWtpbmcgY2FyZSB0byBoYW5kbGUgY29uY3VycmVudFxuICAgbWFya2luZyBvZiB0aGlzIG9iamVjdCdzIGhlYWRlciBieSBhIGNvbmN1cnJlbnQgR0MgdGhyZWFkLiAqKVxuZXh0ZXJuYWwgcmVzZXRfdG9fbGF6eSA6IE9iai50IC0+IHVuaXQgPSBcImNhbWxfbGF6eV9yZXNldF90b19sYXp5XCIgW0BAbm9hbGxvY11cblxuKCogW3VwZGF0ZV90b19mb3J3YXJkIGJsa10gZXhwZWN0cyBbYmxrXSB0byBiZSBhIGxhenkgb2JqZWN0IHdpdGhcbiAgIFtPYmouZm9yY2luZ190YWddIGFuZCB1cGRhdGVzIHRoZSB0YWcgdG8gW09iai5mb3J3YXJkX3RhZ10sIHRha2luZyBjYXJlIHRvXG4gICBoYW5kbGUgY29uY3VycmVudCBtYXJraW5nIG9mIHRoaXMgb2JqZWN0J3MgaGVhZGVyIGJ5IGEgY29uY3VycmVudCBHQyB0aHJlYWQuXG4gKilcbmV4dGVybmFsIHVwZGF0ZV90b19mb3J3YXJkIDogT2JqLnQgLT4gdW5pdCA9XG4gIFwiY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkXCIgW0BAbm9hbGxvY11cblxuKCogQXNzdW1lcyBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGZvcmNpbmcgKilcbmxldCBkb19mb3JjZV9ibG9jayBibGsgPVxuICBsZXQgYiA9IE9iai5yZXByIGJsayBpblxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgYiAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCBiIDAgKE9iai5yZXByICgpKTsgKCogUmVsZWFzZSB0aGUgY2xvc3VyZSAqKVxuICB0cnlcbiAgICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICAgIE9iai5zZXRfZmllbGQgYiAwIChPYmoucmVwciByZXN1bHQpO1xuICAgIHVwZGF0ZV90b19mb3J3YXJkIGI7XG4gICAgcmVzdWx0XG4gIHdpdGggZSAtPlxuICAgIE9iai5zZXRfZmllbGQgYiAwIChPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIGUpKTtcbiAgICByZXNldF90b19sYXp5IGI7XG4gICAgcmFpc2UgZVxuXG4oKiBBc3N1bWVzIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgZm9yY2luZyAqKVxubGV0IGRvX2ZvcmNlX3ZhbF9ibG9jayBibGsgPVxuICBsZXQgYiA9IE9iai5yZXByIGJsayBpblxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgYiAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCBiIDAgKE9iai5yZXByICgpKTsgKCogUmVsZWFzZSB0aGUgY2xvc3VyZSAqKVxuICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICBPYmouc2V0X2ZpZWxkIGIgMCAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgdXBkYXRlX3RvX2ZvcndhcmQgYjtcbiAgcmVzdWx0XG5cbigqIENhbGxlZCBieSBbZm9yY2VfZ2VuXSAqKVxubGV0IGZvcmNlX2dlbl9sYXp5X2Jsb2NrIH5vbmx5X3ZhbCAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgKCogV2UgZXhwZWN0IHRoZSB0YWcgdG8gYmUgW2xhenlfdGFnXSwgYnV0IG1heSBiZSBvdGhlciB0YWdzIGR1ZSB0b1xuICAgICBjb25jdXJyZW50IGZvcmNpbmcgb2YgbGF6eSB2YWx1ZXMuICopXG4gIG1hdGNoIHVwZGF0ZV90b19mb3JjaW5nIChPYmoucmVwciBibGspIHdpdGhcbiAgfCAwIHdoZW4gb25seV92YWwgLT4gZG9fZm9yY2VfdmFsX2Jsb2NrIGJsa1xuICB8IDAgLT4gZG9fZm9yY2VfYmxvY2sgYmxrXG4gIHwgXyAtPiByYWlzZSBVbmRlZmluZWRcblxuKCogdXNlZCBpbiB0aGUgJWxhenlfZm9yY2UgcHJpbWl0aXZlICopXG5sZXQgZm9yY2VfbGF6eV9ibG9jayBibGsgPSBmb3JjZV9nZW5fbGF6eV9ibG9jayB+b25seV92YWw6ZmFsc2UgYmxrXG5cbigqIFtmb3JjZV9nZW4gfm9ubHlfdmFsOmZhbHNlXSBpcyBub3QgdXNlZCwgc2luY2UgW0xhenkuZm9yY2VdIGlzXG4gICBkZWNsYXJlZCBhcyBhIHByaW1pdGl2ZSB3aG9zZSBjb2RlIGlubGluZXMgdGhlIHRhZyB0ZXN0cyBvZiBpdHNcbiAgIGFyZ3VtZW50LCBleGNlcHQgd2hlbiBhZmwgaW5zdHJ1bWVudGF0aW9uIGlzIHR1cm5lZCBvbi4gKilcbmxldCBmb3JjZV9nZW4gfm9ubHlfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICAoKiBVc2luZyBbU3lzLm9wYXF1ZV9pZGVudGl0eV0gcHJldmVudHMgdHdvIHBvdGVudGlhbCBwcm9ibGVtczpcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gaGF2ZSBGb3J3YXJkX3RhZywgdGhlbiBpdCBjb3VsZCBoYXZlIGJlZW5cbiAgICAgICBzaG9ydGN1dCBkdXJpbmcgR0MsIHNvIHRoYXQgaW5mb3JtYXRpb24gbXVzdCBiZSBmb3Jnb3R0ZW4gKHNlZSBHUFIjNzEzXG4gICAgICAgYW5kIGlzc3VlICM3MzAxKS4gVGhpcyBpcyBub3QgYW4gaXNzdWUgaGVyZSBhdCB0aGUgbW9tZW50IHNpbmNlXG4gICAgICAgW09iai50YWddIGlzIG5vdCBzaW1wbGlmaWVkIGJ5IHRoZSBjb21waWxlciwgYW5kIEdQUiM3MTMgYWxzb1xuICAgICAgIGVuc3VyZXMgdGhhdCBubyB2YWx1ZSB3aWxsIGJlIGtub3duIHRvIGhhdmUgRm9yd2FyZF90YWcuXG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGltbXV0YWJsZSwgdGhlbiBpZiB0aGUgY29tcGlsZXJcbiAgICAgICBjYW5ub3QgcHJvdmUgdGhhdCB0aGUgbGFzdCBicmFuY2ggaXMgbm90IHRha2VuIGl0IHdpbGwgaXNzdWUgYVxuICAgICAgIHdhcm5pbmcgNTkgKG1vZGlmaWNhdGlvbiBvZiBhbiBpbW11dGFibGUgdmFsdWUpICopXG4gIGxldCBsenYgPSBTeXMub3BhcXVlX2lkZW50aXR5IGx6diBpblxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICAoKiBTVEFSVCBubyBzYWZlIHBvaW50cy4gSWYgYSBHQyBvY2N1cnMgaGVyZSwgdGhlbiB0aGUgb2JqZWN0IFt4XSBtYXkgYmVcbiAgICAgc2hvcnQtY2lyY3VpdGVkLCBhbmQgZ2V0dGluZyB0aGUgZmlyc3QgZmllbGQgb2YgW3hdIHdvdWxkIGdldCB1cyB0aGUgd3JvbmdcbiAgICAgdmFsdWUuIEx1Y2tpbHksIHRoZSBjb21waWxlciBkb2VzIG5vdCBpbnNlcnQgR0Mgc2FmZSBwb2ludHMgYXQgdGhpcyBwbGFjZSxcbiAgICAgc28gaXQgaXMgb2suICopXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlblxuICAgIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpXG4gICgqIEVORCBubyBzYWZlIHBvaW50cyAqKVxuICBlbHNlIGlmIHQgPSBPYmouZm9yY2luZ190YWcgdGhlbiByYWlzZSBVbmRlZmluZWRcbiAgZWxzZSBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX2dlbl9sYXp5X2Jsb2NrIH5vbmx5X3ZhbCBsenZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJTdGRsaWJfT2JqIiwiVW5kZWZpbmVkIiwiZm9yY2VfZ2VuX2xhenlfYmxvY2siLCJvbmx5X3ZhbCIsImJsayIsImNsb3N1cmUiLCJyZXN1bHQiLCJlIiwicGFyYW0iLCJmb3JjZV9sYXp5X2Jsb2NrIiwiZm9yY2VfZ2VuIiwibHp2IiwidCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBLFlBQUFDLHFCQUFBQyxVQUFBQztBQUFBQSxJQ3VFUTtBQUFBLEtBR0M7QUFBQSxJQUZFO0FBQUEsU0FBQUMsWUFaYztBQUFBLEtBQ3ZCO0FBQUEsU0FBQUMsV0FDYTtBQUFBLEtBQ2I7QUFBQSxLQUNBO0FBQUEsS0FBbUI7QUFBQTtBQUFBLFFBQUFELFVBbkJJO0FBQUEsSUFDdkI7QUFBQSxJQUErQjtBQUFBLFNBQUFDLFNBRWhCO0FBQUEsS0FDYjtBQUFBLEtBQ0E7QUFBQTtBQUFBO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsSURsREo7QUFBQSxLQ3FESSxrQkFBQUMsT0FBdUMsd0NBQU87QUFBQSxLQUM5QztBQUFBLEtBQWU7QUFBQTtBQUFBLEdBb0JLO0FBQUEsWUFBQUMsaUJBQUFMLEtBR0csbUNBQXdDO0FBQUEsWUFBQU0sVUFBQVAsVUFBQVE7QUFBQUEsUUFBQUMsSUFxQnpEO0FBQUEsSUFDUix5QkFDMEI7QUFBQSxJQUVyQix3QkFBNEI7QUFBQSxJQUM1QixtQ0FDQSxtQ0FBa0M7QUFBQTtBQUFBLEdEeEd6QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEwMjU4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2xhenkubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbTGF6eV06IGRlZmVycmVkIGNvbXB1dGF0aW9ucyAqKVxuXG5cbigqXG4gICBXQVJOSU5HOiBzb21lIHB1cnBsZSBtYWdpYyBpcyBnb2luZyBvbiBoZXJlLiAgRG8gbm90IHRha2UgdGhpcyBmaWxlXG4gICBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byBwcm9ncmFtIGluIE9DYW1sLlxuKilcblxuXG4oKiBXZSBtYWtlIHVzZSBvZiB0d28gc3BlY2lhbCB0YWdzIHByb3ZpZGVkIGJ5IHRoZSBydW50aW1lOlxuICAgW2xhenlfdGFnXSBhbmQgW2ZvcndhcmRfdGFnXS5cblxuICAgQSB2YWx1ZSBvZiB0eXBlIFsnYSBMYXp5LnRdIGNhbiBiZSBvbmUgb2YgdGhyZWUgdGhpbmdzOlxuICAgMS4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2xhenlfdGFnXS4gIEl0cyBmaWVsZCBpcyBhIGNsb3N1cmUgb2ZcbiAgICAgIHR5cGUgW3VuaXQgLT4gJ2FdIHRoYXQgY29tcHV0ZXMgdGhlIHZhbHVlLlxuICAgMi4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2ZvcndhcmRfdGFnXS4gIEl0cyBmaWVsZCBpcyB0aGUgdmFsdWVcbiAgICAgIG9mIHR5cGUgWydhXSB0aGF0IHdhcyBjb21wdXRlZC5cbiAgIDMuIEFueXRoaW5nIGVsc2UgZXhjZXB0IGEgZmxvYXQuICBUaGlzIGhhcyB0eXBlIFsnYV0gYW5kIGlzIHRoZSB2YWx1ZVxuICAgICAgdGhhdCB3YXMgY29tcHV0ZWQuXG4gICBFeGNlcHRpb25zIGFyZSBzdG9yZWQgaW4gZm9ybWF0ICgxKS5cbiAgIFRoZSBHQyB3aWxsIG1hZ2ljYWxseSBjaGFuZ2UgdGhpbmdzIGZyb20gKDIpIHRvICgzKSBhY2NvcmRpbmcgdG8gaXRzXG4gICBmYW5jeS5cblxuICAgSWYgT0NhbWwgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgLWZsYXQtZmxvYXQtYXJyYXkgb3B0aW9uICh3aGljaCBpc1xuICAgY3VycmVudGx5IHRoZSBkZWZhdWx0KSwgdGhlIGZvbGxvd2luZyBpcyBhbHNvIHRydWU6XG4gICBXZSBjYW5ub3QgdXNlIHJlcHJlc2VudGF0aW9uICgzKSBmb3IgYSBbZmxvYXQgTGF6eS50XSBiZWNhdXNlXG4gICBbY2FtbF9tYWtlX2FycmF5XSBhc3N1bWVzIHRoYXQgb25seSBhIFtmbG9hdF0gdmFsdWUgY2FuIGhhdmUgdGFnXG4gICBbRG91YmxlX3RhZ10uXG5cbiAgIFdlIGhhdmUgdG8gdXNlIHRoZSBidWlsdC1pbiB0eXBlIGNvbnN0cnVjdG9yIFtsYXp5X3RdIHRvXG4gICBsZXQgdGhlIGNvbXBpbGVyIGltcGxlbWVudCB0aGUgc3BlY2lhbCB0eXBpbmcgYW5kIGNvbXBpbGF0aW9uXG4gICBydWxlcyBmb3IgdGhlIFtsYXp5XSBrZXl3b3JkLlxuKilcblxudHlwZSAnYSB0ID0gJ2EgQ2FtbGludGVybmFsTGF6eS50XG5cbmV4Y2VwdGlvbiBVbmRlZmluZWQgPSBDYW1saW50ZXJuYWxMYXp5LlVuZGVmaW5lZFxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogJ2EgLT4gJ2EgbGF6eV90ID0gXCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkXCJcbmV4dGVybmFsIGZvcmNlIDogJ2EgdCAtPiAnYSA9IFwiJWxhenlfZm9yY2VcIlxuXG5sZXQgZm9yY2VfdmFsIGwgPSBDYW1saW50ZXJuYWxMYXp5LmZvcmNlX2dlbiB+b25seV92YWw6dHJ1ZSBsXG5cbmxldCBmcm9tX2Z1biAoZiA6IHVuaXQgLT4gJ2FyZykgPVxuICBsZXQgeCA9IE9iai5uZXdfYmxvY2sgT2JqLmxhenlfdGFnIDEgaW5cbiAgT2JqLnNldF9maWVsZCB4IDAgKE9iai5yZXByIGYpO1xuICAoT2JqLm9iaiB4IDogJ2FyZyB0KVxuXG5sZXQgZnJvbV92YWwgKHYgOiAnYXJnKSA9XG4gIGxldCB0ID0gT2JqLnRhZyAoT2JqLnJlcHIgdikgaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB8fCB0ID0gT2JqLmxhenlfdGFnIHx8XG4gICAgIHQgPSBPYmouZm9yY2luZ190YWcgfHwgdCA9IE9iai5kb3VibGVfdGFnIHRoZW4gYmVnaW5cbiAgICBtYWtlX2ZvcndhcmQgdlxuICBlbmQgZWxzZSBiZWdpblxuICAgIChPYmoubWFnaWMgdiA6ICdhcmcgdClcbiAgZW5kXG5cbmxldCBpc192YWwgKGwgOiAnYXJnIHQpID0gT2JqLnRhZyAoT2JqLnJlcHIgbCkgPD4gT2JqLmxhenlfdGFnXG5cbmxldCBtYXAgZiB4ID1cbiAgbGF6eSAoZiAoZm9yY2UgeCkpXG5cbmxldCBtYXBfdmFsIGYgeCA9XG4gIGlmIGlzX3ZhbCB4XG4gIHRoZW4gZnJvbV92YWwgKGYgKGZvcmNlIHgpKVxuICBlbHNlIGxhenkgKGYgKGZvcmNlIHgpKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX29ial90YWciLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJDYW1saW50ZXJuYWxMYXp5IiwiU3RkbGliX09iaiIsIlVuZGVmaW5lZCIsImZvcmNlX3ZhbCIsImwiLCJmcm9tX2Z1biIsIngiLCJmcm9tX3ZhbCIsInYiLCJ0IiwiaXNfdmFsIiwibWFwIiwicGFyYW0iLCJtYXBfdmFsIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQSx5QkFBQUMsZUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsWUFBQUMsVUFBQUMsR0N1RGtCLDJDQUEyQztBQUFBLFlBQUFDLFNBQUFSO0FBQUFBLFFBQUFTLElBR25EO0FBQUEsSUFDUjtBQUFBLElBQThCO0FBQUEsR0FDVjtBQUFBLFlBQUFDLFNBQUFDO0FBQUFBLFFBQUFDLElBR1o7QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBLEtBSUc7QUFBQSxJQUgrQyx3Q0FJL0M7QUFBQTtBQUFBLFlBQUFDLE9BQUFOO0FBQUFBLFFBQUEsSUFFcUI7QUFBQSx3Q0FBb0I7QUFBQSxHQUFnQjtBQUFBLFlBQUFPLElBQUFkLEdBQUFTO0FBQUFBLElBRzVEO0FBQUEscUJBQUFNO0FBQUFBLGlCQUFBLElEMUVGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNDMEVFO0FBQUEsR0FBa0I7QUFBQSxZQUFBQyxRQUFBaEIsR0FBQVM7QUFBQUEsSUFHZjtBQUFBLEtBRUU7QUFBQSxzQkFBQU07QUFBQUEsa0JBQUEsSUQvRVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUMrRU87QUFBQSxZQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFTLE9BQWEsU0FBYixpQkFDUztBQUFBO0FBQUEsR0QvRXpCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAzMzksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc2VxLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgIFNpbW9uIENydWFuZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW1NlcV06IGZ1bmN0aW9uYWwgaXRlcmF0b3JzICopXG5cbnR5cGUgKydhIG5vZGUgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgJ2EgKiAnYSB0XG5cbmFuZCAnYSB0ID0gdW5pdCAtPiAnYSBub2RlXG5cbmxldCBlbXB0eSAoKSA9IE5pbFxuXG5sZXQgcmV0dXJuIHggKCkgPSBDb25zICh4LCBlbXB0eSlcblxubGV0IGNvbnMgeCBuZXh0ICgpID0gQ29ucyAoeCwgbmV4dClcblxubGV0IHJlYyBhcHBlbmQgc2VxMSBzZXEyICgpID1cbiAgbWF0Y2ggc2VxMSgpIHdpdGhcbiAgfCBOaWwgLT4gc2VxMigpXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT4gQ29ucyAoeCwgYXBwZW5kIG5leHQgc2VxMilcblxubGV0IHJlYyBtYXAgZiBzZXEgKCkgPSBtYXRjaCBzZXEoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+IENvbnMgKGYgeCwgbWFwIGYgbmV4dClcblxubGV0IHJlYyBmaWx0ZXJfbWFwIGYgc2VxICgpID0gbWF0Y2ggc2VxKCkgd2l0aFxuICB8IE5pbCAtPiBOaWxcbiAgfCBDb25zICh4LCBuZXh0KSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBuZXh0ICgpXG4gICAgICAgIHwgU29tZSB5IC0+IENvbnMgKHksIGZpbHRlcl9tYXAgZiBuZXh0KVxuXG5sZXQgcmVjIGZpbHRlciBmIHNlcSAoKSA9IG1hdGNoIHNlcSgpIHdpdGhcbiAgfCBOaWwgLT4gTmlsXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT5cbiAgICAgIGlmIGYgeFxuICAgICAgdGhlbiBDb25zICh4LCBmaWx0ZXIgZiBuZXh0KVxuICAgICAgZWxzZSBmaWx0ZXIgZiBuZXh0ICgpXG5cbmxldCByZWMgY29uY2F0IHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgIGFwcGVuZCB4IChjb25jYXQgbmV4dCkgKClcblxubGV0IHJlYyBmbGF0X21hcCBmIHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgYXBwZW5kIChmIHgpIChmbGF0X21hcCBmIG5leHQpICgpXG5cbmxldCBjb25jYXRfbWFwID0gZmxhdF9tYXBcblxubGV0IHJlYyBmb2xkX2xlZnQgZiBhY2Mgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICB8IE5pbCAtPiBhY2NcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGxldCBhY2MgPSBmIGFjYyB4IGluXG4gICAgICAgIGZvbGRfbGVmdCBmIGFjYyBuZXh0XG5cbmxldCByZWMgaXRlciBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGYgeDtcbiAgICAgICAgaXRlciBmIG5leHRcblxubGV0IHJlYyB1bmZvbGQgZiB1ICgpID1cbiAgbWF0Y2ggZiB1IHdpdGhcbiAgfCBOb25lIC0+IE5pbFxuICB8IFNvbWUgKHgsIHUnKSAtPiBDb25zICh4LCB1bmZvbGQgZiB1JylcblxubGV0IGlzX2VtcHR5IHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoXywgXykgLT5cbiAgICAgIGZhbHNlXG5cbmxldCB1bmNvbnMgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIFNvbWUgKHgsIHhzKVxuICB8IE5pbCAtPlxuICAgICAgTm9uZVxuXG5cblxubGV0IHJlYyBsZW5ndGhfYXV4IGFjY3UgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zIChfLCB4cykgLT5cbiAgICAgIGxlbmd0aF9hdXggKGFjY3UgKyAxKSB4c1xuXG5sZXRbQGlubGluZV0gbGVuZ3RoIHhzID1cbiAgbGVuZ3RoX2F1eCAwIHhzXG5cbmxldCByZWMgaXRlcmlfYXV4IGYgaSB4cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGYgaSB4O1xuICAgICAgaXRlcmlfYXV4IGYgKGkrMSkgeHNcblxubGV0W0BpbmxpbmVdIGl0ZXJpIGYgeHMgPVxuICBpdGVyaV9hdXggZiAwIHhzXG5cbmxldCByZWMgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IGkgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGkgeCBpblxuICAgICAgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IChpKzEpIHhzXG5cbmxldFtAaW5saW5lXSBmb2xkX2xlZnRpIGYgYWNjdSB4cyA9XG4gIGZvbGRfbGVmdGlfYXV4IGYgYWNjdSAwIHhzXG5cbmxldCByZWMgZm9yX2FsbCBwIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggJiYgZm9yX2FsbCBwIHhzXG5cbmxldCByZWMgZXhpc3RzIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggfHwgZXhpc3RzIHAgeHNcblxubGV0IHJlYyBmaW5kIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmQgcCB4c1xuXG5sZXQgZmluZF9pbmRleCBwIHhzID1cbiAgbGV0IHJlYyBhdXggaSB4cyA9IG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5vbmVcbiAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICBpZiBwIHggdGhlbiBTb21lIGkgZWxzZSBhdXggKGkrMSkgeHMgaW5cbiAgYXV4IDAgeHNcblxubGV0IHJlYyBmaW5kX21hcCBmIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOb25lXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgZmluZF9tYXAgZiB4c1xuICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+XG4gICAgICAgICAgcmVzdWx0XG5cbmxldCBmaW5kX21hcGkgZiB4cyA9XG4gIGxldCByZWMgYXV4IGkgeHMgPSBtYXRjaCB4cygpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOb25lXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgbWF0Y2ggZiBpIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgIGF1eCAoaSsxKSB4c1xuICAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT5cbiAgICAgICAgICAgIHJlc3VsdCBpblxuICBhdXggMCB4c1xuXG4oKiBbaXRlcjJdLCBbZm9sZF9sZWZ0Ml0sIFtmb3JfYWxsMl0sIFtleGlzdHMyXSwgW21hcDJdLCBbemlwXSB3b3JrIGFsc28gaW5cbiAgIHRoZSBjYXNlIHdoZXJlIHRoZSB0d28gc2VxdWVuY2VzIGhhdmUgZGlmZmVyZW50IGxlbmd0aHMuIFRoZXkgc3RvcCBhcyBzb29uXG4gICBhcyBvbmUgc2VxdWVuY2UgaXMgZXhoYXVzdGVkLiBUaGVpciBiZWhhdmlvciBpcyBzbGlnaHRseSBhc3ltbWV0cmljOiB3aGVuXG4gICBbeHNdIGlzIGVtcHR5LCB0aGV5IGRvIG5vdCBmb3JjZSBbeXNdOyBob3dldmVyLCB3aGVuIFt5c10gaXMgZW1wdHksIFt4c10gaXNcbiAgIGZvcmNlZCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gYXBwbGljYXRpb24gW3hzKCldIHR1cm5zIG91dFxuICAgdG8gYmUgdXNlbGVzcy4gKilcblxubGV0IHJlYyBpdGVyMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICAoKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgICgpXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGYgeCB5O1xuICAgICAgICAgIGl0ZXIyIGYgeHMgeXNcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgYWNjdVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIGFjY3VcbiAgICAgIHwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgICAgbGV0IGFjY3UgPSBmIGFjY3UgeCB5IGluXG4gICAgICAgICAgZm9sZF9sZWZ0MiBmIGFjY3UgeHMgeXNcblxubGV0IHJlYyBmb3JfYWxsMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBmIHggeSAmJiBmb3JfYWxsMiBmIHhzIHlzXG5cbmxldCByZWMgZXhpc3RzMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBmYWxzZVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGYgeCB5IHx8IGV4aXN0czIgZiB4cyB5c1xuXG5sZXQgcmVjIGVxdWFsIGVxIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gIHwgTmlsLCBOaWwgLT5cbiAgICAgIHRydWVcbiAgfCBDb25zICh4LCB4cyksIENvbnMgKHksIHlzKSAtPlxuICAgICAgZXEgeCB5ICYmIGVxdWFsIGVxIHhzIHlzXG4gIHwgTmlsLCBDb25zIChfLCBfKVxuICB8IENvbnMgKF8sIF8pLCBOaWwgLT5cbiAgICAgIGZhbHNlXG5cbmxldCByZWMgY29tcGFyZSBjbXAgeHMgeXMgPVxuICBtYXRjaCB4cygpLCB5cygpIHdpdGhcbiAgfCBOaWwsIE5pbCAtPlxuICAgICAgMFxuICB8IENvbnMgKHgsIHhzKSwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4IHkgaW5cbiAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZSBjb21wYXJlIGNtcCB4cyB5c1xuICB8IE5pbCwgQ29ucyAoXywgXykgLT5cbiAgICAgIC0xXG4gIHwgQ29ucyAoXywgXyksIE5pbCAtPlxuICAgICAgKzFcblxuXG5cbigqIFtpbml0X2F1eCBmIGkgal0gaXMgdGhlIHNlcXVlbmNlIFtmIGksIC4uLiwgZiAoai0xKV0uICopXG5cbmxldCByZWMgaW5pdF9hdXggZiBpIGogKCkgPVxuICBpZiBpIDwgaiB0aGVuIGJlZ2luXG4gICAgQ29ucyAoZiBpLCBpbml0X2F1eCBmIChpICsgMSkgailcbiAgZW5kXG4gIGVsc2VcbiAgICBOaWxcblxubGV0IGluaXQgbiBmID1cbiAgaWYgbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU2VxLmluaXRcIlxuICBlbHNlXG4gICAgaW5pdF9hdXggZiAwIG5cblxubGV0IHJlYyByZXBlYXQgeCAoKSA9XG4gIENvbnMgKHgsIHJlcGVhdCB4KVxuXG5sZXQgcmVjIGZvcmV2ZXIgZiAoKSA9XG4gIENvbnMgKGYoKSwgZm9yZXZlciBmKVxuXG4oKiBUaGlzIHByZWxpbWluYXJ5IGRlZmluaXRpb24gb2YgW2N5Y2xlXSByZXF1aXJlcyB0aGUgc2VxdWVuY2UgW3hzXVxuICAgdG8gYmUgbm9uZW1wdHkuIEFwcGx5aW5nIGl0IHRvIGFuIGVtcHR5IHNlcXVlbmNlIHdvdWxkIHByb2R1Y2UgYVxuICAgc2VxdWVuY2UgdGhhdCBkaXZlcmdlcyB3aGVuIGl0IGlzIGZvcmNlZC4gKilcblxubGV0IHJlYyBjeWNsZV9ub25lbXB0eSB4cyAoKSA9XG4gIGFwcGVuZCB4cyAoY3ljbGVfbm9uZW1wdHkgeHMpICgpXG5cbigqIFtjeWNsZSB4c10gY2hlY2tzIHdoZXRoZXIgW3hzXSBpcyBlbXB0eSBhbmQsIGlmIHNvLCByZXR1cm5zIGFuIGVtcHR5XG4gICBzZXF1ZW5jZS4gT3RoZXJ3aXNlLCBbY3ljbGUgeHNdIHByb2R1Y2VzIG9uZSBjb3B5IG9mIFt4c10gZm9sbG93ZWRcbiAgIHdpdGggdGhlIGluZmluaXRlIHNlcXVlbmNlIFtjeWNsZV9ub25lbXB0eSB4c10uIFRodXMsIHRoZSBub25lbXB0aW5lc3NcbiAgIGNoZWNrIGlzIHBlcmZvcm1lZCBqdXN0IG9uY2UuICopXG5cbmxldCBjeWNsZSB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMnKSAtPlxuICAgICAgQ29ucyAoeCwgYXBwZW5kIHhzJyAoY3ljbGVfbm9uZW1wdHkgeHMpKVxuXG4oKiBbaXRlcmF0ZTEgZiB4XSBpcyB0aGUgc2VxdWVuY2UgW2YgeCwgZiAoZiB4KSwgLi4uXS5cbiAgIEl0IGlzIGVxdWl2YWxlbnQgdG8gW3RhaWwgKGl0ZXJhdGUgZiB4KV0uXG4gICBbaXRlcmF0ZTFdIGlzIHVzZWQgYXMgYSBidWlsZGluZyBibG9jayBpbiB0aGUgZGVmaW5pdGlvbiBvZiBbaXRlcmF0ZV0uICopXG5cbmxldCByZWMgaXRlcmF0ZTEgZiB4ICgpID1cbiAgbGV0IHkgPSBmIHggaW5cbiAgQ29ucyAoeSwgaXRlcmF0ZTEgZiB5KVxuXG4oKiBbaXRlcmF0ZSBmIHhdIGlzIHRoZSBzZXF1ZW5jZSBbeCwgZiB4LCAuLi5dLiAqKVxuXG4oKiBUaGUgcmVhc29uIHdoeSB3ZSBnaXZlIHRoaXMgc2xpZ2h0bHkgaW5kaXJlY3QgZGVmaW5pdGlvbiBvZiBbaXRlcmF0ZV0sXG4gICBhcyBvcHBvc2VkIHRvIHRoZSBtb3JlIG5haXZlIGRlZmluaXRpb24gdGhhdCBtYXkgY29tZSB0byBtaW5kLCBpcyB0aGF0XG4gICB3ZSBhcmUgY2FyZWZ1bCB0byBhdm9pZCBldmFsdWF0aW5nIFtmIHhdIHVudGlsIHRoaXMgZnVuY3Rpb24gY2FsbCBpc1xuICAgYWN0dWFsbHkgbmVjZXNzYXJ5LiBUaGUgbmFpdmUgZGVmaW5pdGlvbiAobm90IHNob3duIGhlcmUpIGNvbXB1dGVzIHRoZVxuICAgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBzZXF1ZW5jZSwgW2YgeF0sIHdoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IGlzXG4gICByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuICopXG5cbmxldCBpdGVyYXRlIGYgeCA9XG4gIGNvbnMgeCAoaXRlcmF0ZTEgZiB4KVxuXG5cblxubGV0IHJlYyBtYXBpX2F1eCBmIGkgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoZiBpIHgsIG1hcGlfYXV4IGYgKGkrMSkgeHMpXG5cbmxldFtAaW5saW5lXSBtYXBpIGYgeHMgPVxuICBtYXBpX2F1eCBmIDAgeHNcblxuKCogW3RhaWxfc2NhbiBmIHMgeHNdIGlzIGVxdWl2YWxlbnQgdG8gW3RhaWwgKHNjYW4gZiBzIHhzKV0uXG4gICBbdGFpbF9zY2FuXSBpcyB1c2VkIGFzIGEgYnVpbGRpbmcgYmxvY2sgaW4gdGhlIGRlZmluaXRpb24gb2YgW3NjYW5dLiAqKVxuXG4oKiBUaGlzIHNsaWdodGx5IGluZGlyZWN0IGRlZmluaXRpb24gb2YgW3NjYW5dIGlzIG1lYW50IHRvIGF2b2lkIGNvbXB1dGluZ1xuICAgZWxlbWVudHMgdG9vIGVhcmx5OyBzZWUgdGhlIGFib3ZlIGNvbW1lbnQgYWJvdXQgW2l0ZXJhdGUxXSBhbmQgW2l0ZXJhdGVdLiAqKVxuXG5sZXQgcmVjIHRhaWxfc2NhbiBmIHMgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbGV0IHMgPSBmIHMgeCBpblxuICAgICAgQ29ucyAocywgdGFpbF9zY2FuIGYgcyB4cylcblxubGV0IHNjYW4gZiBzIHhzID1cbiAgY29ucyBzICh0YWlsX3NjYW4gZiBzIHhzKVxuXG4oKiBbdGFrZV0gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQgW3Rha2UgMCB4c10gcmV0dXJucyBbZW1wdHldXG4gICBpbW1lZGlhdGVseSwgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBtZW1vcnkuICopXG5cbmxldCByZWMgdGFrZV9hdXggbiB4cyA9XG4gIGlmIG4gPSAwIHRoZW5cbiAgICBlbXB0eVxuICBlbHNlXG4gICAgZnVuICgpIC0+XG4gICAgICBtYXRjaCB4cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICAgIENvbnMgKHgsIHRha2VfYXV4IChuLTEpIHhzKVxuXG5sZXQgdGFrZSBuIHhzID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlNlcS50YWtlXCI7XG4gIHRha2VfYXV4IG4geHNcblxuKCogW2ZvcmNlX2Ryb3AgbiB4c10gaXMgZXF1aXZhbGVudCB0byBbZHJvcCBuIHhzICgpXS5cbiAgIFtmb3JjZV9kcm9wIG4geHNdIHJlcXVpcmVzIFtuID4gMF0uXG4gICBbZm9yY2VfZHJvcF0gaXMgdXNlZCBhcyBhIGJ1aWxkaW5nIGJsb2NrIGluIHRoZSBkZWZpbml0aW9uIG9mIFtkcm9wXS4gKilcblxubGV0IHJlYyBmb3JjZV9kcm9wIG4geHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKF8sIHhzKSAtPlxuICAgICAgbGV0IG4gPSBuIC0gMSBpblxuICAgICAgaWYgbiA9IDAgdGhlblxuICAgICAgICB4cygpXG4gICAgICBlbHNlXG4gICAgICAgIGZvcmNlX2Ryb3AgbiB4c1xuXG4oKiBbZHJvcF0gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQgW2Ryb3AgMCB4c10gcmV0dXJucyBbeHNdIGltbWVkaWF0ZWx5LFxuICAgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBtZW1vcnkuICopXG5cbmxldCBkcm9wIG4geHMgPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiU2VxLmRyb3BcIlxuICBlbHNlIGlmIG4gPSAwIHRoZW5cbiAgICB4c1xuICBlbHNlXG4gICAgZnVuICgpIC0+XG4gICAgICBmb3JjZV9kcm9wIG4geHNcblxubGV0IHJlYyB0YWtlX3doaWxlIHAgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgaWYgcCB4IHRoZW4gQ29ucyAoeCwgdGFrZV93aGlsZSBwIHhzKSBlbHNlIE5pbFxuXG5sZXQgcmVjIGRyb3Bfd2hpbGUgcCB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIGFzIG5vZGUgLT5cbiAgICAgIGlmIHAgeCB0aGVuIGRyb3Bfd2hpbGUgcCB4cyAoKSBlbHNlIG5vZGVcblxubGV0IHJlYyBncm91cCBlcSB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBDb25zIChjb25zIHggKHRha2Vfd2hpbGUgKGVxIHgpIHhzKSwgZ3JvdXAgZXEgKGRyb3Bfd2hpbGUgKGVxIHgpIHhzKSlcblxuZXhjZXB0aW9uIEZvcmNlZF90d2ljZVxuXG5tb2R1bGUgU3VzcGVuc2lvbiA9IHN0cnVjdFxuXG4gIHR5cGUgJ2Egc3VzcGVuc2lvbiA9XG4gICAgdW5pdCAtPiAnYVxuXG4gICgqIENvbnZlcnNpb25zLiAqKVxuXG4gIGxldCB0b19sYXp5IDogJ2Egc3VzcGVuc2lvbiAtPiAnYSBMYXp5LnQgPVxuICAgIExhenkuZnJvbV9mdW5cbiAgICAoKiBmdW4gcyAtPiBsYXp5IChzKCkpICopXG5cbiAgbGV0IGZyb21fbGF6eSAocyA6ICdhIExhenkudCkgOiAnYSBzdXNwZW5zaW9uID1cbiAgICBmdW4gKCkgLT4gTGF6eS5mb3JjZSBzXG5cbiAgKCogW21lbW9pemVdIHR1cm5zIGFuIGFyYml0cmFyeSBzdXNwZW5zaW9uIGludG8gYSBwZXJzaXN0ZW50IHN1c3BlbnNpb24uICopXG5cbiAgbGV0IG1lbW9pemUgKHMgOiAnYSBzdXNwZW5zaW9uKSA6ICdhIHN1c3BlbnNpb24gPVxuICAgIGZyb21fbGF6eSAodG9fbGF6eSBzKVxuXG4gICgqIFtmYWlsdXJlXSBpcyBhIHN1c3BlbnNpb24gdGhhdCBmYWlscyB3aGVuIGZvcmNlZC4gKilcblxuICBsZXQgZmFpbHVyZSA6IF8gc3VzcGVuc2lvbiA9XG4gICAgZnVuICgpIC0+XG4gICAgICAoKiBBIHN1c3BlbnNpb24gY3JlYXRlZCBieSBbb25jZV0gaGFzIGJlZW4gZm9yY2VkIHR3aWNlLiAqKVxuICAgICAgcmFpc2UgRm9yY2VkX3R3aWNlXG5cbiAgKCogSWYgW2ZdIGlzIGEgc3VzcGVuc2lvbiwgdGhlbiBbb25jZSBmXSBpcyBhIHN1c3BlbnNpb24gdGhhdCBjYW4gYmUgZm9yY2VkXG4gICAgIGF0IG1vc3Qgb25jZS4gSWYgaXQgaXMgZm9yY2VkIG1vcmUgdGhhbiBvbmNlLCB0aGVuIFtGb3JjZWRfdHdpY2VdIGlzXG4gICAgIHJhaXNlZC4gKilcblxuICBsZXQgb25jZSAoZiA6ICdhIHN1c3BlbnNpb24pIDogJ2Egc3VzcGVuc2lvbiA9XG4gICAgbGV0IGFjdGlvbiA9IEF0b21pYy5tYWtlIGYgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgICgqIEdldCB0aGUgZnVuY3Rpb24gY3VycmVudGx5IHN0b3JlZCBpbiBbYWN0aW9uXSwgYW5kIHdyaXRlIHRoZVxuICAgICAgICAgZnVuY3Rpb24gW2ZhaWx1cmVdIGluIGl0cyBwbGFjZSwgc28gdGhlIG5leHQgYWNjZXNzIHdpbGwgcmVzdWx0XG4gICAgICAgICBpbiBhIGNhbGwgdG8gW2ZhaWx1cmUoKV0uICopXG4gICAgICBsZXQgZiA9IEF0b21pYy5leGNoYW5nZSBhY3Rpb24gZmFpbHVyZSBpblxuICAgICAgZigpXG5cbmVuZCAoKiBTdXNwZW5zaW9uICopXG5cbmxldCByZWMgbWVtb2l6ZSB4cyA9XG4gIFN1c3BlbnNpb24ubWVtb2l6ZSAoZnVuICgpIC0+XG4gICAgbWF0Y2ggeHMoKSB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgICAgTmlsXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgQ29ucyAoeCwgbWVtb2l6ZSB4cylcbiAgKVxuXG5sZXQgcmVjIG9uY2UgeHMgPVxuICBTdXNwZW5zaW9uLm9uY2UgKGZ1biAoKSAtPlxuICAgIG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5pbFxuICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgIENvbnMgKHgsIG9uY2UgeHMpXG4gIClcblxuXG5sZXQgcmVjIHppcCB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIENvbnMgKCh4LCB5KSwgemlwIHhzIHlzKVxuXG5sZXQgcmVjIG1hcDIgZiB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIENvbnMgKGYgeCB5LCBtYXAyIGYgeHMgeXMpXG5cbmxldCByZWMgaW50ZXJsZWF2ZSB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgeXMoKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoeCwgaW50ZXJsZWF2ZSB5cyB4cylcblxuKCogW3NvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgIFtzb3J0ZWRfbWVyZ2UgY21wIChjb25zIHggeHMpIHlzXS5cblxuICAgW3NvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgIFtzb3J0ZWRfbWVyZ2UgY21wIHhzIChjb25zIHkgeXMpXS5cblxuICAgW3NvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c10gaXMgZXF1aXZhbGVudCB0b1xuICAgICBbc29ydGVkX21lcmdlIGNtcCAoY29ucyB4IHhzKSAoY29ucyB5IHlzKV0uXG5cbiAgIFRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhcyBidWlsZGluZyBibG9ja3MgaW4gdGhlIGRlZmluaXRpb25cbiAgIG9mIFtzb3J0ZWRfbWVyZ2VdLiAqKVxuXG5sZXQgcmVjIHNvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzICgpID1cbiAgbWF0Y2ggeXMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBDb25zICh4LCB4cylcbiAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5hbmQgc29ydGVkX21lcmdlMXIgY21wIHhzIHkgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIENvbnMgKHksIHlzKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgc29ydGVkX21lcmdlMSBjbXAgeCB4cyB5IHlzXG5cbmFuZCBzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXMgPVxuICBpZiBjbXAgeCB5IDw9IDAgdGhlblxuICAgIENvbnMgKHgsIHNvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzKVxuICBlbHNlXG4gICAgQ29ucyAoeSwgc29ydGVkX21lcmdlMWwgY21wIHggeHMgeXMpXG5cbmxldCBzb3J0ZWRfbWVyZ2UgY21wIHhzIHlzICgpID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gICAgfCBOaWwsIE5pbCAtPlxuICAgICAgICBOaWxcbiAgICB8IE5pbCwgY1xuICAgIHwgYywgTmlsIC0+XG4gICAgICAgIGNcbiAgICB8IENvbnMgKHgsIHhzKSwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5cbmxldCByZWMgbWFwX2ZzdCB4eXMgKCkgPVxuICBtYXRjaCB4eXMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICgoeCwgXyksIHh5cykgLT5cbiAgICAgIENvbnMgKHgsIG1hcF9mc3QgeHlzKVxuXG5sZXQgcmVjIG1hcF9zbmQgeHlzICgpID1cbiAgbWF0Y2ggeHlzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoKF8sIHkpLCB4eXMpIC0+XG4gICAgICBDb25zICh5LCBtYXBfc25kIHh5cylcblxubGV0IHVuemlwIHh5cyA9XG4gIG1hcF9mc3QgeHlzLCBtYXBfc25kIHh5c1xuXG5sZXQgc3BsaXQgPVxuICB1bnppcFxuXG4oKiBbZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHNdIGlzIGVxdWl2YWxlbnQgdG9cbiAgIFtmaWx0ZXJfbWFwIEVpdGhlci5maW5kX2xlZnQgKG1hcCBmIHhzKV0uICopXG5cbmxldCByZWMgZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgRWl0aGVyLkxlZnQgeSAtPlxuICAgICAgICAgIENvbnMgKHksIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzKVxuICAgICAgfCBFaXRoZXIuUmlnaHQgXyAtPlxuICAgICAgICAgIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzICgpXG5cbmxldCByZWMgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVpdGhlci5MZWZ0IF8gLT5cbiAgICAgICAgICBmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIGYgeHMgKClcbiAgICAgIHwgRWl0aGVyLlJpZ2h0IHogLT5cbiAgICAgICAgICBDb25zICh6LCBmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIGYgeHMpXG5cbmxldCBwYXJ0aXRpb25fbWFwIGYgeHMgPVxuICBmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAgZiB4cyxcbiAgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzXG5cbmxldCBwYXJ0aXRpb24gcCB4cyA9XG4gIGZpbHRlciBwIHhzLCBmaWx0ZXIgKGZ1biB4IC0+IG5vdCAocCB4KSkgeHNcblxuKCogSWYgW3hzc10gaXMgYSBtYXRyaXggKGEgc2VxdWVuY2Ugb2Ygcm93cyksIHRoZW4gW3BlZWwgeHNzXSBpcyBhIHBhaXIgb2ZcbiAgIHRoZSBmaXJzdCBjb2x1bW4gKGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMpIGFuZCBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZVxuICAgbWF0cml4IChhIHNlcXVlbmNlIG9mIHNob3J0ZXIgcm93cykuIFRoZXNlIHR3byBzZXF1ZW5jZXMgaGF2ZSB0aGUgc2FtZVxuICAgbGVuZ3RoLiBUaGUgcm93cyBvZiB0aGUgbWF0cml4IFt4c3NdIGFyZSBub3QgcmVxdWlyZWQgdG8gaGF2ZSB0aGUgc2FtZVxuICAgbGVuZ3RoLiBBbiBlbXB0eSByb3cgaXMgaWdub3JlZC4gKilcblxuKCogQmVjYXVzZSBbcGVlbF0gdXNlcyBbdW56aXBdLCBpdHMgYXJndW1lbnQgbXVzdCBiZSBwZXJzaXN0ZW50LiBUaGUgc2FtZVxuICAgcmVtYXJrIGFwcGxpZXMgdG8gW3RyYW5zcG9zZV0sIFtkaWFnb25hbHNdLCBbcHJvZHVjdF0sIGV0Yy4gKilcblxubGV0IHBlZWwgeHNzID1cbiAgdW56aXAgKGZpbHRlcl9tYXAgdW5jb25zIHhzcylcblxubGV0IHJlYyB0cmFuc3Bvc2UgeHNzICgpID1cbiAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgeHNzIGluXG4gIGlmIGlzX2VtcHR5IGhlYWRzIHRoZW4gYmVnaW5cbiAgICBhc3NlcnQgKGlzX2VtcHR5IHRhaWxzKTtcbiAgICBOaWxcbiAgZW5kXG4gIGVsc2VcbiAgICBDb25zIChoZWFkcywgdHJhbnNwb3NlIHRhaWxzKVxuXG4oKiBUaGUgaW50ZXJuYWwgZnVuY3Rpb24gW2RpYWdvbmFsc10gdGFrZXMgYW4gZXh0cmEgYXJndW1lbnQsIFtyZW1haW5kZXJzXSxcbiAgIHdoaWNoIGNvbnRhaW5zIHRoZSByZW1haW5kZXJzIG9mIHRoZSByb3dzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW5cbiAgIGRpc2NvdmVyZWQuICopXG5cbmxldCByZWMgZGlhZ29uYWxzIHJlbWFpbmRlcnMgeHNzICgpID1cbiAgbWF0Y2ggeHNzKCkgd2l0aFxuICB8IENvbnMgKHhzLCB4c3MpIC0+XG4gICAgICBiZWdpbiBtYXRjaCB4cygpIHdpdGhcbiAgICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgICAgKCogV2UgZGlzY292ZXIgYSBuZXcgbm9uZW1wdHkgcm93IFt4IDo6IHhzXS4gVGh1cywgdGhlIG5leHQgZGlhZ29uYWxcbiAgICAgICAgICAgICBpcyBbeCA6OiBoZWFkc106IHRoaXMgZGlhZ29uYWwgYmVnaW5zIHdpdGggW3hdIGFuZCBjb250aW51ZXMgd2l0aFxuICAgICAgICAgICAgIHRoZSBmaXJzdCBlbGVtZW50IG9mIGV2ZXJ5IHJvdyBpbiBbcmVtYWluZGVyc10uIEluIHRoZSByZWN1cnNpdmVcbiAgICAgICAgICAgICBjYWxsLCB0aGUgYXJndW1lbnQgW3JlbWFpbmRlcnNdIGlzIGluc3RhbnRpYXRlZCB3aXRoIFt4cyA6OlxuICAgICAgICAgICAgIHRhaWxzXSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBoYXZlIG9uZSBtb3JlIHJlbWFpbmluZyByb3csIFt4c10sXG4gICAgICAgICAgICAgYW5kIHRoYXQgd2Uga2VlcCB0aGUgdGFpbHMgb2YgdGhlIHByZS1leGlzdGluZyByZW1haW5pbmcgcm93cy4gKilcbiAgICAgICAgICBsZXQgaGVhZHMsIHRhaWxzID0gcGVlbCByZW1haW5kZXJzIGluXG4gICAgICAgICAgQ29ucyAoY29ucyB4IGhlYWRzLCBkaWFnb25hbHMgKGNvbnMgeHMgdGFpbHMpIHhzcylcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgKCogV2UgZGlzY292ZXIgYSBuZXcgZW1wdHkgcm93LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlhZ29uYWwgaXNcbiAgICAgICAgICAgICBqdXN0IFtoZWFkc10sIGFuZCBbcmVtYWluZGVyc10gaXMgaW5zdGFudGlhdGVkIHdpdGgganVzdCBbdGFpbHNdLFxuICAgICAgICAgICAgIGFzIHdlIGRvIG5vdCBoYXZlIG9uZSBtb3JlIHJlbWFpbmluZyByb3cuICopXG4gICAgICAgICAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgcmVtYWluZGVycyBpblxuICAgICAgICAgIENvbnMgKGhlYWRzLCBkaWFnb25hbHMgdGFpbHMgeHNzKVxuICAgICAgZW5kXG4gIHwgTmlsIC0+XG4gICAgICAoKiBUaGVyZSBhcmUgbm8gbW9yZSByb3dzIHRvIGJlIGRpc2NvdmVyZWQuIFRoZXJlIHJlbWFpbnMgdG8gZXhoYXVzdFxuICAgICAgICAgdGhlIHJlbWFpbmluZyByb3dzLiAqKVxuICAgICAgdHJhbnNwb3NlIHJlbWFpbmRlcnMgKClcblxuKCogSWYgW3hzc10gaXMgYSBtYXRyaXggKGEgc2VxdWVuY2Ugb2Ygcm93cyksIHRoZW4gW2RpYWdvbmFscyB4c3NdIGlzXG4gICB0aGUgc2VxdWVuY2Ugb2YgaXRzIGRpYWdvbmFscy5cblxuICAgVGhlIGZpcnN0IGRpYWdvbmFsIGNvbnRhaW5zIGp1c3QgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlXG4gICBmaXJzdCByb3cuIFRoZSBzZWNvbmQgZGlhZ29uYWwgY29udGFpbnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlXG4gICBzZWNvbmQgcm93IGFuZCB0aGUgc2Vjb25kIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHJvdzsgYW5kIHNvIG9uLlxuICAgVGhpcyBraW5kIG9mIGRpYWdvbmFsIGlzIGluIGZhY3Qgc29tZXRpbWVzIGtub3duIGFzIGFuIGFudGlkaWFnb25hbC5cblxuICAgLSBFdmVyeSBkaWFnb25hbCBpcyBhIGZpbml0ZSBzZXF1ZW5jZS5cbiAgIC0gVGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBbeHNzXSBhcmUgbm90IHJlcXVpcmVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuICAgLSBUaGUgbWF0cml4IFt4c3NdIGlzIG5vdCByZXF1aXJlZCB0byBiZSBmaW5pdGUgKGluIGVpdGhlciBkaXJlY3Rpb24pLlxuICAgLSBUaGUgbWF0cml4IFt4c3NdIG11c3QgYmUgcGVyc2lzdGVudC4gKilcblxubGV0IGRpYWdvbmFscyB4c3MgPVxuICBkaWFnb25hbHMgZW1wdHkgeHNzXG5cbmxldCBtYXBfcHJvZHVjdCBmIHhzIHlzID1cbiAgY29uY2F0IChkaWFnb25hbHMgKFxuICAgIG1hcCAoZnVuIHggLT5cbiAgICAgIG1hcCAoZnVuIHkgLT5cbiAgICAgICAgZiB4IHlcbiAgICAgICkgeXNcbiAgICApIHhzXG4gICkpXG5cbmxldCBwcm9kdWN0IHhzIHlzID1cbiAgbWFwX3Byb2R1Y3QgKGZ1biB4IHkgLT4gKHgsIHkpKSB4cyB5c1xuXG5sZXQgb2ZfZGlzcGVuc2VyIGl0ID1cbiAgbGV0IHJlYyBjICgpID1cbiAgICBtYXRjaCBpdCgpIHdpdGhcbiAgICB8IE5vbmUgLT5cbiAgICAgICAgTmlsXG4gICAgfCBTb21lIHggLT5cbiAgICAgICAgQ29ucyAoeCwgYylcbiAgaW5cbiAgY1xuXG5sZXQgdG9fZGlzcGVuc2VyIHhzID1cbiAgbGV0IHMgPSByZWYgeHMgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggKCFzKSgpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOb25lXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgcyA6PSB4cztcbiAgICAgICAgU29tZSB4XG5cblxuXG5sZXQgcmVjIGludHMgaSAoKSA9XG4gIENvbnMgKGksIGludHMgKGkgKyAxKSlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfQXRvbWljIiwiQ2FtbGludGVybmFsTGF6eSIsIlN0ZGxpYiIsIlN0ZGxpYl9MYXp5IiwiZW1wdHkiLCJwYXJhbSIsInJldHVybiQiLCJ4IiwiY29ucyIsIm5leHQiLCJhcHBlbmQiLCJzZXExIiwic2VxMiIsIm1hdGNoIiwibWFwIiwic2VxIiwiZmlsdGVyX21hcCIsInkiLCJmaWx0ZXIiLCJjb25jYXQiLCJmbGF0X21hcCIsImZvbGRfbGVmdCIsImFjYyIsIml0ZXIiLCJ1bmZvbGQiLCJ1IiwiaXNfZW1wdHkiLCJ4cyIsInVuY29ucyIsImxlbmd0aCIsImFjY3UiLCJpdGVyaSIsImkiLCJmb2xkX2xlZnRpIiwiZm9yX2FsbCIsInAiLCJleGlzdHMiLCJmaW5kIiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwicmVzdWx0IiwiZmluZF9tYXBpIiwiaXRlcjIiLCJ5cyIsImZvbGRfbGVmdDIiLCJmb3JfYWxsMiIsImV4aXN0czIiLCJlcXVhbCIsImVxIiwiY29tcGFyZSIsImNtcCIsImMiLCJpbml0X2F1eCIsImoiLCJpbml0IiwibiIsInJlcGVhdCIsImZvcmV2ZXIiLCJjeWNsZV9ub25lbXB0eSIsImN5Y2xlIiwiaXRlcmF0ZTEiLCJpdGVyYXRlIiwibWFwaV9hdXgiLCJtYXBpIiwidGFpbF9zY2FuIiwicyIsInNjYW4iLCJ0YWtlX2F1eCIsInRha2UiLCJkcm9wIiwidGFrZV93aGlsZSIsImRyb3Bfd2hpbGUiLCJub2RlIiwiZ3JvdXAiLCJGb3JjZWRfdHdpY2UiLCJ0b19sYXp5IiwiZmFpbHVyZSIsIm1lbW9pemUiLCJvbmNlIiwiYWN0aW9uIiwiemlwIiwibWFwMiIsImludGVybGVhdmUiLCJzb3J0ZWRfbWVyZ2UxIiwic29ydGVkX21lcmdlIiwibWFwX2ZzdCIsInh5cyIsIm1hcF9zbmQiLCJ1bnppcCIsImZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCIsImZpbHRlcl9tYXBfZmluZF9yaWdodF9tYXAiLCJ6IiwicGFydGl0aW9uX21hcCIsInBhcnRpdGlvbiIsInBlZWwiLCJ4c3MiLCJ0cmFuc3Bvc2UiLCJ0YWlscyIsImhlYWRzIiwicmVtYWluZGVycyIsIm1hcF9wcm9kdWN0IiwicHJvZHVjdCIsIm9mX2Rpc3BlbnNlciIsIml0IiwidG9fZGlzcGVuc2VyIiwiaW50cyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFB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LFNBQUFOLElBRk07QUFBQSxLQUlOO0FBQUEsSUFBVztBQUFBLElBRWpCO0FBQUEsR0FBQztBQUFBLFlBQUFpRyxhQUFBN0U7QUFBQUEsUUFBQXNDLElBR0Q7QUFBQSxJQUNBLGdCQUFBNUQ7QUFBQUEsU0FBQVEsUUFDUTtBQUFBLEtBQU0sWUFFUjtBQUFBLFNBQUFjLEtBRlEsVUFBQXBCLElBQUE7QUFBQSxLQUlSO0FBQUEsS0FDQSxjQUFNLENBTlo7QUFBQSxHQU1ZO0FBQUEsWUFBQWtHLEtBQUF6RSxHQUFBM0I7QUFBQUEsUUFBQSxJQUtIO0FBQUEsSUFBWSwwQkFBWixvQkFBWTtBQUFBLEdBQUM7QUFBQSxHRDdyQnhCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTEwMzIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvb3B0aW9uLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1NlcSIsIlN0ZGxpYiIsInNvbWUiLCJ2IiwidmFsdWUiLCJvIiwiZGVmYXVsdCQiLCJnZXQiLCJwYXJhbSIsImJpbmQiLCJqb2luIiwibWFwIiwiZm9sZCIsIm5vbmUiLCJpdGVyIiwiaXNfbm9uZSIsImlzX3NvbWUiLCJlcXVhbCIsImVxIiwibzAiLCJvMSIsInYxIiwidjAiLCJjb21wYXJlIiwiY21wIiwidG9fcmVzdWx0IiwidG9fbGlzdCIsInRvX3NlcSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsS0FBQUMsR0NrQmEsY0FBTTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDO0FBQUFBLElBQ0ksUUFBbUM7QUFBQSxRQUFBSCxJQUFuQztBQUFBLElBQXVCO0FBQUEsR0FBbUI7QUFBQSxZQUFBSSxJQUFBQztBQUFBQSxJQUN2RCxZQUErQiw2Q0FBNEI7QUFBQSxRQUFBTCxJQUEzRDtBQUFBLElBQW1CO0FBQUEsR0FBd0M7QUFBQSxZQUFBTSxLQUFBSixHQUFBVjtBQUFBQSxJQUN0RCxRQUFxQjtBQUFBLFFBQUFRLElBQXJCO0FBQUEsSUFBc0MsdUJBQUc7QUFBQTtBQUFBLFlBQUFPLEtBQUFGLE9BQzdDLFlBQStCLGNBQUFILElBQS9CLFVBQW1CLFNBQWdCO0FBQUEsWUFBQU0sSUFBQWhCLEdBQUFVO0FBQUFBLElBQ2hDLFFBQXFCO0FBQUEsUUFBQUYsSUFBckI7QUFBQSxJQUEyQyw0QkFBSztBQUFBO0FBQUEsWUFBQVMsS0FBQUMsTUFBQVgsTUFBQU07QUFBQUEsSUFDckQsWUFBa0Q7QUFBQSxRQUFBTCxJQUFsRDtBQUFBLElBQWlDLDBCQUFxQjtBQUFBO0FBQUEsWUFBQVcsS0FBQW5CLEdBQUFhO0FBQUFBLElBQ3RELFlBQXFDO0FBQUEsUUFBQUwsSUFBckM7QUFBQSxJQUF1Qix1QkFBZ0I7QUFBQTtBQUFBLFlBQUFZLFFBQUFQLE9BQ2xDLG9CQUF1QztBQUFBLFlBQUFRLFFBQUFSLE9BQ3ZDLG9CQUF1QztBQUFBLFlBQUFTLE1BQUFDLElBQUFDLElBQUFDO0FBQUFBLElBRWhDO0FBQUEsZ0JBQUFDLEtBQUEsT0FBQUMsS0FBQSxPQUNDLDZCQUVWO0FBQUE7QUFBQSxrQkFESTtBQUFBLElBQ1Q7QUFBQSxHQUFLO0FBQUEsWUFBQUMsUUFBQUMsS0FBQUwsSUFBQUM7QUFBQUEsSUFFWSwyQkFJTDtBQUFBLFFBQUFFLEtBSks7QUFBQSxhQUlOO0FBQUEsUUFBQUQsS0FKTTtBQUFBLElBQ0YsOEJBR0g7QUFBQTtBQUFBLFlBQUFJLFVBQUFaLE1BQUFMO0FBQUFBLElBRUwsWUFBeUI7QUFBQSxRQUFBTCxJQUF6QjtBQUFBLElBQWdEO0FBQUEsR0FBSTtBQUFBLFlBQUF1QixRQUFBbEI7QUFBQUEsSUFDcEQsWUFBaUI7QUFBQSxRQUFBTCxJQUFqQjtBQUFBLElBQWdDO0FBQUEsR0FBRztBQUFBLFlBQUF3QixPQUFBbkI7QUFBQUEsSUFDcEMsWUFBaUI7QUFBQSxRQUFBTCxJQUFqQixjQUF1QztBQUFBLHVCRDFDcEQsZ0JDMENvRDtBQUFBLEdBQVk7QUFBQSxHRDFDaEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMTE0MCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9jaGFyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBjb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgY2hyIG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJDaGFyLmNoclwiIGVsc2UgdW5zYWZlX2NociBuXG5cbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZTogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBieXRlc191bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgZXNjYXBlZCA9IGZ1bmN0aW9uXG4gIHwgJ1xcJycgLT4gXCJcXFxcJ1wiXG4gIHwgJ1xcXFwnIC0+IFwiXFxcXFxcXFxcIlxuICB8ICdcXG4nIC0+IFwiXFxcXG5cIlxuICB8ICdcXHQnIC0+IFwiXFxcXHRcIlxuICB8ICdcXHInIC0+IFwiXFxcXHJcIlxuICB8ICdcXGInIC0+IFwiXFxcXGJcIlxuICB8ICcgJyAuLiAnficgYXMgYyAtPlxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgMSBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgYztcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuICB8IGMgLT5cbiAgICAgIGxldCBuID0gY29kZSBjIGluXG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSA0IGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCAnXFxcXCc7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMSAodW5zYWZlX2NociAoNDggKyBuIC8gMTAwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMiAodW5zYWZlX2NociAoNDggKyAobiAvIDEwKSBtb2QgMTApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAzICh1bnNhZmVfY2hyICg0OCArIG4gbW9kIDEwKSk7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG50eXBlIHQgPSBjaGFyXG5cbmxldCBjb21wYXJlIGMxIGMyID0gY29kZSBjMSAtIGNvZGUgYzJcbmxldCBlcXVhbCAoYzE6IHQpIChjMjogdCkgPSBjb21wYXJlIGMxIGMyID0gMFxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfaGFzaCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiU3RkbGliIiwiY2hyIiwibiIsImVzY2FwZWQiLCJjIiwicyIsImxvd2VyY2FzZV9hc2NpaSIsInVwcGVyY2FzZV9hc2NpaSIsImNvbXBhcmUiLCJjMSIsImMyIiwiZXF1YWwiLCJzZWVkZWRfaGFzaCIsInNlZWQiLCJ4IiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLElBQUFDO0FBQUFBLElDcUJFLHVCQUFxRDtBQUFBLElBQTVCLHVDQUF3QztBQUFBO0FBQUEsWUFBQUMsUUFBQUM7QUFBQUE7QUFBQUE7QUFBQUEsS0FPckQ7QUFBQSxtQkFFRjtBQUFBLE1BRkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQU1GO0FBQUE7QUFBQSxVQUZBO0FBQUE7QUFBQSxVQURBO0FBQUE7QUFBQSxVQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFMRSxZQUNGO0FBQUE7QUFBQSxTQUFBQyxNQU9FO0FBQUEsS0FDUjtBQUFBLEtBQ0EsZ0NBUWtCO0FBQUE7QUFBQSxRQUFBQSxJQUxWO0FBQUEsSUFDUjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsOEJBQWtCO0FBQUE7QUFBQSxZQUFBQyxnQkFBQUYsR0FFRix5Q0FFWjtBQUFBLFlBQUFHLGdCQUFBSCxHQUVZLHlDQUVaO0FBQUEsWUFBQUksUUFBQUMsSUFBQUMsSUFJVSxtQkFBaUI7QUFBQSxZQUFBQyxNQUFBRixJQUFBQyxJQUNJLG1DQUFJO0FBQUEsWUFBQUUsWUFBQUMsTUFBQUMsR0FJcEIsa0NBQStCO0FBQUEsWUFBQUMsS0FBQUQsR0FDM0MsK0JBQTRCO0FBQUEsR0RoRXpDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTEyMTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvdWNoYXIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERhbmllbCBDLiBCdWVuemxpICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcblxubGV0IGVycl9ub19wcmVkID0gXCJVKzAwMDAgaGFzIG5vIHByZWRlY2Vzc29yXCJcbmxldCBlcnJfbm9fc3VjYyA9IFwiVSsxMEZGRkYgaGFzIG5vIHN1Y2Nlc3NvclwiXG5sZXQgZXJyX25vdF9zdiBpID0gZm9ybWF0X2ludCBcIiVYXCIgaSBeIFwiIGlzIG5vdCBhbiBVbmljb2RlIHNjYWxhciB2YWx1ZVwiXG5sZXQgZXJyX25vdF9sYXRpbjEgdSA9IFwiVStcIiBeIGZvcm1hdF9pbnQgXCIlMDRYXCIgdSBeIFwiIGlzIG5vdCBhIGxhdGluMSBjaGFyYWN0ZXJcIlxuXG50eXBlIHQgPSBpbnRcblxubGV0IG1pbiA9IDB4MDAwMFxubGV0IG1heCA9IDB4MTBGRkZGXG5sZXQgbG9fYm91bmQgPSAweEQ3RkZcbmxldCBoaV9ib3VuZCA9IDB4RTAwMFxuXG5sZXQgYm9tID0gMHhGRUZGXG5sZXQgcmVwID0gMHhGRkZEXG5cbmxldCBzdWNjIHUgPVxuICBpZiB1ID0gbG9fYm91bmQgdGhlbiBoaV9ib3VuZCBlbHNlXG4gIGlmIHUgPSBtYXggdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fc3VjYyBlbHNlXG4gIHUgKyAxXG5cbmxldCBwcmVkIHUgPVxuICBpZiB1ID0gaGlfYm91bmQgdGhlbiBsb19ib3VuZCBlbHNlXG4gIGlmIHUgPSBtaW4gdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fcHJlZCBlbHNlXG4gIHUgLSAxXG5cbmxldCBpc192YWxpZCBpID0gKG1pbiA8PSBpICYmIGkgPD0gbG9fYm91bmQpIHx8IChoaV9ib3VuZCA8PSBpICYmIGkgPD0gbWF4KVxubGV0IG9mX2ludCBpID0gaWYgaXNfdmFsaWQgaSB0aGVuIGkgZWxzZSBpbnZhbGlkX2FyZyAoZXJyX25vdF9zdiBpKVxuZXh0ZXJuYWwgdW5zYWZlX29mX2ludCA6IGludCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdG9faW50IDogdCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19jaGFyIHUgPSB1IDwgMjU2XG5sZXQgb2ZfY2hhciBjID0gQ2hhci5jb2RlIGNcbmxldCB0b19jaGFyIHUgPVxuICBpZiB1ID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgKGVycl9ub3RfbGF0aW4xIHUpIGVsc2VcbiAgQ2hhci51bnNhZmVfY2hyIHVcblxubGV0IHVuc2FmZV90b19jaGFyID0gQ2hhci51bnNhZmVfY2hyXG5cbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBoYXNoID0gdG9faW50XG5cbigqIFVURiBjb2RlY3MgdG9vbHMgKilcblxudHlwZSB1dGZfZGVjb2RlID0gaW50XG4oKiBUaGlzIGlzIGFuIGludCBbMHhEVVVVVVVVXSBkZWNvbXBvc2VkIGFzIGZvbGxvd3M6XG4gICAtIFtEXSBpcyBmb3VyIGJpdHMgZm9yIGRlY29kZSBpbmZvcm1hdGlvbiwgdGhlIGhpZ2hlc3QgYml0IGlzIHNldCBpZiB0aGVcbiAgICAgZGVjb2RlIGlzIHZhbGlkLiBUaGUgdGhyZWUgbG93ZXIgYml0cyBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG4gICAgIGZyb20gdGhlIHNvdXJjZSB0aGF0IHdlcmUgY29uc3VtZWQgYnkgdGhlIGRlY29kZS5cbiAgIC0gW1VVVVVVVV0gaXMgdGhlIGRlY29kZWQgVW5pY29kZSBjaGFyYWN0ZXIgb3IgdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnRcbiAgICAgY2hhcmFjdGVyIFUrRkZGRCBpZiBmb3IgaW52YWxpZCBkZWNvZGVzLiAqKVxuXG5sZXQgdmFsaWRfYml0ID0gMjdcbmxldCBkZWNvZGVfYml0cyA9IDI0XG5cbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2lzX3ZhbGlkIGQgPSAoZCBsc3IgdmFsaWRfYml0KSA9IDFcbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2xlbmd0aCBkID0gKGQgbHNyIGRlY29kZV9iaXRzKSBsYW5kIDBiMTExXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV91Y2hhciBkID0gdW5zYWZlX29mX2ludCAoZCBsYW5kIDB4RkZGRkZGKVxubGV0W0BpbmxpbmVdIHV0Zl9kZWNvZGUgbiB1ID0gKCg4IGxvciBuKSBsc2wgZGVjb2RlX2JpdHMpIGxvciAodG9faW50IHUpXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV9pbnZhbGlkIG4gPSAobiBsc2wgZGVjb2RlX2JpdHMpIGxvciByZXBcblxubGV0IHV0Zl84X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+IDFcbnwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDNcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgdXRmXzE2X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJnbG9iYWxfZGF0YSIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwic3VjYyIsInUiLCJwcmVkIiwiaXNfdmFsaWQiLCJpIiwib2ZfaW50IiwiaXNfY2hhciIsIm9mX2NoYXIiLCJjIiwidG9fY2hhciIsInVuc2FmZV90b19jaGFyIiwiZXF1YWwiLCJjb21wYXJlIiwiaGFzaCIsInV0Zl9kZWNvZGVfaXNfdmFsaWQiLCJkIiwidXRmX2RlY29kZV9sZW5ndGgiLCJ1dGZfZGVjb2RlX3VjaGFyIiwidXRmX2RlY29kZSIsIm4iLCJ1dGZfZGVjb2RlX2ludmFsaWQiLCJjc3RfdWNoYXJfbWwiLCJ1dGZfOF9ieXRlX2xlbmd0aCIsInV0Zl8xNl9ieXRlX2xlbmd0aCIsIlN0ZGxpYl9VY2hhciJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLEtBQUFDO0FBQUFBLElDaUNFO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQ2dCO0FBQUEseUJBQ1g7QUFBQTtBQUFBLFlBQUFDLEtBQUFEO0FBQUFBLElBR0w7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFDZ0I7QUFBQSx5QkFDWDtBQUFBO0FBQUEsWUFBQUUsU0FBQUM7QUFBQUEsUUFBQSxJQUVVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQTBEO0FBQUEsWUFBQUMsT0FBQUQ7QUFBQUEsSUFDekQsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBLE9BeEJFO0FBQUEsZUFBakI7QUFBQSxJQXdCZ0Q7QUFBQTtBQUFBLFlBQUFFLFFBQUFMLEdBSW5ELHVCQUFPO0FBQUEsWUFBQU0sUUFBQUMsR0FDUCxTQUFXO0FBQUEsWUFBQUMsUUFBQVI7QUFBQUEsSUFFekIsYUFDQTtBQUFBO0FBQUE7QUFBQSxPQS9CNEI7QUFBQTtBQUFBLFNBQWtEO0FBQUEsSUE4QmhDLDhCQUM3QjtBQUFBO0FBQUEsWUFBQVMsZUFBQSxHRG5EbkI7QUFBQSxZQUFBQyxNQUFBO0FBQUEsT0FBQUMsVUFBQTtBQUFBLFlBQUFDLEtBQUE7QUFBQSxZQUFBQyxvQkFBQUMsR0N3RXFDLG9DQUFxQjtBQUFBLFlBQUFDLGtCQUFBRCxHQUN2QiwwQkFBOEI7QUFBQSxZQUFBRSxpQkFBQUYsR0FDL0Isb0JBQStCO0FBQUEsWUFBQUcsV0FBQUMsR0FBQWxCLEdBQ25DLHlCQUEwQztBQUFBLFlBQUFtQixtQkFBQUQsR0FDcEMsdUJBQTJCO0FBQUE7QUFBQSxJQUFBRSxlRDVFL0Q7QUFBQTtBQUFBO0FBQUEsWUFBQUMsa0JBQUFyQjtBQUFBQSxJQytFUyxVQUFTO0FBQUEsSUFDVCxhQUFlO0FBQUEsSUFDZixjQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZjtBQUFBLEtBQ0Y7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQSxXRHBGbkI7QUFBQSxZQUFBc0IsbUJBQUF0QjtBQUFBQSxJQ3VGUyxVQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZjtBQUFBLEtBQ0Y7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQTtBQUFBLElBQUF1QjtBQUFBQSxNRDFGbkIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMTMzMCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9saXN0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgaW5pdCBpIGxhc3QgZiA9XG4gIGlmIGkgPiBsYXN0IHRoZW4gW11cbiAgZWxzZSBpZiBpID0gbGFzdCB0aGVuIFtmIGldXG4gIGVsc2VcbiAgICBsZXQgcjEgPSBmIGkgaW5cbiAgICBsZXQgcjIgPSBmIChpKzEpIGluXG4gICAgcjEgOjogcjIgOjogaW5pdCAoaSsyKSBsYXN0IGZcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGluaXQgMCAobGVuIC0gMSkgZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IFthMV0gLT5cbiAgICAgIGxldCByMSA9IGYgYTEgaW5cbiAgICAgIFtyMV1cbiAgfCBhMTo6YTI6OmwgLT5cbiAgICAgIGxldCByMSA9IGYgYTEgaW5cbiAgICAgIGxldCByMiA9IGYgYTIgaW5cbiAgICAgIHIxOjpyMjo6bWFwIGYgbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBbYTFdIC0+XG4gICAgICBsZXQgcjEgPSBmIGkgYTEgaW5cbiAgICAgIFtyMV1cbiAgfCBhMTo6YTI6OmwgLT5cbiAgICAgIGxldCByMSA9IGYgaSBhMSBpblxuICAgICAgbGV0IHIyID0gZiAoaSsxKSBhMiBpblxuICAgICAgcjE6OnIyOjptYXBpIChpKzIpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcDIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChbYTFdLCBbYjFdKSAtPlxuICAgICAgbGV0IHIxID0gZiBhMSBiMSBpblxuICAgICAgW3IxXVxuICB8IChhMTo6YTI6OmwxLCBiMTo6YjI6OmwyKSAtPlxuICAgICAgbGV0IHIxID0gZiBhMSBiMSBpblxuICAgICAgbGV0IHIyID0gZiBhMiBiMiBpblxuICAgICAgcjE6OnIyOjptYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IGZpbmRfaW5kZXggcCA9XG4gIGxldCByZWMgYXV4IGkgPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgcCBhIHRoZW4gU29tZSBpIGVsc2UgYXV4IChpKzEpIGwgaW5cbiAgYXV4IDBcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX21hcGkgZiA9XG4gIGxldCByZWMgYXV4IGkgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiBpIHggd2l0aFxuICAgICAgIHwgU29tZSBfIGFzIHJlc3VsdCAtPiByZXN1bHRcbiAgICAgICB8IE5vbmUgLT4gYXV4IChpKzEpIGxcbiAgICAgZW5kIGluXG4gIGF1eCAwXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfYWxsIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHggOjogZmluZF9hbGwgcCBsIGVsc2UgZmluZF9hbGwgcCBsXG5cbmxldCBmaWx0ZXIgPSBmaW5kX2FsbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXJpIHAgaSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCB4OjpsIC0+XG4gICAgICBsZXQgaScgPSBpICsgMSBpblxuICAgICAgaWYgcCBpIHggdGhlbiB4IDo6IGZpbHRlcmkgcCBpJyBsIGVsc2UgZmlsdGVyaSBwIGknIGxcblxubGV0IGZpbHRlcmkgcCBsID0gZmlsdGVyaSBwIDAgbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBsXG4gICAgICB8IFNvbWUgdiAtPiB2IDo6IGZpbHRlcl9tYXAgZiBsXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbmNhdF9tYXAgZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCB4Ojp4cyAtPiBwcmVwZW5kX2NvbmNhdF9tYXAgKGYgeCkgZiB4c1xuYW5kW0B0YWlsX21vZF9jb25zXSBwcmVwZW5kX2NvbmNhdF9tYXAgeXMgZiB4cyA9XG4gIG1hdGNoIHlzIHdpdGhcbiAgfCBbXSAtPiBjb25jYXRfbWFwIGYgeHNcbiAgfCB5IDo6IHlzIC0+IHkgOjogcHJlcGVuZF9jb25jYXRfbWFwIHlzIGYgeHNcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2N1IGwgPVxuICBsZXQgcmVjIGF1eCBhY2N1IGxfYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1LCByZXYgbF9hY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbGV0IGFjY3UsIHggPSBmIGFjY3UgeCBpblxuICAgICAgICBhdXggYWNjdSAoeCA6OiBsX2FjY3UpIGwgaW5cbiAgYXV4IGFjY3UgW10gbFxuXG5sZXQgcGFydGl0aW9uIHAgbCA9XG4gIGxldCByZWMgcGFydCB5ZXMgbm8gPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgeWVzLCByZXYgbm8pXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHBhcnQgKHggOjogeWVzKSBubyBsIGVsc2UgcGFydCB5ZXMgKHggOjogbm8pIGwgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwIHAgbCA9XG4gIGxldCByZWMgcGFydCBsZWZ0IHJpZ2h0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IGxlZnQsIHJldiByaWdodClcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggcCB4IHdpdGhcbiAgICAgICB8IEVpdGhlci5MZWZ0IHYgLT4gcGFydCAodiA6OiBsZWZ0KSByaWdodCBsXG4gICAgICAgfCBFaXRoZXIuUmlnaHQgdiAtPiBwYXJ0IGxlZnQgKHYgOjogcmlnaHQpIGxcbiAgICAgZW5kXG4gIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcmVjIHNwbGl0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoW10sIFtdKVxuICB8ICh4LHkpOjpsIC0+XG4gICAgICBsZXQgKHJ4LCByeSkgPSBzcGxpdCBsIGluICh4OjpyeCwgeTo6cnkpXG5cbmxldCByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gKGExLCBhMikgOjogY29tYmluZSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuY29tYmluZVwiXG5cbigqKiBzb3J0aW5nICopXG5cbmxldCByZWMgbWVyZ2UgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgbDIgLT4gbDJcbiAgfCBsMSwgW10gLT4gbDFcbiAgfCBoMSA6OiB0MSwgaDIgOjogdDIgLT5cbiAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICB0aGVuIGgxIDo6IG1lcmdlIGNtcCB0MSBsMlxuICAgICAgZWxzZSBoMiA6OiBtZXJnZSBjbXAgbDEgdDJcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyIDw9IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPiAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgc29ydCA9IHN0YWJsZV9zb3J0XG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCogTm90ZTogb24gYSB2ZXJ5IGxvbmcgbGlzdCAobGVuZ3RoIG92ZXIgYWJvdXQgMTAwMDAwKSwgaXQgdXNlZCB0byBiZVxuICAgZmFzdGVyIHRvIGNvbnZlcnQgdGhlIGxpc3QgdG8gYW4gYXJyYXksIHNvcnQgdGhlIGFycmF5LCBhbmQgY29udmVydFxuICAgYmFjaywgdHJ1bmNhdGluZyB0aGUgYXJyYXkgb2JqZWN0IGFmdGVyIHByZXBlbmRpbmcgZWFjaCB0aG91c2FuZFxuICAgZW50cmllcyB0byB0aGUgcmVzdWx0aW5nIGxpc3QuIEltcG9zc2libGUgbm93IHRoYXQgT2JqLnRydW5jYXRlIGhhc1xuICAgYmVlbiByZW1vdmVkLiAqKVxuXG4oKiogc29ydGluZyArIHJlbW92aW5nIGR1cGxpY2F0ZXMgKilcblxubGV0IHNvcnRfdW5pcSBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZSB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA8IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gLT4gLTFcbiAgfCBfLCBbXSAtPiAxXG4gIHwgXyA6OiBsMSwgXyA6OiBsMiAtPiBjb21wYXJlX2xlbmd0aHMgbDEgbDJcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+XG4gICAgaWYgbiA9IDAgdGhlbiAwIGVsc2VcbiAgICAgIGlmIG4gPiAwIHRoZW4gLTEgZWxzZSAxXG4gIHwgXyA6OiBsIC0+XG4gICAgaWYgbiA8PSAwIHRoZW4gMSBlbHNlXG4gICAgICBjb21wYXJlX2xlbmd0aF93aXRoIGwgKG4tMSlcblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiB0cnVlXG4gIHwgXyA6OiBfIC0+IGZhbHNlXG5cbigqKiB7MSBDb21wYXJpc29ufSAqKVxuXG4oKiBOb3RlOiB3ZSBhcmUgKm5vdCogc2hvcnRjdXR0aW5nIHRoZSBsaXN0IGJ5IHVzaW5nXG4gICBbTGlzdC5jb21wYXJlX2xlbmd0aHNdIGZpcnN0OyB0aGlzIG1heSBiZSBzbG93ZXIgb24gbG9uZyBsaXN0c1xuICAgaW1tZWRpYXRlbHkgc3RhcnQgd2l0aCBkaXN0aW5jdCBlbGVtZW50cy4gSXQgaXMgYWxzbyBpbmNvcnJlY3QgZm9yXG4gICBbY29tcGFyZV0gYmVsb3csIGFuZCBpdCBpcyBiZXR0ZXIgKHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSkgdG9cbiAgIHVzZSB0aGUgc2FtZSBhcHByb2FjaCBmb3IgYm90aCBmdW5jdGlvbnMuICopXG5sZXQgcmVjIGVxdWFsIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfOjpfIHwgXzo6XywgW10gLT4gZmFsc2VcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPiBlcSBhMSBhMiAmJiBlcXVhbCBlcSBsMSBsMlxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfOjpfIC0+IC0xXG4gIHwgXzo6XywgW10gLT4gMVxuICB8IGExOjpsMSwgYTI6OmwyIC0+XG4gICAgbGV0IGMgPSBjbXAgYTEgYTIgaW5cbiAgICBpZiBjIDw+IDAgdGhlbiBjXG4gICAgZWxzZSBjb21wYXJlIGNtcCBsMSBsMlxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGwgPVxuICBsZXQgcmVjIGF1eCBsICgpID0gbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTZXEuTmlsXG4gICAgfCB4IDo6IHRhaWwgLT4gU2VxLkNvbnMgKHgsIGF1eCB0YWlsKVxuICBpblxuICBhdXggbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9zZXEgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+IFtdXG4gIHwgU2VxLkNvbnMgKHgxLCBzZXEpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBzZXEgKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFt4MV1cbiAgICAgIHwgU2VxLkNvbnMgKHgyLCBzZXEpIC0+IHgxIDo6IHgyIDo6IG9mX3NlcSBzZXFcbiAgICAgIGVuZFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NvbXBhcmUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiU3RkbGliIiwibGVuZ3RoIiwibCIsImxlbiIsInBhcmFtIiwiY29ucyIsImEiLCJoZCIsInRsIiwiY3N0X0xpc3RfbnRoIiwibnRoIiwibiIsIm50aF9vcHQiLCJhcHBlbmQiLCJyZXZfYXBwZW5kIiwibDEiLCJsMiIsInJldiIsImluaXQiLCJsYXN0IiwiaSIsInIxIiwicjIiLCJibG9jayIsImRzdCIsIm9mZnNldCIsImZsYXR0ZW4iLCJyIiwibWFwIiwibWF0Y2giLCJtYXBpIiwicmV2X21hcCIsImFjY3UiLCJpdGVyIiwiaXRlcmkiLCJmb2xkX2xlZnQiLCJmb2xkX3JpZ2h0IiwibWFwMiIsImNzdF9MaXN0X21hcDIiLCJiMiIsImIxIiwicmV2X21hcDIiLCJpdGVyMiIsImZvbGRfbGVmdDIiLCJmb2xkX3JpZ2h0MiIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiZm9yX2FsbDIiLCJleGlzdHMyIiwibWVtIiwieCIsIm1lbXEiLCJhc3NvYyIsImIiLCJhc3NvY19vcHQiLCJhc3NxIiwiYXNzcV9vcHQiLCJtZW1fYXNzb2MiLCJtZW1fYXNzcSIsInJlbW92ZV9hc3NvYyIsInBhaXIiLCJyZW1vdmVfYXNzcSIsImZpbmQiLCJmaW5kX29wdCIsImZpbmRfaW5kZXgiLCJmaW5kX21hcCIsInJlc3VsdCIsImZpbmRfbWFwaSIsImZpbmRfYWxsIiwiZmlsdGVyaSIsImZpbHRlcl9tYXAiLCJ2IiwiY29uY2F0X21hcCIsInhzIiwieXMiLCJ5IiwiZm9sZF9sZWZ0X21hcCIsImxfYWNjdSIsInBhcnRpdGlvbiIsInllcyIsIm5vIiwicGFydGl0aW9uX21hcCIsImxlZnQiLCJyaWdodCIsInNwbGl0IiwicnkiLCJyeCIsImNvbWJpbmUiLCJtZXJnZSIsImNtcCIsInQyIiwiaDIiLCJ0MSIsImgxIiwic3RhYmxlX3NvcnQiLCJzb3J0IiwieDIiLCJ4MSIsInMiLCJ4MyIsIm4xIiwibjIiLCJzMSIsInMyIiwicmV2X3NvcnQiLCJzb3J0X3VuaXEiLCJjIiwiY29tcGFyZV9sZW5ndGhzIiwiY29tcGFyZV9sZW5ndGhfd2l0aCIsImlzX2VtcHR5IiwiZXF1YWwiLCJlcSIsImNvbXBhcmUiLCJ0b19zZXEiLCJhdXgiLCJ0YWlsIiwib2Zfc2VxIiwic2VxIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdB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LEtBQWY7QUFBQTtBQUFBO0FBQUEsR0FDc0I7QUFBQSxZQUFBTyxPQUFBaEg7QUFBQUEsYUFBQWlILElBQUFqSCxHQUFBRTtBQUFBQSxLQUtMLFFBQ1Q7QUFBQSxTQUFBZ0gsT0FEUyxNQUFBakUsSUFBQTtBQUFBLEtBRW1CLDBCQUFSLHNCQUFRO0FBQUEsSUFBQztBQUFBLElBRXZDO0FBQUEsR0FBSztBQUFBLFlBQUFrRSxPQUFBQztBQUFBQSxRQUFBekYsUUFHQztBQUFBLElBQU0sWUFDQztBQUFBLFFBQUF5RixRQURELFVBQUFwQixLQUFBLFVBQUFyRSxVQUdJO0FBQUEsSUFBTSxjQUNMO0FBQUE7QUFBQSxLQUFBeUYsUUFESztBQUFBLEtBQUFyQixLQUFBO0FBQUEsS0FBQTFFLFFBRU07QUFBQSxLQUFBQyxNQUFZO0FBQUEsS0FBQUMsU0FBQTtBQUFBLEtBQUE2RixRQUFBO0FBQUE7QUFBQSxTQUFBekYsVUFMbEM7QUFBQSxLQUFNO0FBQUE7QUFBQSxPQUFBeUYsUUFBQTtBQUFBLE9BQUFwQixPQUFBO0FBQUEsT0FBQXJFLFVBR0k7QUFBQSxNQUFNO0FBQUEsV0FBQXlGLFFBQUEsWUFBQXJCLE9BQUEsWUFBQXpFLFFBRU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQURYO0FBQUE7QUFBQTtBQUFBLE1BSEo7QUFBQSxLQUlxQztBQUFBO0FBQUEsR0FDM0M7QUFBQSxHRHprQlQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMjY3NiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbnQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfaGFzaCIsImFicyIsIngiLCJsb2dub3QiLCJlcXVhbCIsImNvbXBhcmUiLCJtaW4iLCJ5IiwibWF4IiwidG9fc3RyaW5nIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUEseUJBQUFDLFlBQUE7QUFBQSxZQUFBQyxJQUFBQyxHQzRCWSwyQkFBd0I7QUFBQSxZQUFBQyxPQUFBRCxHQU1yQixjQUFhO0FBQUEsWUFBQUUsTUFBQSxNRGxDNUI7QUFBQSxPQUFBQyxVQUFBO0FBQUEsWUFBQUMsSUFBQUosR0FBQUssR0N3Q2tCLHFCQUF1QjtBQUFBLFlBQUFDLElBQUFOLEdBQUFLLEdBQ3ZCLHFCQUF1QjtBQUFBLFlBQUFFLFVBQUFQLEdBVU47QUFBQSxZQUFBUSxZQUFBQyxNQUFBVCxHQUlWLGtDQUErQjtBQUFBLFlBQUFVLEtBQUFWLEdBQzNDLCtCQUE0QjtBQUFBLEdEeER6QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEyNzE0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2J5dGVzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCB1bnNhZmVfZXNjYXBlIHMgPVxuICAoKiBXZSBwZXJmb3JtIHR3byBwYXNzZXMgb24gdGhlIGlucHV0IHNlcXVlbmNlLCBvbmUgdG8gY29tcHV0ZSB0aGVcbiAgICAgcmVzdWx0IHNpemUgYW5kIG9uZSB0byB3cml0ZSB0aGUgcmVzdWx0LlxuXG4gICAgICMxMTUwOCwgIzExNTA5OiBUaGlzIGxvZ2ljIHdvdWxkIGJlIGluY29ycmVjdCBpbiBwcmVzZW5jZSBvZlxuICAgICBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiB0byB0aGUgaW5wdXQsIG1ha2luZyB0aGUgdXNlIG9mXG4gICAgIFt1bnNhZmVfc2V0XSBiZWxvdyBtZW1vcnktdW5zYWZlLlxuXG4gICAgIFByZWNvbmRpdGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgYmUgc2FmZWx5IGNhbGxlZCBvbjpcbiAgICAgLSBhbiBpbW11dGFibGUgYnl0ZSBzZXF1ZW5jZVxuICAgICAtIGEgdW5pcXVlbHktb3duZWQgYnl0ZSBzZXF1ZW5jZSAodGhlIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcClcblxuICAgICBJbiBlaXRoZXIgY2FzZSB3ZSByZXR1cm4gYSB1bmlxdWVseS1vd25lZCBieXRlIHNlcXVlbmNlLlxuICAqKVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIHNcbiAgZWxzZSBiZWdpblxuICAgIGxldCBzJyA9IGNyZWF0ZSAhbiBpblxuICAgIG4gOj0gMDtcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICgnXFxcIicgfCAnXFxcXCcpIGFzIGMgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICduJ1xuICAgICAgfCAnXFx0JyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3QnXG4gICAgICB8ICdcXHInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAncidcbiAgICAgIHwgJ1xcYicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdiJ1xuICAgICAgfCAoJyAnIC4uICd+JykgYXMgYyAtPiB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgYyAtPlxuICAgICAgICAgIGxldCBhID0gY2hhcl9jb2RlIGMgaW5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJztcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSAvIDEwMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyAoYSAvIDEwKSBtb2QgMTApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSBtb2QgMTApKTtcbiAgICAgIGVuZDtcbiAgICAgIGluY3IgblxuICAgIGRvbmU7XG4gICAgcydcbiAgZW5kXG5cbmxldCBlc2NhcGVkIGIgPVxuICBsZXQgYiA9IGNvcHkgYiBpblxuICAoKiBXZSBjb3B5IG91ciBpbnB1dCB0byBvYnRhaW4gYSB1bmlxdWVseS1vd25lZCBieXRlIHNlcXVlbmNlIFtiXVxuICAgICB0byBzYXRpc2Z5IFt1bnNhZmVfZXNjYXBlXSdzIHByZWNvbmRpdGlvbiAqKVxuICB1bnNhZmVfZXNjYXBlIGJcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgbGV0IGJ1ZiA9IHJlZiAobWFrZSAyNTYgJ1xcMDAwJykgaW5cbiAgbGV0IHJlc2l6ZSAoKSA9XG4gICAgKCogcmVzaXplICopXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWluICgyICogbGVuZ3RoICFidWYpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgIGlmIGxlbmd0aCAhYnVmID0gbmV3X2xlbiB0aGVuIGZhaWx3aXRoIFwiQnl0ZXMub2Zfc2VxOiBjYW5ub3QgZ3JvdyBieXRlc1wiO1xuICAgIGxldCBuZXdfYnVmID0gbWFrZSBuZXdfbGVuICdcXDAwMCcgaW5cbiAgICBibGl0ICFidWYgMCBuZXdfYnVmIDAgIW47XG4gICAgYnVmIDo9IG5ld19idWZcbiAgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgICBpZiAhbiA9IGxlbmd0aCAhYnVmIHRoZW4gcmVzaXplKCk7XG4gICAgICAgc2V0ICFidWYgIW4gYztcbiAgICAgICBpbmNyIG4pXG4gICAgaTtcbiAgc3ViICFidWYgMCAhblxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG4oKiBUaGUgZ2V0XyBmdW5jdGlvbnMgYXJlIGFsbCBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxuXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNnVcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX2J5dGVzX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfYnl0ZXNfZ2V0NjRcIlxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG4gIGVsc2Ugc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG5cbmxldCBnZXRfaW50OCBiIGkgPVxuICAoKGdldF91aW50OCBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gOCkpIGFzciAoU3lzLmludF9zaXplIC0gOClcblxubGV0IGdldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF9pbnQxNl9uZSBiIGkgPVxuICAoKGdldF91aW50MTZfbmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9sZSBiIGkgPVxuICAoKGdldF91aW50MTZfbGUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9iZSBiIGkgPVxuICAoKGdldF91aW50MTZfYmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQzMl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50MzJfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4XG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9iZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHggZWxzZVxuICB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuXG5sZXQgc2V0X2ludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQxNl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X3VpbnQ4ID0gc2V0X2ludDhcbmxldCBzZXRfdWludDE2X25lID0gc2V0X2ludDE2X25lXG5sZXQgc2V0X3VpbnQxNl9iZSA9IHNldF9pbnQxNl9iZVxubGV0IHNldF91aW50MTZfbGUgPSBzZXRfaW50MTZfbGVcblxuKCogVVRGIGNvZGVjcyBhbmQgdmFsaWRhdGlvbnMgKilcblxubGV0IGRlY19pbnZhbGlkID0gVWNoYXIudXRmX2RlY29kZV9pbnZhbGlkXG5sZXRbQGlubGluZV0gZGVjX3JldCBuIHUgPSBVY2hhci51dGZfZGVjb2RlIG4gKFVjaGFyLnVuc2FmZV9vZl9pbnQgdSlcblxuKCogSW4gY2FzZSBvZiBkZWNvZGluZyBlcnJvciwgaWYgd2UgZXJyb3Igb24gdGhlIGZpcnN0IGJ5dGUsIHdlXG4gICBjb25zdW1lIHRoZSBieXRlLCBvdGhlcndpc2Ugd2UgY29uc3VtZSB0aGUgW25dIGJ5dGVzIHByZWNlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmxpdF9ieXRlcyIsImNhbWxfYnN3YXAxNiIsImNhbWxfYnl0ZXNfZ2V0IiwiY2FtbF9ieXRlc19nZXQxNiIsImNhbWxfYnl0ZXNfZ2V0MzIiLCJjYW1sX2J5dGVzX2dldDY0IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfYnl0ZXNfc2V0MTYiLCJjYW1sX2J5dGVzX3NldDMyIiwiY2FtbF9ieXRlc19zZXQ2NCIsImNhbWxfYnl0ZXNfdW5zYWZlX2dldCIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9pbnQzMl9ic3dhcCIsImNhbWxfaW50NjRfYnN3YXAiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX1VjaGFyIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfU3lzIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfQ2hhciIsIm1ha2UiLCJuIiwiYyIsInMiLCJpbml0IiwiaSIsImVtcHR5IiwiY29weSIsImxlbiIsInIiLCJ0b19zdHJpbmciLCJiIiwib2Zfc3RyaW5nIiwic3ViIiwib2ZzIiwic3ViX3N0cmluZyIsInN5bWJvbCIsImEiLCJtYXRjaCIsImV4dGVuZCIsImxlZnQiLCJyaWdodCIsImRzdG9mZiIsInNyY29mZiIsImNweWxlbiIsImZpbGwiLCJibGl0IiwiczEiLCJvZnMxIiwiczIiLCJvZnMyIiwiYmxpdF9zdHJpbmciLCJpdGVyIiwiaXRlcmkiLCJjb25jYXQiLCJzZXAiLCJsIiwic2VwbGVuIiwiYWNjIiwicGFyYW0iLCJwb3MiLCJoZCIsInRsIiwieCIsImRzdCIsImNhdCIsImwxIiwibDIiLCJpc19zcGFjZSIsInRyaW0iLCJqIiwidW5zYWZlX2VzY2FwZSIsImVzY2FwZWQiLCJtYXAiLCJtYXBpIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImV4aXN0cyIsInAiLCJmb3JfYWxsIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiYXBwbHkxIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsInN0YXJ0c193aXRoIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwiZW5kc193aXRoIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJpbmRleF9yZWMiLCJsaW0iLCJpbmRleCIsImluZGV4X3JlY19vcHQiLCJpbmRleF9vcHQiLCJpbmRleF9mcm9tIiwiaW5kZXhfZnJvbV9vcHQiLCJyaW5kZXhfcmVjIiwicmluZGV4IiwicmluZGV4X2Zyb20iLCJyaW5kZXhfcmVjX29wdCIsInJpbmRleF9vcHQiLCJyaW5kZXhfZnJvbV9vcHQiLCJjb250YWluc19mcm9tIiwiZXhuIiwiY29udGFpbnMiLCJyY29udGFpbnNfZnJvbSIsImNvbXBhcmUiLCJzcGxpdF9vbl9jaGFyIiwidG9fc2VxIiwiYXV4IiwidG9fc2VxaSIsIm9mX3NlcSIsImJ1ZiIsIm5ld19sZW4iLCJuZXdfYnVmIiwidW5zYWZlX2dldF91aW50MTZfbGUiLCJ1bnNhZmVfZ2V0X3VpbnQxNl9iZSIsImdldF9pbnQ4IiwiZ2V0X3VpbnQxNl9sZSIsImdldF91aW50MTZfYmUiLCJnZXRfaW50MTZfbmUiLCJnZXRfaW50MTZfbGUiLCJnZXRfaW50MTZfYmUiLCJnZXRfaW50MzJfbGUiLCJnZXRfaW50MzJfYmUiLCJnZXRfaW50NjRfbGUiLCJnZXRfaW50NjRfYmUiLCJ1bnNhZmVfc2V0X3VpbnQxNl9sZSIsInVuc2FmZV9zZXRfdWludDE2X2JlIiwic2V0X2ludDE2X2xlIiwic2V0X2ludDE2X2JlIiwic2V0X2ludDMyX2xlIiwic2V0X2ludDMyX2JlIiwic2V0X2ludDY0X2xlIiwic2V0X2ludDY0X2JlIiwiZGVjX2ludmFsaWQiLCJkZWNfcmV0IiwidSIsIm5vdF9pbl94ODBfdG9feEJGIiwibm90X2luX3hBMF90b194QkYiLCJub3RfaW5feDgwX3RvX3g5RiIsIm5vdF9pbl94OTBfdG9feEJGIiwibm90X2luX3g4MF90b194OEYiLCJ1dGZfOF91Y2hhcl8zIiwiYjAiLCJiMSIsImIyIiwidXRmXzhfdWNoYXJfNCIsImIzIiwiZ2V0X3V0Zl84X3VjaGFyIiwibWF4IiwiY3N0X2J5dGVzX21sIiwic2V0X3V0Zl84X3VjaGFyIiwic2V0IiwibGFzdCIsImlzX3ZhbGlkX3V0Zl84IiwiY3N0X2luZGV4X291dF9vZl9ib3VuZHMiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJoaSIsImxvIiwic2V0X3V0Zl8xNmJlX3VjaGFyIiwiaXNfdmFsaWRfdXRmXzE2YmUiLCJnZXRfdXRmXzE2bGVfdWNoYXIiLCJzZXRfdXRmXzE2bGVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZsZSIsIlN0ZGxpYl9CeXRlcyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEs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cCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RyaW5nLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTdHJpbmcgb3BlcmF0aW9ucywgYmFzZWQgb24gYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBieXRlcy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBieXRlcy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCA9ICggXiApXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXJpIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG5sZXQgbWFwIGYgcyA9XG4gIEIubWFwIGYgKGJvcyBzKSB8PiBidHNcbmxldCBtYXBpIGYgcyA9XG4gIEIubWFwaSBmIChib3MgcykgfD4gYnRzXG5sZXQgZm9sZF9yaWdodCBmIHggYSA9XG4gIEIuZm9sZF9yaWdodCBmIChib3MgeCkgYVxubGV0IGZvbGRfbGVmdCBmIGEgeCA9XG4gIEIuZm9sZF9sZWZ0IGYgYSAoYm9zIHgpXG5sZXQgZXhpc3RzIGYgcyA9XG4gIEIuZXhpc3RzIGYgKGJvcyBzKVxubGV0IGZvcl9hbGwgZiBzID1cbiAgQi5mb3JfYWxsIGYgKGJvcyBzKVxuXG4oKiBCZXdhcmU6IHdlIGNhbm5vdCB1c2UgQi50cmltIG9yIEIuZXNjYXBlIGJlY2F1c2UgdGhleSBhbHdheXMgbWFrZSBhXG4gICBjb3B5LCBidXQgU3RyaW5nLm1saSBzcGVsbHMgb3V0IHNvbWUgY2FzZXMgd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkXG4gICB0byBtYWtlIGEgY29weS4gKilcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBpZiBzID0gXCJcIiB0aGVuIHNcbiAgZWxzZSBpZiBpc19zcGFjZSAodW5zYWZlX2dldCBzIDApIHx8IGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgKGxlbmd0aCBzIC0gMSkpXG4gICAgdGhlbiBidHMgKEIudHJpbSAoYm9zIHMpKVxuICBlbHNlIHNcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCBiID0gYm9zIHMgaW5cbiAgKCogV2Ugc2F0aXNmeSBbdW5zYWZlX2VzY2FwZV0ncyBwcmVjb25kaXRpb24gYnkgcGFzc2luZyBhblxuICAgICBpbW11dGFibGUgYnl0ZSBzZXF1ZW5jZSBbYl0uICopXG4gIGJ0cyAoQi51bnNhZmVfZXNjYXBlIGIpXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID1cbiAgQi51cHBlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9XG4gIEIubG93ZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLnVuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2ggOiBpbnQgLT4gc3RyaW5nIC0+IGludCA9IFwiY2FtbF9zdHJpbmdfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2ggMCB4XG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3RyaW5nX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gYm9zIHMgfD4gQi50b19zZXFcblxubGV0IHRvX3NlcWkgcyA9IGJvcyBzIHw+IEIudG9fc2VxaVxuXG5sZXQgb2Zfc2VxIGcgPSBCLm9mX3NlcSBnIHw+IGJ0c1xuXG4oKiBVVEYgZGVjb2RlcnMgYW5kIHZhbGlkYXRvcnMgKilcblxubGV0IGdldF91dGZfOF91Y2hhciBzIGkgPSBCLmdldF91dGZfOF91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfOCBzID0gQi5pc192YWxpZF91dGZfOCAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2YmVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2YmUgKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmxlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmxlIChib3MgcylcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9zdHJpbmdfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfc3RyaW5nX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX3N0cmluZ19nZXQ2NFwiXG5cbmxldCBnZXRfaW50OCBzIGkgPSBCLmdldF9pbnQ4IChib3MgcykgaVxubGV0IGdldF91aW50MTZfbGUgcyBpID0gQi5nZXRfdWludDE2X2xlIChib3MgcykgaVxubGV0IGdldF91aW50MTZfYmUgcyBpID0gQi5nZXRfdWludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9uZSBzIGkgPSBCLmdldF9pbnQxNl9uZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbGUgcyBpID0gQi5nZXRfaW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2JlIHMgaSA9IEIuZ2V0X2ludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9sZSBzIGkgPSBCLmdldF9pbnQzMl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfYmUgcyBpID0gQi5nZXRfaW50MzJfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2xlIHMgaSA9IEIuZ2V0X2ludDY0X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9iZSBzIGkgPSBCLmdldF9pbnQ2NF9iZSAoYm9zIHMpIGlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ibGl0X3N0cmluZyIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2VxdWFsIiwiY2FtbF9zdHJpbmdfaGFzaCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0J5dGVzIiwiYnRzIiwiYm9zIiwibWFrZSIsIm4iLCJjIiwiaW5pdCIsIm9mX2J5dGVzIiwidG9fYnl0ZXMiLCJzdWIiLCJzIiwib2ZzIiwibGVuIiwiYmxpdCIsImNzdCIsImNvbmNhdCIsInNlcCIsImwiLCJzZXBsZW4iLCJhY2MiLCJwYXJhbSIsInBvcyIsImhkIiwidGwiLCJ4IiwiZHN0IiwiY2F0IiwiaXRlciIsImkiLCJpdGVyaSIsIm1hcCIsIm1hcGkiLCJmb2xkX3JpZ2h0IiwiYSIsImZvbGRfbGVmdCIsImV4aXN0cyIsImZvcl9hbGwiLCJpc19zcGFjZSIsInRyaW0iLCJlc2NhcGVkIiwiYiIsImluZGV4X3JlYyIsImxpbSIsImluZGV4IiwiaW5kZXhfcmVjX29wdCIsImluZGV4X29wdCIsImluZGV4X2Zyb20iLCJpbmRleF9mcm9tX29wdCIsInJpbmRleF9yZWMiLCJyaW5kZXgiLCJyaW5kZXhfZnJvbSIsInJpbmRleF9yZWNfb3B0IiwicmluZGV4X29wdCIsInJpbmRleF9mcm9tX29wdCIsImNvbnRhaW5zX2Zyb20iLCJleG4iLCJjb250YWlucyIsInJjb250YWluc19mcm9tIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsInN0YXJ0c193aXRoIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwiZW5kc193aXRoIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJoYXNoIiwic3BsaXRfb25fY2hhciIsImoiLCJyIiwiY29tcGFyZSIsInRvX3NlcSIsInRvX3NlcWkiLCJvZl9zZXEiLCJnIiwiZ2V0X3V0Zl84X3VjaGFyIiwiaXNfdmFsaWRfdXRmXzgiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZiZSIsImdldF91dGZfMTZsZV91Y2hhciIsImlzX3ZhbGlkX3V0Zl8xNmxlIiwiZ2V0X2ludDgiLCJnZXRfdWludDE2X2xlIiwiZ2V0X3VpbnQxNl9iZSIsImdldF9pbnQxNl9uZSIsImdldF9pbnQxNl9sZSIsImdldF9pbnQxNl9iZSIsImdldF9pbnQzMl9sZSIsImdldF9pbnQzMl9iZSIsImdldF9pbnQ2NF9sZSIsImdldF9pbnQ2NF9iZSIsIlN0ZGxpYl9TdHJpbmciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBQyxHQ21DRSxPQUFVLElBQVYsaUNBQWlCO0FBQUEsWUFBQUMsS0FBQUYsR0FBQVYsR0FFakIsT0FBVSxJQUFWLGlDQUFpQjtBQUFBLE9BQUFhLFdEckNuQixpQkFBQUMs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O0FBQUFBLFFBQUEsSUFDQztBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUEyRCxjQUFBN0UsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE0RCxhQUFBOUUsR0FBQWtCO0FBQUFBLFFBQUEsSUFDWDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE2RCxhQUFBL0UsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE4RCxhQUFBaEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUErRCxhQUFBakYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFnRSxhQUFBbEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFpRSxhQUFBbkYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFrRSxhQUFBcEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBO0FBQUEsSUFBQW1FO0FBQUFBLE1EblIvQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE0MzY5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2FycmF5Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgYXJyYXlzLiAqKVxudHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuKCogQXJyYXkgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBsZW5ndGggOiAnYSBhcnJheSAtPiBpbnQgPSBcIiVhcnJheV9sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV9zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgbWFrZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCBjcmVhdGU6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgdW5zYWZlX3N1YiA6ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfc3ViXCJcbmV4dGVybmFsIGFwcGVuZF9wcmltIDogJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfYXBwZW5kXCJcbmV4dGVybmFsIGNvbmNhdCA6ICdhIGFycmF5IGxpc3QgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfY29uY2F0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9ibGl0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2ZpbGxcIlxuZXh0ZXJuYWwgY3JlYXRlX2Zsb2F0OiBpbnQgLT4gZmxvYXQgYXJyYXkgPSBcImNhbWxfbWFrZV9mbG9hdF92ZWN0XCJcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBtdXN0IG5vdCBldmFsdWF0ZSBbZiAwXSB3aGVuIFtsIDw9IDBdLlxuICAgICBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgKCogV2UgcmFpc2UgZXZlbiBpZiBbc3ggPSAwICYmIHN5IDwgMF06ICopXG4gIGlmIHN5IDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkubWFrZV9tYXRyaXhcIjtcbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICAgIHVuc2FmZV9zZXQgcmVzIHggKGNyZWF0ZSBzeSBpbml0KVxuICAgIGRvbmU7XG4gIGVuZDtcbiAgcmVzXG5cbmxldCBpbml0X21hdHJpeCBzeCBzeSBmID1cbiAgKCogV2UgcmFpc2UgZXZlbiBpZiBbc3ggPSAwICYmIHN5IDwgMF06ICopXG4gIGlmIHN5IDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuaW5pdF9tYXRyaXhcIjtcbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gICgqIFdlIG11c3Qgbm90IGV2YWx1YXRlIFtmIHggMF0gd2hlbiBbc3kgPD0gMF06ICopXG4gIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICAgIGxldCByb3cgPSBjcmVhdGUgc3kgKGYgeCAwKSBpblxuICAgICAgZm9yIHkgPSAxIHRvIHByZWQgc3kgZG9cbiAgICAgICAgdW5zYWZlX3NldCByb3cgeSAoZiB4IHkpXG4gICAgICBkb25lO1xuICAgICAgdW5zYWZlX3NldCByZXMgeCByb3dcbiAgICBkb25lO1xuICBlbmQ7XG4gIHJlc1xuXG5sZXQgY29weSBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpbiBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSB1bnNhZmVfc3ViIGEgMCBsXG5cbmxldCBhcHBlbmQgYTEgYTIgPVxuICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgaWYgbDEgPSAwIHRoZW4gY29weSBhMlxuICBlbHNlIGlmIGxlbmd0aCBhMiA9IDAgdGhlbiB1bnNhZmVfc3ViIGExIDAgbDFcbiAgZWxzZSBhcHBlbmRfcHJpbSBhMSBhMlxuXG5sZXQgc3ViIGEgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuc3ViXCJcbiAgZWxzZSB1bnNhZmVfc3ViIGEgb2ZzIGxlblxuXG5sZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxubGV0IGJsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBhMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggYTIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IGExIG9mczEgYTIgb2ZzMiBsZW5cblxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBpdGVyMiBmIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2VcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxubGV0IG1hcCBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZih1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZih1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwX2lucGxhY2UgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgYSBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gIGRvbmVcblxubGV0IG1hcGlfaW5wbGFjZSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgdW5zYWZlX3NldCBhIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICBkb25lXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX2luZGV4IHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gU29tZSBpXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9tYXAgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBsb29wIChzdWNjIGkpXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcGkgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiBpICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbmxldCBzaHVmZmxlIH5yYW5kIGEgPSAoKiBGaXNoZXItWWF0ZXMgKilcbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDEgZG9cbiAgICBsZXQgaiA9IHJhbmQgKGkgKyAxKSBpblxuICAgIGxldCB2ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICB1bnNhZmVfc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgdW5zYWZlX3NldCBhIGogdlxuICBkb25lXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9hcnJheV9zdWIiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1NlcSIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwiaW5pdCIsImwiLCJyZXMiLCJpIiwibWFrZV9tYXRyaXgiLCJzeCIsInN5IiwieCIsImluaXRfbWF0cml4Iiwicm93IiwieSIsImNvcHkiLCJhIiwiYXBwZW5kIiwiYTIiLCJsMSIsInN1YiIsIm9mcyIsImxlbiIsImZpbGwiLCJ2IiwiYmxpdCIsIm9mczEiLCJvZnMyIiwiaXRlciIsIml0ZXIyIiwiYiIsIm1hcCIsInIiLCJtYXBfaW5wbGFjZSIsIm1hcGlfaW5wbGFjZSIsIm1hcDIiLCJsYSIsImxiIiwiaXRlcmkiLCJtYXBpIiwidG9fbGlzdCIsImxpc3RfbGVuZ3RoIiwiYWNjdSIsInBhcmFtIiwidCIsIm9mX2xpc3QiLCJ0bCIsImhkIiwiZm9sZF9sZWZ0IiwiZm9sZF9sZWZ0X21hcCIsImFjYyIsImlucHV0X2FycmF5IiwibWF0Y2giLCJlbHQiLCJvdXRwdXRfYXJyYXkiLCJmb2xkX3JpZ2h0IiwiZXhpc3RzIiwicCIsIm4iLCJmb3JfYWxsIiwiZm9yX2FsbDIiLCJsMiIsIm4xIiwibjIiLCJleGlzdHMyIiwibWVtIiwibWVtcSIsImZpbmRfb3B0IiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwiZmluZF9tYXBpIiwic3BsaXQiLCJiMCIsImJpIiwiYWkiLCJjb21iaW5lIiwibmEiLCJuYiIsIkJvdHRvbSIsInNvcnQiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJlIiwiaiIsImV4biIsImZhdGhlciIsInN0YWJsZV9zb3J0IiwibWVyZ2UiLCJzcmMxb2ZzIiwic3JjMWxlbiIsInNyYzIiLCJzcmMyb2ZzIiwic3JjMmxlbiIsImRzdCIsImRzdG9mcyIsInNyYzFyIiwic3JjMnIiLCJzMiIsInMxIiwiaTEiLCJpMiIsImQiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwic2h1ZmZsZSIsInJhbmQiLCJ0b19zZXEiLCJhdXgiLCJ0b19zZXFpIiwib2Zfc2VxIiwiU3RkbGliX0FycmF5Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBVDtBQUFBQSxJQytDRSxZQUFjO0FBQUEsSUFDZCxVQUFjLHlDQVNWO0FBQUEsUUFBQVUsTUFKTyxrQkFBUyx1QkFDbkI7QUFBQTtBQUFBLFNBQUFDLElBQUE7QUFBQTtBQUFBLE1BQ21CO0FBQUEsY0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFeEI7QUFBQSxHQUFHO0FBQUEsWUFBQUMsWUFBQUMsSUFBQUMsSUFBQU47QUFBQUEsSUFJSixXQUFlO0FBQUEsUUFBQUUsTUFDTDtBQUFBLElBQ1Y7QUFBQSxhQUFlO0FBQUE7QUFBQSxVQUFBSyxJQUFBO0FBQUE7QUFBQSxPQUVNO0FBQUEsZUFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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O0FBQUEsSUFBQXlHO0FBQUFBLE1EcGVmIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTUxMjQsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZmxvYXQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgIE5pY29sYXMgT2plZGEgQmFyLCBMZXhpRmkgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIG5lZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgYWRkIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCBzdWIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsIG11bCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgZGl2IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCByZW0gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZtYSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2ZtYV9mbG9hdFwiIFwiY2FtbF9mbWFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWJzIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVhYnNmbG9hdFwiXG5cbmxldCB6ZXJvID0gMC5cbmxldCBvbmUgPSAxLlxubGV0IG1pbnVzX29uZSA9IC0xLlxubGV0IGluZmluaXR5ID0gU3RkbGliLmluZmluaXR5XG5sZXQgbmVnX2luZmluaXR5ID0gU3RkbGliLm5lZ19pbmZpbml0eVxubGV0IG5hbiA9IFN0ZGxpYi5uYW5cbmxldCBxdWlldF9uYW4gPSBuYW5cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgc2lnbmFsaW5nX25hbiA9IGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBpc19maW5pdGUgKHg6IGZsb2F0KSA9IHggLS4geCA9IDAuXG5sZXQgaXNfaW5maW5pdGUgKHg6IGZsb2F0KSA9IDEuIC8uIHggPSAwLlxubGV0IGlzX25hbiAoeDogZmxvYXQpID0geCA8PiB4XG5cbmxldCBwaSA9IDB4MS45MjFmYjU0NDQyZDE4cCsxXG5sZXQgbWF4X2Zsb2F0ID0gU3RkbGliLm1heF9mbG9hdFxubGV0IG1pbl9mbG9hdCA9IFN0ZGxpYi5taW5fZmxvYXRcbmxldCBlcHNpbG9uID0gU3RkbGliLmVwc2lsb25fZmxvYXRcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcbmxldCBvZl9zdHJpbmdfb3B0ID0gU3RkbGliLmZsb2F0X29mX3N0cmluZ19vcHRcbmxldCB0b19zdHJpbmcgPSBTdGRsaWIuc3RyaW5nX29mX2Zsb2F0XG50eXBlIGZwY2xhc3MgPSBTdGRsaWIuZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgcG93IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjYnJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2JydF9mbG9hdFwiIFwiY2FtbF9jYnJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cDIgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHAyX2Zsb2F0XCIgXCJjYW1sX2V4cDJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nX2Zsb2F0XCIgXCJsb2dcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMTAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxMF9mbG9hdFwiIFwibG9nMTBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzJfZmxvYXRcIiBcImNhbWxfbG9nMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5oX2Zsb2F0XCIgXCJjYW1sX2FzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbmhfZmxvYXRcIiBcImNhbWxfYXRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXJmIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXJmX2Zsb2F0XCIgXCJjYW1sX2VyZlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBlcmZjIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXJmY19mbG9hdFwiIFwiY2FtbF9lcmZjXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRydW5jIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdHJ1bmNfZmxvYXRcIiBcImNhbWxfdHJ1bmNcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgcm91bmQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9yb3VuZF9mbG9hdFwiIFwiY2FtbF9yb3VuZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG5bQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuXG5sZXQgaXNfaW50ZWdlciB4ID0geCA9IHRydW5jIHggJiYgaXNfZmluaXRlIHhcblxuZXh0ZXJuYWwgbmV4dF9hZnRlciA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gID0gXCJjYW1sX25leHRhZnRlcl9mbG9hdFwiIFwiY2FtbF9uZXh0YWZ0ZXJcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuXG5sZXQgc3VjYyB4ID0gbmV4dF9hZnRlciB4IGluZmluaXR5XG5sZXQgcHJlZCB4ID0gbmV4dF9hZnRlciB4IG5lZ19pbmZpbml0eVxuXG5leHRlcm5hbCBjb3B5X3NpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpZ25fYml0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGJvb2xcbiAgPSBcImNhbWxfc2lnbmJpdF9mbG9hdFwiIFwiY2FtbF9zaWduYml0XCIgW0BAbm9hbGxvY11cblxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbnR5cGUgdCA9IGZsb2F0XG5leHRlcm5hbCBjb21wYXJlIDogZmxvYXQgLT4gZmxvYXQgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5sZXQgZXF1YWwgeCB5ID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldFtAaW5saW5lXSBtaW4gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHkgdGhlbiB5IGVsc2UgeFxuICBlbHNlIGlmIGlzX25hbiB4IHRoZW4geCBlbHNlIHlcblxubGV0W0BpbmxpbmVdIG1heCAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geCB0aGVuIHggZWxzZSB5XG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiB5IGVsc2UgeFxuXG5sZXRbQGlubGluZV0gbWluX21heCAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiBpc19uYW4geCB8fCBpc19uYW4geSB0aGVuIChuYW4sIG5hbilcbiAgZWxzZSBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW4gKHgsIHkpIGVsc2UgKHksIHgpXG5cbmxldFtAaW5saW5lXSBtaW5fbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB4IHRoZW4geSBlbHNlIHhcbiAgZWxzZSBpZiBpc19uYW4geSB0aGVuIHggZWxzZSB5XG5cbmxldFtAaW5saW5lXSBtYXhfbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB5IHRoZW4geCBlbHNlIHlcbiAgZWxzZSBpZiBpc19uYW4geCB0aGVuIHkgZWxzZSB4XG5cbmxldFtAaW5saW5lXSBtaW5fbWF4X251bSAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiBpc19uYW4geCB0aGVuICh5LHkpXG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiAoeCx4KVxuICBlbHNlIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlbiAoeCx5KSBlbHNlICh5LHgpXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5cbm1vZHVsZSBBcnJheSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IGZsb2F0YXJyYXlcblxuICBleHRlcm5hbCBsZW5ndGggOiB0IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9mbG9hdGFycmF5X2NyZWF0ZVwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQgOiB0IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX2dldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQgOiB0IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfc2V0XCJcblxuICBsZXQgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHYgPVxuICAgIGZvciBpID0gb2ZzIHRvIG9mcyArIGxlbiAtIDEgZG8gdW5zYWZlX3NldCBhIGkgdiBkb25lXG5cbiAgZXh0ZXJuYWwgdW5zYWZlX2JsaXQ6IHQgLT4gaW50IC0+IHQgLT4gaW50IC0+IGludCAtPiB1bml0ID1cbiAgICBcImNhbWxfZmxvYXRhcnJheV9ibGl0XCIgW0BAbm9hbGxvY11cblxuICBsZXQgY2hlY2sgYSBvZnMgbGVuIG1zZyA9XG4gICAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyArIGxlbiA8IDAgfHwgb2ZzICsgbGVuID4gbGVuZ3RoIGEgdGhlblxuICAgICAgaW52YWxpZF9hcmcgbXNnXG5cbiAgbGV0IG1ha2UgbiB2ID1cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIG4gaW5cbiAgICB1bnNhZmVfZmlsbCByZXN1bHQgMCBuIHY7XG4gICAgcmVzdWx0XG5cbiAgbGV0IGluaXQgbCBmID1cbiAgICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaW5pdFwiXG4gICAgZWxzZVxuICAgICAgbGV0IHJlcyA9IGNyZWF0ZSBsIGluXG4gICAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgICAgZG9uZTtcbiAgICAgIHJlc1xuXG4gIGxldCBtYWtlX21hdHJpeCBzeCBzeSB2ID1cbiAgICAoKiBXZSByYWlzZSBldmVuIGlmIFtzeCA9IDAgJiYgc3kgPCAwXTogKilcbiAgICBpZiBzeSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5Lm1ha2VfbWF0cml4XCI7XG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2Ugc3ggKGNyZWF0ZSAwKSBpblxuICAgIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeCA9IDAgdG8gc3ggLSAxIGRvXG4gICAgICAgIEFycmF5LnVuc2FmZV9zZXQgcmVzIHggKG1ha2Ugc3kgdilcbiAgICAgIGRvbmU7XG4gICAgZW5kO1xuICAgIHJlc1xuXG4gIGxldCBpbml0X21hdHJpeCBzeCBzeSBmID1cbiAgICAoKiBXZSByYWlzZSBldmVuIGlmIFtzeCA9IDAgJiYgc3kgPCAwXTogKilcbiAgICBpZiBzeSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5LmluaXRfbWF0cml4XCI7XG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2Ugc3ggKGNyZWF0ZSAwKSBpblxuICAgIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeCA9IDAgdG8gc3ggLSAxIGRvXG4gICAgICAgIGxldCByb3cgPSBjcmVhdGUgc3kgaW5cbiAgICAgICAgZm9yIHkgPSAwIHRvIHN5IC0gMSBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgcm93IHkgKGYgeCB5KVxuICAgICAgICBkb25lO1xuICAgICAgICBBcnJheS51bnNhZmVfc2V0IHJlcyB4IHJvd1xuICAgICAgZG9uZTtcbiAgICBlbmQ7XG4gICAgcmVzXG5cbiAgbGV0IGFwcGVuZCBhMSBhMiA9XG4gICAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gICAgbGV0IGwyID0gbGVuZ3RoIGEyIGluXG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgICB1bnNhZmVfYmxpdCBhMSAwIHJlc3VsdCAwIGwxO1xuICAgIHVuc2FmZV9ibGl0IGEyIDAgcmVzdWx0IGwxIGwyO1xuICAgIHJlc3VsdFxuXG4gICgqIG5leHQgMyBmdW5jdGlvbnM6IG1vZGlmaWVkIGNvcHkgb2YgY29kZSBmcm9tIHN0cmluZy5tbCAqKVxuICBsZXQgZW5zdXJlX2dlICh4OmludCkgeSA9XG4gICAgaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuY29uY2F0XCJcblxuICBsZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIGFjYykgYWNjKSB0bFxuXG4gIGxldCBjb25jYXQgbCA9XG4gICAgbGV0IGxlbiA9IHN1bV9sZW5ndGhzIDAgbCBpblxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGwgaSA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYXNzZXJ0IChpID0gbGVuKVxuICAgICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICBsZXQgaGxlbiA9IGxlbmd0aCBoZCBpblxuICAgICAgICB1bnNhZmVfYmxpdCBoZCAwIHJlc3VsdCBpIGhsZW47XG4gICAgICAgIGxvb3AgdGwgKGkgKyBobGVuKVxuICAgIGluXG4gICAgbG9vcCBsIDA7XG4gICAgcmVzdWx0XG5cbiAgbGV0IHN1YiBhIG9mcyBsZW4gPVxuICAgIGNoZWNrIGEgb2ZzIGxlbiBcIkZsb2F0LkFycmF5LnN1YlwiO1xuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgYSBvZnMgcmVzdWx0IDAgbGVuO1xuICAgIHJlc3VsdFxuXG4gIGxldCBjb3B5IGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIGwgaW5cbiAgICB1bnNhZmVfYmxpdCBhIDAgcmVzdWx0IDAgbDtcbiAgICByZXN1bHRcblxuICBsZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gICAgY2hlY2sgYSBvZnMgbGVuIFwiRmxvYXQuQXJyYXkuZmlsbFwiO1xuICAgIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbiAgbGV0IGJsaXQgc3JjIHNvZnMgZHN0IGRvZnMgbGVuID1cbiAgICBjaGVjayBzcmMgc29mcyBsZW4gXCJGbG9hdC5hcnJheS5ibGl0XCI7XG4gICAgY2hlY2sgZHN0IGRvZnMgbGVuIFwiRmxvYXQuYXJyYXkuYmxpdFwiO1xuICAgIHVuc2FmZV9ibGl0IHNyYyBzb2ZzIGRzdCBkb2ZzIGxlblxuXG4gIGxldCB0b19saXN0IGEgPVxuICAgIExpc3QuaW5pdCAobGVuZ3RoIGEpICh1bnNhZmVfZ2V0IGEpXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgICBsZXQgcmVjIGZpbGwgaSBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiByZXN1bHRcbiAgICAgIHwgaCA6OiB0IC0+IHVuc2FmZV9zZXQgcmVzdWx0IGkgaDsgZmlsbCAoaSArIDEpIHRcbiAgICBpblxuICAgIGZpbGwgMCBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBpdGVyIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgaXRlcjIgZiBhIGIgPVxuICAgIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgICBlbHNlXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxuICBsZXQgbWFwIGYgYSA9XG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBtYXBfaW5wbGFjZSBmIGEgPVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgYSBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZVxuXG4gIGxldCBtYXAyIGYgYSBiID1cbiAgICBsZXQgbGEgPSBsZW5ndGggYSBpblxuICAgIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gICAgaWYgbGEgPD4gbGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJGbG9hdC5BcnJheS5tYXAyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBsYSAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGl0ZXJpIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbiAgbGV0IG1hcGkgZiBhID1cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgbWFwaV9pbnBsYWNlIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCBhIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmVcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gICAgZG9uZTtcbiAgICAhclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICAgIGRvbmU7XG4gICAgIXJcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGV4aXN0cyBwIGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmb3JfYWxsIHAgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChpICsgMSlcbiAgICAgIGVsc2UgZmFsc2UgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IG1lbSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIGNvbXBhcmUgKHVuc2FmZV9nZXQgYSBpKSB4ID0gMCB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sLCBidXQgc2xpZ2h0bHkgZGlmZmVyZW50ICopXG4gIGxldCBtZW1faWVlZSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHggPSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZmluZF9vcHQgcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZpbmRfaW5kZXggcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIFNvbWUgaVxuICAgICAgZWxzZSBsb29wIChpICsgMSkgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZpbmRfbWFwIGYgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gbG9vcCAoaSArIDEpXG4gICAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICAgIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmaW5kX21hcGkgZiBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIG1hdGNoIGYgaSAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBleGNlcHRpb24gQm90dG9tIG9mIGludFxuICBsZXQgc29ydCBjbXAgYSA9XG4gICAgbGV0IG1heHNvbiBsIGkgPVxuICAgICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICAgIGxldCB4ID0gcmVmIGkzMSBpblxuICAgICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgICBpZiBjbXAgKGdldCBhICF4KSAoZ2V0IGEgKGkzMSsyKSkgPCAwIHRoZW4geCA6PSBpMzErMjtcbiAgICAgICAgIXhcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIGlmIGkzMSsxIDwgbCAmJiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMFxuICAgICAgICB0aGVuIGkzMSsxXG4gICAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgICBpblxuICAgIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgICBpZiBjbXAgKGdldCBhIGopIGUgPiAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICBidWJibGVkb3duIGwgalxuICAgIGluXG4gICAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gICAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICAgIGxldCBmYXRoZXIgPSAoaSAtIDEpIC8gMyBpblxuICAgICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgYSBpIChnZXQgYSBmYXRoZXIpO1xuICAgICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSBpKSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gICAgZG9uZTtcbiAgICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCwgZXhjZXB0IGZvciB0aGUgY2FsbCB0byBbY3JlYXRlXSAqKVxuICBsZXQgY3V0b2ZmID0gNVxuICBsZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICAgIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgICBsZXQgc3JjMXIgPSBzcmMxb2ZzICsgc3JjMWxlbiBhbmQgc3JjMnIgPSBzcmMyb2ZzICsgc3JjMmxlbiBpblxuICAgICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMxO1xuICAgICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSAoZ2V0IGEgaTEpIGkyIHMyIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICAgIGlmIGkyIDwgc3JjMnIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IGEgaTEgZHN0IChkICsgMSkgKHNyYzFyIC0gaTEpXG4gICAgICAgIGVuZFxuICAgICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gICAgaW5cbiAgICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgbGV0IGUgPSAoZ2V0IGEgKHNyY29mcyArIGkpKSBpblxuICAgICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgICBzZXQgZHN0ICghaiArIDEpIChnZXQgZHN0ICFqKTtcbiAgICAgICAgICBkZWNyIGo7XG4gICAgICAgIGRvbmU7XG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgZTtcbiAgICAgIGRvbmU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgICBsZXQgbDIgPSBsZW4gLSBsMSBpblxuICAgICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICAgIG1lcmdlIChzcmNvZnMgKyBsMikgbDEgZHN0IChkc3RvZnMgKyBsMSkgbDIgZHN0IGRzdG9mcztcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgICAgbGV0IGwyID0gbCAtIGwxIGluXG4gICAgICBsZXQgdCA9IGNyZWF0ZSBsMiBpblxuICAgICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgICBtZXJnZSBsMiBsMSB0IDAgbDIgYSAwO1xuICAgIGVuZFxuXG4gIGxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgc2h1ZmZsZSB+cmFuZCBhID0gKCogRmlzaGVyLVlhdGVzICopXG4gICAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDEgZG9cbiAgICAgIGxldCBqID0gcmFuZCAoaSArIDEpIGluXG4gICAgICBsZXQgdiA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICB1bnNhZmVfc2V0IGEgaiB2XG4gICAgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgdG9fc2VxIGEgPVxuICAgIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgICB0aGVuXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IHRvX3NlcWkgYSA9XG4gICAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICAgIHRoZW5cbiAgICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9yZXZfbGlzdCBsID1cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgIGxldCBhID0gY3JlYXRlIGxlbiBpblxuICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgW10gLT4gYVxuICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICBpblxuICAgIGZpbGwgKGxlbi0xKSBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9zZXEgaSA9XG4gICAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gICAgb2ZfcmV2X2xpc3QgbFxuXG5cbiAgbGV0IG1hcF90b19hcnJheSBmIGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsID0gMCB0aGVuIFt8IHxdIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gQXJyYXkubWFrZSBsIChmICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgICAgQXJyYXkudW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG5cbiAgbGV0IG1hcF9mcm9tX2FycmF5IGYgYSA9XG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIChBcnJheS51bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbmVuZFxuXG5tb2R1bGUgQXJyYXlMYWJlbHMgPSBBcnJheVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9mbG9hdF9jb21wYXJlIiwiY2FtbF9mbG9hdGFycmF5X2JsaXQiLCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIiwiY2FtbF9oYXNoIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX25leHRhZnRlcl9mbG9hdCIsImNhbWxfc2lnbmJpdF9mbG9hdCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0xpc3QiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYiIsImluZmluaXR5IiwibmVnX2luZmluaXR5IiwibmFuIiwiaXNfZmluaXRlIiwieCIsImlzX2luZmluaXRlIiwiaXNfbmFuIiwibWF4X2Zsb2F0IiwibWluX2Zsb2F0IiwiZXBzaWxvbiIsIm9mX3N0cmluZ19vcHQiLCJ0b19zdHJpbmciLCJpc19pbnRlZ2VyIiwic3VjYyIsInByZWQiLCJlcXVhbCIsInkiLCJtaW4iLCJtYXgiLCJtaW5fbWF4IiwibWluX251bSIsIm1heF9udW0iLCJtaW5fbWF4X251bSIsInNlZWRlZF9oYXNoIiwic2VlZCIsImhhc2giLCJ1bnNhZmVfZmlsbCIsImEiLCJvZnMiLCJsZW4iLCJ2IiwiaSIsImNoZWNrIiwibXNnIiwibWFrZSIsIm4iLCJyZXN1bHQiLCJpbml0IiwibCIsInJlcyIsIm1ha2VfbWF0cml4Iiwic3giLCJzeSIsImluaXRfbWF0cml4Iiwicm93IiwiYXBwZW5kIiwiYTIiLCJsMSIsImwyIiwiY3N0X2Zsb2F0X21sIiwiY29uY2F0IiwiYWNjIiwicGFyYW0iLCJ0bCIsImhkIiwiaGxlbiIsInN1YiIsImNvcHkiLCJmaWxsIiwiYmxpdCIsInNyYyIsInNvZnMiLCJkc3QiLCJkb2ZzIiwiY3N0X0Zsb2F0X2FycmF5X2JsaXQiLCJ0b19saXN0Iiwib2ZfbGlzdCIsInQiLCJoIiwiaXRlciIsIml0ZXIyIiwiYiIsIm1hcCIsInIiLCJtYXBfaW5wbGFjZSIsIm1hcDIiLCJsYSIsImxiIiwiaXRlcmkiLCJtYXBpIiwibWFwaV9pbnBsYWNlIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImV4aXN0cyIsInAiLCJmb3JfYWxsIiwibWVtIiwibWVtX2llZWUiLCJmaW5kX29wdCIsImZpbmRfaW5kZXgiLCJmaW5kX21hcCIsImZpbmRfbWFwaSIsIkJvdHRvbSIsInNvcnQiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJlIiwiaiIsImV4biIsImZhdGhlciIsInN0YWJsZV9zb3J0IiwibWVyZ2UiLCJzcmMxb2ZzIiwic3JjMWxlbiIsInNyYzIiLCJzcmMyb2ZzIiwic3JjMmxlbiIsImRzdG9mcyIsInNyYzFyIiwic3JjMnIiLCJzMiIsInMxIiwiaTEiLCJpMiIsImQiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwic2h1ZmZsZSIsInJhbmQiLCJ0b19zZXEiLCJhdXgiLCJ0b19zZXFpIiwib2Zfc2VxIiwibWFwX3RvX2FycmF5IiwibWFwX2Zyb21fYXJyYXkiLCJTdGRsaWJfRmxvYXQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7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QUFBQTtBQUFBLFNBQUExQyxJQUFBO0FBQUE7QUFBQSxNQUNpQjtBQUFBLGNBQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUUzQztBQUFBLEdBQUM7QUFBQTtBQUFBLElBQUFnRztBQUFBQSxNQXJrQnVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkRyQzVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdDcUM0RDtBQUFBO0FBQUEsRURyQzVEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTU5OTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvaW50MzIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbSW50MzJdOiAzMi1iaXQgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnIDogaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9uZWdcIlxuZXh0ZXJuYWwgYWRkIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9hZGRcIlxuZXh0ZXJuYWwgc3ViIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9zdWJcIlxuZXh0ZXJuYWwgbXVsIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9tdWxcIlxuZXh0ZXJuYWwgZGl2IDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9kaXZcIlxuZXh0ZXJuYWwgcmVtIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9tb2RcIlxuZXh0ZXJuYWwgbG9nYW5kIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9hbmRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX29yXCJcbmV4dGVybmFsIGxvZ3hvciA6IGludDMyIC0+IGludDMyIC0+IGludDMyID0gXCIlaW50MzJfeG9yXCJcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQzMiAtPiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9sc2xcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQzMiAtPiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2xzclwiXG5leHRlcm5hbCBvZl9pbnQgOiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogaW50MzIgLT4gaW50ID0gXCIlaW50MzJfdG9faW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfb2ZfZmxvYXRcIiBcImNhbWxfaW50MzJfb2ZfZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0b19mbG9hdCA6IGludDMyIC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDMyX3RvX2Zsb2F0XCIgXCJjYW1sX2ludDMyX3RvX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDMyXG4gID0gXCJjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50MzJfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQzMiAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbmxldCB6ZXJvID0gMGxcbmxldCBvbmUgPSAxbFxubGV0IG1pbnVzX29uZSA9IC0xbFxubGV0IHN1Y2MgbiA9IGFkZCBuIDFsXG5sZXQgcHJlZCBuID0gc3ViIG4gMWxcbmxldCBhYnMgbiA9IGlmIG4gPj0gMGwgdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBtaW5faW50ID0gMHg4MDAwMDAwMGxcbmxldCBtYXhfaW50ID0gMHg3RkZGRkZGRmxcbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMWwpXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBtYXRjaCBTeXMud29yZF9zaXplIHdpdGhcbiAgfCAzMiAtPlxuICAgICAgbGV0IG1heF9pbnQgPSBvZl9pbnQgU3RkbGliLm1heF9pbnQgaW5cbiAgICAgIGZ1biBuIC0+XG4gICAgICAgIGlmIG4gPj0gMGwgJiYgbiA8PSBtYXhfaW50IHRoZW5cbiAgICAgICAgICBTb21lICh0b19pbnQgbilcbiAgICAgICAgZWxzZVxuICAgICAgICAgIE5vbmVcbiAgfCA2NCAtPlxuICAgICAgKCogU28gdGhhdCBpdCBjb21waWxlcyBpbiAzMi1iaXQgKilcbiAgICAgIGxldCBtYXNrID0gMHhGRkZGIGxzbCAxNiBsb3IgMHhGRkZGIGluXG4gICAgICBmdW4gbiAtPiBTb21lICh0b19pbnQgbiBsYW5kIG1hc2spXG4gIHwgXyAtPlxuICAgICAgYXNzZXJ0IGZhbHNlXG5cbmV4dGVybmFsIGZvcm1hdCA6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmcgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmxldCB0b19zdHJpbmcgbiA9IGZvcm1hdCBcIiVkXCIgblxuXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50MzIgPSBcImNhbWxfaW50MzJfb2Zfc3RyaW5nXCJcblxubGV0IG9mX3N0cmluZ19vcHQgcyA9XG4gIHRyeSBTb21lIChvZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG50eXBlIHQgPSBpbnQzMlxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IHggPSB5XG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG5sZXQgdW5zaWduZWRfbHQgbiBtID1cbiAgc3ViIG4gbWluX2ludCA8IHN1YiBtIG1pbl9pbnRcblxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbigqIFVuc2lnbmVkIGRpdmlzaW9uIGZyb20gc2lnbmVkIGRpdmlzaW9uIG9mIHRoZSBzYW1lIGJpdG5lc3MuXG4gICBTZWUgV2FycmVuIEpyLiwgSGVucnkgUy4gKDIwMTMpLiBIYWNrZXIncyBEZWxpZ2h0ICgyIGVkLiksIFNlYyA5LTMuXG4qKVxubGV0IHVuc2lnbmVkX2RpdiBuIGQgPVxuICBpZiBkIDwgemVybyB0aGVuXG4gICAgaWYgdW5zaWduZWRfbHQgbiBkIHRoZW4gemVybyBlbHNlIG9uZVxuICBlbHNlXG4gICAgbGV0IHEgPSBzaGlmdF9sZWZ0IChkaXYgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgbiAxKSBkKSAxIGluXG4gICAgbGV0IHIgPSBzdWIgbiAobXVsIHEgZCkgaW5cbiAgICBpZiB1bnNpZ25lZF9sdCByIGQgdGhlbiBxIGVsc2Ugc3VjYyBxXG5cbmxldCB1bnNpZ25lZF9yZW0gbiBkID1cbiAgc3ViIG4gKG11bCAodW5zaWduZWRfZGl2IG4gZCkgZClcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2giLCJjYW1sX2ludF9jb21wYXJlIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tdWwiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWIiLCJTdGRsaWJfU3lzIiwiQXNzZXJ0X2ZhaWx1cmUiLCJzdWNjIiwibiIsInByZWQiLCJhYnMiLCJsb2dub3QiLCJtYXRjaCIsIm1heF9pbnQiLCJ1bnNpZ25lZF90b19pbnQiLCJ0b19zdHJpbmciLCJvZl9zdHJpbmdfb3B0IiwicyIsImV4biIsImVxdWFsIiwidW5zaWduZWRfY29tcGFyZSIsIm0iLCJ5IiwieCIsInVuc2lnbmVkX2x0IiwibWluIiwibWF4IiwiemVybyIsIm9uZSIsInVuc2lnbmVkX2RpdiIsImQiLCJxIiwiciIsInVuc2lnbmVkX3JlbSIsInNlZWRlZF9oYXNoIiwic2VlZCIsImhhc2giLCJTdGRsaWJfSW50MzIiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDK0NxQjtBQUFBLFlBQUFDLEtBQUFELEdBQ0E7QUFBQSxZQUFBRSxJQUFBRixHQUNOLDRDQUF5QjtBQUFBLFlBQUFHLE9BQUFILEdBR1g7QUFBQSxPQUFBSSxRRHBEN0I7QUFBQTtBQUFBO0FBQUEsS0FBQUMsVUN5RG9CO0FBQUEsS0FBQUM7QUFBQUEsT0FDZCxTQUFBTjtBQUFBQSxRQUNLLDhCQUFXO0FBQUEsU0FDWjtBQUFBLFFBRUE7QUFBQSxPQUFJO0FBQUE7QUFBQSxJRDlEZDtBQUFBLEtDb0VNO0FBQUE7QUFBQSxRQUFBTSxrQkFGQSxTQUFBTixHQUFTLG1CQUF5QjtBQUFBO0FBQUEsWUFBQU8sVUFBQVAsR0FLdEIsdUNBQWE7QUFBQSxZQUFBUSxjQUFBQztBQUFBQSxJQUs3QixZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUQ1RVg7QUFBQSw4QkM2RW9CO0FBQUEsS0Q3RXBCO0FBQUE7QUFBQSxHQzZFd0I7QUFBQSxPQUFBQyxRRDdFeEI7QUFBQSxZQUFBQyxpQkFBQVosR0FBQWE7QUFBQUEsUUFBQUMsSUNxRjBCLG9CQUFBQyxJQUFoQjtBQUFBLElBSmtCLDZCQUlhO0FBQUE7QUFBQSxZQUFBQyxZQUFBaEIsR0FBQWE7QUFBQUEsSUFHdkMsNERBQTZCO0FBQUE7QUFBQSxZQUFBSSxJQUFBRixHQUFBRCxHQUVWLG1DQUFvQjtBQUFBLFlBQUFJLElBQUFILEdBQUFELEdBQ3BCLHNDQUFvQjtBQUFBLE9BQUFLLE9EM0Z6QyxHQUFBQyxNQUFBO0FBQUEsWUFBQUMsYUFBQXJCLEdBQUFzQjtBQUFBQSxJQ2lHSyx3QkFDRSxxQ0FJa0M7QUFBQSxRQUFBQyxJQUZsQix1Q0FBQUMsSUFDTDtBQUFBLElBQ1gsd0NBQWtDO0FBQUE7QUFBQSxZQUFBQyxhQUFBekIsR0FBQXNCO0FBQUFBLElBRzVCLFdBQUwsU0FBSywwQkFBcUI7QUFBQTtBQUFBLFlBQUFJLFlBQUFDLE1BQUFaLEdBSVQsa0NBQStCO0FBQUEsWUFBQWEsS0FBQWIsR0FDM0MsK0JBQTRCO0FBQUE7QUFBQSxJQUFBYztBQUFBQSxNRDlHekMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxNjA5MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbnQ2NC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtJbnQ2NF06IDY0LWJpdCBpbnRlZ2VycyAqKVxuXG5leHRlcm5hbCBuZWcgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X25lZ1wiXG5leHRlcm5hbCBhZGQgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2FkZFwiXG5leHRlcm5hbCBzdWIgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X3N1YlwiXG5leHRlcm5hbCBtdWwgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X211bFwiXG5leHRlcm5hbCBkaXYgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2RpdlwiXG5leHRlcm5hbCByZW0gOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X21vZFwiXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2FuZFwiXG5leHRlcm5hbCBsb2dvciA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2xzbFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2FzclwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfbHNyXCJcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X29mX2ludFwiXG5leHRlcm5hbCB0b19pbnQgOiBpbnQ2NCAtPiBpbnQgPSBcIiVpbnQ2NF90b19pbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQ2NFxuICA9IFwiY2FtbF9pbnQ2NF9vZl9mbG9hdFwiIFwiY2FtbF9pbnQ2NF9vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfdG9fZmxvYXRcIiBcImNhbWxfaW50NjRfdG9fZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBvZl9pbnQzMiA6IGludDMyIC0+IGludDY0ID0gXCIlaW50NjRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzIgOiBpbnQ2NCAtPiBpbnQzMiA9IFwiJWludDY0X3RvX2ludDMyXCJcbmV4dGVybmFsIG9mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiBpbnQ2NCA9IFwiJWludDY0X29mX25hdGl2ZWludFwiXG5leHRlcm5hbCB0b19uYXRpdmVpbnQgOiBpbnQ2NCAtPiBuYXRpdmVpbnQgPSBcIiVpbnQ2NF90b19uYXRpdmVpbnRcIlxuXG5sZXQgemVybyA9IDBMXG5sZXQgb25lID0gMUxcbmxldCBtaW51c19vbmUgPSAtMUxcbmxldCBzdWNjIG4gPSBhZGQgbiAxTFxubGV0IHByZWQgbiA9IHN1YiBuIDFMXG5sZXQgYWJzIG4gPSBpZiBuID49IDBMIHRoZW4gbiBlbHNlIG5lZyBuXG5sZXQgbWluX2ludCA9IDB4ODAwMDAwMDAwMDAwMDAwMExcbmxldCBtYXhfaW50ID0gMHg3RkZGRkZGRkZGRkZGRkZGTFxubGV0IGxvZ25vdCBuID0gbG9neG9yIG4gKC0xTClcblxubGV0IHVuc2lnbmVkX3RvX2ludCA9XG4gIGxldCBtYXhfaW50ID0gb2ZfaW50IFN0ZGxpYi5tYXhfaW50IGluXG4gIGZ1biBuIC0+XG4gICAgaWYgbiA+PSAwTCAmJiBuIDw9IG1heF9pbnQgdGhlblxuICAgICAgU29tZSAodG9faW50IG4pXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5leHRlcm5hbCBmb3JtYXQgOiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0ID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cbmxldCBvZl9zdHJpbmdfb3B0IHMgPVxuICB0cnkgU29tZSAob2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50NjRfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbnR5cGUgdCA9IGludDY0XG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0geCA9IHlcblxubGV0IHVuc2lnbmVkX2NvbXBhcmUgbiBtID1cbiAgY29tcGFyZSAoc3ViIG4gbWluX2ludCkgKHN1YiBtIG1pbl9pbnQpXG5cbmxldCB1bnNpZ25lZF9sdCBuIG0gPVxuICBzdWIgbiBtaW5faW50IDwgc3ViIG0gbWluX2ludFxuXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuKCogVW5zaWduZWQgZGl2aXNpb24gZnJvbSBzaWduZWQgZGl2aXNpb24gb2YgdGhlIHNhbWUgYml0bmVzcy5cbiAgIFNlZSBXYXJyZW4gSnIuLCBIZW5yeSBTLiAoMjAxMykuIEhhY2tlcidzIERlbGlnaHQgKDIgZWQuKSwgU2VjIDktMy5cbiopXG5sZXQgdW5zaWduZWRfZGl2IG4gZCA9XG4gIGlmIGQgPCB6ZXJvIHRoZW5cbiAgICBpZiB1bnNpZ25lZF9sdCBuIGQgdGhlbiB6ZXJvIGVsc2Ugb25lXG4gIGVsc2VcbiAgICBsZXQgcSA9IHNoaWZ0X2xlZnQgKGRpdiAoc2hpZnRfcmlnaHRfbG9naWNhbCBuIDEpIGQpIDEgaW5cbiAgICBsZXQgciA9IHN1YiBuIChtdWwgcSBkKSBpblxuICAgIGlmIHVuc2lnbmVkX2x0IHIgZCB0aGVuIHEgZWxzZSBzdWNjIHFcblxubGV0IHVuc2lnbmVkX3JlbSBuIGQgPVxuICBzdWIgbiAobXVsICh1bnNpZ25lZF9kaXYgbiBkKSBkKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2dyZWF0ZXJlcXVhbCIsImNhbWxfaGFzaCIsImNhbWxfaW50NjRfYWRkIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X211bCIsImNhbWxfaW50NjRfc3ViIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsInplcm8iLCJvbmUiLCJtaW51c19vbmUiLCJtaW5faW50IiwibWF4X2ludCIsIlN0ZGxpYiIsInN1Y2MiLCJuIiwicHJlZCIsImFicyIsImxvZ25vdCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJzIiwiZXhuIiwiY29tcGFyZSIsIngiLCJ5IiwiZXF1YWwiLCJ1bnNpZ25lZF9jb21wYXJlIiwibSIsInVuc2lnbmVkX2x0IiwibWluIiwibWF4IiwidW5zaWduZWRfZGl2IiwiZCIsInEiLCJyIiwidW5zaWduZWRfcmVtIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDNkNhLDJCQUFRO0FBQUEsWUFBQUMsS0FBQUQsR0FDUiwyQkFBUTtBQUFBLFlBQUFFLElBQUFGO0FBQUFBLElBQ04scUNBQW9CLHlCQUFLO0FBQUE7QUFBQSxZQUFBRyxPQUFBSCxHQUd6QixtQ0FBYztBQUFBO0FBQUEsSUFBQUgsWUFHYjtBQUFBLFFBQ2Q7QUFBQSxZQUFBTyxnQkFBQUo7QUFBQUEsSUFDSyw4QkFBVztBQUFBLEtBQ1o7QUFBQSxJQUVBO0FBQUEsR0FBSTtBQUFBLFlBQUFLLFVBQUFMLEdBR1EseUNBQWE7QUFBQSxZQUFBTSxjQUFBQztBQUFBQSxJQUs3QixZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTURsRVg7QUFBQSw4QkNtRW9CO0FBQUEsS0RuRXBCO0FBQUE7QUFBQSxHQ21Fd0I7QUFBQSxZQUFBQyxRQUFBQyxHQUFBQyxHQVdJLCtCQUFrQjtBQUFBLE9BQUFDLFFBeEI1QztBQUFBLFlBQUFDLGlCQUFBYixHQUFBYztBQUFBQSxRQUFBSCxJQTRCd0IsNEJBQUFELElBQWhCO0FBQUEsSUFKa0IsK0JBSWE7QUFBQTtBQUFBLFlBQUFLLFlBQUFmLEdBQUFjO0FBQUFBLElBR3ZDO0FBQUEseUNBQWdCLDJCQUFhO0FBQUE7QUFBQSxZQUFBRSxJQUFBTixHQUFBQyxHQUVWLG1DQUFvQjtBQUFBLFlBQUFNLElBQUFQLEdBQUFDLEdBQ3BCLHNDQUFvQjtBQUFBLFlBQUFPLGFBQUFsQixHQUFBbUI7QUFBQUEsSUFNcEMsMkJBQ0UscUNBSWtDO0FBQUE7QUFBQSxLQUFBQztBQUFBQSxPQUY3QjtBQUFBLFNBQVc7QUFBQSxXQUFLO0FBQUE7QUFBQSxLQUFBQyxJQUNoQixrQkFBTTtBQUFBLElBQ1gsK0JBdERNLG9CQXNENEI7QUFBQTtBQUFBLFlBQUFDLGFBQUF0QixHQUFBbUI7QUFBQUEsSUFHNUIsT0FBWCxrQkFBTSxlQUFLLHVCQUFxQjtBQUFBO0FBQUEsWUFBQUksWUFBQUMsTUFBQWQsR0FJVCxrQ0FBK0I7QUFBQSxZQUFBZSxLQUFBZixHQUMzQywrQkFBNEI7QUFBQSxHQXJEdkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEdERGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTYxOTksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvbmF0aXZlaW50Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW05hdGl2ZWludF06IHByb2Nlc3Nvci1uYXRpdmUgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X25lZ1wiXG5leHRlcm5hbCBhZGQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FkZFwiXG5leHRlcm5hbCBzdWI6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X3N1YlwiXG5leHRlcm5hbCBtdWw6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X211bFwiXG5leHRlcm5hbCBkaXY6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2RpdlwiXG5leHRlcm5hbCByZW06IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X21vZFwiXG5leHRlcm5hbCBsb2dhbmQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FuZFwiXG5leHRlcm5hbCBsb2dvcjogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNsXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0OiBuYXRpdmVpbnQgLT4gaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNyXCJcbmV4dGVybmFsIG9mX2ludDogaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50OiBuYXRpdmVpbnQgLT4gaW50ID0gXCIlbmF0aXZlaW50X3RvX2ludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IG5hdGl2ZWludFxuICA9IFwiY2FtbF9uYXRpdmVpbnRfb2ZfZmxvYXRcIiBcImNhbWxfbmF0aXZlaW50X29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBuYXRpdmVpbnQgLT4gZmxvYXRcbiAgPSBcImNhbWxfbmF0aXZlaW50X3RvX2Zsb2F0XCIgXCJjYW1sX25hdGl2ZWludF90b19mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG9mX2ludDMyOiBpbnQzMiAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzI6IG5hdGl2ZWludCAtPiBpbnQzMiA9IFwiJW5hdGl2ZWludF90b19pbnQzMlwiXG5cbmxldCB6ZXJvID0gMG5cbmxldCBvbmUgPSAxblxubGV0IG1pbnVzX29uZSA9IC0xblxubGV0IHN1Y2MgbiA9IGFkZCBuIDFuXG5sZXQgcHJlZCBuID0gc3ViIG4gMW5cbmxldCBhYnMgbiA9IGlmIG4gPj0gMG4gdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBzaXplID0gU3lzLndvcmRfc2l6ZVxubGV0IG1pbl9pbnQgPSBzaGlmdF9sZWZ0IDFuIChzaXplIC0gMSlcbmxldCBtYXhfaW50ID0gc3ViIG1pbl9pbnQgMW5cbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMW4pXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICBmdW4gbiAtPlxuICAgIGlmIG4gPj0gMG4gJiYgbiA8PSBtYXhfaW50IHRoZW5cbiAgICAgIFNvbWUgKHRvX2ludCBuKVxuICAgIGVsc2VcbiAgICAgIE5vbmVcblxuZXh0ZXJuYWwgZm9ybWF0IDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmcgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nOiBzdHJpbmcgLT4gbmF0aXZlaW50ID0gXCJjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcIlxuXG5sZXQgb2Zfc3RyaW5nX29wdCBzID1cbiAgdHJ5IFNvbWUgKG9mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbnR5cGUgdCA9IG5hdGl2ZWludFxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IGNvbXBhcmUgeCB5ID0gMFxuXG5sZXQgdW5zaWduZWRfY29tcGFyZSBuIG0gPVxuICBjb21wYXJlIChzdWIgbiBtaW5faW50KSAoc3ViIG0gbWluX2ludClcblxubGV0IHVuc2lnbmVkX2x0IG4gbSA9XG4gIHN1YiBuIG1pbl9pbnQgPCBzdWIgbSBtaW5faW50XG5cbmxldCBtaW4geCB5IDogdCA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA6IHQgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG4oKiBVbnNpZ25lZCBkaXZpc2lvbiBmcm9tIHNpZ25lZCBkaXZpc2lvbiBvZiB0aGUgc2FtZSBiaXRuZXNzLlxuICAgU2VlIFdhcnJlbiBKci4sIEhlbnJ5IFMuICgyMDEzKS4gSGFja2VyJ3MgRGVsaWdodCAoMiBlZC4pLCBTZWMgOS0zLlxuKilcbmxldCB1bnNpZ25lZF9kaXYgbiBkID1cbiAgaWYgZCA8IHplcm8gdGhlblxuICAgIGlmIHVuc2lnbmVkX2x0IG4gZCB0aGVuIHplcm8gZWxzZSBvbmVcbiAgZWxzZVxuICAgIGxldCBxID0gc2hpZnRfbGVmdCAoZGl2IChzaGlmdF9yaWdodF9sb2dpY2FsIG4gMSkgZCkgMSBpblxuICAgIGxldCByID0gc3ViIG4gKG11bCBxIGQpIGluXG4gICAgaWYgdW5zaWduZWRfbHQgciBkIHRoZW4gcSBlbHNlIHN1Y2MgcVxuXG5sZXQgdW5zaWduZWRfcmVtIG4gZCA9XG4gIHN1YiBuIChtdWwgKHVuc2lnbmVkX2RpdiBuIGQpIGQpXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZ3JlYXRlcmVxdWFsIiwiY2FtbF9oYXNoIiwiY2FtbF9pbnRfY29tcGFyZSIsImNhbWxfbGVzc2VxdWFsIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbXVsIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX1N5cyIsInN1Y2MiLCJuIiwicHJlZCIsImFicyIsInNpemUiLCJtaW5faW50IiwibWF4X2ludCIsImxvZ25vdCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJzIiwiZXhuIiwiZXF1YWwiLCJ4IiwieSIsInVuc2lnbmVkX2NvbXBhcmUiLCJtIiwidW5zaWduZWRfbHQiLCJtaW4iLCJtYXgiLCJ6ZXJvIiwib25lIiwidW5zaWduZWRfZGl2IiwiZCIsInEiLCJyIiwidW5zaWduZWRfcmVtIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDMkNxQjtBQUFBLFlBQUFDLEtBQUFELEdBQ0E7QUFBQSxZQUFBRSxJQUFBRixHQUNOLDRDQUF5QjtBQUFBO0FBQUEsSUFBQUcsT0Q3Q3hDO0FBQUEsSUFBQUMsVUMrQ2M7QUFBQSxJQUFBQyxVQUNBO0FBQUEsWUFBQUMsT0FBQU4sR0FDZTtBQUFBLE9BQUFLLFlBR2I7QUFBQSxZQUFBRSxnQkFBQVA7QUFBQUEsSUFFVCw4QkFBVyw4QkFDWjtBQUFBLElBRUE7QUFBQSxHQUFJO0FBQUEsWUFBQVEsVUFBQVIsR0FHUSx1Q0FBYTtBQUFBLFlBQUFTLGNBQUFDO0FBQUFBLElBSzdCLFlBQVM7QUFBQSxVQUFBQztBQUFBQSxTQUFBQSxNRGpFWDtBQUFBLDhCQ2tFb0I7QUFBQSxLRGxFcEI7QUFBQTtBQUFBLEdDa0V3QjtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDLEdBSUksMkNBQ1MsQ0FBSTtBQUFBLFlBQUFDLGlCQUFBZixHQUFBZ0I7QUFBQUEsUUFBQUYsSUFHZixpQkFBQUQsSUFBaEI7QUFBQSxJQUprQiw2QkFJYTtBQUFBO0FBQUEsWUFBQUksWUFBQWpCLEdBQUFnQjtBQUFBQSxJQUd2QyxzREFBNkI7QUFBQTtBQUFBLFlBQUFFLElBQUFMLEdBQUFDLEdBRVYsbUNBQW9CO0FBQUEsWUFBQUssSUFBQU4sR0FBQUMsR0FDcEIsc0NBQW9CO0FBQUEsT0FBQU0sT0RoRnpDLEdBQUFDLE1BQUE7QUFBQSxZQUFBQyxhQUFBdEIsR0FBQXVCO0FBQUFBLElDc0ZLLHdCQUNFLHFDQUlrQztBQUFBLFFBQUFDLElBRmxCLHVDQUFBQyxJQUNMO0FBQUEsSUFDWCx3Q0FBa0M7QUFBQTtBQUFBLFlBQUFDLGFBQUExQixHQUFBdUI7QUFBQUEsSUFHNUIsV0FBTCxTQUFLLDBCQUFxQjtBQUFBO0FBQUEsWUFBQUksWUFBQUMsTUFBQWYsR0FJVCxrQ0FBK0I7QUFBQSxZQUFBZ0IsS0FBQWhCLEdBQzNDLCtCQUE0QjtBQUFBLEdBOUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJERiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE2MjkwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL3NldC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU2V0cyBvdmVyIG9yZGVyZWQgdHlwZXMgKilcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUgZWx0XG4gICAgdHlwZSB0XG4gICAgdmFsIGVtcHR5OiB0XG4gICAgdmFsIGFkZDogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCBzaW5nbGV0b246IGVsdCAtPiB0XG4gICAgdmFsIHJlbW92ZTogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCB1bmlvbjogdCAtPiB0IC0+IHRcbiAgICB2YWwgaW50ZXI6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGRpc2pvaW50OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBkaWZmOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBjYXJkaW5hbDogdCAtPiBpbnRcbiAgICB2YWwgZWxlbWVudHM6IHQgLT4gZWx0IGxpc3RcbiAgICB2YWwgbWluX2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWluX2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBtYXhfZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtYXhfZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGNob29zZTogdCAtPiBlbHRcbiAgICB2YWwgY2hvb3NlX29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgaXRlcjogKGVsdCAtPiB1bml0KSAtPiB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZmlsdGVyOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdFxuICAgIHZhbCBmaWx0ZXJfbWFwOiAoZWx0IC0+IGVsdCBvcHRpb24pIC0+IHQgLT4gdFxuICAgIHZhbCBwYXJ0aXRpb246IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0ICogdFxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGlzX2VtcHR5OiB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBlbHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gICAgdmFsIHN1YnNldDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZm9yX2FsbDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZXhpc3RzOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCB0b19saXN0IDogdCAtPiBlbHQgbGlzdFxuICAgIHZhbCBvZl9saXN0OiBlbHQgbGlzdCAtPiB0XG4gICAgdmFsIHRvX3NlcV9mcm9tIDogZWx0IC0+IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIHRvX3NlcSA6IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIHRvX3Jldl9zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogZWx0IFNlcS50IC0+IHQgLT4gdFxuICAgIHZhbCBvZl9zZXEgOiBlbHQgU2VxLnQgLT4gdFxuICBlbmRcblxubW9kdWxlIE1ha2UoT3JkOiBPcmRlcmVkVHlwZSkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGVsdCA9IE9yZC50XG4gICAgdHlwZSB0ID0gRW1wdHkgfCBOb2RlIG9mIHtsOnQ7IHY6ZWx0OyByOnQ7IGg6aW50fVxuXG4gICAgKCogU2V0cyBhcmUgcmVwcmVzZW50ZWQgYnkgYmFsYW5jZWQgYmluYXJ5IHRyZWVzICh0aGUgaGVpZ2h0cyBvZiB0aGVcbiAgICAgICBjaGlsZHJlbiBkaWZmZXIgYnkgYXQgbW9zdCAyICopXG5cbiAgICBsZXQgaGVpZ2h0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtofSAtPiBoXG5cbiAgICAoKiBDcmVhdGVzIGEgbmV3IG5vZGUgd2l0aCBsZWZ0IHNvbiBsLCB2YWx1ZSB2IGFuZCByaWdodCBzb24gci5cbiAgICAgICBXZSBtdXN0IGhhdmUgYWxsIGVsZW1lbnRzIG9mIGwgPCB2IDwgYWxsIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgbCBhbmQgciBtdXN0IGJlIGJhbGFuY2VkIGFuZCB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLlxuICAgICAgIElubGluZSBleHBhbnNpb24gb2YgaGVpZ2h0IGZvciBiZXR0ZXIgc3BlZWQuICopXG5cbiAgICBsZXQgY3JlYXRlIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBOb2Rle2w7IHY7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgICgqIFNhbWUgYXMgY3JlYXRlLCBidXQgcGVyZm9ybXMgb25lIHN0ZXAgb2YgcmViYWxhbmNpbmcgaWYgbmVjZXNzYXJ5LlxuICAgICAgIEFzc3VtZXMgbCBhbmQgciBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMy5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGNyZWF0ZSBmb3IgYmV0dGVyIHNwZWVkIGluIHRoZSBtb3N0IGZyZXF1ZW50IGNhc2VcbiAgICAgICB3aGVyZSBubyByZWJhbGFuY2luZyBpcyByZXF1aXJlZC4gKilcblxuICAgIGxldCBiYWwgbCB2IHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGlmIGhsID4gaHIgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9bGw7IHY9bHY7IHI9bHJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgbGwgPj0gaGVpZ2h0IGxyIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIGxsIGx2IChjcmVhdGUgbHIgdiByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgcj1scnJ9LT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGxsIGx2IGxybCkgbHJ2IChjcmVhdGUgbHJyIHYgcilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2UgaWYgaHIgPiBobCArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCByIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1ybDsgdj1ydjsgcj1ycn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCByciA+PSBoZWlnaHQgcmwgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmwpIHJ2IHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyByPXJscn0gLT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgdiBybGwpIHJsdiAoY3JlYXRlIHJsciBydiBycilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2VcbiAgICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBJbnNlcnRpb24gb2Ygb25lIGVsZW1lbnQgKilcblxuICAgIGxldCByZWMgYWRkIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdCBlbHNlXG4gICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gYWRkIHggbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHQgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gYWRkIHggciBpblxuICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHQgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgc2luZ2xldG9uIHggPSBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCB2IGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGVsZW1lbnRzIGluIHRoZSB0cmVlOyBpdFxuICAgICAgIGRvZXMgbm90IHRlc3QgZm9yIGVxdWFsaXR5IHdpdGggdGhlIGN1cnJlbnQgbWluIChvciBtYXgpIGVsZW1lbnQuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCAoYWRkX21pbl9lbGVtZW50IHggbCkgdiByXG5cbiAgICBsZXQgcmVjIGFkZF9tYXhfZWxlbWVudCB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiAoYWRkX21heF9lbGVtZW50IHggcilcblxuICAgICgqIFNhbWUgYXMgY3JlYXRlIGFuZCBiYWwsIGJ1dCBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSBvbiB0aGVcbiAgICAgICByZWxhdGl2ZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgcmVjIGpvaW4gbCB2IHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2VsZW1lbnQgdiByXG4gICAgICB8IChfLCBFbXB0eSkgLT4gYWRkX21heF9lbGVtZW50IHYgbFxuICAgICAgfCAoTm9kZXtsPWxsOyB2PWx2OyByPWxyOyBoPWxofSwgTm9kZXtsPXJsOyB2PXJ2OyByPXJyOyBoPXJofSkgLT5cbiAgICAgICAgICBpZiBsaCA+IHJoICsgMiB0aGVuIGJhbCBsbCBsdiAoam9pbiBsciB2IHIpIGVsc2VcbiAgICAgICAgICBpZiByaCA+IGxoICsgMiB0aGVuIGJhbCAoam9pbiBsIHYgcmwpIHJ2IHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IHJcblxuICAgICgqIFNtYWxsZXN0IGFuZCBncmVhdGVzdCBlbGVtZW50IG9mIGEgc2V0ICopXG5cbiAgICBsZXQgcmVjIG1pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiB2XG4gICAgICB8IE5vZGV7bH0gLT4gbWluX2VsdCBsXG5cbiAgICBsZXQgcmVjIG1pbl9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHZ9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHRfb3B0IGxcblxuICAgIGxldCByZWMgbWF4X2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IHZcbiAgICAgIHwgTm9kZXtyfSAtPiBtYXhfZWx0IHJcblxuICAgIGxldCByZWMgbWF4X2VsdF9vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7djsgcj1FbXB0eX0gLT4gU29tZSB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdF9vcHQgclxuXG4gICAgKCogUmVtb3ZlIHRoZSBzbWFsbGVzdCBlbGVtZW50IG9mIHRoZSBnaXZlbiBzZXQgKilcblxuICAgIGxldCByZWMgcmVtb3ZlX21pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5yZW1vdmVfbWluX2VsdFwiXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGJhbCAocmVtb3ZlX21pbl9lbHQgbCkgdiByXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgQXNzdW1lIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDIuICopXG5cbiAgICBsZXQgbWVyZ2UgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiBiYWwgdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBObyBhc3N1bXB0aW9uIG9uIHRoZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gam9pbiB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgKCogU3BsaXR0aW5nLiAgc3BsaXQgeCBzIHJldHVybnMgYSB0cmlwbGUgKGwsIHByZXNlbnQsIHIpIHdoZXJlXG4gICAgICAgIC0gbCBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPCB4XG4gICAgICAgIC0gciBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPiB4XG4gICAgICAgIC0gcHJlc2VudCBpcyBmYWxzZSBpZiBzIGNvbnRhaW5zIG5vIGVsZW1lbnQgZXF1YWwgdG8geCxcbiAgICAgICAgICBvciB0cnVlIGlmIHMgY29udGFpbnMgYW4gZWxlbWVudCBlcXVhbCB0byB4LiAqKVxuXG4gICAgbGV0IHJlYyBzcGxpdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAoRW1wdHksIGZhbHNlLCBFbXB0eSlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiAobCwgdHJ1ZSwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiByKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobHIsIHByZXMsIHJyKSA9IHNwbGl0IHggciBpbiAoam9pbiBsIHYgbHIsIHByZXMsIHJyKVxuXG4gICAgKCogSW1wbGVtZW50YXRpb24gb2YgdGhlIHNldCBvcGVyYXRpb25zICopXG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBjID0gMCB8fCBtZW0geCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgcmVtb3ZlIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSBhcyB0KSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBtZXJnZSBsIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICAgIGxldCBsbCA9IHJlbW92ZSB4IGwgaW5cbiAgICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCByciA9IHJlbW92ZSB4IHIgaW5cbiAgICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgcmVjIHVuaW9uIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0MikgLT4gdDJcbiAgICAgIHwgKHQxLCBFbXB0eSkgLT4gdDFcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMTsgaD1oMX0sIE5vZGV7bD1sMjsgdj12Mjsgcj1yMjsgaD1oMn0pIC0+XG4gICAgICAgICAgaWYgaDEgPj0gaDIgdGhlblxuICAgICAgICAgICAgaWYgaDIgPSAxIHRoZW4gYWRkIHYyIHMxIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbGV0IChsMiwgXywgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICAgICAgam9pbiAodW5pb24gbDEgbDIpIHYxICh1bmlvbiByMSByMilcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIGgxID0gMSB0aGVuIGFkZCB2MSBzMiBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDEsIF8sIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MiAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcblxuICAgIGxldCByZWMgaW50ZXIgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8IChfLCBFbXB0eSkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIG1hdGNoIHNwbGl0IHYxIHQyIHdpdGhcbiAgICAgICAgICAgIChsMiwgZmFsc2UsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGludGVyIGwxIGwyKSAoaW50ZXIgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBqb2luIChpbnRlciBsMSBsMikgdjEgKGludGVyIHIxIHIyKVxuXG4gICAgKCogU2FtZSBhcyBzcGxpdCwgYnV0IGNvbXB1dGUgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWVzXG4gICAgICAgb25seSBpZiB0aGUgcGl2b3QgZWxlbWVudCBpcyBub3QgaW4gdGhlIHNldC4gIFRoZSByaWdodCBzdWJ0cmVlXG4gICAgICAgaXMgY29tcHV0ZWQgb24gZGVtYW5kLiAqKVxuXG4gICAgdHlwZSBzcGxpdF9iaXMgPVxuICAgICAgfCBGb3VuZFxuICAgICAgfCBOb3RGb3VuZCBvZiB0ICogKHVuaXQgLT4gdClcblxuICAgIGxldCByZWMgc3BsaXRfYmlzIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vdEZvdW5kIChFbXB0eSwgKGZ1biAoKSAtPiBFbXB0eSkpXG4gICAgICB8IE5vZGV7bDsgdjsgcjsgX30gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gRm91bmRcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IGwgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobGwsIHJsKSAtPiBOb3RGb3VuZCAobGwsIChmdW4gKCkgLT4gam9pbiAocmwgKCkpIHYgcikpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbWF0Y2ggc3BsaXRfYmlzIHggciB3aXRoXG4gICAgICAgICAgICB8IEZvdW5kIC0+IEZvdW5kXG4gICAgICAgICAgICB8IE5vdEZvdW5kIChsciwgcnIpIC0+IE5vdEZvdW5kIChqb2luIGwgdiBsciwgcnIpXG5cbiAgICBsZXQgcmVjIGRpc2pvaW50IHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSB8IChfLCBFbXB0eSkgLT4gdHJ1ZVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgaWYgczEgPT0gczIgdGhlbiBmYWxzZVxuICAgICAgICAgIGVsc2UgbWF0Y2ggc3BsaXRfYmlzIHYxIHQyIHdpdGhcbiAgICAgICAgICAgICAgTm90Rm91bmQobDIsIHIyKSAtPiBkaXNqb2ludCBsMSBsMiAmJiBkaXNqb2ludCByMSAocjIgKCkpXG4gICAgICAgICAgICB8IEZvdW5kIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIGRpZmYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoZGlmZiBsMSBsMikgdjEgKGRpZmYgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGRpZmYgbDEgbDIpIChkaWZmIHIxIHIyKVxuXG4gICAgdHlwZSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2YgZWx0ICogdCAqIGVudW1lcmF0aW9uXG5cbiAgICBsZXQgcmVjIGNvbnNfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCByLCBlKSlcblxuICAgIGxldCByZWMgY29tcGFyZV9hdXggZTEgZTIgPVxuICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgIChFbmQsIEVuZCkgLT4gMFxuICAgICAgfCAoRW5kLCBfKSAgLT4gLTFcbiAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgfCAoTW9yZSh2MSwgcjEsIGUxKSwgTW9yZSh2MiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgaWYgYyA8PiAwXG4gICAgICAgICAgdGhlbiBjXG4gICAgICAgICAgZWxzZSBjb21wYXJlX2F1eCAoY29uc19lbnVtIHIxIGUxKSAoY29uc19lbnVtIHIyIGUyKVxuXG4gICAgbGV0IGNvbXBhcmUgczEgczIgPVxuICAgICAgY29tcGFyZV9hdXggKGNvbnNfZW51bSBzMSBFbmQpIChjb25zX2VudW0gczIgRW5kKVxuXG4gICAgbGV0IGVxdWFsIHMxIHMyID1cbiAgICAgIGNvbXBhcmUgczEgczIgPSAwXG5cbiAgICBsZXQgcmVjIHN1YnNldCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIEVtcHR5LCBfIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBfLCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IE5vZGUge2w9bDE7IHY9djE7IHI9cjF9LCAoTm9kZSB7bD1sMjsgdj12Mjsgcj1yMn0gYXMgdDIpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCBsMSBsMiAmJiBzdWJzZXQgcjEgcjJcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1sMTsgdj12MTsgcj1FbXB0eTsgaD0wfSkgbDIgJiYgc3Vic2V0IHIxIHQyXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3Vic2V0IChOb2RlIHtsPUVtcHR5OyB2PXYxOyByPXIxOyBoPTB9KSByMiAmJiBzdWJzZXQgbDEgdDJcblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBpdGVyIGYgbDsgZiB2OyBpdGVyIGYgclxuXG4gICAgbGV0IHJlYyBmb2xkIGYgcyBhY2N1ID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gZm9sZCBmIHIgKGYgdiAoZm9sZCBmIGwgYWNjdSkpXG5cbiAgICBsZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHRydWVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgJiYgZm9yX2FsbCBwIGwgJiYgZm9yX2FsbCBwIHJcblxuICAgIGxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHAgdiB8fCBleGlzdHMgcCBsIHx8IGV4aXN0cyBwIHJcblxuICAgIGxldCByZWMgZmlsdGVyIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSkgYXMgdCAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyIHAgbCBpblxuICAgICAgICAgIGxldCBwdiA9IHAgdiBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlciBwIHIgaW5cbiAgICAgICAgICBpZiBwdiB0aGVuXG4gICAgICAgICAgICBpZiBsPT1sJyAmJiByPT1yJyB0aGVuIHQgZWxzZSBqb2luIGwnIHYgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBwYXJ0aXRpb24gcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IChFbXB0eSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZcbiAgICAgICAgICB0aGVuIChqb2luIGx0IHYgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiByZilcblxuICAgIGxldCByZWMgY2FyZGluYWwgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGV7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGVsZW1lbnRzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGVsZW1lbnRzX2F1eCAodiA6OiBlbGVtZW50c19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgZWxlbWVudHMgcyA9XG4gICAgICBlbGVtZW50c19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9lbHRcblxuICAgIGxldCBjaG9vc2Vfb3B0ID0gbWluX2VsdF9vcHRcblxuICAgIGxldCByZWMgZmluZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdlxuICAgICAgICAgIGVsc2UgZmluZCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3RfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX29wdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFNvbWUgdlxuICAgICAgICAgIGVsc2UgZmluZF9vcHQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCB0cnlfam9pbiBsIHYgciA9XG4gICAgICAoKiBbam9pbiBsIHYgcl0gY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gKGVsZW1lbnRzIG9mIGwgPCB2IDxcbiAgICAgICAgIGVsZW1lbnRzIG9mIHIpOyB1c2UgW3RyeV9qb2luIGwgdiByXSB3aGVuIHRoaXMgcHJvcGVydHkgbWF5XG4gICAgICAgICBub3QgaG9sZCwgYnV0IHlvdSBob3BlIGl0IGRvZXMgaG9sZCBpbiB0aGUgY29tbW9uIGNhc2UgKilcbiAgICAgIGlmIChsID0gRW1wdHkgfHwgT3JkLmNvbXBhcmUgKG1heF9lbHQgbCkgdiA8IDApXG4gICAgICAmJiAociA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIHYgKG1pbl9lbHQgcikgPCAwKVxuICAgICAgdGhlbiBqb2luIGwgdiByXG4gICAgICBlbHNlIHVuaW9uIGwgKGFkZCB2IHIpXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gbWFwIGYgbCBpblxuICAgICAgICAgbGV0IHYnID0gZiB2IGluXG4gICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgIGVsc2UgdHJ5X2pvaW4gbCcgdicgcidcblxuICAgIGxldCB0cnlfY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gdHJ5X2pvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgIGxldCByZWMgZmlsdGVyX21hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gZmlsdGVyX21hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gZmlsdGVyX21hcCBmIHIgaW5cbiAgICAgICAgIGJlZ2luIG1hdGNoIHYnIHdpdGhcbiAgICAgICAgICAgfCBTb21lIHYnIC0+XG4gICAgICAgICAgICAgIGlmIGwgPT0gbCcgJiYgdiA9PSB2JyAmJiByID09IHInIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG4gICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICB0cnlfY29uY2F0IGwnIHInXG4gICAgICAgICBlbmRcblxuICAgIGxldCBvZl9zb3J0ZWRfbGlzdCBsID1cbiAgICAgIGxldCByZWMgc3ViIG4gbCA9XG4gICAgICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgICAgICB8IDAsIGwgLT4gRW1wdHksIGxcbiAgICAgICAgfCAxLCB4MCA6OiBsIC0+IE5vZGUge2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX0sIGxcbiAgICAgICAgfCAyLCB4MCA6OiB4MSA6OiBsIC0+XG4gICAgICAgICAgICBOb2Rle2w9Tm9kZXtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9OyB2PXgxOyByPUVtcHR5OyBoPTJ9LCBsXG4gICAgICAgIHwgMywgeDAgOjogeDEgOjogeDIgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTtcbiAgICAgICAgICAgICAgICAgcj1Ob2Rle2w9RW1wdHk7IHY9eDI7IHI9RW1wdHk7IGg9MX07IGg9Mn0sIGxcbiAgICAgICAgfCBuLCBsIC0+XG4gICAgICAgICAgbGV0IG5sID0gbiAvIDIgaW5cbiAgICAgICAgICBsZXQgbGVmdCwgbCA9IHN1YiBubCBsIGluXG4gICAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IG1pZCA6OiBsIC0+XG4gICAgICAgICAgICBsZXQgcmlnaHQsIGwgPSBzdWIgKG4gLSBubCAtIDEpIGwgaW5cbiAgICAgICAgICAgIGNyZWF0ZSBsZWZ0IG1pZCByaWdodCwgbFxuICAgICAgaW5cbiAgICAgIGZzdCAoc3ViIChMaXN0Lmxlbmd0aCBsKSBsKVxuXG4gICAgbGV0IHRvX2xpc3QgPSBlbGVtZW50c1xuXG4gICAgbGV0IG9mX2xpc3QgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gZW1wdHlcbiAgICAgIHwgW3gwXSAtPiBzaW5nbGV0b24geDBcbiAgICAgIHwgW3gwOyB4MV0gLT4gYWRkIHgxIChzaW5nbGV0b24geDApXG4gICAgICB8IFt4MDsgeDE7IHgyXSAtPiBhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzXSAtPiBhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzOyB4NF0gLT4gYWRkIHg0IChhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSkpXG4gICAgICB8IF8gLT4gb2Zfc29ydGVkX2xpc3QgKExpc3Quc29ydF91bmlxIE9yZC5jb21wYXJlIGwpXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIHMgeCAtPiBhZGQgeCBzKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgYyA9IHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHJlYyBzbm9jX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gc25vY19lbnVtIHIgKE1vcmUodiwgbCwgZSkpXG5cbiAgICBsZXQgcmVjIHJldl9zZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fcmV2X3NlcSBjID0gcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBzID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBzIGMgPSBtYXRjaCBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgcjsgdjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBzIEVuZClcbiAgZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfTGlzdCIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliX1NldCIsIk9yZCIsImhlaWdodCIsInBhcmFtIiwiaCIsImNyZWF0ZSIsImwiLCJ2IiwiciIsImhsIiwiaHIiLCJiYWwiLCJjc3RfU2V0X2JhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsImFkZCIsIngiLCJ0IiwiYyIsInNpbmdsZXRvbiIsImFkZF9taW5fZWxlbWVudCIsImFkZF9tYXhfZWxlbWVudCIsImpvaW4iLCJyaCIsImxoIiwibWluX2VsdCIsIm1pbl9lbHRfb3B0IiwibWF4X2VsdCIsIm1heF9lbHRfb3B0IiwicmVtb3ZlX21pbl9lbHQiLCJjb25jYXQiLCJ0MSIsInQyIiwic3BsaXQiLCJtYXRjaCIsInByZXMiLCJpc19lbXB0eSIsIm1lbSIsInJlbW92ZSIsInVuaW9uIiwiczEiLCJzMiIsImgyIiwicjIiLCJ2MiIsImwyIiwiaDEiLCJyMSIsInYxIiwibDEiLCJpbnRlciIsInNwbGl0X2JpcyIsImRpc2pvaW50IiwiZGlmZiIsImNvbnNfZW51bSIsInMiLCJlIiwiY29tcGFyZSIsImUyIiwiZTEiLCJlcXVhbCIsInN1YnNldCIsIml0ZXIiLCJmb2xkIiwiYWNjdSIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiZmlsdGVyIiwicHYiLCJwYXJ0aXRpb24iLCJsZiIsImx0IiwicmYiLCJydCIsImNhcmRpbmFsIiwiZWxlbWVudHNfYXV4IiwiZWxlbWVudHMiLCJmaW5kIiwiZmluZF9maXJzdCIsInYwIiwiZmluZF9maXJzdF9vcHQiLCJmaW5kX2xhc3QiLCJmaW5kX2xhc3Rfb3B0IiwiZmluZF9vcHQiLCJ0cnlfam9pbiIsIm1hcCIsImZpbHRlcl9tYXAiLCJlbXB0eSIsIm9mX2xpc3QiLCJ4MCIsIngxIiwieDIiLCJ4MyIsInN1YiIsIm4iLCJubCIsImxlZnQiLCJtaWQiLCJyaWdodCIsIng0IiwiYWRkX3NlcSIsImkiLCJtIiwib2Zfc2VxIiwic2VxX29mX2VudW0iLCJyZXN0IiwidG9fc2VxIiwic25vY19lbnVtIiwicmV2X3NlcV9vZl9lbnVtIiwidG9fcmV2X3NlcSIsInRvX3NlcV9mcm9tIiwibG93Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQSxnQkFBQUM7QUFBQUEsaUJBQUFDLE9BQUFDO0FBQUFBLFNDZ0ZpQixZQUNBO0FBQUEsYUFBQUMsSUFEQTtBQUFBLFNBRUc7QUFBQSxRQUFDO0FBQUEsaUJBQUFDLE9BQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFNBUWYsVUFBQUosSUFBQSxNQUFBSyxLQUErQyxZQUFBQSxLQUFoQjtBQUFBLFNBQy9CLFVBQUFMLE1BQUEs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QUYsR0FFekIsd0JBQWU7QUFBQSxpQkFBQUcsWUFBQXZGLEdBQUF6QjtBQUFBQSxTQUVGLFFBQ2pCO0FBQUEsYUFBQWlILE9BRGlCLE1BQUF6RixJQUFBLE1BQUFELElBQUEsVUFFdUI7QUFBQSxTQUFrQiwwQkFBL0IsMkJBQStCO0FBQUEsUUFBQztBQUFBLGlCQUFBMkYsT0FBQXpGO0FBQUFBLGFBQUEsSUFFMUM7QUFBQSxTQUFpQjtBQUFBO0FBQUEsaUJBQUEwRixVQUFBckQsS0FBQUM7QUFBQUEsYUFBQUQsSUFHM0MsS0FBQUMsSUFBQTtBQUFBO0FBQUEsa0JBQ1c7QUFBQSxjQUFBMUQsSUFEWCxNQUFBRCxJQUFBLE1BQUFELElBQUEsTUFBQTRELE1BRW1CO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBMkI7QUFBQSxpQkFBQXFELGdCQUFBM0YsR0FBQXpCO0FBQUFBLFNBRWhCLFFBQ3JCO0FBQUEsYUFBQWlILE9BRHFCLE1BQUF6RixJQUFBLE1BQUFELElBQUEsVUFFdUI7QUFBQSxTQUFrQiwwQkFBbkMsK0JBQW1DO0FBQUEsUUFBQztBQUFBLGlCQUFBOEYsV0FBQTVGO0FBQUFBLGFBQUEsSUFFdEM7QUFBQSxTQUFpQjtBQUFBO0FBQUEsaUJBQUE2RixZQUFBQyxLQUFBekQ7QUFBQUE7QUFBQUE7QUFBQUEsY0FBQUEsTUFZdEMsR0FBQXJDLElBQUE7QUFBQTtBQUFBLFdBVFM7QUFBQTtBQUFBLFlBQUFwQixJQUFBO0FBQUEsWUFBQUQsSUFBQTtBQUFBLFlBQUFELElBQUE7QUFBQSxZQUFBbUcsSUFHSjtBQUFBLFdBQWlCO0FBQUEsV0FFbEIsZUFBQTdFLE1BQ0Ysc0NBREU7QUFBQTtBQUFBLGtCQURGO0FBQUE7QUFBQSxTQUthO0FBQUE7QUFBQSxRRDdtQmxDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTcwNTEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvbWFwLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICErJ2EgdFxuICAgIHZhbCBlbXB0eTogJ2EgdFxuICAgIHZhbCBhZGQ6IGtleSAtPiAnYSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkX3RvX2xpc3Q6IGtleSAtPiAnYSAtPiAnYSBsaXN0IHQgLT4gJ2EgbGlzdCB0XG4gICAgdmFsIHVwZGF0ZToga2V5IC0+ICgnYSBvcHRpb24gLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgc2luZ2xldG9uOiBrZXkgLT4gJ2EgLT4gJ2EgdFxuICAgIHZhbCByZW1vdmU6IGtleSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgbWVyZ2U6XG4gICAgICAoa2V5IC0+ICdhIG9wdGlvbiAtPiAnYiBvcHRpb24gLT4gJ2Mgb3B0aW9uKSAtPlxuICAgICAgJ2EgdCAtPiAnYiB0IC0+ICdjIHRcbiAgICB2YWwgdW5pb246IChrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBjYXJkaW5hbDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgYmluZGluZ3M6ICdhIHQgLT4gKGtleSAqICdhKSBsaXN0XG4gICAgdmFsIG1pbl9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWluX2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIG1heF9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWF4X2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIGNob29zZTogJ2EgdCAtPiAoa2V5ICogJ2EpXG4gICAgdmFsIGNob29zZV9vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgZmluZDoga2V5IC0+ICdhIHQgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6IGtleSAtPiAnYSB0IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4ga2V5ICogJ2FcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiBrZXkgKiAnYVxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBtYXA6ICgnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiB0XG4gICAgdmFsIG1hcGk6IChrZXkgLT4gJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCBmaWx0ZXI6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGZpbHRlcl9tYXA6IChrZXkgLT4gJ2EgLT4gJ2Igb3B0aW9uKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgcGFydGl0aW9uOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdCAqICdhIHRcbiAgICB2YWwgc3BsaXQ6IGtleSAtPiAnYSB0IC0+ICdhIHQgKiAnYSBvcHRpb24gKiAnYSB0XG4gICAgdmFsIGlzX2VtcHR5OiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBrZXkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGVxdWFsOiAoJ2EgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgY29tcGFyZTogKCdhIC0+ICdhIC0+IGludCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGludFxuICAgIHZhbCBmb3JfYWxsOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIHRvX2xpc3QgOiAnYSB0IC0+IChrZXkgKiAnYSkgbGlzdFxuICAgIHZhbCBvZl9saXN0IDogKGtleSAqICdhKSBsaXN0IC0+ICdhIHRcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3Jldl9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2Zyb20gOiBrZXkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID0gc3RydWN0XG5cbiAgICB0eXBlIGtleSA9IE9yZC50XG5cbiAgICB0eXBlICdhIHQgPVxuICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIG9mIHtsOidhIHQ7IHY6a2V5OyBkOidhOyByOidhIHQ7IGg6aW50fVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgbGV0IGNyZWF0ZSBsIHggZCByID1cbiAgICAgIGxldCBobCA9IGhlaWdodCBsIGFuZCBociA9IGhlaWdodCByIGluXG4gICAgICBOb2Rle2w7IHY9eDsgZDsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgbGV0IHNpbmdsZXRvbiB4IGQgPSBOb2Rle2w9RW1wdHk7IHY9eDsgZDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgbGV0IGJhbCBsIHggZCByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyBkPWxkOyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiBsZCAoY3JlYXRlIGxyIHggZCByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgZD1scmQ7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBsZCBscmwpIGxydiBscmQgKGNyZWF0ZSBscnIgeCBkIHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IGQ9cmQ7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB4IGQgcmwpIHJ2IHJkIHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyBkPXJsZDsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHggZCBybGwpIHJsdiBybGQgKGNyZWF0ZSBybHIgcnYgcmQgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdj14OyBkOyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgYWRkIHggZGF0YSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9kZXtsPUVtcHR5OyB2PXg7IGQ9ZGF0YTsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSBhcyBtIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBpZiBkID09IGRhdGEgdGhlbiBtIGVsc2UgTm9kZXtsOyB2PXg7IGQ9ZGF0YTsgcjsgaH1cbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGRhdGEgbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSBhZGQgeCBkYXRhIHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIGRcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGQwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZDAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGQwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZDAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIGRcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIG1pbl9iaW5kaW5nID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHY7IGR9IC0+ICh2LCBkKVxuICAgICAgfCBOb2RlIHtsfSAtPiBtaW5fYmluZGluZyBsXG5cbiAgICBsZXQgcmVjIG1pbl9iaW5kaW5nX29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgdjsgZH0gLT4gU29tZSAodiwgZClcbiAgICAgIHwgTm9kZSB7bH0tPiBtaW5fYmluZGluZ19vcHQgbFxuXG4gICAgbGV0IHJlYyBtYXhfYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHt2OyBkOyByPUVtcHR5fSAtPiAodiwgZClcbiAgICAgIHwgTm9kZSB7cn0gLT4gbWF4X2JpbmRpbmcgclxuXG4gICAgbGV0IHJlYyBtYXhfYmluZGluZ19vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGUge3Y7IGQ7IHI9RW1wdHl9IC0+IFNvbWUgKHYsIGQpXG4gICAgICB8IE5vZGUge3J9IC0+IG1heF9iaW5kaW5nX29wdCByXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLnJlbW92ZV9taW5fZWx0XCJcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiYWwgKHJlbW92ZV9taW5fYmluZGluZyBsKSB2IGQgclxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT5cbiAgICAgICAgICBsZXQgKHgsIGQpID0gbWluX2JpbmRpbmcgdDIgaW5cbiAgICAgICAgICBiYWwgdDEgeCBkIChyZW1vdmVfbWluX2JpbmRpbmcgdDIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCAoTm9kZSB7bDsgdjsgZDsgcn0gYXMgbSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gcmVtb3ZlIHggciBpbiBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyB1cGRhdGUgeCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBmIE5vbmUgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBFbXB0eVxuICAgICAgICAgIHwgU29tZSBkYXRhIC0+IE5vZGV7bD1FbXB0eTsgdj14OyBkPWRhdGE7IHI9RW1wdHk7IGg9MX1cbiAgICAgICAgICBlbmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gYXMgbSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBiZWdpblxuICAgICAgICAgICAgbWF0Y2ggZiAoU29tZSBkKSB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gbWVyZ2UgbCByXG4gICAgICAgICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgICAgICAgIGlmIGQgPT0gZGF0YSB0aGVuIG0gZWxzZSBOb2Rle2w7IHY9eDsgZD1kYXRhOyByOyBofVxuICAgICAgICAgIGVuZCBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IHVwZGF0ZSB4IGYgbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSB1cGRhdGUgeCBmIHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgYWRkX3RvX2xpc3QgeCBkYXRhIG0gPVxuICAgICAgbGV0IGFkZCA9IGZ1bmN0aW9uIE5vbmUgLT4gU29tZSBbZGF0YV0gfCBTb21lIGwgLT4gU29tZSAoZGF0YSA6OiBsKSBpblxuICAgICAgdXBkYXRlIHggYWRkIG1cblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpdGVyIGYgbDsgZiB2IGQ7IGl0ZXIgZiByXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSAtPlxuICAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgICBsZXQgZCcgPSBmIGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICAgTm9kZXtsPWwnOyB2OyBkPWQnOyByPXInOyBofVxuXG4gICAgbGV0IHJlYyBtYXBpIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IC0+XG4gICAgICAgICAgbGV0IGwnID0gbWFwaSBmIGwgaW5cbiAgICAgICAgICBsZXQgZCcgPSBmIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IG1hcGkgZiByIGluXG4gICAgICAgICAgTm9kZXtsPWwnOyB2OyBkPWQnOyByPXInOyBofVxuXG4gICAgbGV0IHJlYyBmb2xkIGYgbSBhY2N1ID1cbiAgICAgIG1hdGNoIG0gd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgZm9sZCBmIHIgKGYgdiBkIChmb2xkIGYgbCBhY2N1KSlcblxuICAgIGxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gdHJ1ZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBwIHYgZCAmJiBmb3JfYWxsIHAgbCAmJiBmb3JfYWxsIHAgclxuXG4gICAgbGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IHAgdiBkIHx8IGV4aXN0cyBwIGwgfHwgZXhpc3RzIHAgclxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCBrIGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGtleXMgaW4gdGhlIHRyZWU7IGl0XG4gICAgICAgZG9lcyBub3QgdGVzdCBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgY3VycmVudCBtaW4gKG9yIG1heCkga2V5LlxuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2JpbmRpbmcgayB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIGsgeFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fYmluZGluZyBrIHggbCkgdiBkIHJcblxuICAgIGxldCByZWMgYWRkX21heF9iaW5kaW5nIGsgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiBrIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiBkIChhZGRfbWF4X2JpbmRpbmcgayB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiBkIHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2JpbmRpbmcgdiBkIHJcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBhZGRfbWF4X2JpbmRpbmcgdiBkIGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgZD1sZDsgcj1scjsgaD1saH0sXG4gICAgICAgICBOb2Rle2w9cmw7IHY9cnY7IGQ9cmQ7IHI9cnI7IGg9cmh9KSAtPlxuICAgICAgICAgIGlmIGxoID4gcmggKyAyIHRoZW4gYmFsIGxsIGx2IGxkIChqb2luIGxyIHYgZCByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IGQgcmwpIHJ2IHJkIHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IGQgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIE5vIGFzc3VtcHRpb24gb24gdGhlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCBjb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPlxuICAgICAgICAgIGxldCAoeCwgZCkgPSBtaW5fYmluZGluZyB0MiBpblxuICAgICAgICAgIGpvaW4gdDEgeCBkIChyZW1vdmVfbWluX2JpbmRpbmcgdDIpXG5cbiAgICBsZXQgY29uY2F0X29yX2pvaW4gdDEgdiBkIHQyID1cbiAgICAgIG1hdGNoIGQgd2l0aFxuICAgICAgfCBTb21lIGQgLT4gam9pbiB0MSB2IGQgdDJcbiAgICAgIHwgTm9uZSAtPiBjb25jYXQgdDEgdDJcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBOb25lLCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIFNvbWUgZCwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiBkIHIpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsciwgcHJlcywgcnIpID0gc3BsaXQgeCByIGluIChqb2luIGwgdiBkIGxyLCBwcmVzLCBycilcblxuICAgIGxldCByZWMgbWVyZ2UgZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2RlIHtsPWwxOyB2PXYxOyBkPWQxOyByPXIxOyBoPWgxfSwgXykgd2hlbiBoMSA+PSBoZWlnaHQgczIgLT5cbiAgICAgICAgICBsZXQgKGwyLCBkMiwgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICBjb25jYXRfb3Jfam9pbiAobWVyZ2UgZiBsMSBsMikgdjEgKGYgdjEgKFNvbWUgZDEpIGQyKSAobWVyZ2UgZiByMSByMilcbiAgICAgIHwgKF8sIE5vZGUge2w9bDI7IHY9djI7IGQ9ZDI7IHI9cjJ9KSAtPlxuICAgICAgICAgIGxldCAobDEsIGQxLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgIGNvbmNhdF9vcl9qb2luIChtZXJnZSBmIGwxIGwyKSB2MiAoZiB2MiBkMSAoU29tZSBkMikpIChtZXJnZSBmIHIxIHIyKVxuICAgICAgfCBfIC0+XG4gICAgICAgICAgYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcmVjIHVuaW9uIGYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgfCAoRW1wdHksIHMpIHwgKHMsIEVtcHR5KSAtPiBzXG4gICAgICB8IChOb2RlIHtsPWwxOyB2PXYxOyBkPWQxOyByPXIxOyBoPWgxfSxcbiAgICAgICAgIE5vZGUge2w9bDI7IHY9djI7IGQ9ZDI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGxldCAobDIsIGQyLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgICAgbGV0IGwgPSB1bmlvbiBmIGwxIGwyIGFuZCByID0gdW5pb24gZiByMSByMiBpblxuICAgICAgICAgICAgbWF0Y2ggZDIgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IGpvaW4gbCB2MSBkMSByXG4gICAgICAgICAgICB8IFNvbWUgZDIgLT4gY29uY2F0X29yX2pvaW4gbCB2MSAoZiB2MSBkMSBkMikgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobDEsIGQxLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgbGV0IGwgPSB1bmlvbiBmIGwxIGwyIGFuZCByID0gdW5pb24gZiByMSByMiBpblxuICAgICAgICAgICAgbWF0Y2ggZDEgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IGpvaW4gbCB2MiBkMiByXG4gICAgICAgICAgICB8IFNvbWUgZDEgLT4gY29uY2F0X29yX2pvaW4gbCB2MiAoZiB2MiBkMSBkMikgclxuXG4gICAgbGV0IHJlYyBmaWx0ZXIgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IGFzIG0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHZkIHRoZW4gaWYgbD09bCcgJiYgcj09cicgdGhlbiBtIGVsc2Ugam9pbiBsJyB2IGQgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW2ZdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyX21hcCBmIGwgaW5cbiAgICAgICAgICBsZXQgZnZkID0gZiB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXJfbWFwIGYgciBpblxuICAgICAgICAgIGJlZ2luIG1hdGNoIGZ2ZCB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZCcgLT4gam9pbiBsJyB2IGQnIHInXG4gICAgICAgICAgICB8IE5vbmUgLT4gY29uY2F0IGwnIHInXG4gICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIHBhcnRpdGlvbiBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKEVtcHR5LCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZkXG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IGQgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiBkIHJmKVxuXG4gICAgdHlwZSAnYSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2Yga2V5ICogJ2EgKiAnYSB0ICogJ2EgZW51bWVyYXRpb25cblxuICAgIGxldCByZWMgY29uc19lbnVtIG0gZSA9XG4gICAgICBtYXRjaCBtIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCBkLCByLCBlKSlcblxuICAgIGxldCBjb21wYXJlIGNtcCBtMSBtMiA9XG4gICAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiAwXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgICB8IChNb3JlKHYxLCBkMSwgcjEsIGUxKSwgTW9yZSh2MiwgZDIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIGQxIGQyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBjb21wYXJlX2F1eCAoY29uc19lbnVtIG0xIEVuZCkgKGNvbnNfZW51bSBtMiBFbmQpXG5cbiAgICBsZXQgZXF1YWwgY21wIG0xIG0yID1cbiAgICAgIGxldCByZWMgZXF1YWxfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiB0cnVlXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IGZhbHNlXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gZmFsc2VcbiAgICAgICAgfCAoTW9yZSh2MSwgZDEsIHIxLCBlMSksIE1vcmUodjIsIGQyLCByMiwgZTIpKSAtPlxuICAgICAgICAgICAgT3JkLmNvbXBhcmUgdjEgdjIgPSAwICYmIGNtcCBkMSBkMiAmJlxuICAgICAgICAgICAgZXF1YWxfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBlcXVhbF9hdXggKGNvbnNfZW51bSBtMSBFbmQpIChjb25zX2VudW0gbTIgRW5kKVxuXG4gICAgbGV0IHJlYyBjYXJkaW5hbCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGJpbmRpbmdzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiaW5kaW5nc19hdXggKCh2LCBkKSA6OiBiaW5kaW5nc19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgYmluZGluZ3MgcyA9XG4gICAgICBiaW5kaW5nc19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9iaW5kaW5nXG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9iaW5kaW5nX29wdFxuXG4gICAgbGV0IHRvX2xpc3QgPSBiaW5kaW5nc1xuICAgIGxldCBvZl9saXN0IGJzID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBtIChrLCB2KSAtPiBhZGQgayB2IG0pIGVtcHR5IGJzXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIG0gKGssdikgLT4gYWRkIGsgdiBtKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlIChrLHYsdCxyZXN0KSAtPiBTZXEuQ29ucyAoKGssdiksIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIG0gPVxuICAgICAgc2VxX29mX2VudW1fIChjb25zX2VudW0gbSBFbmQpXG5cbiAgICBsZXQgcmVjIHNub2NfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyBkOyByfSAtPiBzbm9jX2VudW0gciAoTW9yZSh2LCBkLCBsLCBlKSlcblxuICAgIGxldCByZWMgcmV2X3NlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKGssdix0LHJlc3QpIC0+XG4gICAgICAgICAgU2VxLkNvbnMgKChrLHYpLCByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19yZXZfc2VxIGMgPVxuICAgICAgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBtID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBtIGMgPSBtYXRjaCBtIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIGQsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCBkLCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBtIEVuZClcbmVuZFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWIiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9NYXAiLCJPcmQiLCJoZWlnaHQiLCJwYXJhbSIsImgiLCJjcmVhdGUiLCJsIiwieCIsImQiLCJyIiwiaGwiLCJociIsInNpbmdsZXRvbiIsImJhbCIsImNzdF9NYXBfYmFsIiwibHIiLCJsZCIsImx2IiwibGwiLCJscnIiLCJscmQiLCJscnYiLCJscmwiLCJyciIsInJkIiwicnYiLCJybCIsInJsciIsInJsZCIsInJsdiIsInJsbCIsImlzX2VtcHR5IiwiYWRkIiwiZGF0YSIsIm0iLCJ2IiwiYyIsImZpbmQiLCJmaW5kX2ZpcnN0IiwiZDAiLCJ2MCIsImZpbmRfZmlyc3Rfb3B0IiwiZmluZF9sYXN0IiwiZmluZF9sYXN0X29wdCIsImZpbmRfb3B0IiwibWVtIiwibWluX2JpbmRpbmciLCJtaW5fYmluZGluZ19vcHQiLCJtYXhfYmluZGluZyIsIm1heF9iaW5kaW5nX29wdCIsInJlbW92ZV9taW5fYmluZGluZyIsInQxIiwidDIiLCJtYXRjaCIsInJlbW92ZSIsInVwZGF0ZSIsImFkZF90b19saXN0IiwiaXRlciIsIm1hcCIsIm1hcGkiLCJmb2xkIiwiYWNjdSIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiYWRkX21pbl9iaW5kaW5nIiwiayIsImFkZF9tYXhfYmluZGluZyIsImpvaW4iLCJyaCIsImxoIiwiY29uY2F0IiwiY29uY2F0X29yX2pvaW4iLCJzcGxpdCIsInByZXMiLCJtZXJnZSIsInMxIiwiczIiLCJoMSIsInIxIiwiZDEiLCJ2MSIsImwxIiwicjIiLCJkMiIsImwyIiwidjIiLCJ1bmlvbiIsImgyIiwicyIsImZpbHRlciIsInB2ZCIsImZpbHRlcl9tYXAiLCJmdmQiLCJwYXJ0aXRpb24iLCJsZiIsImx0IiwicmYiLCJydCIsImNvbnNfZW51bSIsImUiLCJjb21wYXJlIiwiY21wIiwibTEiLCJtMiIsImUyIiwiZTEiLCJlcXVhbCIsImNhcmRpbmFsIiwiYmluZGluZ3NfYXV4IiwiYmluZGluZ3MiLCJlbXB0eSIsIm9mX2xpc3QiLCJicyIsImFkZF9zZXEiLCJpIiwib2Zfc2VxIiwic2VxX29mX2VudW0iLCJyZXN0IiwidCIsInRvX3NlcSIsInNub2NfZW51bSIsInJldl9zZXFfb2ZfZW51bSIsInRvX3Jldl9zZXEiLCJ0b19zZXFfZnJvbSIsImxvdyIsIm4iXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDO0FB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QSxjQUUyQjtBQUFBLFNBQWtCLGtDQUEvQiwyQkFBK0I7QUFBQSxRQUFDO0FBQUEsaUJBQUFzRCxPQUFBdEY7QUFBQUEsYUFBQSxJQUczRDtBQUFBLFNBQWlCO0FBQUE7QUFBQSxpQkFBQXVGLFVBQUFoQyxLQUFBVztBQUFBQSxhQUFBWCxJQUc5QixLQUFBVyxJQUFBO0FBQUE7QUFBQSxrQkFDVztBQUFBLGNBQUEzRixJQURYLE1BQUFELElBQUEsTUFBQTJCLElBQUEsTUFBQTdCLElBQUEsTUFBQThGLE1BRXNCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBOEI7QUFBQSxpQkFBQXNCLGdCQUFBdEYsR0FBQWpDO0FBQUFBLFNBRXRCLFFBQ3JCO0FBQUE7QUFBQSxVQUFBbUgsT0FEcUI7QUFBQSxVQUFBQyxJQUFBO0FBQUEsVUFBQXBGLElBQUE7QUFBQSxVQUFBK0IsSUFBQTtBQUFBLGNBR1E7QUFBQSxTQUFrQixrQ0FBbkMsK0JBQW1DO0FBQUEsUUFBQztBQUFBLGlCQUFBeUQsV0FBQXZGO0FBQUFBLGFBQUEsSUFHeEM7QUFBQSxTQUFpQjtBQUFBO0FBQUEsaUJBQUF3RixZQUFBQyxLQUFBM0Y7QUFBQUE7QUFBQUE7QUFBQUEsY0FBQUEsTUFZckIsR0FBQUUsSUFBQTtBQUFBO0FBQUEsV0FUUztBQUFBO0FBQUEsWUFBQTNCLElBQUE7QUFBQSxZQUFBRCxJQUFBO0FBQUEsWUFBQTJCLElBQUE7QUFBQSxZQUFBN0IsSUFBQTtBQUFBLFlBQUF3SCxJQUdKO0FBQUEsV0FBaUI7QUFBQSxXQUVsQjtBQUFBLGdCQUFBMUYsTUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFERTtBQUFBO0FBQUEsa0JBREY7QUFBQTtBQUFBLFNBS2E7QUFBQTtBQUFBLFFEamlCbEMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxNzkwMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zdGFjay5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0geyBtdXRhYmxlIGMgOiAnYSBsaXN0OyBtdXRhYmxlIGxlbiA6IGludDsgfVxuXG5leGNlcHRpb24gRW1wdHlcblxubGV0IGNyZWF0ZSAoKSA9IHsgYyA9IFtdOyBsZW4gPSAwOyB9XG5cbmxldCBjbGVhciBzID0gcy5jIDwtIFtdOyBzLmxlbiA8LSAwXG5cbmxldCBjb3B5IHMgPSB7IGMgPSBzLmM7IGxlbiA9IHMubGVuOyB9XG5cbmxldCBwdXNoIHggcyA9IHMuYyA8LSB4IDo6IHMuYzsgcy5sZW4gPC0gcy5sZW4gKyAxXG5cbmxldCBwb3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBoZFxuICB8IFtdICAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgcG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IFNvbWUgaGRcbiAgfCBbXSAgICAgLT4gTm9uZVxuXG5sZXQgZHJvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBfaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxXG4gIHwgW10gLT4gcmFpc2UgRW1wdHlcblxubGV0IHRvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBoZFxuICB8IFtdICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCB0b3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IFNvbWUgaGRcbiAgfCBbXSAgICAtPiBOb25lXG5cbmxldCBpc19lbXB0eSBzID0gKHMuYyA9IFtdKVxuXG5sZXQgbGVuZ3RoIHMgPSBzLmxlblxuXG5sZXQgaXRlciBmIHMgPSBMaXN0Lml0ZXIgZiBzLmNcblxubGV0IGZvbGQgZiBhY2MgcyA9IExpc3QuZm9sZF9sZWZ0IGYgYWNjIHMuY1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBMaXN0LnRvX3NlcSBzLmNcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBzID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBzIGc7XG4gIHNcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0xpc3QiLCJFbXB0eSIsImNyZWF0ZSIsInBhcmFtIiwiY2xlYXIiLCJzIiwiY29weSIsInB1c2giLCJ4IiwicG9wIiwibWF0Y2giLCJ0bCIsImhkIiwicG9wX29wdCIsImRyb3AiLCJ0b3AiLCJ0b3Bfb3B0IiwiaXNfZW1wdHkiLCJsZW5ndGgiLCJpdGVyIiwiZiIsImZvbGQiLCJhY2MiLCJ0b19zZXEiLCJhZGRfc2VxIiwicSIsImkiLCJvZl9zZXEiLCJnIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLFlBQUFDLE9BQUFDLE9DbUJnQixpQkFBb0I7QUFBQSxZQUFBQyxNQUFBQyxHQUV0QixVQUFXLG1CQUFVO0FBQUEsWUFBQUMsS0FBQUQsR0FFdEIsdUJBQXlCO0FBQUEsWUFBQUUsS0FBQUMsR0FBQUgsR0FFdkIscUJBQWlCLDhCQUFrQjtBQUFBLFlBQUFJLElBQUFKO0FBQUFBLFFBQUFLLFFBR2hEO0FBQUEsZ0JBRVk7QUFBQSxRQUFBQyxLQUZaLFVBQUFDLEtBQUE7QUFBQSxJQUNZO0FBQUEsSUFBVztBQUFBLElBQW9CO0FBQUEsR0FDcEI7QUFBQSxZQUFBQyxRQUFBUjtBQUFBQSxRQUFBSyxRQUd2QjtBQUFBLGdCQUVZO0FBQUEsUUFBQUMsS0FGWixVQUFBQyxLQUFBO0FBQUEsSUFDWTtBQUFBLElBQVc7QUFBQSxJQUFvQjtBQUFBLEdBQzNCO0FBQUEsWUFBQUUsS0FBQVQ7QUFBQUEsUUFBQUssUUFHaEI7QUFBQSxnQkFFUTtBQUFBLFFBQUFDLEtBRlI7QUFBQSxJQUNhO0FBQUEsSUFBVztBQUFBO0FBQUEsR0FDTDtBQUFBLFlBQUFJLElBQUFWO0FBQUFBLFFBQUFLLFFBR25CO0FBQUEsZ0JBRVc7QUFBQSxRQUFBRSxLQUZYO0FBQUEsSUFDVztBQUFBLEdBQ1c7QUFBQSxZQUFBSSxRQUFBWDtBQUFBQSxRQUFBSyxRQUd0QjtBQUFBLGdCQUVXO0FBQUEsUUFBQUUsS0FGWDtBQUFBLElBQ1c7QUFBQSxHQUNJO0FBQUEsWUFBQUssU0FBQVosR0FFQSwwQkFBVTtBQUFBLFlBQUFhLE9BQUFiLEdBRVosWUFBSztBQUFBLFlBQUFjLEtBQUFDLEdBQUFmLEdBRUwsMENBQWU7QUFBQSxZQUFBZ0IsS0FBQUQsR0FBQUUsS0FBQWpCLEdBRVgsK0NBQXdCO0FBQUEsWUFBQWtCLE9BQUFsQixHQUk1Qix1Q0FBZTtBQUFBLFlBQUFtQixRQUFBQyxHQUFBQztBQUFBQSxJQUVaLHlDQUFBbEIsR0FBbUIsaUJBQVEsTUFBRztBQUFBO0FBQUEsWUFBQW1CLE9BQUFDLE9BQUF2QixJQUd0QyxXQUNSLGVBQVcsU0FDVjtBQUFBLEdEckVIIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTc5ODksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvcXVldWUubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJTdGRsaWJfU2VxIiwiRW1wdHkiLCJjcmVhdGUiLCJwYXJhbSIsImNsZWFyIiwicSIsImFkZCIsIngiLCJjZWxsIiwibWF0Y2giLCJwZWVrIiwiY29udGVudCIsInBlZWtfb3B0IiwidGFrZSIsIm5leHQiLCJ0YWtlX29wdCIsImNvcHkiLCJxX3JlcyIsInByZXYiLCJpc19lbXB0eSIsImxlbmd0aCIsIml0ZXIiLCJmb2xkIiwiYWNjdSIsInRyYW5zZmVyIiwicTEiLCJxMiIsInRvX3NlcSIsImF1eCIsImMiLCJhZGRfc2VxIiwiaSIsIm9mX3NlcSIsImciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEcklGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTgxNDYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvYnVmZmVyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgUGllcnJlIFdlaXMgYW5kIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5OSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeHRlbnNpYmxlIGJ1ZmZlcnMgKilcblxuKCogVGhlIFtpbm5lcl9idWZmZXJdIHR5cGUgZW5zdXJlcyB0aGF0IHRoZSBbbGVuZ3RoXSBhbmQgW2J1ZmZlcl0gZmllbGRzIGFyZVxuICAgYWx3YXlzIHN5bmNocm9uaXplZCwgW2xlbmd0aCA9IEJ5dGVzLmxlbmd0aCBidWZmZXJdLCBldmVuIGluIHByZXNlbmNlXG4gICBvZiBkYXRhIHJhY2VzLlxuKilcbnR5cGUgaW5uZXJfYnVmZmVyID0ge1xuICBidWZmZXI6IGJ5dGVzO1xuICBsZW5ndGg6IGludDtcbn1cblxudHlwZSB0ID1cbiB7bXV0YWJsZSBpbm5lciA6IGlubmVyX2J1ZmZlcjtcbiAgbXV0YWJsZSBwb3NpdGlvbiA6IGludDtcbiAgaW5pdGlhbF9idWZmZXIgOiBieXRlc31cbigqIEludmFyaWFudHM6IGFsbCBwYXJ0cyBvZiB0aGUgY29kZSBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyB0aGF0OlxuICAgLSBbaW5uZXIubGVuZ3RoID0gQnl0ZXMubGVuZ3RoIGlubmVyLmJ1ZmZlcl1cbiAgIEluIGFic2VuY2Ugb2YgZGF0YSByYWNlcywgd2UgYWxzbyBoYXZlXG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5pbm5lci5sZW5ndGhdXG5cbiAgIE5vdGUgaW4gcGFydGljdWxhciB0aGF0IFtiLnBvc2l0aW9uID0gYi5pbm5lci5sZW5ndGhdIGlzIGxlZ2FsLFxuICAgaXQgbWVhbnMgdGhhdCB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHdpbGwgaGF2ZSB0byBiZSBleHRlbmRlZFxuICAgYmVmb3JlIGFueSBmdXJ0aGVyIGFkZGl0aW9uLiAqKVxuXG5sZXQgY3JlYXRlIG4gPVxuIGxldCBuID0gaWYgbiA8IDEgdGhlbiAxIGVsc2UgbiBpblxuIGxldCBuID0gaWYgbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBlbHNlIG4gaW5cbiBsZXQgcyA9IEJ5dGVzLmNyZWF0ZSBuIGluXG4geyBpbm5lciA9IHsgYnVmZmVyID0gczsgbGVuZ3RoID0gbn07IHBvc2l0aW9uID0gMDsgaW5pdGlhbF9idWZmZXIgPSBzfVxuXG5sZXQgY29udGVudHMgYiA9IEJ5dGVzLnN1Yl9zdHJpbmcgYi5pbm5lci5idWZmZXIgMCBiLnBvc2l0aW9uXG5sZXQgdG9fYnl0ZXMgYiA9IEJ5dGVzLnN1YiBiLmlubmVyLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IHN1YiBiIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYi5wb3NpdGlvbiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLnN1YlwiXG4gIGVsc2UgQnl0ZXMuc3ViX3N0cmluZyBiLmlubmVyLmJ1ZmZlciBvZnMgbGVuXG5cblxubGV0IGJsaXQgc3JjIHNyY29mZiBkc3QgZHN0b2ZmIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgc3Jjb2ZmIDwgMCB8fCBzcmNvZmYgPiBzcmMucG9zaXRpb24gLSBsZW5cbiAgICAgICAgICAgICB8fCBkc3RvZmYgPCAwIHx8IGRzdG9mZiA+IChCeXRlcy5sZW5ndGggZHN0KSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmJsaXRcIlxuICBlbHNlXG4gICAgQnl0ZXMuYmxpdCBzcmMuaW5uZXIuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyO2xlbmd0aH0gPSBiLmlubmVyIGluXG4gIGlmIG9mcyA8IDAgfHwgb2ZzID49IHBvc2l0aW9uIHx8IHBvc2l0aW9uID4gbGVuZ3RoIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBidWZmZXIgb2ZzXG5cblxubGV0IGxlbmd0aCBiID0gYi5wb3NpdGlvblxuXG5sZXQgY2xlYXIgYiA9IGIucG9zaXRpb24gPC0gMFxuXG5sZXQgcmVzZXQgYiA9XG4gIGIucG9zaXRpb24gPC0gMDtcbiAgbGV0IGlubmVyID1cbiAgICB7IGJ1ZmZlciA9IGIuaW5pdGlhbF9idWZmZXI7IGxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmluaXRpYWxfYnVmZmVyIH1cbiAgaW5cbiAgYi5pbm5lciA8LSBpbm5lclxuXG4oKiBbcmVzaXplIGIgbW9yZV0gZW5zdXJlcyB0aGF0IFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmlubmVyLmxlbmd0aF0gaG9sZHNcbiAgIGJ5IGR5bmFtaWNhbGx5IGV4dGVuZGluZyBbYi5pbm5lcl0gaWYgbmVjZXNzYXJ5IC0tIGFuZCB0aHVzXG4gICBpbmNyZWFzaW5nIFtiLmlubmVyLmxlbmd0aF0uXG4qKVxubGV0IHJlc2l6ZSBiIG1vcmUgPVxuICBsZXQgb2xkX3BvcyA9IGIucG9zaXRpb24gaW5cbiAgbGV0IG9sZF9sZW4gPSBiLmlubmVyLmxlbmd0aCBpblxuICBsZXQgbmV3X2xlbiA9IHJlZiBvbGRfbGVuIGluXG4gIHdoaWxlIG9sZF9wb3MgKyBtb3JlID4gIW5ld19sZW4gZG8gbmV3X2xlbiA6PSAyICogIW5ld19sZW4gZG9uZTtcbiAgaWYgIW5ld19sZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBiZWdpblxuICAgIGlmIG9sZF9wb3MgKyBtb3JlIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgIHRoZW4gbmV3X2xlbiA6PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICBlbHNlIGZhaWx3aXRoIFwiQnVmZmVyLmFkZDogY2Fubm90IGdyb3cgYnVmZmVyXCJcbiAgZW5kO1xuICBsZXQgbmV3X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAhbmV3X2xlbiBpblxuICAoKiBQUiM2MTQ4OiBsZXQncyBrZWVwIHVzaW5nIFtibGl0XSByYXRoZXIgdGhhbiBbdW5zYWZlX2JsaXRdIGluXG4gICAgIHRoaXMgdHJpY2t5IGZ1bmN0aW9uIHRoYXQgaXMgc2xvdyBhbnl3YXkuICopXG4gIEJ5dGVzLmJsaXQgYi5pbm5lci5idWZmZXIgMCBuZXdfYnVmZmVyIDAgYi5wb3NpdGlvbjtcbiAgYi5pbm5lciA8LSB7IGJ1ZmZlciA9IG5ld19idWZmZXI7IGxlbmd0aCA9ICFuZXdfbGVuIH1cblxuKCogTm90ZTpcbiAgICBTb21lIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cgaGF2ZSBhIGZhc3QgcGF0aCB3aGVuIHRoZSBpbm5lclxuICBidWZmZXIgZG9lc24ndCBuZWVkIHRvIGJlIGV4dGVuZGVkLlxuICAgIEluIHRoaXMgY2FzZSwgaXQgaXMgcG9zc2libGUgdG8gdXNlIHVuc2FmZSBhY2Nlc3NlcyBvbiB0aGVcbiAgY29udGVudHMgb2YgdGhlIFtpbm5lcl0gZmllbGQgc2luY2UgaXRzIGZpZWxkcyBhcmUgaW1tdXRhYmxlLlxuICBJbiBwcmVzZW5jZSBvZiBkYXRhIHJhY2VzLCB3ZSBtYXkgYWNjZXNzIHRoZSB3cm9uZyBpbm5lciBidWZmZXIsIGJ1dCB3ZVxuICB3aWxsIHVzZSB0aGlzIGJ1ZmZlciBzYWZlbHkuXG4gIEFzIHNvb24gYXMgd2UgbmVlZCB0byByZXNpemUgdGhlIGJ1ZmZlciwgd2UgZmFsbCBiYWNrIHRvIHNhZmUgYWNjZXNzZXMuXG4qKVxuXG5sZXQgYWRkX2NoYXIgYiBjID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgbGV0IHtidWZmZXI7bGVuZ3RofSA9IGIuaW5uZXIgaW5cbiAgaWYgcG9zID49IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiAxO1xuICAgIEJ5dGVzLnNldCBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIGNcbiAgKSBlbHNlXG4gICAgQnl0ZXMudW5zYWZlX3NldCBidWZmZXIgcG9zIGM7XG4gIGIucG9zaXRpb24gPC0gcG9zICsgMVxuXG5sZXQgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4ID0gNFxubGV0IHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXggPSA0XG5cbmxldCByZWMgYWRkX3V0Zl84X3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmlubmVyLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzhfdWNoYXIgYi5pbm5lci5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzhfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmJlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmlubmVyLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmJlX3VjaGFyIGIuaW5uZXIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZiZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IHJlYyBhZGRfdXRmXzE2bGVfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIuaW5uZXIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzE2bGVfdWNoYXIgYi5pbm5lci5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgYWRkX3N1YnN0cmluZyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGlmIG9mZnNldCA8IDAgfHwgbGVuIDwgMCB8fCBvZmZzZXQgPiBTdHJpbmcubGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfc3Vic3RyaW5nL2FkZF9zdWJieXRlc1wiO1xuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyO2xlbmd0aH0gPSBiLmlubmVyIGluXG4gIGxldCBuZXdfcG9zaXRpb24gPSBwb3NpdGlvbiArIGxlbiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgbGVuO1xuICAgIEJ5dGVzLmJsaXRfc3RyaW5nIHMgb2Zmc2V0IGIuaW5uZXIuYnVmZmVyIGIucG9zaXRpb24gbGVuXG4gICkgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBidWZmZXIgcG9zaXRpb24gbGVuO1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX3N1YmJ5dGVzIGIgcyBvZmZzZXQgbGVuID1cbiAgYWRkX3N1YnN0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpIG9mZnNldCBsZW5cblxubGV0IGFkZF9zdHJpbmcgYiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyOyBsZW5ndGh9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gbGVuZ3RoIHRoZW4gKFxuICAgIHJlc2l6ZSBiIGxlbjtcbiAgICBCeXRlcy5ibGl0X3N0cmluZyBzIDAgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gICkgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYnVmZmVyIHBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9ieXRlcyBiIHMgPSBhZGRfc3RyaW5nIGIgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcylcblxubGV0IGFkZF9idWZmZXIgYiBicyA9XG4gIGFkZF9zdWJieXRlcyBiIGJzLmlubmVyLmJ1ZmZlciAwIGJzLnBvc2l0aW9uXG5cbigqIHRoaXMgKHByaXZhdGUpIGZ1bmN0aW9uIGNvdWxkIG1vdmUgaW50byB0aGUgc3RhbmRhcmQgbGlicmFyeSAqKVxubGV0IHJlYWxseV9pbnB1dF91cF90byBpYyBidWYgb2ZzIGxlbiA9XG4gIGxldCByZWMgbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZCB+b2ZzIH50b19yZWFkID1cbiAgICBpZiB0b19yZWFkID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gaW5wdXQgaWMgYnVmIG9mcyB0b19yZWFkIGluXG4gICAgICBpZiByID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBsZXQgYWxyZWFkeV9yZWFkID0gYWxyZWFkeV9yZWFkICsgciBpblxuICAgICAgICBsZXQgb2ZzID0gb2ZzICsgciBpblxuICAgICAgICBsZXQgdG9fcmVhZCA9IHRvX3JlYWQgLSByIGluXG4gICAgICAgIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZFxuICAgICAgZW5kXG4gICAgZW5kXG4gIGluIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQ6MCB+b2ZzIH50b19yZWFkOmxlblxuXG5cbmxldCB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gPVxuICBpZiBiLnBvc2l0aW9uICsgbGVuID4gYi5pbm5lci5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIGxldCBuID0gcmVhbGx5X2lucHV0X3VwX3RvIGljIGIuaW5uZXIuYnVmZmVyIGIucG9zaXRpb24gbGVuIGluXG4gIGIucG9zaXRpb24gPC0gYi5wb3NpdGlvbiArIG47XG4gIG5cblxubGV0IGFkZF9jaGFubmVsIGIgaWMgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBsZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiAgICgqIFBSIzUwMDQgKilcbiAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfY2hhbm5lbFwiO1xuICBsZXQgbiA9IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiBpblxuICAoKiBJdCBpcyBpbnRlbnRpb25hbCB0aGF0IGEgY29uc3VtZXIgY2F0Y2hpbmcgRW5kX29mX2ZpbGVcbiAgICAgd2lsbCBzZWUgdGhlIGRhdGEgd3JpdHRlbiAoc2VlICM2NzE5LCAjNzEzNikuICopXG4gIGlmIG4gPCBsZW4gdGhlbiByYWlzZSBFbmRfb2ZfZmlsZTtcbiAgKClcblxubGV0IG91dHB1dF9idWZmZXIgb2MgYiA9XG4gIG91dHB1dCBvYyBiLmlubmVyLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IGNsb3NpbmcgPSBmdW5jdGlvblxuICB8ICcoJyAtPiAnKSdcbiAgfCAneycgLT4gJ30nXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCogb3BlbmluZyBhbmQgY2xvc2luZzogb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycywgdHlwaWNhbGx5ICggYW5kIClcbiAgIGs6IGJhbGFuY2Ugb2Ygb3BlbmluZyBhbmQgY2xvc2luZyBjaGFyc1xuICAgczogdGhlIHN0cmluZyB3aGVyZSB3ZSBhcmUgc2VhcmNoaW5nXG4gICBzdGFydDogdGhlIGluZGV4IHdoZXJlIHdlIHN0YXJ0IHRoZSBzZWFyY2guICopXG5sZXQgYWR2YW5jZV90b19jbG9zaW5nIG9wZW5pbmcgY2xvc2luZyBrIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgayBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICAgIGlmIHMuW2ldID0gb3BlbmluZyB0aGVuIGFkdmFuY2UgKGsgKyAxKSAoaSArIDEpIGxpbSBlbHNlXG4gICAgaWYgcy5baV0gPSBjbG9zaW5nIHRoZW5cbiAgICAgIGlmIGsgPSAwIHRoZW4gaSBlbHNlIGFkdmFuY2UgKGsgLSAxKSAoaSArIDEpIGxpbVxuICAgIGVsc2UgYWR2YW5jZSBrIChpICsgMSkgbGltIGluXG4gIGFkdmFuY2UgayBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgYWR2YW5jZV90b19ub25fYWxwaGEgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiBsaW0gZWxzZVxuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIHwgJzAnIC4uICc5JyB8ICdfJyAtPiBhZHZhbmNlIChpICsgMSkgbGltXG4gICAgfCBfIC0+IGkgaW5cbiAgYWR2YW5jZSBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG4oKiBXZSBhcmUganVzdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGlkZW50IGluIHMsIHN0YXJ0aW5nIGF0IHN0YXJ0LiAqKVxubGV0IGZpbmRfaWRlbnQgcyBzdGFydCBsaW0gPVxuICBpZiBzdGFydCA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBtYXRjaCBzLltzdGFydF0gd2l0aFxuICAoKiBQYXJlbnRoZXNpemVkIGlkZW50ID8gKilcbiAgfCAnKCcgfCAneycgYXMgYyAtPlxuICAgICBsZXQgbmV3X3N0YXJ0ID0gc3RhcnQgKyAxIGluXG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19jbG9zaW5nIGMgKGNsb3NpbmcgYykgMCBzIG5ld19zdGFydCBpblxuICAgICBTdHJpbmcuc3ViIHMgbmV3X3N0YXJ0IChzdG9wIC0gc3RhcnQgLSAxKSwgc3RvcCArIDFcbiAgKCogUmVndWxhciBpZGVudCAqKVxuICB8IF8gLT5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0IGluXG4gICAgIGlmIHN0b3AgPSBzdGFydCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgIFN0cmluZy5zdWIgcyBzdGFydCAoc3RvcCAtIHN0YXJ0KSwgc3RvcFxuXG4oKiBTdWJzdGl0dXRlICRpZGVudCwgJChpZGVudCksIG9yICR7aWRlbnR9IGluIHMsXG4gICAgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbiBtYXBwaW5nIGYuICopXG5sZXQgYWRkX3N1YnN0aXR1dGUgYiBmIHMgPVxuICBsZXQgbGltID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCByZWMgc3Vic3QgcHJldmlvdXMgaSA9XG4gICAgaWYgaSA8IGxpbSB0aGVuIGJlZ2luXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICckJyBhcyBjdXJyZW50IHdoZW4gcHJldmlvdXMgPSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0ICcgJyAoaSArIDEpXG4gICAgICB8ICckJyAtPlxuICAgICAgICAgbGV0IGogPSBpICsgMSBpblxuICAgICAgICAgYmVnaW4gbWF0Y2ggZmluZF9pZGVudCBzIGogbGltIHdpdGhcbiAgICAgICAgIHwgaWRlbnQsIG5leHRfaSAtPlxuICAgICAgICAgICBhZGRfc3RyaW5nIGIgKGYgaWRlbnQpO1xuICAgICAgICAgICBzdWJzdCAnICcgbmV4dF9pXG4gICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgYWRkX2NoYXIgYiAnJCc7XG4gICAgICAgICAgIHN1YnN0ICcgJyBqXG4gICAgICAgICBlbmRcbiAgICAgIHwgY3VycmVudCAtPlxuICAgICAgICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzO1xuICAgICAgICAgaWYgY3VycmVudCA8PiAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCBjdXJyZW50IChpICsgMSlcbiAgICBlbmQgZWxzZVxuICAgIGlmIHByZXZpb3VzID0gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBwcmV2aW91cyBpblxuICBzdWJzdCAnICcgMFxuXG5sZXQgdHJ1bmNhdGUgYiBsZW4gPVxuICAgIGlmIGxlbiA8IDAgfHwgbGVuID4gbGVuZ3RoIGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJCdWZmZXIudHJ1bmNhdGVcIlxuICAgIGVsc2VcbiAgICAgIGIucG9zaXRpb24gPC0gbGVuXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy5nZXQgYi5pbm5lci5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy5nZXQgYi5pbm5lci5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBhZGRfc2VxIGIgc2VxID0gU2VxLml0ZXIgKGFkZF9jaGFyIGIpIHNlcVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgYiA9IGNyZWF0ZSAzMiBpblxuICBhZGRfc2VxIGIgaTtcbiAgYlxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50MTYgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDMyIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMydVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDY0IDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNiA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5cbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cblxubGV0IGFkZF9pbnQ4IGIgeCA9XG4gIGxldCBwb3NpdGlvbiA9IGIucG9zaXRpb24gaW5cbiAgbGV0IHtsZW5ndGg7IGJ1ZmZlcn0gPSBiLmlubmVyIGluXG4gIGxldCBuZXdfcG9zaXRpb24gPSBwb3NpdGlvbiArIDEgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gbGVuZ3RoIHRoZW4gKFxuICAgIHJlc2l6ZSBiIDE7XG4gICAgc2V0X2ludDggYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiB4XG4gICkgZWxzZVxuICAgIHVuc2FmZV9zZXRfaW50OCBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyAyIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiAyO1xuICAgIHNldF9pbnQxNiBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIHhcbiAgKSBlbHNlXG4gICAgdW5zYWZlX3NldF9pbnQxNiBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyA0IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiA0O1xuICAgIHNldF9pbnQzMiBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIHhcbiAgKSBlbHNlXG4gICAgdW5zYWZlX3NldF9pbnQzMiBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyA4IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiA4O1xuICAgIHNldF9pbnQ2NCBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIHhcbiAgKSBlbHNlXG4gICAgdW5zYWZlX3NldF9pbnQ2NCBidWZmZXIgcG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmxpdF9zdHJpbmciLCJjYW1sX2Jzd2FwMTYiLCJjYW1sX2J5dGVzX2dldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9ieXRlc19zZXQxNiIsImNhbWxfYnl0ZXNfc2V0MzIiLCJjYW1sX2J5dGVzX3NldDY0IiwiY2FtbF9ieXRlc191bnNhZmVfc2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2ludDMyX2Jzd2FwIiwiY2FtbF9pbnQ2NF9ic3dhcCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfYnl0ZXNfbGVuZ3RoIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9TeXMiLCJTdGRsaWJfU2VxIiwiU3RkbGliIiwiU3RkbGliX1N0cmluZyIsIkFzc2VydF9mYWlsdXJlIiwiZHVtbXkiLCJjcmVhdGUiLCJuIiwicyIsImNvbnRlbnRzIiwiYiIsInRvX2J5dGVzIiwic3ViIiwib2ZzIiwibGVuIiwiYmxpdCIsInNyYyIsInNyY29mZiIsImRzdCIsImRzdG9mZiIsIm50aCIsInBvc2l0aW9uIiwibWF0Y2giLCJsZW5ndGgiLCJidWZmZXIiLCJjbGVhciIsInJlc2V0IiwiaW5uZXIiLCJyZXNpemUiLCJtb3JlIiwib2xkX3BvcyIsIm9sZF9sZW4iLCJuZXdfbGVuIiwibmV3X2J1ZmZlciIsImFkZF9jaGFyIiwiYyIsInBvcyIsImFkZF91dGZfOF91Y2hhciIsInUiLCJ1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXgiLCJ1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4IiwiYWRkX3V0Zl8xNmJlX3VjaGFyIiwiYWRkX3V0Zl8xNmxlX3VjaGFyIiwiYWRkX3N1YnN0cmluZyIsIm9mZnNldCIsIm5ld19wb3NpdGlvbiIsImFkZF9zdWJieXRlcyIsImFkZF9zdHJpbmciLCJhZGRfYnl0ZXMiLCJhZGRfYnVmZmVyIiwiYnMiLCJhZGRfY2hhbm5lbCIsImljIiwidG9fcmVhZCIsImJ1ZiIsImFscmVhZHlfcmVhZCIsInIiLCJvdXRwdXRfYnVmZmVyIiwib2MiLCJhZGRfc3Vic3RpdHV0ZSIsImxpbSIsInByZXZpb3VzIiwiaSIsInN0YXJ0Iiwib3BlbmluZyIsInN0b3AiLCJ2YWwiLCJuZXdfc3RhcnQiLCJjbG9zaW5nIiwiayIsImV4biIsIm5leHRfaSIsImlkZW50IiwidHJ1bmNhdGUiLCJ0b19zZXEiLCJhdXgiLCJwYXJhbSIsIngiLCJ0b19zZXFpIiwiYWRkX3NlcSIsInNlcSIsIm9mX3NlcSIsImFkZF9pbnQ4IiwiYWRkX2ludDE2X25lIiwiYWRkX2ludDMyX25lIiwiYWRkX2ludDY0X25lIiwiYWRkX2ludDE2X2xlIiwiYWRkX2ludDE2X2JlIiwiYWRkX2ludDMyX2xlIiwiYWRkX2ludDMyX2JlIiwiYWRkX2ludDY0X2xlIiwiYWRkX2ludDY0X2JlIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMs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LHFCQUE4QztBQUFBLElBQTlDLDJCQUF1RDtBQUFBO0FBQUEsWUFBQVcsYUFBQTlFLEdBQUFtRTtBQUFBQSxRQUFBLElBR3ZELGlCQUF1QztBQUFBLElBQXZDLHlCQUF1RDtBQUFBO0FBQUEsWUFBQVksYUFBQS9FLEdBQUFtRTtBQUFBQSxRQUFBQSxNQUd2RCxxQkFBOEM7QUFBQSxJQUE5QywyQkFBdUQ7QUFBQTtBQUFBLFlBQUFhLGFBQUFoRixHQUFBbUU7QUFBQUEsUUFBQSxJQUd2RCxpQkFBdUM7QUFBQSxJQUF2Qyx5QkFBdUQ7QUFBQTtBQUFBLFlBQUFjLGFBQUFqRixHQUFBbUU7QUFBQUEsUUFBQUEsTUFHdkQscUJBQThDO0FBQUEsSUFBOUMsMkJBQXVEO0FBQUE7QUFBQSxHRDVZekQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxODYzMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9tdXRleC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBYYXZpZXIgTGVyb3kgYW5kIFBhc2NhbCBDdW9xLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTUgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSB0XG5leHRlcm5hbCBjcmVhdGU6IHVuaXQgLT4gdCA9IFwiY2FtbF9tbF9tdXRleF9uZXdcIlxuZXh0ZXJuYWwgbG9jazogdCAtPiB1bml0ID0gXCJjYW1sX21sX211dGV4X2xvY2tcIlxuZXh0ZXJuYWwgdHJ5X2xvY2s6IHQgLT4gYm9vbCA9IFwiY2FtbF9tbF9tdXRleF90cnlfbG9ja1wiXG5leHRlcm5hbCB1bmxvY2s6IHQgLT4gdW5pdCA9IFwiY2FtbF9tbF9tdXRleF91bmxvY2tcIlxuXG4oKiBwcml2YXRlIHJlLWV4cG9ydCAqKVxuZXh0ZXJuYWwgcmVyYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJlcmFpc2VcIlxuXG4oKiBjYW5ub3QgaW5saW5lLCBvdGhlcndpc2UgZmxhbWJkYSBtaWdodCBtb3ZlIGNvZGUgYXJvdW5kLiAqKVxubGV0W0BpbmxpbmUgbmV2ZXJdIHByb3RlY3QgbSBmID1cbiAgbG9jayBtO1xuICBtYXRjaCBmKCkgd2l0aFxuICB8IHggLT5cbiAgICB1bmxvY2sgbTsgeFxuICB8IGV4Y2VwdGlvbiBlIC0+XG4gICAgKCogTk9URTogW3VubG9ja10gZG9lcyBub3QgcG9sbCBmb3IgYXN5bmNocm9ub3VzIGV4Y2VwdGlvbnMgKilcbiAgICB1bmxvY2sgbTtcbiAgICByZXJhaXNlIGVcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9tdXRleF9sb2NrIiwiY2FtbF9tbF9tdXRleF91bmxvY2siLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsInByb3RlY3QiLCJtIiwieCIsImUiLCJTdGRsaWJfTXV0ZXgiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsUUFBQUMsR0FBQUg7QUFBQUEsSUMwQkU7QUFBQSxJQUFNLFFBQUFJLElBQ0E7QUFBQSxVQUFBQztBQUFBQSxTQUFBQSxJRDNCUjtBQUFBLEtDZ0NJO0FBQUEsS0FBUTtBQUFBO0FBQUEsSUFIUjtBQUFBLElBQVE7QUFBQSxHQUlDO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNRGpDYiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE4NjczLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJTdGRsaWJfQ29uZGl0aW9uIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUEiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxODY5MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9kb21haW4ubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgIEtDIFNpdmFyYW1ha3Jpc2huYW4sIEluZGlhbiBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgTWFkcmFzICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgU3RlcGhlbiBEb2xhbiwgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICBUb20gS2VsbHksIE9DYW1sIExhYnMgQ29uc3VsdGFuY3kgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE5IEluZGlhbiBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgTWFkcmFzICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIxIE9DYW1sIExhYnMgQ29uc3VsdGFuY3kgTHRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm1vZHVsZSBSYXcgPSBzdHJ1Y3RcbiAgKCogTG93LWxldmVsIHByaW1pdGl2ZXMgcHJvdmlkZWQgYnkgdGhlIHJ1bnRpbWUgKilcbiAgdHlwZSB0ID0gcHJpdmF0ZSBpbnRcblxuICAoKiBUaGUgbGF5b3V0cyBvZiBbc3RhdGVdIGFuZCBbdGVybV9zeW5jXSBhcmUgaGFyZC1jb2RlZCBpblxuICAgICBbcnVudGltZS9kb21haW4uY10gKilcblxuICB0eXBlICdhIHN0YXRlID1cbiAgICB8IFJ1bm5pbmdcbiAgICB8IEZpbmlzaGVkIG9mICgnYSwgZXhuKSByZXN1bHQgW0B3YXJuaW5nIFwiLXVudXNlZC1jb25zdHJ1Y3RvclwiXVxuXG4gIHR5cGUgJ2EgdGVybV9zeW5jID0ge1xuICAgICgqIHByb3RlY3RlZCBieSBbbXV0XSAqKVxuICAgIG11dGFibGUgc3RhdGUgOiAnYSBzdGF0ZSBbQHdhcm5pbmcgXCItdW51c2VkLWZpZWxkXCJdIDtcbiAgICBtdXQgOiBNdXRleC50IDtcbiAgICBjb25kIDogQ29uZGl0aW9uLnQgO1xuICB9XG5cbiAgZXh0ZXJuYWwgc3Bhd24gOiAodW5pdCAtPiAnYSkgLT4gJ2EgdGVybV9zeW5jIC0+IHRcbiAgICA9IFwiY2FtbF9kb21haW5fc3Bhd25cIlxuICBleHRlcm5hbCBzZWxmIDogdW5pdCAtPiB0XG4gICAgPSBcImNhbWxfbWxfZG9tYWluX2lkXCIgW0BAbm9hbGxvY11cbiAgZXh0ZXJuYWwgY3B1X3JlbGF4IDogdW5pdCAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfZG9tYWluX2NwdV9yZWxheFwiXG4gIGV4dGVybmFsIGdldF9yZWNvbW1lbmRlZF9kb21haW5fY291bnQ6IHVuaXQgLT4gaW50XG4gICAgPSBcImNhbWxfcmVjb21tZW5kZWRfZG9tYWluX2NvdW50XCIgW0BAbm9hbGxvY11cbmVuZFxuXG5sZXQgY3B1X3JlbGF4ICgpID0gUmF3LmNwdV9yZWxheCAoKVxuXG50eXBlIGlkID0gUmF3LnRcblxudHlwZSAnYSB0ID0ge1xuICBkb21haW4gOiBSYXcudDtcbiAgdGVybV9zeW5jIDogJ2EgUmF3LnRlcm1fc3luYztcbn1cblxubW9kdWxlIERMUyA9IHN0cnVjdFxuXG4gIG1vZHVsZSBPYmpfb3B0IDogc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIG5vbmUgOiB0XG4gICAgdmFsIHNvbWUgOiAnYSAtPiB0XG4gICAgdmFsIGlzX3NvbWUgOiB0IC0+IGJvb2xcblxuICAgICgqKiBbdW5zYWZlX2dldCBvYmpdIG1heSBvbmx5IGJlIGNhbGxlZCBzYWZlbHlcbiAgICAgICAgaWYgW2lzX3NvbWVdIGlzIHRydWUuXG5cbiAgICAgICAgW3Vuc2FmZV9nZXQgKHNvbWUgdildIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgW09iai5vYmogKE9iai5yZXByIHYpXS4gKilcbiAgICB2YWwgdW5zYWZlX2dldCA6IHQgLT4gJ2FcbiAgZW5kID0gc3RydWN0XG4gICAgdHlwZSB0ID0gT2JqLnRcbiAgICBsZXQgbm9uZSA9IE9iai5yZXByIChyZWYgMClcbiAgICBsZXQgc29tZSB2ID0gT2JqLnJlcHIgdlxuICAgIGxldCBpc19zb21lIG9iaiA9IChvYmogIT0gbm9uZSlcbiAgICBsZXQgdW5zYWZlX2dldCBvYmogPSBPYmoub2JqIG9ialxuICBlbmRcblxuICB0eXBlIGRsc19zdGF0ZSA9IE9ial9vcHQudCBhcnJheVxuXG4gIGV4dGVybmFsIGdldF9kbHNfc3RhdGUgOiB1bml0IC0+IGRsc19zdGF0ZSA9IFwiJWRsc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldF9kbHNfc3RhdGUgOiBkbHNfc3RhdGUgLT4gdW5pdCA9XG4gICAgXCJjYW1sX2RvbWFpbl9kbHNfc2V0XCIgW0BAbm9hbGxvY11cblxuICBleHRlcm5hbCBjb21wYXJlX2FuZF9zZXRfZGxzX3N0YXRlIDogZGxzX3N0YXRlIC0+IGRsc19zdGF0ZSAtPiBib29sID1cbiAgICBcImNhbWxfZG9tYWluX2Rsc19jb21wYXJlX2FuZF9zZXRcIiBbQEBub2FsbG9jXVxuXG4gIGxldCBjcmVhdGVfZGxzICgpID1cbiAgICBsZXQgc3QgPSBBcnJheS5tYWtlIDggT2JqX29wdC5ub25lIGluXG4gICAgc2V0X2Rsc19zdGF0ZSBzdFxuXG4gIGxldCBfID0gY3JlYXRlX2RscyAoKVxuXG4gIHR5cGUgJ2Ega2V5ID0gaW50ICogKHVuaXQgLT4gJ2EpXG5cbiAgbGV0IGtleV9jb3VudGVyID0gQXRvbWljLm1ha2UgMFxuXG4gIHR5cGUga2V5X2luaXRpYWxpemVyID1cbiAgICBLSTogJ2Ega2V5ICogKCdhIC0+ICdhKSAtPiBrZXlfaW5pdGlhbGl6ZXJcblxuICBsZXQgcGFyZW50X2tleXMgPSBBdG9taWMubWFrZSAoW10gOiBrZXlfaW5pdGlhbGl6ZXIgbGlzdClcblxuICBsZXQgcmVjIGFkZF9wYXJlbnRfa2V5IGtpID1cbiAgICBsZXQgbCA9IEF0b21pYy5nZXQgcGFyZW50X2tleXMgaW5cbiAgICBpZiBub3QgKEF0b21pYy5jb21wYXJlX2FuZF9zZXQgcGFyZW50X2tleXMgbCAoa2kgOjogbCkpXG4gICAgdGhlbiBhZGRfcGFyZW50X2tleSBraVxuXG4gIGxldCBuZXdfa2V5ID9zcGxpdF9mcm9tX3BhcmVudCBpbml0X29ycGhhbiA9XG4gICAgbGV0IGlkeCA9IEF0b21pYy5mZXRjaF9hbmRfYWRkIGtleV9jb3VudGVyIDEgaW5cbiAgICBsZXQgayA9IChpZHgsIGluaXRfb3JwaGFuKSBpblxuICAgIGJlZ2luIG1hdGNoIHNwbGl0X2Zyb21fcGFyZW50IHdpdGhcbiAgICB8IE5vbmUgLT4gKClcbiAgICB8IFNvbWUgc3BsaXQgLT4gYWRkX3BhcmVudF9rZXkgKEtJKGssIHNwbGl0KSlcbiAgICBlbmQ7XG4gICAga1xuXG4gICgqIElmIG5lY2Vzc2FyeSwgZ3JvdyB0aGUgY3VycmVudCBkb21haW4ncyBsb2NhbCBzdGF0ZSBhcnJheSBzdWNoIHRoYXQgW2lkeF1cbiAgICogaXMgYSB2YWxpZCBpbmRleCBpbiB0aGUgYXJyYXkuICopXG4gIGxldCByZWMgbWF5YmVfZ3JvdyBpZHggPVxuICAgIGxldCBzdCA9IGdldF9kbHNfc3RhdGUgKCkgaW5cbiAgICBsZXQgc3ogPSBBcnJheS5sZW5ndGggc3QgaW5cbiAgICBpZiBpZHggPCBzeiB0aGVuIHN0XG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHJlYyBjb21wdXRlX25ld19zaXplIHMgPVxuICAgICAgICBpZiBpZHggPCBzIHRoZW4gcyBlbHNlIGNvbXB1dGVfbmV3X3NpemUgKDIgKiBzKVxuICAgICAgaW5cbiAgICAgIGxldCBuZXdfc3ogPSBjb21wdXRlX25ld19zaXplIHN6IGluXG4gICAgICBsZXQgbmV3X3N0ID0gQXJyYXkubWFrZSBuZXdfc3ogT2JqX29wdC5ub25lIGluXG4gICAgICBBcnJheS5ibGl0IHN0IDAgbmV3X3N0IDAgc3o7XG4gICAgICAoKiBXZSB3YW50IGEgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBzYWZlIHdpdGggcmVzcGVjdCB0b1xuICAgICAgICAgc2luZ2xlLWRvbWFpbiBtdWx0aS10aHJlYWRpbmc6IHJldHJ5IGlmIHRoZSBETFMgc3RhdGUgaGFzXG4gICAgICAgICBjaGFuZ2VkIHVuZGVyIG91ciBmZWV0LlxuICAgICAgICAgTm90ZSB0aGF0IHRoZSBudW1iZXIgb2YgcmV0cmllcyB3aWxsIGJlIHZlcnkgc21hbGwgaW5cbiAgICAgICAgIGNvbnRlbmRlZCBzY2VuYXJpb3MsIGFzIHRoZSBhcnJheSBvbmx5IGdyb3dzLCB3aXRoXG4gICAgICAgICBleHBvbmVudGlhbCByZXNpemluZy4gKilcbiAgICAgIGlmIGNvbXBhcmVfYW5kX3NldF9kbHNfc3RhdGUgc3QgbmV3X3N0XG4gICAgICB0aGVuIG5ld19zdFxuICAgICAgZWxzZSBtYXliZV9ncm93IGlkeFxuICAgIGVuZFxuXG4gIGxldCBzZXQgKHR5cGUgYSkgKGlkeCwgX2luaXQpICh4IDogYSkgPVxuICAgIGxldCBzdCA9IG1heWJlX2dyb3cgaWR4IGluXG4gICAgKCogW1N5cy5vcGFxdWVfaWRlbnRpdHldIGVuc3VyZXMgdGhhdCBmbGFtYmRhIGRvZXMgbm90IGxvb2sgYXQgdGhlIHR5cGUgb2ZcbiAgICAgKiBbeF0sIHdoaWNoIG1heSBiZSBhIFtmbG9hdF0gYW5kIGNvbmNsdWRlIHRoYXQgdGhlIFtzdF0gaXMgYSBmbG9hdCBhcnJheS5cbiAgICAgKiBXZSBkbyBub3Qgd2FudCBPQ2FtbCdzIGZsb2F0IGFycmF5IG9wdGltaXNhdGlvbiBraWNraW5nIGluIGhlcmUuICopXG4gICAgc3QuKGlkeCkgPC0gT2JqX29wdC5zb21lIChTeXMub3BhcXVlX2lkZW50aXR5IHgpXG5cblxuICBsZXRbQGlubGluZSBuZXZlcl0gYXJyYXlfY29tcGFyZV9hbmRfc2V0IGEgaSBvbGR2YWwgbmV3dmFsID1cbiAgICAoKiBOb3RlOiB3ZSBjYW5ub3QgdXNlIFtAcG9sbCBlcnJvcl0gZHVlIHRvIHRoZVxuICAgICAgIGFsbG9jYXRpb25zIG9uIGEuKGkpIGluIHRoZSBEb3VibGVfYXJyYXkgY2FzZS4gKilcbiAgICBsZXQgY3VydmFsID0gYS4oaSkgaW5cbiAgICBpZiBjdXJ2YWwgPT0gb2xkdmFsIHRoZW4gKFxuICAgICAgQXJyYXkudW5zYWZlX3NldCBhIGkgbmV3dmFsO1xuICAgICAgdHJ1ZVxuICAgICkgZWxzZSBmYWxzZVxuXG4gIGxldCBnZXQgKHR5cGUgYSkgKChpZHgsIGluaXQpIDogYSBrZXkpIDogYSA9XG4gICAgbGV0IHN0ID0gbWF5YmVfZ3JvdyBpZHggaW5cbiAgICBsZXQgb2JqID0gc3QuKGlkeCkgaW5cbiAgICBpZiBPYmpfb3B0LmlzX3NvbWUgb2JqXG4gICAgdGhlbiAoT2JqX29wdC51bnNhZmVfZ2V0IG9iaiA6IGEpXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHYgOiBhID0gaW5pdCAoKSBpblxuICAgICAgbGV0IG5ld19vYmogPSBPYmpfb3B0LnNvbWUgKFN5cy5vcGFxdWVfaWRlbnRpdHkgdikgaW5cbiAgICAgICgqIEF0IHRoaXMgcG9pbnQsIFtzdF0gb3IgW3N0LihpZHgpXSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWRcbiAgICAgICAgIGJ5IGFub3RoZXIgdGhyZWFkIG9uIHRoZSBzYW1lIGRvbWFpbi5cblxuICAgICAgICAgSWYgW3N0XSBjaGFuZ2VkLCBpdCB3YXMgcmVzaXplZCBpbnRvIGEgbGFyZ2VyIHZhbHVlLFxuICAgICAgICAgd2UgY2FuIGp1c3QgcmV1c2UgdGhlIG5ldyB2YWx1ZS5cblxuICAgICAgICAgSWYgW3N0LihpZHgpXSBjaGFuZ2VkLCB3ZSBkcm9wIHRoZSBjdXJyZW50IHZhbHVlIHRvIGF2b2lkXG4gICAgICAgICBsZXR0aW5nIG90aGVyIHRocmVhZHMgb2JzZXJ2ZSBhICdyZXZlcnQnIHRoYXQgZm9yZ2V0c1xuICAgICAgICAgcHJldmlvdXMgbW9kaWZpY2F0aW9ucy4gKilcbiAgICAgIGxldCBzdCA9IGdldF9kbHNfc3RhdGUgKCkgaW5cbiAgICAgIGlmIGFycmF5X2NvbXBhcmVfYW5kX3NldCBzdCBpZHggb2JqIG5ld19vYmpcbiAgICAgIHRoZW4gdlxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICAoKiBpZiBzdC4oaWR4KSBjaGFuZ2VkLCBzb21lb25lIG11c3QgaGF2ZSBpbml0aWFsaXplZFxuICAgICAgICAgICB0aGUga2V5IGluIHRoZSBtZWFudGltZS4gKilcbiAgICAgICAgbGV0IHVwZGF0ZWRfb2JqID0gc3QuKGlkeCkgaW5cbiAgICAgICAgaWYgT2JqX29wdC5pc19zb21lIHVwZGF0ZWRfb2JqXG4gICAgICAgIHRoZW4gKE9ial9vcHQudW5zYWZlX2dldCB1cGRhdGVkX29iaiA6IGEpXG4gICAgICAgIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICAgICBlbmRcbiAgICBlbmRcblxuICB0eXBlIGtleV92YWx1ZSA9IEtWIDogJ2Ega2V5ICogJ2EgLT4ga2V5X3ZhbHVlXG5cbiAgbGV0IGdldF9pbml0aWFsX2tleXMgKCkgOiBrZXlfdmFsdWUgbGlzdCA9XG4gICAgTGlzdC5tYXBcbiAgICAgIChmdW4gKEtJIChrLCBzcGxpdCkpIC0+IEtWIChrLCAoc3BsaXQgKGdldCBrKSkpKVxuICAgICAgKEF0b21pYy5nZXQgcGFyZW50X2tleXMpXG5cbiAgbGV0IHNldF9pbml0aWFsX2tleXMgKGw6IGtleV92YWx1ZSBsaXN0KSA9XG4gICAgTGlzdC5pdGVyIChmdW4gKEtWIChrLCB2KSkgLT4gc2V0IGsgdikgbFxuZW5kXG5cbigqKioqKioqKiBJZGVudGl0eSAqKioqKioqKioqKVxuXG5sZXQgZ2V0X2lkIHsgZG9tYWluOyBfIH0gPSBkb21haW5cblxubGV0IHNlbGYgKCkgPSBSYXcuc2VsZiAoKVxuXG5sZXQgaXNfbWFpbl9kb21haW4gKCkgPSAoc2VsZiAoKSA6PiBpbnQpID0gMFxuXG4oKioqKioqKiogQ2FsbGJhY2tzICoqKioqKioqKiopXG5cbigqIGZpcnN0IHNwYXduLCBkb21haW4gc3RhcnR1cCBhbmQgYXQgZXhpdCBmdW5jdGlvbmFsaXR5ICopXG5sZXQgZmlyc3RfZG9tYWluX3NwYXduZWQgPSBBdG9taWMubWFrZSBmYWxzZVxuXG5sZXQgZmlyc3Rfc3Bhd25fZnVuY3Rpb24gPSByZWYgKGZ1biAoKSAtPiAoKSlcblxubGV0IGJlZm9yZV9maXJzdF9zcGF3biBmID1cbiAgaWYgQXRvbWljLmdldCBmaXJzdF9kb21haW5fc3Bhd25lZCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJmaXJzdCBkb21haW4gYWxyZWFkeSBzcGF3bmVkXCIpXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgb2xkX2YgPSAhZmlyc3Rfc3Bhd25fZnVuY3Rpb24gaW5cbiAgICBsZXQgbmV3X2YgKCkgPSBvbGRfZiAoKTsgZiAoKSBpblxuICAgIGZpcnN0X3NwYXduX2Z1bmN0aW9uIDo9IG5ld19mXG4gIGVuZFxuXG5sZXQgZG9fYmVmb3JlX2ZpcnN0X3NwYXduICgpID1cbiAgaWYgbm90IChBdG9taWMuZ2V0IGZpcnN0X2RvbWFpbl9zcGF3bmVkKSB0aGVuIGJlZ2luXG4gICAgQXRvbWljLnNldCBmaXJzdF9kb21haW5fc3Bhd25lZCB0cnVlO1xuICAgICFmaXJzdF9zcGF3bl9mdW5jdGlvbigpO1xuICAgICgqIFJlbGVhc2UgdGhlIG9sZCBmdW5jdGlvbiAqKVxuICAgIGZpcnN0X3NwYXduX2Z1bmN0aW9uIDo9IChmdW4gKCkgLT4gKCkpXG4gIGVuZFxuXG5sZXQgYXRfZXhpdF9rZXkgPSBETFMubmV3X2tleSAoZnVuICgpIC0+IChmdW4gKCkgLT4gKCkpKVxuXG5sZXQgYXRfZXhpdCBmID1cbiAgbGV0IG9sZF9leGl0IDogdW5pdCAtPiB1bml0ID0gRExTLmdldCBhdF9leGl0X2tleSBpblxuICBsZXQgbmV3X2V4aXQgKCkgPVxuICAgIGYgKCk7IG9sZF9leGl0ICgpXG4gIGluXG4gIERMUy5zZXQgYXRfZXhpdF9rZXkgbmV3X2V4aXRcblxubGV0IGRvX2F0X2V4aXQgKCkgPVxuICBsZXQgZiA6IHVuaXQgLT4gdW5pdCA9IERMUy5nZXQgYXRfZXhpdF9rZXkgaW5cbiAgZiAoKVxuXG5sZXQgXyA9IFN0ZGxpYi5kb19kb21haW5fbG9jYWxfYXRfZXhpdCA6PSBkb19hdF9leGl0XG5cbigqKioqKioqIENyZWF0aW9uIGFuZCBUZXJtaW5hdGlvbiAqKioqKioqKilcblxubGV0IHNwYXduIGYgPVxuICBkb19iZWZvcmVfZmlyc3Rfc3Bhd24gKCk7XG4gIGxldCBwayA9IERMUy5nZXRfaW5pdGlhbF9rZXlzICgpIGluXG5cbiAgKCogW3Rlcm1fc3luY10gaXMgdXNlZCB0byBzeW5jaHJvbml6ZSB3aXRoIHRoZSBqb2luaW5nIGRvbWFpbnMgKilcbiAgbGV0IHRlcm1fc3luYyA9XG4gICAgUmF3Lnsgc3RhdGUgPSBSdW5uaW5nIDtcbiAgICAgICAgICBtdXQgPSBNdXRleC5jcmVhdGUgKCkgO1xuICAgICAgICAgIGNvbmQgPSBDb25kaXRpb24uY3JlYXRlICgpIH1cbiAgaW5cblxuICBsZXQgYm9keSAoKSA9XG4gICAgbWF0Y2hcbiAgICAgIERMUy5jcmVhdGVfZGxzICgpO1xuICAgICAgRExTLnNldF9pbml0aWFsX2tleXMgcGs7XG4gICAgICBsZXQgcmVzID0gZiAoKSBpblxuICAgICAgcmVzXG4gICAgd2l0aFxuICAgICgqIFJ1biB0aGUgW2F0X2V4aXRdIGNhbGxiYWNrcyB3aGVuIHRoZSBkb21haW4gY29tcHV0YXRpb24gZWl0aGVyXG4gICAgICAgdGVybWluYXRlcyBub3JtYWxseSBvciBleGNlcHRpb25hbGx5LiAqKVxuICAgIHwgcmVzIC0+XG4gICAgICAgICgqIElmIHRoZSBkb21haW4gY29tcHV0YXRpb24gdGVybWluYXRlZCBub3JtYWxseSwgYnV0IHRoZVxuICAgICAgICAgICBbYXRfZXhpdF0gY2FsbGJhY2tzIHJhaXNlZCBhbiBleGNlcHRpb24sIHRoZW4gcmV0dXJuIHRoZVxuICAgICAgICAgICBleGNlcHRpb24uICopXG4gICAgICAgIGRvX2F0X2V4aXQgKCk7XG4gICAgICAgIHJlc1xuICAgIHwgZXhjZXB0aW9uIGV4biAtPlxuICAgICAgICAoKiBJZiBib3RoIHRoZSBkb21haW4gY29tcHV0YXRpb24gYW5kIHRoZSBbYXRfZXhpdF0gY2FsbGJhY2tzXG4gICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMsIHRoZW4gaWdub3JlIHRoZSBleGNlcHRpb24gZnJvbSB0aGVcbiAgICAgICAgICAgW2F0X2V4aXRdIGNhbGxiYWNrcyBhbmQgcmV0dXJuIHRoZSBvcmlnaW5hbCBleGNlcHRpb24uICopXG4gICAgICAgICh0cnkgZG9fYXRfZXhpdCAoKSB3aXRoIF8gLT4gKCkpO1xuICAgICAgICByYWlzZSBleG5cbiAgaW5cbiAgbGV0IGRvbWFpbiA9IFJhdy5zcGF3biBib2R5IHRlcm1fc3luYyBpblxuICB7IGRvbWFpbiA7IHRlcm1fc3luYyB9XG5cbmxldCBqb2luIHsgdGVybV9zeW5jIDsgXyB9ID1cbiAgbGV0IG9wZW4gUmF3IGluXG4gIGxldCByZWMgbG9vcCAoKSA9XG4gICAgbWF0Y2ggdGVybV9zeW5jLnN0YXRlIHdpdGhcbiAgICB8IFJ1bm5pbmcgLT5cbiAgICAgICAgQ29uZGl0aW9uLndhaXQgdGVybV9zeW5jLmNvbmQgdGVybV9zeW5jLm11dDtcbiAgICAgICAgbG9vcCAoKVxuICAgIHwgRmluaXNoZWQgcmVzIC0+XG4gICAgICAgIHJlc1xuICBpblxuICBtYXRjaCBNdXRleC5wcm90ZWN0IHRlcm1fc3luYy5tdXQgbG9vcCB3aXRoXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgZXggLT4gcmFpc2UgZXhcblxubGV0IHJlY29tbWVuZGVkX2RvbWFpbl9jb3VudCA9IFJhdy5nZXRfcmVjb21tZW5kZWRfZG9tYWluX2NvdW50XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX2RvbWFpbl9kbHNfZ2V0IiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2RvbWFpbl9pZCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9Db25kaXRpb24iLCJTdGRsaWJfTXV0ZXgiLCJTdGRsaWJfQXRvbWljIiwiU3RkbGliIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX0xpc3QiLCJBc3NlcnRfZmFpbHVyZSIsImNwdV9yZWxheCIsInBhcmFtIiwibm9uZSIsImNyZWF0ZV9kbHMiLCJzdCIsImtleV9jb3VudGVyIiwicGFyZW50X2tleXMiLCJuZXdfa2V5Iiwic3BsaXRfZnJvbV9wYXJlbnQiLCJpbml0X29ycGhhbiIsImlkeCIsImsiLCJzcGxpdCIsImtpIiwibCIsIm1heWJlX2dyb3ciLCJzeiIsIm5ld19zeiIsIm5ld19zdCIsInMiLCJzZXQiLCJ4IiwiZ2V0IiwiaW5pdCIsIm9sZHZhbCIsIm5ld19vYmoiLCJjdXJ2YWwiLCJ1cGRhdGVkX29iaiIsInNldF9pbml0aWFsX2tleXMiLCJ2IiwiZ2V0X2lkIiwiZG9tYWluIiwic2VsZiIsImlzX21haW5fZG9tYWluIiwiZmlyc3RfZG9tYWluX3NwYXduZWQiLCJmaXJzdF9zcGF3bl9mdW5jdGlvbiIsImJlZm9yZV9maXJzdF9zcGF3biIsIm9sZF9mIiwibmV3X2YiLCJhdF9leGl0X2tleSIsImF0X2V4aXQiLCJvbGRfZXhpdCIsIm5ld19leGl0IiwiZG9fYXRfZXhpdCIsInNwYXduIiwicGsiLCJ0ZXJtX3N5bmMiLCJib2R5IiwicmVzIiwiZXhuIiwiam9pbiIsImxvb3AiLCJtYXRjaCIsImV4IiwicmVjb21tZW5kZWRfZG9tYWluX2NvdW50Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLFlBQUFDLFVBQUFDLE9DOENtQiwwQ0FBZ0I7QUFBQSxPQUFBQyxPRDlDbkM7QUFBQSxZQUFBQyxXQUFBRjtBQUFBQSxRQUFBRyxLQ3dGYTtBQUFBLElBQ1Q7QUFBQSxHQUFnQjtBQUFBLEdBRVY7QUFBQTtBQUFBLElBQUFDLGNBSVU7QUFBQSxJQUFBQyxjQUtBO0FBQUEsWUFBQUMsUUFBQUMsbUJBQUFDO0FBQUFBO0FBQUFBLEtBQUFDLE1BUU47QUFBQSxLQUFBQyxJQUNWO0FBQUEsSUFDQTtBQUFBLFNBQUFDLFFBQUEsc0JBQUFDLEtBRWdCO0FBQUEsS0FUaEI7QUFBQSxVQUFBQyxJQUFRO0FBQUEsTUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBLElBVVA7QUFBQSxHQUFDO0FBQUEsWUFBQUMsV0FBQUw7QUFBQUEsSUFLRDtBQUFBLFNBQUFOLEtBQUEsd0JBQUFZLEtBQ0E7QUFBQSxLQUNBLGFBQWlCO0FBQUEsU0FBQUMsU0FBakI7QUFBQTtBQUFBLE1BR0k7QUFBQSxXQUFBQyxTQUdXO0FB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QUFBQSxFRHRPeEQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxODg4NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmJcblxuKCogQ29tcHV0ZSBhIHBhZGRpbmcgYXNzb2NpYXRlZCB0byBhIHBhZF9vcHRpb24gKHNlZSBcIiVfNDJkXCIpLiAqKVxubGV0IHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3BhZGRpbmdcbiAgfCBTb21lIHdpZHRoIC0+IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG5cbigqIENvbXB1dGUgYSBwcmVjaXNpb24gYXNzb2NpYXRlZCB0byBhIHByZWNfb3B0aW9uIChzZWUgXCIlXy40MmZcIikuICopXG5sZXQgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCA9IG1hdGNoIHByZWNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3ByZWNpc2lvblxuICB8IFNvbWUgbmRlYyAtPiBMaXRfcHJlY2lzaW9uIG5kZWNcblxuKCogVHVybiBhbiBpZ25vcmVkIHBhcmFtIGludG8gaXRzIGVxdWl2YWxlbnQgbm90LWlnbm9yZWQgZm9ybWF0IG5vZGUuICopXG4oKiBVc2VkIGZvciBmb3JtYXQgcHJldHR5LXByaW50aW5nIGFuZCBTY2FuZi4gKilcbmxldCBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT4gKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhcmFtX2Zvcm1hdF9lYmIgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDaGFyIGZtdClcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfY2hhciBmbXQpXG4gIHwgSWdub3JlZF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFN0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX3N0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2ludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoSW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50MzIgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQzMiAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKE5hdGl2ZWludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDY0IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50NjQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9mbG9hdCAocGFkX29wdCwgcHJlY19vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZsb2F0ICgoRmxvYXRfZmxhZ18sIEZsb2F0X2YpLFxuICAgICAgICAgICAgICBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfYm9vbCBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQm9vbCAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFJlYWRlciBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX25leHRfY2hhciBmbXQpXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGVzICopXG5cbnR5cGUgKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuID1cbiAgfCBBY2Nfb3Blbl90YWcgb2YgKCdiLCAnYykgYWNjXG4gIHwgQWNjX29wZW5fYm94IG9mICgnYiwgJ2MpIGFjY1xuXG4oKiBSZXZlcnNlZCBsaXN0IG9mIHByaW50aW5nIGF0b21zLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHByaW50ZiBhcmd1bWVudHMuICopXG5hbmQgKCdiLCAnYykgYWNjID1cbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgb2YgKCdiLCAnYykgYWNjICogZm9ybWF0dGluZ19saXRcbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW5cbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIExpdGVyYWwgc3RyaW5nICopXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogTGl0ZXJhbCBjaGFyICopXG4gIHwgQWNjX2RhdGFfc3RyaW5nICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogR2VuZXJhdGVkIHN0cmluZyAqKVxuICB8IEFjY19kYXRhX2NoYXIgICAgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIEdlbmVyYXRlZCBjaGFyICopXG4gIHwgQWNjX2RlbGF5ICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAqICgnYiAtPiAnYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIERlbGF5ZWQgcHJpbnRpbmcgKCVhLCAldCkgKilcbiAgfCBBY2NfZmx1c2ggICAgICAgICAgb2YgKCdiLCAnYykgYWNjICAgICAgICAgICAgICAoKiBGbHVzaCAqKVxuICB8IEFjY19pbnZhbGlkX2FyZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmdcbiAgICAgICgqIFJhaXNlIEludmFsaWRfYXJndW1lbnQgbXNnICopXG4gIHwgRW5kX29mX2FjY1xuXG4oKiBMaXN0IG9mIGhldGVyb2dlbmVvdXMgdmFsdWVzLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHNjYW5mIGNhbGxiYWNrIGFyZ3VtZW50cy4gKilcbnR5cGUgKCdhLCAnYikgaGV0ZXJfbGlzdCA9XG4gIHwgQ29ucyA6ICdjICogKCdhLCAnYikgaGV0ZXJfbGlzdCAtPiAoJ2MgLT4gJ2EsICdiKSBoZXRlcl9saXN0XG4gIHwgTmlsIDogKCdiLCAnYikgaGV0ZXJfbGlzdFxuXG4oKiBFeGlzdGVudGlhbCBCbGFjayBCb3hlcy4gKilcbigqIFVzZWQgdG8gYWJzdHJhY3Qgc29tZSBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlcnMuICopXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZGRpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9IFBhZGRpbmdfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZHByZWMgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9IFBhZHByZWNfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3opIHByZWNpc2lvbiAqICgneiwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkZGluZ19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmIgPSBQYWRkaW5nX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHBhZGRpbmcgKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYiA9IFByZWNpc2lvbl9mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYiA9IFBhZHByZWNfZm10X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdwIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCB0aGUgJ2EgYW5kICdkIHBhcmFtZXRlcnMgb2YgYW4gZm10LiAqKVxuKCogT3V0cHV0IHR5cGUgb2YgdGhlIGZvcm1hdCBwYXJzaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmIgPSBGbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfZm9ybWF0X2dlbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgPSBGbXRfZm10dHlfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdCAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiID0gRm10dHlfZm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXR0eSAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXRfZm10dHlfZWJiIC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBmbXR0eSB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgZm9ybWF0IHR5cGVzLiAqKVxudHlwZSBmbXR0eV9lYmIgPSBGbXR0eV9FQkIgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT4gZm10dHlfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwYWRkaW5nIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwYWRkaW5ncy4gKilcbnR5cGUgcGFkZGluZ19lYmIgPSBQYWRkaW5nX0VCQiA6ICgnYSwgJ2IpIHBhZGRpbmcgLT4gcGFkZGluZ19lYmJcblxuKCogQWJzdHJhY3QgYWxsIHByZWNpc2lvbiB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcHJlY2lzaW9ucy4gKilcbnR5cGUgcHJlY2lzaW9uX2ViYiA9IFByZWNpc2lvbl9FQkIgOiAoJ2EsICdiKSBwcmVjaXNpb24gLT4gcHJlY2lzaW9uX2ViYlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnN0YW50cyAqKVxuXG4oKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgcHJpbnRpbmcuICopXG5sZXQgZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYgPVxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIHwgRmxvYXRfaCB8IEZsb2F0X0hcbiAgfCBGbG9hdF9DRiAtPiAtNlxuICAoKiBGb3IgJWggJUggYW5kICUjRiBmb3JtYXRzLCBhIG5lZ2F0aXZlIHByZWNpc2lvbiBtZWFucyBcImFzIG1hbnkgZGlnaXRzIGFzXG4gICAgIG5lY2Vzc2FyeVwiLiAgRm9yIHRoZSBvdGhlciBGUCBmb3JtYXRzLCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgICBvZiB0aGUgcHJlY2lzaW9uLCBoZW5jZSA2IGRpZ2l0cyBieSBkZWZhdWx0LiAqKVxuICB8IEZsb2F0X0YgLT4gMTJcbiAgKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIE9DYW1sIGZsb2F0IHByaW50aW5nICglRikuICopXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXh0ZXJuYWxzICopXG5cbmV4dGVybmFsIGZvcm1hdF9mbG9hdDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfaW50MzI6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9uYXRpdmVpbnQ6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDY0OiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5leHRlcm5hbCBoZXhzdHJpbmdfb2ZfZmxvYXQ6IGZsb2F0IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXRcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgKCogVG9vbHMgdG8gcHJldHR5LXByaW50IGZvcm1hdHMgKilcblxuKCogVHlwZSBvZiBleHRlbnNpYmxlIGNoYXJhY3RlciBidWZmZXJzLiAqKVxudHlwZSBidWZmZXIgPSB7XG4gIG11dGFibGUgaW5kIDogaW50O1xuICBtdXRhYmxlIGJ5dGVzIDogYnl0ZXM7XG59XG5cbigqIENyZWF0ZSBhIGZyZXNoIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY3JlYXRlIGluaXRfc2l6ZSA9IHsgaW5kID0gMDsgYnl0ZXMgPSBCeXRlcy5jcmVhdGUgaW5pdF9zaXplIH1cblxuKCogQ2hlY2sgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCBncm93IGl0IGlmIG5lZWRlZC4gKilcbmxldCBidWZmZXJfY2hlY2tfc2l6ZSBidWYgb3ZlcmhlYWQgPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1Zi5ieXRlcyBpblxuICBsZXQgbWluX2xlbiA9IGJ1Zi5pbmQgKyBvdmVyaGVhZCBpblxuICBpZiBtaW5fbGVuID4gbGVuIHRoZW4gKFxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1heCAobGVuICogMikgbWluX2xlbiBpblxuICAgIGxldCBuZXdfc3RyID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1Zi5ieXRlcyAwIG5ld19zdHIgMCBsZW47XG4gICAgYnVmLmJ5dGVzIDwtIG5ld19zdHI7XG4gIClcblxuKCogQWRkIHRoZSBjaGFyYWN0ZXIgYGMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjID1cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIDE7XG4gIEJ5dGVzLnNldCBidWYuYnl0ZXMgYnVmLmluZCBjO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyAxXG5cbigqIEFkZCB0aGUgc3RyaW5nIGBzJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzID1cbiAgbGV0IHN0cl9sZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIHN0cl9sZW47XG4gIFN0cmluZy5ibGl0IHMgMCBidWYuYnl0ZXMgYnVmLmluZCBzdHJfbGVuO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyBzdHJfbGVuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jb250ZW50cyBidWYgPVxuICBCeXRlcy5zdWJfc3RyaW5nIGJ1Zi5ieXRlcyAwIGJ1Zi5pbmRcblxuKCoqKilcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2ljb252IGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkIHwgSW50X0NkIC0+ICdkJyB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpXG4gIHwgSW50X0NpIC0+ICdpJyB8IEludF94IHwgSW50X0N4IC0+ICd4JyB8IEludF9YIHwgSW50X0NYIC0+ICdYJyB8IEludF9vXG4gIHwgSW50X0NvIC0+ICdvJyB8IEludF91IHwgSW50X0N1IC0+ICd1J1xuXG4oKiBDb252ZXJ0IGEgZmxvYXQgY29udmVyc2lvbiB0byBjaGFyLiAqKVxuKCogYGNGJyB3aWxsIGJlICdGJyBmb3IgZGlzcGxheWluZyBmb3JtYXQgYW5kICdnJyB0byBjYWxsIGxpYmMgcHJpbnRmICopXG5sZXQgY2hhcl9vZl9mY29udiA/KGNGPSdGJykgZmNvbnYgPSBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgLT4gJ2YnIHwgRmxvYXRfZSAtPiAnZSdcbiAgfCBGbG9hdF9FIC0+ICdFJyB8IEZsb2F0X2cgLT4gJ2cnXG4gIHwgRmxvYXRfRyAtPiAnRycgfCBGbG9hdF9GIC0+IGNGXG4gIHwgRmxvYXRfaCAtPiAnaCcgfCBGbG9hdF9IIC0+ICdIJ1xuICB8IEZsb2F0X0NGIC0+ICdGJ1xuXG5cbigqIENvbnZlcnQgYSBzY2FubmluZyBjb3VudGVyIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIgPSBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgIC0+ICdsJ1xuICB8IENoYXJfY291bnRlciAgLT4gJ24nXG4gIHwgVG9rZW5fY291bnRlciAtPiAnTidcblxuKCoqKilcblxuKCogUHJpbnQgYSBjaGFyX3NldCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBPQ2FtbCBmb3JtYXQgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQgPVxuICBsZXQgcmVjIHByaW50X3N0YXJ0IHNldCA9XG4gICAgbGV0IGlzX2Fsb25lIGMgPVxuICAgICAgbGV0IGJlZm9yZSwgYWZ0ZXIgPSBDaGFyLihjaHIgKGNvZGUgYyAtIDEpLCBjaHIgKGNvZGUgYyArIDEpKSBpblxuICAgICAgaXNfaW5fY2hhcl9zZXQgc2V0IGNcbiAgICAgICYmIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IGJlZm9yZSAmJiBpc19pbl9jaGFyX3NldCBzZXQgYWZ0ZXIpIGluXG4gICAgaWYgaXNfYWxvbmUgJ10nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSc7XG4gICAgcHJpbnRfb3V0IHNldCAxO1xuICAgIGlmIGlzX2Fsb25lICctJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nO1xuICBhbmQgcHJpbnRfb3V0IHNldCBpID1cbiAgICBpZiBpIDwgMjU2IHRoZW5cbiAgICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlbiBwcmludF9maXJzdCBzZXQgaVxuICAgICAgZWxzZSBwcmludF9vdXQgc2V0IChpICsgMSlcbiAgYW5kIHByaW50X2ZpcnN0IHNldCBpID1cbiAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICdcXDI1NScgLT4gcHJpbnRfY2hhciBidWYgMjU1O1xuICAgIHwgJ10nIHwgJy0nIC0+IHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICB8IF8gLT4gcHJpbnRfc2Vjb25kIHNldCAoaSArIDEpO1xuICBhbmQgcHJpbnRfc2Vjb25kIHNldCBpID1cbiAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW5cbiAgICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgICAgfCAnXFwyNTUnIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NDtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU1O1xuICAgICAgfCAnXScgfCAnLScgd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICAgIHwgXyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDIpO1xuICAgICAgfCBfIC0+XG4gICAgICAgIHByaW50X2luIHNldCAoaSAtIDEpIChpICsgMik7XG4gICAgZWxzZSAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIClcbiAgYW5kIHByaW50X2luIHNldCBpIGogPVxuICAgIGlmIGogPSAyNTYgfHwgbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGopKSB0aGVuIChcbiAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaW50X29mX2NoYXIgJy0nKTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChqIC0gMSk7XG4gICAgICBpZiBqIDwgMjU2IHRoZW4gcHJpbnRfb3V0IHNldCAoaiArIDEpO1xuICAgICkgZWxzZVxuICAgICAgcHJpbnRfaW4gc2V0IGkgKGogKyAxKTtcbiAgYW5kIHByaW50X2NoYXIgYnVmIGkgPSBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICclJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgfCAnQCcgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0AnO1xuICAgIHwgYyAgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgaW5cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnWyc7XG4gIHByaW50X3N0YXJ0IChcbiAgICBpZiBpc19pbl9jaGFyX3NldCBjaGFyX3NldCAnXFwwMDAnXG4gICAgdGhlbiAoIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ14nOyByZXZfY2hhcl9zZXQgY2hhcl9zZXQgKVxuICAgIGVsc2UgY2hhcl9zZXRcbiAgKTtcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSdcblxuKCoqKilcblxuKCogUHJpbnQgYSBwYWR0eSBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eSA9IG1hdGNoIHBhZHR5IHdpdGhcbiAgfCBMZWZ0ICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICctJ1xuICB8IFJpZ2h0IC0+ICgpXG4gIHwgWmVyb3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnMCdcblxuKCogUHJpbnQgdGhlICdfJyBvZiBhbiBpZ25vcmVkIGZsYWcgaWYgbmVlZGVkLiAqKVxubGV0IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnID1cbiAgaWYgaWduX2ZsYWcgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICdfJ1xuXG4oKioqKVxuXG5sZXQgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB3aWR0aCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgd2lkdGgpXG5cbigqKiopXG5cbigqIFByaW50IHBhZGRpbmcgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWRkaW5nIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHBhZGRpbmcgLT4gdW5pdCA9XG5mdW4gYnVmIHBhZCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT4gKClcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIG4pIC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyonXG5cbigqIFByaW50IHByZWNpc2lvbiBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3ByZWNpc2lvbiA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwcmVjaXNpb24gLT4gdW5pdCA9XG4gIGZ1biBidWYgcHJlYyAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gLT4gKClcbiAgfCBMaXRfcHJlY2lzaW9uIG4gLT5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIi4qXCJcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIG9yICcjJyBhc3NvY2lhdGVkIHRvIGFuIGludCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfcGQgfCBJbnRfcGkgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBJbnRfc2QgfCBJbnRfc2kgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBJbnRfQ3ggfCBJbnRfQ1ggfCBJbnRfQ28gfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgSW50X2QgfCBJbnRfaSB8IEludF94IHwgSW50X1ggfCBJbnRfbyB8IEludF91IC0+ICgpXG5cbigqIFByaW50IGFuIGNvbXBsZXRlIGludCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUzLipkXCIpLiAqKVxubGV0IGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyBjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIGFuZC9vciAnIycgYXNzb2NpYXRlZCB0byBhIGZsb2F0IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252ID1cbiAgYmVnaW4gbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgfCBGbG9hdF9mbGFnX3AgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBGbG9hdF9mbGFnX3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBGbG9hdF9mbGFnXyAtPiAoKSBlbmQ7XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfQ0YgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfR1xuICB8IEZsb2F0X0YgfCBGbG9hdF9oIHwgRmxvYXRfSCAtPiAoKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZsb2F0IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJSsqLjNmXCIpLiAqKVxubGV0IGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfZmNvbnYgZmNvbnYpXG5cbigqIENvbXB1dGUgdGhlIGxpdGVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRm9ybWF0dGluZ19saXQuICopXG4oKiBVc2VkIGJ5IFByaW50ZiBhbmQgU2NhbmYgd2hlcmUgZm9ybWF0dGluZyBpcyBub3QgaW50ZXJwcmV0ZWQuICopXG5sZXQgc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0ID0gbWF0Y2ggZm9ybWF0dGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgIC0+IFwiQF1cIlxuICB8IENsb3NlX3RhZyAgICAgICAgICAgIC0+IFwiQH1cIlxuICB8IEJyZWFrIChzdHIsIF8sIF8pICAgIC0+IHN0clxuICB8IEZGbHVzaCAgICAgICAgICAgICAgIC0+IFwiQD9cIlxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgIC0+IFwiQFxcblwiXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgLT4gXCJALlwiXG4gIHwgTWFnaWNfc2l6ZSAoc3RyLCBfKSAgLT4gc3RyXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgLT4gXCJAQFwiXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgLT4gXCJAJVwiXG4gIHwgU2Nhbl9pbmRpYyBjIC0+IFwiQFwiIF4gKFN0cmluZy5tYWtlIDEgYylcblxuKCoqKilcblxuKCogUHJpbnQgYSBsaXRlcmFsIGNoYXIgaW4gYSBidWZmZXIsIGVzY2FwZSAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNociA9IG1hdGNoIGNociB3aXRoXG4gIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUlXCJcbiAgfCBfIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgY2hyXG5cbigqIFByaW50IGEgbGl0ZXJhbCBzdHJpbmcgaW4gYSBidWZmZXIsIGVzY2FwZSBhbGwgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0ciA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHN0ciAtIDEgZG9cbiAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBzdHIuW2ldXG4gIGRvbmVcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHByZXR0eS1wcmludGluZyAqKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCB0eXBlIChhbiBmbXR0eSkgaW4gYSBidWZmZXIuICopXG5sZXQgcmVjIGJwcmludF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAgIGJ1ZmZlciAtPiAoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IHVuaXQgPVxuZnVuIGJ1ZiBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlc1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludF90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVpXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbmlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDY0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVMaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWZcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBCb29sX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlQlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFscGhhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVhXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXRcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlP1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFJlYWRlcl90eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVyXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJV9yXCI7XG4gICAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV7XCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV9XCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eSwgXywgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKFwiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBFbmRfb2ZfZm10dHkgLT4gKClcblxuKCoqKilcblxubGV0IHJlYyBpbnRfb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSBhIGIgYyAuXG4gIChhLCBiLCBjKSBjdXN0b21fYXJpdHkgLT4gaW50ID1cbiAgZnVuY3Rpb25cbiAgfCBDdXN0b21femVybyAtPiAwXG4gIHwgQ3VzdG9tX3N1Y2MgeCAtPiAxICsgaW50X29mX2N1c3RvbV9hcml0eSB4XG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9mbXQgYnVmIGZtdCA9XG4gIGxldCByZWMgZm10aXRlciA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBib29sIC0+IHVuaXQgPVxuICBmdW4gZm10IGlnbl9mbGFnIC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ24nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ0wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdjJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdCJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2EnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICd0JzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgIGZvciBfaSA9IDEgdG8gaW50X29mX2N1c3RvbV9hcml0eSBhcml0eSBkb1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJz8nO1xuICAgICAgZG9uZTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFJlYWRlciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdyJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSFcIjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3snO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ30nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICcoJztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICcpJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiB3aWR0aF9vcHQ7IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQ7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIpO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBcIjBjXCI7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgICAgZm10aXRlciBmbXQnIHRydWU7XG5cbiAgICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQpO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBmbXRpbmdfZ2VuIHdpdGhcbiAgICAgIHwgT3Blbl90YWcgKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQHtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgfCBPcGVuX2JveCAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAW1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICBlbmQ7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEVuZF9vZl9mb3JtYXQgLT4gKClcblxuICBpbiBmbXRpdGVyIGZtdCBmYWxzZVxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHRvIHN0cmluZy4gKilcbmxldCBzdHJpbmdfb2ZfZm10IGZtdCA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXQgYnVmIGZtdDtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlIGV4dHJhY3Rpb24gKilcblxudHlwZSAoXywgXykgZXEgPSBSZWZsIDogKCdhLCAnYSkgZXFcblxuKCogSW52YXJpYW50OiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBpZGVudGl0eSBvbiB2YWx1ZXMuXG5cbiAgIEluIHBhcnRpY3VsYXIsIGlmICh0eTEsIHR5MikgaGF2ZSBlcXVhbCB2YWx1ZXMsIHRoZW5cbiAgICh0cmFucyAoc3ltbSB0eTEpIHR5MikgcmVzcGVjdHMgdGhlICd0cmFucycgcHJlY29uZGl0aW9uLiAqKVxubGV0IHJlYyBzeW1tIDogdHlwZSBhMSBiMSBjMSBkMSBlMSBmMSBhMiBiMiBjMiBkMiBlMiBmMiAuXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdHR5X3JlbFxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPiBDaGFyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT4gSW50X3R5IChzeW1tIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPiBJbnQzMl90eSAoc3ltbSByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT4gSW50NjRfdHkgKHN5bW0gcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBOYXRpdmVpbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+IEZsb2F0X3R5IChzeW1tIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+IEJvb2xfdHkgKHN5bW0gcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPiBTdHJpbmdfdHkgKHN5bW0gcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+IFRoZXRhX3R5IChzeW1tIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPiBBbHBoYV90eSAoc3ltbSByZXN0KVxuICB8IEFueV90eSByZXN0IC0+IEFueV90eSAoc3ltbSByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+IFJlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT4gSWdub3JlZF9yZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgc3ltbSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIsIHR5MSwgc3ltbSByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxubGV0IHJlYyBmbXR0eV9yZWxfZGV0IDogdHlwZSBhMSBiIGMgZDEgZTEgZjEgYTIgZDIgZTIgZjIgLlxuICAoYTEsIGIsIGMsIGQxLCBlMSwgZjEsXG4gICBhMiwgYiwgYywgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKChmMSwgZjIpIGVxIC0+IChhMSwgYTIpIGVxKVxuICAqICgoYTEsIGEyKSBlcSAtPiAoZjEsIGYyKSBlcSlcbiAgKiAoKGUxLCBlMikgZXEgLT4gKGQxLCBkMikgZXEpXG4gICogKChkMSwgZDIpIGVxIC0+IChlMSwgZTIpIGVxKVxuPSBmdW5jdGlvblxuICB8IEVuZF9vZl9mbXR0eSAtPlxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKVxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG5cbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBGb3JtYXRfYXJnX3R5IChfdHksIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBsZXQgYWcsIGdhLCBkaiwgamQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBsZXQgUmVmbCA9IGFnIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZ2EgUmVmbCBpbiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBsZXQgUmVmbCA9IGRqIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gamQgUmVmbCBpbiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcblxuKCogUHJlY29uZGl0aW9uOiB3ZSBhc3N1bWUgdGhhdCB0aGUgdHdvIGZtdHR5X3JlbCBhcmd1bWVudHMgaGF2ZSBlcXVhbFxuICAgdmFsdWVzIChhdCBwb3NzaWJseSBkaXN0aW5jdCB0eXBlcyk7IHRoaXMgaW52YXJpYW50IGNvbWVzIGZyb20gdGhlIHdheVxuICAgZm10dHlfcmVsIHdpdG5lc3NlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIHR5cGUtY2hlY2tlclxuXG4gICBUaGUgY29kZSBiZWxvdyB1c2VzIChhc3NlcnQgZmFsc2UpIHdoZW4gdGhpcyBhc3N1bXB0aW9uIGlzIGJyb2tlbi4gVGhlXG4gICBjb2RlIHBhdHRlcm4gaXMgdGhlIGZvbGxvd2luZzpcblxuICAgICB8IEZvbyB4LCBGb28geSAtPlxuICAgICAgICgqIGNhc2Ugd2hlcmUgaW5kZWVkIGJvdGggdmFsdWVzXG4gICAgICAgICAgc3RhcnQgd2l0aCBjb25zdHJ1Y3RvciBGb28gKilcbiAgICAgfCBGb28gXywgX1xuICAgICB8IF8sIEZvbyBfIC0+XG4gICAgICAgKCogZGlmZmVyZW50IGhlYWQgY29uc3RydWN0b3JzOiBicm9rZW4gcHJlY29uZGl0aW9uICopXG4gICAgICAgYXNzZXJ0IGZhbHNlXG4qKVxuYW5kIHRyYW5zIDogdHlwZVxuICBhMSBiMSBjMSBkMSBlMSBmMVxuICBhMiBiMiBjMiBkMiBlMiBmMlxuICBhMyBiMyBjMyBkMyBlMyBmM1xuLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbi0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuPSBmdW4gdHkxIHR5MiAtPiBtYXRjaCB0eTEsIHR5MiB3aXRoXG4gIHwgQ2hhcl90eSByZXN0MSwgQ2hhcl90eSByZXN0MiAtPiBDaGFyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBTdHJpbmdfdHkgcmVzdDEsIFN0cmluZ190eSByZXN0MiAtPiBTdHJpbmdfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEJvb2xfdHkgcmVzdDEsIEJvb2xfdHkgcmVzdDIgLT4gQm9vbF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50X3R5IHJlc3QxLCBJbnRfdHkgcmVzdDIgLT4gSW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQzMl90eSByZXN0MSwgSW50MzJfdHkgcmVzdDIgLT4gSW50MzJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDY0X3R5IHJlc3QxLCBJbnQ2NF90eSByZXN0MiAtPiBJbnQ2NF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QxLCBOYXRpdmVpbnRfdHkgcmVzdDIgLT4gTmF0aXZlaW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBGbG9hdF90eSByZXN0MSwgRmxvYXRfdHkgcmVzdDIgLT4gRmxvYXRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuXG4gIHwgQWxwaGFfdHkgcmVzdDEsIEFscGhhX3R5IHJlc3QyIC0+IEFscGhhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbHBoYV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFscGhhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBUaGV0YV90eSByZXN0MSwgVGhldGFfdHkgcmVzdDIgLT4gVGhldGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFRoZXRhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgVGhldGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEFueV90eSByZXN0MSwgQW55X3R5IHJlc3QyIC0+IEFueV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQW55X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQW55X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBSZWFkZXJfdHkgcmVzdDEsIFJlYWRlcl90eSByZXN0MiAtPiBSZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFJlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFJlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDEsIElnbm9yZWRfcmVhZGVyX3R5IHJlc3QyIC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgSWdub3JlZF9yZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9hcmdfdHkgKHR5MSwgcmVzdDEpLCBGb3JtYXRfYXJnX3R5ICh0eTIsIHJlc3QyKSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHRyYW5zIHR5MSB0eTIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9hcmdfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfYXJnX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MTIsIHJlc3QxKSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MjEsIHR5MjIsIHJlc3QyKSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MTIpIHR5MjEgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkyMiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X3N1YnN0X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBFbmRfb2ZfZm10dHksIEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcbiAgfCBFbmRfb2ZfZm10dHksIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRW5kX29mX2ZtdHR5IC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm9ybWF0dGluZ19nZW4gLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEV4dHJhY3QgdGhlIHR5cGUgcmVwcmVzZW50YXRpb24gKGFuIGZtdHR5KSBvZiBhIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG5cbiAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDMyX3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChOYXRpdmVpbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50NjRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoRmxvYXRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG5cbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBCb29sIChwYWQsIHJlc3QpICAgICAgICAgICAtPlxuICAgICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKEJvb2xfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAtPiBBbHBoYV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gVGhldGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpICAgIC0+IGZtdHR5X29mX2N1c3RvbSBhcml0eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgUmVhZGVyIHJlc3QgICAgICAgICAgICAgICAgLT4gUmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHksIHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT4gU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPiBJbnRfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgIC0+IGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0XG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgIC0+XG4gICAgY29uY2F0X2ZtdHR5IChmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiBmbXRpbmdfZ2VuKSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAtPiBFbmRfb2ZfZm10dHlcblxuYW5kIGZtdHR5X29mX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgKHksIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBhcml0eSBmbXR0eSAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gZm10dHlcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPiBBbnlfdHkgKGZtdHR5X29mX2N1c3RvbSBhcml0eSBmbXR0eSlcblxuKCogRXh0cmFjdCB0aGUgZm10dHkgb2YgYW4gaWdub3JlZCBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2ZcbiAgIHRoZSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBjb25jYXRfZm10dHkgZm10dHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBJZ25vcmVkX3JlYWRlcl90eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHBhZGRpbmcgaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqc1wiKS4gKilcbmFuZCBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3BhZGRpbmcgXyAtPiBmbXR0eVxuICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBJbnRfdHkgZm10dHlcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKS4qKVxuYW5kIGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgfCBOb19wcmVjaXNpb24gICAgLT4gZm10dHlcbiAgICB8IExpdF9wcmVjaXNpb24gXyAtPiBmbXR0eVxuICAgIHwgQXJnX3ByZWNpc2lvbiAgIC0+IEludF90eSBmbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBpbmcgKilcblxuKCogRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZm9ybWF0IGRvZXMgbm90IG1hdGNoIGEgZ2l2ZW4gZm9ybWF0IHR5cGUuICopXG5leGNlcHRpb24gVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgcGFkZGluZy4gKilcbigqIFRha2UgYW4gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIHRoZSBpbnRlZ2VyIHNob3VsZCBiZSBrZXB0IGFzIGFyZ3VtZW50LiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRkaW5nIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZGRpbmdfZm10dHlfZWJiID1cbmZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkLCBmbXR0eSB3aXRoXG4gIHwgTm9fcGFkZGluZywgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTm9fcGFkZGluZywgZm10dHkpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTGl0X3BhZGRpbmcgKHBhZHR5LHcpLGZtdHR5KVxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBJbnRfdHkgcmVzdCAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoQXJnX3BhZGRpbmcgcGFkdHkscmVzdClcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogQ29udmVydCBhICh1cGFkZGluZywgdXByZWNpc2lvbikgdG8gYSAocGFkZGluZywgcHJlY2lzaW9uKS4gKilcbigqIFRha2Ugb25lIG9yIHR3byBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgbmVlZGVkLiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRwcmVjIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgeiAuXG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6KSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZHByZWNfZm10dHlfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjLCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgfCBOb19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTm9fcHJlY2lzaW9uLCByZXN0KVxuICB8IExpdF9wcmVjaXNpb24gcCwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBMaXRfcHJlY2lzaW9uIHAsIHJlc3QpXG4gIHwgQXJnX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgSW50X3R5IHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgQXJnX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBfLCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIElmIHR5cGluZyBzdWNjZWVkLCBnZW5lcmF0ZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCB3aXRoIHRoZSBzYW1lXG4gICAgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZSBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHJlYyB0eXBlX2Zvcm1hdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSB3aXRoXG4gIHwgRm10X2ZtdHR5X0VCQiAoZm10JywgRW5kX29mX2ZtdHR5KSAtPiBmbXQnXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdF9nZW4gOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCBmbXQsIGZtdHR5IHdpdGhcbiAgfCBDaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhciBmbXQnLCBmbXR0eScpXG4gIHwgQ2FtbF9jaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9jaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBTdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQzMl90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50NjRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBGbG9hdF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQm9vbCAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgQm9vbF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQm9vbCAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsdXNoIGZtdF9yZXN0LCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZsdXNoIGZtdCcsIGZtdHR5JylcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXQnKSwgZm10dHknKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhcl9saXRlcmFsIChjaHIsIGZtdCcpLCBmbXR0eScpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWJfZm10dHkgPD4gRm10dHlfRUJCIHN1Yl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHknLCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHkxLCBfc3ViX2ZtdHR5MiwgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eTEpIHRoZW5cbiAgICAgIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPVxuICAgICAgdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IChlcmFzZV9yZWwgZm10dHlfcmVzdClcbiAgICBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5MSwgZm10JyksIGZtdHR5JylcbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEFscGhhIGZtdF9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEFscGhhIGZtdCcsIGZtdHR5JylcbiAgfCBUaGV0YSBmbXRfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChUaGV0YSBmbXQnLCBmbXR0eScpXG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmdfZ2VuLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2Zvcm1hdHRpbmdfZ2VuIGZvcm1hdHRpbmdfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3RcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIGZtdF9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChSZWFkZXIgZm10JywgZm10dHknKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdF9yZXN0KSwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10JyksIGZtdHR5JylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCksIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCcpLCBmbXR0eScpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbSBpZ24gcmVzdCBmbXR0eV9yZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0IC0+IEZtdF9mbXR0eV9FQkIgKEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QpXG5cbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGExIGEzIGIxIGIzIGMxIGMzIGQxIGQzIGUxIGUyIGUzIGYxIGYyIGYzIC5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoZjEsIGIxLCBjMSwgZTEsIGUyLCBmMikgZm10IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIGZtdDAgZm10dHkwIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuXG4oKiBUeXBlIGFuIElnbm9yZWRfcGFyYW0gbm9kZSBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtIDogdHlwZSBwIHEgeCB5IHogdCB1IHYgYSBiIGMgZCBlIGYgLlxuICAgICh4LCB5LCB6LCB0LCBxLCBwKSBpZ25vcmVkIC0+XG4gICAgKHAsIHksIHosIHEsIHUsIHYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXRfZm10dHlfZWJiID1cbmZ1biBpZ24gZm10IGZtdHR5IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQgXyAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQzMiBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgXyAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQ2NCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mbG9hdCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSAoSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpKSBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHknLCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHkgZm10IGZtdHR5IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdHR5JylcbiAgfCBJZ25vcmVkX3JlYWRlciAtPiAoXG4gICAgbWF0Y2ggZm10dHkgd2l0aFxuICAgIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXQnKSwgZm10dHknKVxuICAgIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcblxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgOiB0eXBlIGExIGEyIGIxIGIyIGMxIGMyIGQxIGQyIGUxIGUyIGYxIGYyIC5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGQyLCBhMikgaWdub3JlZCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXQgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHkgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gaWduIGZtdCBmbXR0eSAtPlxuICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgaW5cbiAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoaWduLCBmbXQnKSwgZm10dHknKVxuXG4oKiBUeXBpbmcgb2YgdGhlIGNvbXBsZXggY2FzZTogXCIlXyguLi4lKVwiLiAqKVxuYW5kIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIDogdHlwZSB3IHggeSB6IHAgcyB0IHUgYSBiIGMgZCBlIGYgLlxuICAgICh3LCB4LCB5LCB6LCBzLCBwKSBmbXR0eSAtPlxuICAgIChwLCB4LCB5LCBzLCB0LCB1KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5X2ZtdF9lYmIgPVxuZnVuIHN1Yl9mbXR0eSBmbXQgZm10dHkgLT4gbWF0Y2ggc3ViX2ZtdHR5LCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSBzdWJfZm10dHlfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QsIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludF90eSBzdWJfZm10dHlfcmVzdCwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDMyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQ2NF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEZsb2F0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBCb29sX3R5IHN1Yl9mbXR0eV9yZXN0LCBCb29sX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChBbHBoYV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5LCBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1YjJfZm10dHkgPD4gRm10dHlfRUJCIHN1YjJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBzdWJfZm10dHlfcmVzdCcpLCBmbXQnKVxuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eSwgIHN1YjJfZm10dHksICBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgKCogVE9ETyBkZWZpbmUgRm10dHlfcmVsX0VCQiB0byByZW1vdmUgdGhvc2UgZXJhc2VfcmVsICopXG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgc3ViX2ZtdHR5JyA9IHRyYW5zIChzeW1tIHN1YjFfZm10dHknKSBzdWIyX2ZtdHR5JyBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHN1Yl9mbXR0eScgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiAoZXJhc2VfcmVsIHN1Yl9mbXR0eV9yZXN0KSBmbXQgZm10dHlfcmVzdFxuICAgIGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tIHN1Yl9mbXR0eV9yZXN0JyksXG4gICAgICAgICAgICAgICAgICAgZm10JylcbiAgfCBFbmRfb2ZfZm10dHksIGZtdHR5IC0+XG4gICAgRm10dHlfZm10X0VCQiAoRW5kX29mX2ZtdHR5LCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGByZWNhc3RgIGlzIGEgYml0IGRpc2FwcG9pbnRpbmcuIFRoZVxuICAgaW52YXJpYW50IHByb3ZpZGVkIGJ5IHRoZSB0eXBlIGFyZSB2ZXJ5IHN0cm9uZzogdGhlIGlucHV0IGZvcm1hdCdzXG4gICB0eXBlIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBvdXRwdXQgdHlwZSdzIGFzIHdpdG5lc3NlZCBieSB0aGVcbiAgIGZtdHR5X3JlbCBhcmd1bWVudC4gT25lIHdvdWxkIGF0IGZpcnN0IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICB0b3RhbCwgYW5kIGltcGxlbWVudGFibGUgYnkgZXhoYXVzdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBJbnN0ZWFkLFxuICAgd2UgcmV1c2UgdGhlIGhpZ2hseSBwYXJ0aWFsIGFuZCBtdWNoIGxlc3Mgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uXG4gICBgdHlwZV9mb3JtYXRgIHRoYXQgaGFzIGxvc3QgYWxsIGtub3dsZWRnZSBvZiB0aGUgY29ycmVzcG9uZGVuY2VcbiAgIGJldHdlZW4gdGhlIGFyZ3VtZW50J3MgdHlwZXMuXG5cbiAgIEJlc2lkZXMgdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldXNlcyBhIGxvdCBvZiB0aGVcbiAgIGB0eXBlX2Zvcm1hdGAgbG9naWMgKGVnLjogc2VlaW5nIEludF90eSBpbiB0aGUgZm10dHkgcGFyYW1ldGVyIGRvZXNcbiAgIG5vdCBsZXQgeW91IG1hdGNoIG9uIEludCBvbmx5LCBhcyB5b3UgbWF5IGluIGZhY3QgaGF2ZSBGbG9hdFxuICAgKEFyZ19wYWRkaW5nLCAuLi4pIChcIiUuKmRcIikgYmVnaW5uaW5nIHdpdGggYW4gSW50X3R5KSwgaXQgaXMgYWxzb1xuICAgYSBwYXJ0aWFsIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSB0eXBpbmcgaW5mb3JtYXRpb24gaW4gYSBmb3JtYXQgaXNcbiAgIG5vdCBxdWl0ZSBlbm91Z2ggdG8gcmVjb25zdHJ1Y3QgaXQgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9ybWF0IHR5cGVzIG9mIFwiJWQlX3JcIiBhbmQgXCIlX3IlZFwiIGhhdmUgdGhlIHNhbWUgZm9ybWF0NlxuICAgcGFyYW1ldGVycywgYnV0IHRoZXkgYXJlIG5vdCBhdCBhbGwgZXhjaGFuZ2VhYmxlLCBhbmQgcHV0dGluZyBvbmVcbiAgIGluIHBsYWNlIG9mIHRoZSBvdGhlciBtdXN0IHJlc3VsdCBpbiBhIGR5bmFtaWMgZmFpbHVyZS5cblxuICAgR2l2ZW4gdGhhdDpcbiAgIC0gd2UnZCBoYXZlIHRvIGR1cGxpY2F0ZSBhIGxvdCBvZiBub24tdHJpdmlhbCB0eXBpbmcgbG9naWMgZnJvbSB0eXBlX2Zvcm1hdFxuICAgLSB0aGlzIHdvdWxkbid0IGV2ZW4gZWxpbWluYXRlIChhbGwpIHRoZSBkeW5hbWljIGZhaWx1cmVzXG4gICB3ZSBkZWNpZGVkIHRvIGp1c3QgcmV1c2UgdHlwZV9mb3JtYXQgZGlyZWN0bHkgZm9yIG5vdy5cbiopXG5sZXQgcmVjYXN0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT5cbiAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQcmludGluZyB0b29scyAqKVxuXG4oKiBBZGQgcGFkZGluZyBzcGFjZXMgYXJvdW5kIGEgc3RyaW5nLiAqKVxubGV0IGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoIHN0ciA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGgsIHBhZHR5ID1cbiAgICBhYnMgd2lkdGgsXG4gICAgKCogd2hpbGUgbGl0ZXJhbCBwYWRkaW5nIHdpZHRocyBhcmUgYWx3YXlzIG5vbi1uZWdhdGl2ZSxcbiAgICAgICBkeW5hbWljYWxseS1zZXQgd2lkdGhzIChBcmdfcGFkZGluZywgZWcuICUqZCkgbWF5IGJlIG5lZ2F0aXZlO1xuICAgICAgIHdlIGludGVycHJldCB0aG9zZSBhcyBzcGVjaWZ5aW5nIGEgcGFkZGluZy10by10aGUtbGVmdDsgdGhpc1xuICAgICAgIG1lYW5zIHRoYXQgJzAnIG1heSBnZXQgZHJvcHBlZCBldmVuIGlmIGl0IHdhcyBleHBsaWNpdGx5IHNldCxcbiAgICAgICBidXQ6XG4gICAgICAgLSB0aGlzIGlzIHdoYXQgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkb2VzLCBhbmRcbiAgICAgICAgIHdlIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgaWYgcG9zc2libGVcbiAgICAgICAtIHdlIGNvdWxkIG9ubHkgc2lnbmFsIHRoaXMgaXNzdWUgYnkgZmFpbGluZyBhdCBydW50aW1lLFxuICAgICAgICAgd2hpY2ggaXMgbm90IHZlcnkgbmljZS4uLiAqKVxuICAgIGlmIHdpZHRoIDwgMCB0aGVuIExlZnQgZWxzZSBwYWR0eSBpblxuICBpZiB3aWR0aCA8PSBsZW4gdGhlbiBzdHIgZWxzZVxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHdpZHRoIChpZiBwYWR0eSA9IFplcm9zIHRoZW4gJzAnIGVsc2UgJyAnKSBpblxuICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICB8IExlZnQgIC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAwIGxlblxuICAgIHwgUmlnaHQgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDAgJiYgKHN0ci5bMF0gPSAnKycgfHwgc3RyLlswXSA9ICctJyB8fCBzdHIuWzBdID0gJyAnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAwIHN0ci5bMF07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHdpZHRoIC0gbGVuICsgMSkgKGxlbiAtIDEpXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDEgJiYgc3RyLlswXSA9ICcwJyAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHdpZHRoIC0gbGVuICsgMikgKGxlbiAtIDIpXG4gICAgfCBaZXJvcyAtPlxuICAgICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgZW5kO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEFkZCAnMCcgcGFkZGluZyB0byBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqKVxubGV0IGZpeF9pbnRfcHJlY2lzaW9uIHByZWMgc3RyID1cbiAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbWF0Y2ggc3RyLlswXSB3aXRoXG4gIHwgKCcrJyB8ICctJyB8ICcgJykgYXMgYyB3aGVuIHByZWMgKyAxID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAxKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDAgYztcbiAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHByZWMgLSBsZW4gKyAyKSAobGVuIC0gMSk7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgd2hlbiBwcmVjICsgMiA+IGxlbiAmJiBsZW4gPiAxICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAyKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHByZWMgLSBsZW4gKyA0KSAobGVuIC0gMik7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgd2hlbiBwcmVjID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgcHJlYyAnMCcgaW5cbiAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHByZWMgLSBsZW4pIGxlbjtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8IF8gLT5cbiAgICBzdHJcblxuKCogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aW5nIGNvbnZlbnRpb24uICopXG5sZXQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nIHN0ciA9XG4gIGxldCBzdHIgPSBTdHJpbmcuZXNjYXBlZCBzdHIgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXFwiJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9pbnQvaW50MzIvbmF0aXZlaW50L2ludDY0IGZpcnN0IGFyZ3VtZW50XG4gICBmcm9tIGFuIGludF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9pY29udiA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlZFwiIHwgSW50X3BkIC0+IFwiJStkXCIgfCBJbnRfc2QgLT4gXCIlIGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWlcIiB8IEludF9waSAtPiBcIiUraVwiIHwgSW50X3NpIC0+IFwiJSBpXCJcbiAgfCBJbnRfeCAtPiBcIiV4XCIgfCBJbnRfQ3ggLT4gXCIlI3hcIlxuICB8IEludF9YIC0+IFwiJVhcIiB8IEludF9DWCAtPiBcIiUjWFwiXG4gIHwgSW50X28gLT4gXCIlb1wiIHwgSW50X0NvIC0+IFwiJSNvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiV1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udkwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJUxkXCIgfCBJbnRfcGQgLT4gXCIlK0xkXCIgfCBJbnRfc2QgLT4gXCIlIExkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVMaVwiIHwgSW50X3BpIC0+IFwiJStMaVwiIHwgSW50X3NpIC0+IFwiJSBMaVwiXG4gIHwgSW50X3ggLT4gXCIlTHhcIiB8IEludF9DeCAtPiBcIiUjTHhcIlxuICB8IEludF9YIC0+IFwiJUxYXCIgfCBJbnRfQ1ggLT4gXCIlI0xYXCJcbiAgfCBJbnRfbyAtPiBcIiVMb1wiIHwgSW50X0NvIC0+IFwiJSNMb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlTHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252bCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbGRcIiB8IEludF9wZCAtPiBcIiUrbGRcIiB8IEludF9zZCAtPiBcIiUgbGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWxpXCIgfCBJbnRfcGkgLT4gXCIlK2xpXCIgfCBJbnRfc2kgLT4gXCIlIGxpXCJcbiAgfCBJbnRfeCAtPiBcIiVseFwiIHwgSW50X0N4IC0+IFwiJSNseFwiXG4gIHwgSW50X1ggLT4gXCIlbFhcIiB8IEludF9DWCAtPiBcIiUjbFhcIlxuICB8IEludF9vIC0+IFwiJWxvXCIgfCBJbnRfQ28gLT4gXCIlI2xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVsdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZuID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVuZFwiIHwgSW50X3BkIC0+IFwiJStuZFwiIHwgSW50X3NkIC0+IFwiJSBuZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbmlcIiB8IEludF9waSAtPiBcIiUrbmlcIiB8IEludF9zaSAtPiBcIiUgbmlcIlxuICB8IEludF94IC0+IFwiJW54XCIgfCBJbnRfQ3ggLT4gXCIlI254XCJcbiAgfCBJbnRfWCAtPiBcIiVuWFwiIHwgSW50X0NYIC0+IFwiJSNuWFwiXG4gIHwgSW50X28gLT4gXCIlbm9cIiB8IEludF9DbyAtPiBcIiUjbm9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJW51XCJcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9mbG9hdCBmaXJzdCBhcmd1bWVudCBmcm9tIGEgZmxvYXRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYyA9XG4gICAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICAgIGxldCBzeW1iID0gY2hhcl9vZl9mY29udiB+Y0Y6J2cnIGZjb252IGluXG4gICAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHByZWMpO1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgc3ltYjtcbiAgICBidWZmZXJfY29udGVudHMgYnVmXG5cbmxldCB0cmFuc2Zvcm1faW50X2FsdCBpY29udiBzID1cbiAgbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgIGxldCBkaWdpdHMgPVxuICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICAgfCAnMCcuLic5JyAtPiBpbmNyIG5cbiAgICAgICAgfCBfIC0+ICgpXG4gICAgICBkb25lO1xuICAgICAgIW5cbiAgICBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIChkaWdpdHMgLSAxKSAvIDMpIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgbGV0IHB1dCBjID0gQnl0ZXMuc2V0IGJ1ZiAhcG9zIGM7IGluY3IgcG9zIGluXG4gICAgbGV0IGxlZnQgPSByZWYgKChkaWdpdHMgLSAxKSBtb2QgMyArIDEpIGluXG4gICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICcwJy4uJzknIGFzIGMgLT5cbiAgICAgICAgICBpZiAhbGVmdCA9IDAgdGhlbiAocHV0ICdfJzsgbGVmdCA6PSAzKTsgZGVjciBsZWZ0OyBwdXQgY1xuICAgICAgfCBjIC0+IHB1dCBjXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICB8IF8gLT4gc1xuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgY29udmVyc2lvbi4gKilcbmxldCBjb252ZXJ0X2ludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQgKGZvcm1hdF9vZl9pY29udiBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDMyIGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDMyIChmb3JtYXRfb2ZfaWNvbnZsIGljb252KSBuKVxubGV0IGNvbnZlcnRfbmF0aXZlaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X25hdGl2ZWludCAoZm9ybWF0X29mX2ljb252biBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDY0IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDY0IChmb3JtYXRfb2ZfaWNvbnZMIGljb252KSBuKVxuXG4oKiBDb252ZXJ0IGEgZmxvYXQgdG8gc3RyaW5nLiAqKVxuKCogRml4IHNwZWNpYWwgY2FzZSBvZiBcIk9DYW1sIGZsb2F0IGZvcm1hdFwiLiAqKVxubGV0IGNvbnZlcnRfZmxvYXQgZmNvbnYgcHJlYyB4ID1cbiAgbGV0IGhleCAoKSA9XG4gICAgbGV0IHNpZ24gPVxuICAgICAgbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgICAgIHwgRmxvYXRfZmxhZ19wIC0+ICcrJ1xuICAgICAgfCBGbG9hdF9mbGFnX3MgLT4gJyAnXG4gICAgICB8IF8gLT4gJy0nIGluXG4gICAgaGV4c3RyaW5nX29mX2Zsb2F0IHggcHJlYyBzaWduIGluXG4gIGxldCBhZGRfZG90X2lmX25lZWRlZCBzdHIgPVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCByZWMgaXNfdmFsaWQgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnLicgfCAnZScgfCAnRScgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gaXNfdmFsaWQgKGkgKyAxKSBpblxuICAgIGlmIGlzX3ZhbGlkIDAgdGhlbiBzdHIgZWxzZSBzdHIgXiBcIi5cIiBpblxuICBsZXQgY2FtbF9zcGVjaWFsX3ZhbCBzdHIgPSBtYXRjaCBjbGFzc2lmeV9mbG9hdCB4IHdpdGhcbiAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT4gc3RyXG4gICAgfCBGUF9pbmZpbml0ZSAtPiBpZiB4IDwgMC4wIHRoZW4gXCJuZWdfaW5maW5pdHlcIiBlbHNlIFwiaW5maW5pdHlcIlxuICAgIHwgRlBfbmFuIC0+IFwibmFuXCIgaW5cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9oIC0+IGhleCAoKVxuICB8IEZsb2F0X0ggLT4gU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoaGV4ICgpKVxuICB8IEZsb2F0X0NGIC0+IGNhbWxfc3BlY2lhbF92YWwgKGhleCAoKSlcbiAgfCBGbG9hdF9GIC0+XG4gICAgbGV0IHN0ciA9IGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHggaW5cbiAgICBjYW1sX3NwZWNpYWxfdmFsIChhZGRfZG90X2lmX25lZWRlZCBzdHIpXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgLT5cbiAgICBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4XG5cbigqIENvbnZlcnQgYSBjaGFyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGZvcm1hdF9jYW1sX2NoYXIgYyA9XG4gIGxldCBzdHIgPSBDaGFyLmVzY2FwZWQgYyBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcJycgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdHlwZSB0byBzdHJpbmcgKilcbmxldCBzdHJpbmdfb2ZfZm10dHkgZm10dHkgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10dHkgYnVmIGZtdHR5O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uLiAqKVxuKCogVXNlZCB0byBnZW5lcmF0ZSBQcmludGYgYW5kIEZvcm1hdCBwcmludGluZyBmdW5jdGlvbnMuICopXG4oKiBQYXJhbWV0ZXJzOlxuICAgICBrOiBhIGNvbnRpbnVhdGlvbiBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSBhY2N1bXVsYXRvci5cbiAgICAgbzogdGhlIG91dHB1dCBzdHJlYW0gKHNlZSBrLCAlYSBhbmQgJXQpLlxuICAgICBhY2M6IHJldiBsaXN0IG9mIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXNoLCBmb3JtYXR0aW5nLCAuLi4pLlxuICAgICBmbXQ6IHRoZSBmb3JtYXQuICopXG5sZXQgcmVjIG1ha2VfcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfY2FtbF9jaGFyIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCAoZnVuIHN0ciAtPiBzdHIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQgaWNvbnZcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50MzIgaWNvbnZcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X25hdGl2ZWludCBpY29udlxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQ2NCBpY29udlxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBmY29udlxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX29mX2Jvb2xcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgZnVuIGYgeCAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZnVuIG8gLT4gZiBvIHgpKSByZXN0XG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIGZ1biBmIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiAoKSlcbiAgfCBSZWFkZXIgXyAtPlxuICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gKilcbiAgICAoKiBJbmRlZWQsIHNpbmNlIHByaW50ZiBhbmQgY28uIHRha2UgYSBmb3JtYXQ0IGFzIGFyZ3VtZW50LCB0aGUgJ2QgYW5kICdlXG4gICAgICAgdHlwZSBwYXJhbWV0ZXJzIG9mIGZtdCBhcmUgb2J2aW91c2x5IGVxdWFscy4gVGhlIFJlYWRlciBpcyB0aGVcbiAgICAgICBvbmx5IGNvbnN0cnVjdG9yIHdoaWNoIHRvdWNoICdkIGFuZCAnZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm1hdFxuICAgICAgIHR5cGUsIGl0IGFkZHMgYW4gKC0+KSB0byB0aGUgJ2QgcGFyYW1ldGVycy4gQ29uc2VxdWVudGx5LCBhIGZvcm1hdDRcbiAgICAgICBjYW5ub3QgY29udGFpbiBhIFJlYWRlciBub2RlLCBleGNlcHQgaW4gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0b1xuICAgICAgIGFuICV7Li4uJX0uIEl0J3Mgbm90IGEgcHJvYmxlbSBiZWNhdXNlIG1ha2VfcHJpbnRmIGRvIG5vdCBjYWxsXG4gICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG8gJXsuLi4lfS4gKilcbiAgICBhc3NlcnQgZmFsc2VcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2ZsdXNoIGFjYykgcmVzdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2Nfc3RyaW5nX2xpdGVyYWwgKGFjYywgc3RyKSkgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19jaGFyX2xpdGVyYWwgKGFjYywgY2hyKSkgcmVzdFxuXG4gIHwgRm9ybWF0X2FyZyAoXywgc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHN0cmluZ19vZl9mbXR0eSBzdWJfZm10dHkgaW5cbiAgICAoZnVuIHN0ciAtPlxuICAgICAgaWdub3JlIHN0cjtcbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCB0eSkpIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT4gbWFrZV9wcmludGYgayBhY2NcbiAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICBsZXQgbmV3X2FjYyA9IEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJVtcIikgaW5cbiAgICBmdW4gXyAtPiBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgKCogVGhpcyBjYXNlIHNob3VsZCBiZSByZWZ1c2VkIGZvciBQcmludGYuICopXG4gICAgKCogQWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICopXG4gICAgKCogSW50ZXJwcmV0ICVsLCAlbiBhbmQgJUwgYXMgJXUuICopXG4gICAgZnVuIG4gLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9pbnQgXCIldVwiIG4pIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBtYWtlX2lnbm9yZWRfcGFyYW0gayBhY2MgaWduIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2xpdCAoYWNjLCBmbXRpbmdfbGl0KSkgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX3RhZyBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX2JveCBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGsgYWNjXG5cbigqIERlbGF5IHRoZSBlcnJvciAoSW52YWxpZF9hcmd1bWVudCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikuICopXG4oKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdG8gdGFrZSByZW1haW5pbmcgYXJndW1lbnRzIChhZnRlciB0aGUgXCIlX1wiKS4gKilcbmFuZCBtYWtlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuXG5cbigqIFNwZWNpYWwgY2FzZSBvZiBwcmludGYgXCIlXyhcIi4gKilcbmFuZCBtYWtlX2Zyb21fZm10dHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBmbXR0eSAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFJlYWRlcl90eSBfICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8gICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBJbnNlcnQgYW4gQWNjX2ludmFsaWRfYXJnIGluIHRoZSBhY2N1bXVsYXRvciBhbmQgY29udGludWUgdG8gZ2VuZXJhdGVcbiAgIGNsb3N1cmVzIHRvIGdldCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKilcbmFuZCBtYWtlX2ludmFsaWRfYXJnIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+XG4gIG1ha2VfcHJpbnRmIGsgKEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikpIGZtdFxuXG4oKiBGaXggcGFkZGluZywgdGFrZSBpdCBhcyBhbiBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50IGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX3BhZGRpbmcgOiB0eXBlIHggeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeiAtPiBhKSBwYWRkaW5nIC0+ICh6IC0+IHN0cmluZykgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHRyYW5zIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCB0cmFucyB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuXG4oKiBGaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGZvciBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQuICopXG4oKiBUYWtlIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4gKGludF9jb252IC0+IHogLT4gc3RyaW5nKSAtPlxuICAgIGludF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIHRyYW5zIGljb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSB0cmFucyBpY29udiB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5cbigqIENvbnZlcnQgYSBmbG9hdCwgZml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBpZiBuZWVkZWQuICopXG4oKiBUYWtlIHRoZSBmbG9hdCBhcmd1bWVudCBhbmQgb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCBmbG9hdCAtPiBhKSBwcmVjaXNpb24gLT4gZmxvYXRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyBmY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuYW5kIG1ha2VfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB4IC0+IHkgPVxuICBmdW4gayBhY2MgcmVzdCBhcml0eSBmIC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmIHgpXG5cbmxldCBjb25zdCB4IF8gPSB4XG5cbmxldCByZWMgbWFrZV9pcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG4gIGZ1biBrIG8gZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IENhbWxfc3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEJvb2wgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9jdXN0b21fYXJpdHkgayBvIHJlc3QgYXJpdHlcbiAgICB8IFJlYWRlciBfIC0+XG4gICAgICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gIFNlZSB0aGVcbiAgICAgICAgICAgbm90ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjYXNlIGZvciBtYWtlX3ByaW50Zi4gKilcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgICAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT5cbiAgICAgICAgICBtYWtlX2lwcmludGYgayBvXG4gICAgICAgICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcbiAgICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lnbm9yZWRfcGFyYW0gKGZ1biBfIC0+IGsgbykgKEVuZF9vZl9hY2MpIGlnbiByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICAgICAgayBvXG5hbmQgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gOlxuICB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4geCA9XG4gIGZ1biBrIG8gZm10IHBhZCBwcmVjIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IExpdF9wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSkpXG5hbmQgZm5fb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPlxuICBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geSA9XG4gIGZ1biBrIG8gZm10IC0+IGZ1bmN0aW9uXG4gICAgfCBDdXN0b21femVybyAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIGZtdFxuICAgIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICAgICAgY29uc3QgKGZuX29mX2N1c3RvbV9hcml0eSBrIG8gZm10IGFyaXR5KVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb250aW51YXRpb25zIGZvciBtYWtlX3ByaW50ZiAqKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIG8gYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAe1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAW1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfY2hhciBvIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGYgb1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZmx1c2ggb1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIG8gcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgYnVmcHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IGYgYlxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gYnVmcHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIGJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mICVhIGFuZCAldC4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIChmICgpKVxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXJyb3IgbWFuYWdlbWVudCAqKVxuXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIHByZXR0eS1wcmludGVkIGVycm9yIG1lc3NhZ2UuICopXG5sZXQgZmFpbHdpdGhfbWVzc2FnZSAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgayBhY2MgPSBzdHJwdXRfYWNjIGJ1ZiBhY2M7IGZhaWx3aXRoIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0dGluZyB0b29scyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIG9wZW4gYmxvY2sgZGVzY3JpcHRpb24gKGluZGVudCwgYmxvY2tfdHlwZSkgKilcbmxldCBvcGVuX2JveF9vZl9zdHJpbmcgc3RyID1cbiAgaWYgc3RyID0gXCJcIiB0aGVuICgwLCBQcF9ib3gpIGVsc2VcbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgaW52YWxpZF9ib3ggKCkgPSBmYWlsd2l0aF9tZXNzYWdlIFwiaW52YWxpZCBib3ggZGVzY3JpcHRpb24gJVNcIiBzdHIgaW5cbiAgICBsZXQgcmVjIHBhcnNlX3NwYWNlcyBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBpIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgLT4gcGFyc2Vfc3BhY2VzIChpICsgMSlcbiAgICAgICAgfCBfIC0+IGlcbiAgICBhbmQgcGFyc2VfbHdvcmQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJ2EnIC4uICd6JyAtPiBwYXJzZV9sd29yZCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGpcbiAgICBhbmQgcGFyc2VfaW50IGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gcGFyc2VfaW50IGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4gaiBpblxuICAgIGxldCB3c3RhcnQgPSBwYXJzZV9zcGFjZXMgMCBpblxuICAgIGxldCB3ZW5kID0gcGFyc2VfbHdvcmQgd3N0YXJ0IHdzdGFydCBpblxuICAgIGxldCBib3hfbmFtZSA9IFN0cmluZy5zdWIgc3RyIHdzdGFydCAod2VuZCAtIHdzdGFydCkgaW5cbiAgICBsZXQgbnN0YXJ0ID0gcGFyc2Vfc3BhY2VzIHdlbmQgaW5cbiAgICBsZXQgbmVuZCA9IHBhcnNlX2ludCBuc3RhcnQgbnN0YXJ0IGluXG4gICAgbGV0IGluZGVudCA9XG4gICAgICBpZiBuc3RhcnQgPSBuZW5kIHRoZW4gMCBlbHNlXG4gICAgICAgIHRyeSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBuc3RhcnQgKG5lbmQgLSBuc3RhcnQpKVxuICAgICAgICB3aXRoIEZhaWx1cmUgXyAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIGxldCBleHBfZW5kID0gcGFyc2Vfc3BhY2VzIG5lbmQgaW5cbiAgICBpZiBleHBfZW5kIDw+IGxlbiB0aGVuIGludmFsaWRfYm94ICgpO1xuICAgIGxldCBib3hfdHlwZSA9IG1hdGNoIGJveF9uYW1lIHdpdGhcbiAgICAgIHwgXCJcIiB8IFwiYlwiIC0+IFBwX2JveFxuICAgICAgfCBcImhcIiAgICAgIC0+IFBwX2hib3hcbiAgICAgIHwgXCJ2XCIgICAgICAtPiBQcF92Ym94XG4gICAgICB8IFwiaHZcIiAgICAgLT4gUHBfaHZib3hcbiAgICAgIHwgXCJob3ZcIiAgICAtPiBQcF9ob3Zib3hcbiAgICAgIHwgXyAgICAgICAgLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICAoaW5kZW50LCBib3hfdHlwZSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQYXJzaW5nIHRvb2xzICopXG5cbigqIENyZWF0ZSBhIHBhZGRpbmdfZm10X2ViYiBmcm9tIGEgcGFkZGluZyBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkZGluZ19mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwYWRkaW5nX2ZtdF9lYmIgPVxuZnVuIHBhZCBmbXQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChOb19wYWRkaW5nLCBmbXQpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZGRpbmdfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBmbXQpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgZm10KVxuXG4oKiBDcmVhdGUgYSBwcmVjaXNpb25fZm10X2ViYiBmcm9tIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwcmVjaXNpb24gLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHByZWNpc2lvbl9mbXRfZWJiID1cbmZ1biBwcmVjIGZtdCAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKE5vX3ByZWNpc2lvbiwgZm10KVxuICB8IExpdF9wcmVjaXNpb24gcCAtPiBQcmVjaXNpb25fZm10X0VCQiAoTGl0X3ByZWNpc2lvbiBwLCBmbXQpXG4gIHwgQXJnX3ByZWNpc2lvbiAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChBcmdfcHJlY2lzaW9uLCBmbXQpXG5cbigqIENyZWF0ZSBhIHBhZHByZWNfZm10X2ViYiBmcm9tIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyBhbmQgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudHNcbiAgIGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgOiB0eXBlIHggeSB6IHQgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT5cbiAgICAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgKF8sIF8sIF8sIF8sIF8pIHBhZHByZWNfZm10X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10IC0+XG4gIGxldCBQcmVjaXNpb25fZm10X0VCQiAocHJlYywgZm10JykgPSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIHByZWMgZm10IGluXG4gIG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoTm9fcGFkZGluZywgcHJlYywgZm10JylcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkcHJlY19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIHByZWMsIGZtdCcpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgcHJlYywgZm10JylcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHBhcnNpbmcgKilcblxuKCogUGFyc2UgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZm9ybWF0IGFuZCBjcmVhdGUgYSBmbXRfZWJiLiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIGluIGNhc2Ugb2YgaW52YWxpZCBmb3JtYXQuICopXG5sZXQgZm10X2ViYl9vZl9zdHJpbmcgP2xlZ2FjeV9iZWhhdmlvciBzdHIgPVxuICAoKiBQYXJhbWV0ZXJzIG5hbWluZyBjb252ZW50aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBsaXRfc3RhcnQ6IHN0YXJ0IG9mIHRoZSBsaXRlcmFsIHNlcXVlbmNlLiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN0cl9pbmQ6IGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gZW5kX2luZDogZW5kIG9mIHRoZSBjdXJyZW50IChzdWItKWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwY3RfaW5kOiBpbmRleCBvZiB0aGUgJyUnIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgKilcbiAgKCogICAtIHplcm86ICBpcyB0aGUgJzAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gbWludXM6IGlzIHRoZSAnLScgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwbHVzOiAgaXMgdGhlICcrJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGhhc2g6ICBpcyB0aGUgJyMnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gc3BhY2U6IGlzIHRoZSAnICcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBpZ246ICAgaXMgdGhlICdfJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBhZDogcGFkZGluZyBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcHJlYzogcHJlY2lzaW9uIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzeW1iOiBjaGFyIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiAoJ2MnLCAncycsICdkJywgLi4uKS4gKilcbiAgKCogICAtIGNoYXJfc2V0OiBzZXQgb2YgY2hhcmFjdGVycyBhcyBiaXRtYXAgKHNlZSBzY2FuZiAlWy4uLl0pLiAgICAqKVxuXG4gIGxldCBsZWdhY3lfYmVoYXZpb3IgPSBtYXRjaCBsZWdhY3lfYmVoYXZpb3Igd2l0aFxuICAgIHwgU29tZSBmbGFnIC0+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pZ25cbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdHMuIFdoZW4gdGhlIGZsYWcgaXMgZGlzYWJsZWQsIGl0IHdpbGwgcmVqZWN0IGFueVxuICAgICAgZm9ybWF0IHRoYXQgaXMgbm90IGFjY2VwdGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uLlxuXG4gICAgICBBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZSBcIiUrIGRcIjogc3BlY2lmeWluZyBib3RoICcrJyAoaWYgdGhlXG4gICAgICBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoIGEgJysnIHRvIGdldCB0aGUgc2FtZSB3aWR0aCBhc1xuICAgICAgbmVnYXRpdmUgbnVtYmVycykgYW5kICcgJyAoaWYgdGhlIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGhcbiAgICAgIGEgc3BhY2UpIGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGJ1dCB0aGUgbGVnYWN5ICg8IDQuMDIpXG4gICAgICBpbXBsZW1lbnRhdGlvbiB3YXMgaGFwcHkgdG8ganVzdCBpZ25vcmUgdGhlIHNwYWNlLlxuICAqKVxuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZCBtc2cgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIG1zZ1xuICBpblxuXG4gICgqIFVzZWQgd2hlbiB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgKG9yIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXQpIHdhcyBlbmNvdW50ZXJlZFxuICAgICAgdW5leHBlY3RlZGx5LiAqKVxuICBsZXQgdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2UgZW5kX2luZFxuICAgICAgXCJ1bmV4cGVjdGVkIGVuZCBvZiBmb3JtYXRcIlxuICBpblxuXG4gICgqIFVzZWQgZm9yICUwYzogbm8gb3RoZXIgd2lkdGhzIGFyZSBpbXBsZW1lbnRlZCAqKVxuICBsZXQgaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kXG4gICAgICBcIm5vbi16ZXJvIHdpZHRocyBhcmUgdW5zdXBwb3J0ZWQgZm9yICVjIGNvbnZlcnNpb25zXCJcbiAgaW5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIG9wdGlvbiBkZXBlbmRlbmN5XG4gICAgIHByb2JsZW0uICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IHN0cl9pbmQgYyBzID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAnJWMnIHdpdGhvdXQgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgYyBzXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIHVuZXhwZWN0ZWRcbiAgICAgY2hhcmFjdGVyLiAqKVxuICBsZXQgZXhwZWN0ZWRfY2hhcmFjdGVyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZCA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlcyBleHBlY3RlZCwgcmVhZCAlQ1wiXG4gICAgICBzdHIgc3RyX2luZCBleHBlY3RlZCByZWFkXG4gIGluXG5cbiAgKCogUGFyc2UgdGhlIHN0cmluZyBmcm9tIGJlZ19pbmQgKGluY2x1ZGVkKSB0byBlbmRfaW5kIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgcGFyc2UgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gYmVnX2luZCBlbmRfaW5kIC0+IHBhcnNlX2xpdGVyYWwgYmVnX2luZCBiZWdfaW5kIGVuZF9pbmRcblxuICAoKiBSZWFkIGxpdGVyYWwgY2hhcmFjdGVycyB1cCB0byAnJScgb3IgJ0AnIHNwZWNpYWwgY2hhcmFjdGVycy4gKilcbiAgYW5kIHBhcnNlX2xpdGVyYWwgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIEVuZF9vZl9mb3JtYXQgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2Zvcm1hdCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfYWZ0ZXJfYXQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfbGl0ZXJhbCBsaXRfc3RhcnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgKCogUGFyc2UgYSBmb3JtYXQgYWZ0ZXIgJyUnICopXG4gIGFuZCBwYXJzZV9mb3JtYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBlbmRfaW5kIC0+IHBhcnNlX2lnbiBwY3RfaW5kIChwY3RfaW5kICsgMSkgZW5kX2luZFxuXG4gIGFuZCBwYXJzZV9pZ24gOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ18nIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgKHN0cl9pbmQrMSkgZW5kX2luZCB0cnVlXG4gICAgICB8IF8gLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgZmFsc2VcblxuICBhbmQgcGFyc2VfZmxhZ3MgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmJcbiAgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgaWduIC0+XG4gICAgbGV0IHplcm8gPSByZWYgZmFsc2UgYW5kIG1pbnVzID0gcmVmIGZhbHNlXG4gICAgYW5kIHBsdXMgPSByZWYgZmFsc2UgYW5kIHNwYWNlID0gcmVmIGZhbHNlXG4gICAgYW5kIGhhc2ggPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgc2V0X2ZsYWcgc3RyX2luZCBmbGFnID1cbiAgICAgICgqIGluIGxlZ2FjeSBtb2RlLCBkdXBsaWNhdGUgZmxhZ3MgYXJlIGFjY2VwdGVkICopXG4gICAgICBpZiAhZmxhZyAmJiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIGR1cGxpY2F0ZSBmbGFnICVDXCJcbiAgICAgICAgICBzdHIgc3RyX2luZCBzdHIuW3N0cl9pbmRdO1xuICAgICAgZmxhZyA6PSB0cnVlO1xuICAgIGluXG4gICAgbGV0IHJlYyByZWFkX2ZsYWdzIHN0cl9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnMCcgLT4gc2V0X2ZsYWcgc3RyX2luZCB6ZXJvOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICctJyAtPiBzZXRfZmxhZyBzdHJfaW5kIG1pbnVzOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJysnIC0+IHNldF9mbGFnIHN0cl9pbmQgcGx1czsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnIycgLT4gc2V0X2ZsYWcgc3RyX2luZCBoYXNoOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyAnIC0+IHNldF9mbGFnIHN0cl9pbmQgc3BhY2U7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmRcbiAgICAgICAgICAhemVybyAhbWludXMgIXBsdXMgIWhhc2ggIXNwYWNlIGlnblxuICAgICAgZW5kXG4gICAgaW5cbiAgICByZWFkX2ZsYWdzIHN0cl9pbmRcblxuICAoKiBUcnkgdG8gcmVhZCBhIGRpZ2l0YWwgb3IgYSAnKicgcGFkZGluZy4gKilcbiAgYW5kIHBhcnNlX3BhZGRpbmcgOiB0eXBlIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCB6ZXJvIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYWR0eSA9IG1hdGNoIHplcm8sIG1pbnVzIHdpdGhcbiAgICAgIHwgZmFsc2UsIGZhbHNlIC0+IFJpZ2h0XG4gICAgICB8IGZhbHNlLCB0cnVlICAtPiBMZWZ0XG4gICAgICB8ICB0cnVlLCBmYWxzZSAtPiBaZXJvc1xuICAgICAgfCAgdHJ1ZSwgdHJ1ZSAgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGVmdFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnLScgXCIwXCIgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgIGxldCBuZXdfaW5kLCB3aWR0aCA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgKExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gKEFyZ19wYWRkaW5nIHBhZHR5KVxuICAgIHwgXyAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgICAgfCBMZWZ0ICAtPlxuICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy0nIFwicGFkZGluZ1wiO1xuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICB8IFplcm9zIC0+XG4gICAgICAgICAoKiBhICcwJyBwYWRkaW5nIGluZGljYXRpb24gbm90IGZvbGxvd2VkIGJ5IGFueXRoaW5nIHNob3VsZFxuICAgICAgICAgICBiZSBpbnRlcnByZXRlZCBhcyBhIFJpZ2h0IHBhZGRpbmcgb2Ygd2lkdGggMC4gVGhpcyBpcyB1c2VkXG4gICAgICAgICAgIGJ5IHNjYW5uaW5nIGNvbnZlcnNpb25zICUwcyBhbmQgJTBjICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIChMaXRfcGFkZGluZyAoUmlnaHQsIDApKVxuICAgICAgfCBSaWdodCAtPlxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICBlbmRcblxuICAoKiBJcyBwcmVjaXNpb24gZGVmaW5lZD8gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3BhZGRpbmcgOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnLicgLT5cbiAgICAgIHBhcnNlX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZFxuICAgIHwgc3ltYiAtPlxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBOb19wcmVjaXNpb24gcGFkIHN5bWJcblxuICAoKiBSZWFkIHRoZSBkaWdpdGFsIG9yICcqJyBwcmVjaXNpb24uICopXG4gIGFuZCBwYXJzZV9wcmVjaXNpb24gOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZCA9XG4gICAgICBsZXQgbmV3X2luZCwgcHJlYyA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gcHJlYykgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kXG4gICAgfCAoJysnIHwgJy0nKSBhcyBzeW1iIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+XG4gICAgICAoKiBMZWdhY3kgbW9kZSB3b3VsZCBhY2NlcHQgYW5kIGlnbm9yZSAnKycgb3IgJy0nIGJlZm9yZSB0aGVcbiAgICAgICAgIGludGVnZXIgZGVzY3JpYmluZyB0aGUgZGVzaXJlZCBwcmVjaXNpb247IG5vdGUgdGhhdCB0aGlzXG4gICAgICAgICBjYW5ub3QgaGFwcGVuIGZvciBwYWRkaW5nIHdpZHRoLCBhcyAnKycgYW5kICctJyBhbHJlYWR5IGhhdmVcbiAgICAgICAgIGEgc2VtYW50aWNzIHRoZXJlLlxuXG4gICAgICAgICBUaGF0IHNhaWQsIHRoZSBpZGVhIChzdXBwb3J0ZWQgYnkgdGhpcyB0d2VhaykgdGhhdCB3aWR0aCBhbmRcbiAgICAgICAgIHByZWNpc2lvbiBsaXRlcmFscyBhcmUgXCJpbnRlZ2VyIGxpdGVyYWxzXCIgaW4gdGhlIE9DYW1sIHNlbnNlIGlzXG4gICAgICAgICBzdGlsbCBibGF0YW50bHkgd3JvbmcsIGFzIDEyM180NTYgb3IgMHhGRiBhcmUgcmVqZWN0ZWQuICopXG4gICAgICBwYXJzZV9saXRlcmFsIChtaW51cyB8fCBzeW1iID0gJy0nKSAoc3RyX2luZCArIDEpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIHBhZCBBcmdfcHJlY2lzaW9uXG4gICAgfCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBub3RlIHRoYXQgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRpZCBub3QgaWdub3JlICcuJyB3aXRob3V0XG4gICAgICAgICAgIGEgbnVtYmVyIChhcyBpdCBkb2VzIGZvciBwYWRkaW5nIGluZGljYXRpb25zKSwgYnV0XG4gICAgICAgICAgIGludGVycHJldHMgaXQgYXMgJy4wJyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiAwKVxuICAgICAgZWxzZVxuICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy4nIFwicHJlY2lzaW9uXCJcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogdCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2NvbnYgKHR5cGUgdSkgKHR5cGUgdikgKHBhZHByZWMgOiAodSwgdikgcGFkZGluZykgPVxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBwcmVjIHBhZHByZWMgc3RyLltzdHJfaW5kXSBpblxuICAgICgqIGluIGxlZ2FjeSBtb2RlLCBzb21lIGZvcm1hdHMgKCVzIGFuZCAlUykgYWNjZXB0IGEgd2VpcmQgbWl4IG9mXG4gICAgICAgcGFkZGluZyBhbmQgcHJlY2lzaW9uLCB3aGljaCBpcyBtZXJnZWQgYXMgYSBzaW5nbGUgcGFkZGluZ1xuICAgICAgIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgaW4gJS4xMHMgdGhlIHByZWNpc2lvbiBpcyBpbXBsaWNpdGx5XG4gICAgICAgdW5kZXJzdG9vZCBhcyBwYWRkaW5nICUxMHMsIGJ1dCB0aGUgbGVmdC1wYWRkaW5nIGNvbXBvbmVudCBtYXlcbiAgICAgICBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIGEgbGVmdCBwYWRkaW5nIG9yIGEgbmVnYXRpdmUgcHJlY2lzaW9uOlxuICAgICAgICUtLjNzIGFuZCAlLi0zcyBhcmUgZXF1aXZhbGVudCB0byAlLTNzICopXG4gICAgbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgLT4gKFxuICAgICAgbWF0Y2ggbWludXMsIHByZWMgd2l0aFxuICAgICAgICB8IF8sIE5vX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IE5vX3BhZGRpbmdcbiAgICAgICAgfCBmYWxzZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChSaWdodCwgbikpXG4gICAgICAgIHwgdHJ1ZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChMZWZ0LCBuKSlcbiAgICAgICAgfCBmYWxzZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBSaWdodClcbiAgICAgICAgfCB0cnVlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIExlZnQpXG4gICAgKVxuICAgIHwgcGFkIC0+IHBhcnNlX2NvbnYgcGFkXG5cbiAgKCogQ2FzZSBhbmFseXNpcyBvbiBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfY29udmVyc2lvbiA6IHR5cGUgeCB5IHogdCB1IHYgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gKHgsIHkpIHBhZGRpbmcgLT5cbiAgICAgICAgKHosIHQpIHByZWNpc2lvbiAtPiAodSwgdikgcGFkZGluZyAtPiBjaGFyIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgcGFkcHJlYyBzeW1iIC0+XG4gICAgKCogRmxhZ3MgdXNlZCB0byBjaGVjayBvcHRpb24gdXNhZ2VzL2NvbXBhdGliaWxpdGllcy4gKilcbiAgICBsZXQgcGx1c191c2VkICA9IHJlZiBmYWxzZSBhbmQgaGFzaF91c2VkID0gcmVmIGZhbHNlXG4gICAgYW5kIHNwYWNlX3VzZWQgPSByZWYgZmFsc2UgYW5kIGlnbl91c2VkICAgPSByZWYgZmFsc2VcbiAgICBhbmQgcGFkX3VzZWQgICA9IHJlZiBmYWxzZSBhbmQgcHJlY191c2VkICA9IHJlZiBmYWxzZSBpblxuXG4gICAgKCogQWNjZXNzIHRvIG9wdGlvbnMsIHVwZGF0ZSBmbGFncy4gKilcbiAgICBsZXQgZ2V0X3BsdXMgICAgKCkgPSBwbHVzX3VzZWQgIDo9IHRydWU7IHBsdXNcbiAgICBhbmQgZ2V0X2hhc2ggICAoKSA9IGhhc2hfdXNlZCA6PSB0cnVlOyBoYXNoXG4gICAgYW5kIGdldF9zcGFjZSAgICgpID0gc3BhY2VfdXNlZCA6PSB0cnVlOyBzcGFjZVxuICAgIGFuZCBnZXRfaWduICAgICAoKSA9IGlnbl91c2VkICAgOj0gdHJ1ZTsgaWduXG4gICAgYW5kIGdldF9wYWQgICAgICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRcbiAgICBhbmQgZ2V0X3ByZWMgICAgKCkgPSBwcmVjX3VzZWQgIDo9IHRydWU7IHByZWNcbiAgICBhbmQgZ2V0X3BhZHByZWMgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZHByZWMgaW5cblxuICAgIGxldCBnZXRfaW50X3BhZCAoKSA6ICh4LHkpIHBhZGRpbmcgPVxuICAgICAgKCogJTUuM2QgaXMgYWNjZXB0ZWQgYW5kIG1lYW5pbmdmdWw6IHBhZCB0byBsZW5ndGggNSB3aXRoXG4gICAgICAgICBzcGFjZXMsIGJ1dCBmaXJzdCBwYWQgd2l0aCB6ZXJvcyB1cHRvIGxlbmd0aCAzICgwLXBhZGRpbmdcbiAgICAgICAgIGlzIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBcInByZWNpc2lvblwiIGZvciBpbnRlZ2VyIGZvcm1hdHMpLlxuXG4gICAgICAgICAlMDUuM2QgaXMgcmVkdW5kYW50OiBwYWQgdG8gbGVuZ3RoIDUgKndpdGggemVyb3MqLCBidXRcbiAgICAgICAgIGZpcnN0IHBhZCB3aXRoIHplcm9zLi4uIFRvIGFkZCBpbnN1bHQgdG8gdGhlIGluanVyeSwgdGhlXG4gICAgICAgICBsZWdhY3kgaW1wbGVtZW50YXRpb24gaWdub3JlcyB0aGUgMC1wYWRkaW5nIGluZGljYXRpb24gYW5kXG4gICAgICAgICBkb2VzIHRoZSA1IHBhZGRpbmcgd2l0aCBzcGFjZXMgaW5zdGVhZC4gV2UgcmV1c2UgdGhpc1xuICAgICAgICAgaW50ZXJwcmV0YXRpb24gZm9yIGNvbXBhdGliaWxpdHksIGJ1dCBzdGF0aWNhbGx5IHJlamVjdCB0aGlzXG4gICAgICAgICBmb3JtYXQgd2hlbiB0aGUgbGVnYWN5IG1vZGUgaXMgZGlzYWJsZWQsIHRvIHByb3RlY3Qgc3RyaWN0XG4gICAgICAgICB1c2VycyBmcm9tIHRoaXMgY29ybmVyIGNhc2UuICopXG4gICAgICAgbWF0Y2ggZ2V0X3BhZCAoKSwgZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgICAgfCBwYWQsIE5vX3ByZWNpc2lvbiAtPiBwYWRcbiAgICAgICAgIHwgTm9fcGFkZGluZywgXyAgICAgLT4gTm9fcGFkZGluZ1xuICAgICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIG4pLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgbilcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MsIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZCBpblxuXG4gICAgKCogQ2hlY2sgdGhhdCBwYWR0eSA8PiBaZXJvcy4gKilcbiAgICBsZXQgY2hlY2tfbm9fMCBzeW1iICh0eXBlIGEgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA6IChhLGIpIHBhZGRpbmcgPVxuICAgICAgbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKChMZWZ0IHwgUmlnaHQpLCBfKSAtPiBwYWRcbiAgICAgIHwgQXJnX3BhZGRpbmcgKExlZnQgfCBSaWdodCkgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgIGluXG5cbiAgICAoKiBHZXQgcGFkZGluZyBhcyBhIHBhZF9vcHRpb24gKHNlZSBcIiVfXCIsIFwiJXtcIiwgXCIlKFwiIGFuZCBcIiVbXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IG9wdF9vZl9wYWQgYyAodHlwZSBhKSAodHlwZSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpID0gbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBOb25lXG4gICAgICB8IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpIC0+IFNvbWUgd2lkdGhcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJzAnXCJcbiAgICAgIHwgTGl0X3BhZGRpbmcgKExlZnQsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInLSdcIlxuICAgICAgfCBBcmdfcGFkZGluZyBfIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJyonXCJcbiAgICBpblxuICAgIGxldCBnZXRfcGFkX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkICgpKSBpblxuICAgIGxldCBnZXRfcGFkcHJlY19vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZHByZWMgKCkpIGluXG5cbiAgICAoKiBHZXQgcHJlY2lzaW9uIGFzIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfZlwiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBnZXRfcHJlY19vcHQgKCkgPSBtYXRjaCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICB8IE5vX3ByZWNpc2lvbiAgICAgICAtPiBOb25lXG4gICAgICB8IExpdF9wcmVjaXNpb24gbmRlYyAtPiBTb21lIG5kZWNcbiAgICAgIHwgQXJnX3ByZWNpc2lvbiAgICAgIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKidcIlxuICAgIGluXG5cbiAgICBsZXQgZm10X3Jlc3VsdCA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJywnIC0+XG4gICAgICBwYXJzZSBzdHJfaW5kIGVuZF9pbmRcbiAgICB8ICdjJyAtPlxuICAgICAgbGV0IGNoYXJfZm9ybWF0IGZtdF9yZXN0ID0gKCogJWMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKENoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IHNjYW5fZm9ybWF0IGZtdF9yZXN0ID0gKCogJTBjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3NjYW5fbmV4dF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGJlZ2luIG1hdGNoIGdldF9wYWRfb3B0ICdjJyB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgMCAtPiBzY2FuX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgX24gLT5cbiAgICAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvclxuICAgICAgICAgICB0aGVuIGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmRcbiAgICAgICAgICAgZWxzZSAoKiBsZWdhY3kgaWdub3JlcyAlYyB3aWR0aHMgKikgY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgIGVuZFxuICAgIHwgJ0MnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2FtbF9jaGFyLGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoQ2FtbF9jaGFyIGZtdF9yZXN0KVxuICAgIHwgJ3MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoU3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ1MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2NhbWxfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChDYW1sX3N0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPlxuICAgICAgbGV0IGljb252ID0gY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ04nIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBUb2tlbl9jb3VudGVyIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyB8ICduJyB8ICdMJyB3aGVuIHN0cl9pbmQ9ZW5kX2luZCB8fCBub3QgKGlzX2ludF9iYXNlIHN0ci5bc3RyX2luZF0pIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBjb3VudGVyX29mX2NoYXIgc3ltYiBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDMyIChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50MzIgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICduJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKVxuICAgICAgICAgIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoTmF0aXZlaW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDY0IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50NjQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdmJyB8ICdlJyB8ICdFJyB8ICdnJyB8ICdHJyB8ICdGJyB8ICdoJyB8ICdIJyAtPlxuICAgICAgbGV0IGZjb252ID1cbiAgICAgICAgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZFxuICAgICAgICAgIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mbG9hdCAoZ2V0X3BhZF9vcHQgJ18nLCBnZXRfcHJlY19vcHQgKCkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEZsb2F0IChmY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnYicgfCAnQicgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfYm9vbCAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQm9vbCAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdhJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEFscGhhIGZtdF9yZXN0KVxuICAgIHwgJ3QnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoVGhldGEgZm10X3Jlc3QpXG4gICAgfCAncicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9yZWFkZXIsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoUmVhZGVyIGZtdF9yZXN0KVxuICAgIHwgJyEnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRmx1c2ggZm10X3Jlc3QpXG4gICAgfCAoJyUnIHwgJ0AnKSBhcyBjIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsIChjLCBmbXRfcmVzdCkpXG4gICAgfCAneycgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICd9JyBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfYXJnIChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfYXJnIChnZXRfcGFkX29wdCAneycsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJygnIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnKScgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICcoJywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnWycgLT5cbiAgICAgIGxldCBuZXh0X2luZCwgY2hhcl9zZXQgPSBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnXycsIGNoYXJfc2V0KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdbJywgY2hhcl9zZXQsIGZtdF9yZXN0KSlcbiAgICB8ICctJyB8ICcrJyB8ICcjJyB8ICcgJyB8ICdfJyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgZmxhZyAlQyBpcyBvbmx5IGFsbG93ZWQgYWZ0ZXIgdGhlICclJScsIGJlZm9yZSBwYWRkaW5nIGFuZCBwcmVjaXNpb25cIlxuICAgICAgICBzdHIgcGN0X2luZCBzeW1iXG4gICAgfCBfIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBpbnZhbGlkIGNvbnZlcnNpb24gXFxcIiUlJWNcXFwiXCIgc3RyIChzdHJfaW5kIC0gMSkgc3ltYlxuICAgIGluXG4gICAgKCogQ2hlY2sgZm9yIHVudXNlZCBvcHRpb25zLCBhbmQgcmVqZWN0IHRoZW0gYXMgaW5jb21wYXRpYmxlLlxuXG4gICAgICAgU3VjaCBjaGVja3MgbmVlZCB0byBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSwgYXMgdGhlIGxlZ2FjeVxuICAgICAgIHBhcnNlciBzaWxlbnRseSBpZ25vcmVkIGluY29tcGF0aWJsZSBmbGFncy4gKilcbiAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW4gYmVnaW5cbiAgICBpZiBub3QgIXBsdXNfdXNlZCAmJiBwbHVzIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCI7XG4gICAgaWYgbm90ICFoYXNoX3VzZWQgJiYgaGFzaCB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiO1xuICAgIGlmIG5vdCAhc3BhY2VfdXNlZCAmJiBzcGFjZSB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiO1xuICAgIGlmIG5vdCAhcGFkX3VzZWQgICYmIFBhZGRpbmdfRUJCIHBhZCA8PiBQYWRkaW5nX0VCQiBOb19wYWRkaW5nIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiYHBhZGRpbmcnXCI7XG4gICAgaWYgbm90ICFwcmVjX3VzZWQgJiYgUHJlY2lzaW9uX0VCQiBwcmVjIDw+IFByZWNpc2lvbl9FQkIgTm9fcHJlY2lzaW9uIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAoaWYgaWduIHRoZW4gJ18nIGVsc2Ugc3ltYilcbiAgICAgICAgXCJgcHJlY2lzaW9uJ1wiO1xuICAgIGlmIGlnbiAmJiBwbHVzIHRoZW4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicrJ1wiO1xuICAgIGVuZDtcbiAgICAoKiB0aGlzIGxhc3QgdGVzdCBtdXN0IG5vdCBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSxcbiAgICAgICBhcyBpZ25vcmluZyBpdCB3b3VsZCB0eXBpY2FsbHkgcmVzdWx0IGluIGEgZGlmZmVyZW50IHR5cGluZ1xuICAgICAgIHRoYW4gd2hhdCB0aGUgbGVnYWN5IHBhcnNlciB1c2VkICopXG4gICAgaWYgbm90ICFpZ25fdXNlZCAmJiBpZ24gdGhlblxuICAgICAgYmVnaW4gbWF0Y2ggc3ltYiB3aXRoXG4gICAgICAgICgqIGFyZ3VtZW50LWxlc3MgZm9ybWF0cyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgaW4gbGVnYWN5IG1vZGUgKilcbiAgICAgICAgfCAoJ0AnIHwgJyUnIHwgJyEnIHwgJywnKSB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiAoKVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIidfJ1wiXG4gICAgICBlbmQ7XG4gICAgZm10X3Jlc3VsdFxuXG4gICgqIFBhcnNlIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gKGFmdGVyICdAJykuICopXG4gIGFuZCBwYXJzZV9hZnRlcl9hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBFbmRfb2ZfZm9ybWF0KSlcbiAgICBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ1snIC0+XG4gICAgICAgIHBhcnNlX3RhZyBmYWxzZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV9ib3gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ3snIC0+XG4gICAgICAgIHBhcnNlX3RhZyB0cnVlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnfScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX3RhZywgZm10X3Jlc3QpKVxuICAgICAgfCAnLCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAsXCIsIDAsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCBcIiwgMSwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJzsnIC0+XG4gICAgICAgIHBhcnNlX2dvb2RfYnJlYWsgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICc/JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRkZsdXNoLCBmbXRfcmVzdCkpXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGb3JjZV9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICcuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRmx1c2hfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgcGFyc2VfbWFnaWNfc2l6ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX2F0LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyB3aGVuIHN0cl9pbmQgKyAxIDwgZW5kX2luZCAmJiBzdHIuW3N0cl9pbmQgKyAxXSA9ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMikgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9wZXJjZW50LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgZm10X3Jlc3QpKVxuICAgICAgfCBjIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljIGMsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPG5hbWU+IGFmdGVyIFwiQHtcIiBvciBcIkBbXCIuICopXG4gIGFuZCBwYXJzZV90YWcgOiB0eXBlIGUgZiAuIGJvb2wgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBpc19vcGVuX3RhZyBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICB0cnlcbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBsZXQgaW5kID0gU3RyaW5nLmluZGV4X2Zyb20gc3RyIChzdHJfaW5kICsgMSkgJz4nIGluXG4gICAgICAgIGlmIGluZCA+PSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3ViX3N0ciA9IFN0cmluZy5zdWIgc3RyIHN0cl9pbmQgKGluZCAtIHN0cl9pbmQgKyAxKSBpblxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChpbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIChpbmQgKyAxKSBpblxuICAgICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoc3ViX2ZtdCwgc3ViX3N0cikgaW5cbiAgICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcbiAgICAgIHwgXyAtPlxuICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChFbmRfb2ZfZm9ybWF0LCBcIlwiKSBpblxuICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8d2lkdGggb2Zmc2V0PiBhZnRlciBcIkA7XCIuICopXG4gIGFuZCBwYXJzZV9nb29kX2JyZWFrIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGxldCBuZXh0X2luZCwgZm9ybWF0dGluZ19saXQgPVxuICAgICAgdHJ5XG4gICAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHx8IHN0ci5bc3RyX2luZF0gPD4gJzwnIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gKFxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHdpZHRoID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzNdIHdpdGhcbiAgICAgICAgICAgICAgfCAnPicgLT5cbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzMtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfMyArIDEsIEJyZWFrIChzLCB3aWR0aCwgMClcbiAgICAgICAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNCwgb2Zmc2V0ID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzMgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzUgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF80IGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfNV0gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfNS1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF81ICsgMSwgQnJlYWsgKHMsIHdpZHRoLCBvZmZzZXQpXG4gICAgICAgICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgKVxuICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBzdHJfaW5kLCBCcmVhayAoXCJAO1wiLCAxLCAwKVxuICAgIGluXG4gICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgdGhlIHNpemUgaW4gYSA8bj4uICopXG4gIGFuZCBwYXJzZV9tYWdpY19zaXplIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIG1hdGNoXG4gICAgICB0cnlcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgc2l6ZSA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzNdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kIC0gMikgKHN0cl9pbmRfMyAtIHN0cl9pbmQgKyAzKSBpblxuICAgICAgICAgIFNvbWUgKHN0cl9pbmRfMyArIDEsIE1hZ2ljX3NpemUgKHMsIHNpemUpKVxuICAgICAgICB8IF8gLT4gTm9uZVxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgTm9uZVxuICAgIHdpdGhcbiAgICB8IFNvbWUgKG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgJzwnLCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgYW5kIGNvbnN0cnVjdCBhIGNoYXIgc2V0LiAqKVxuICBhbmQgcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuXG4gICAgbGV0IGNoYXJfc2V0ID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gICAgbGV0IGFkZF9jaGFyIGMgPVxuICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGM7XG4gICAgaW5cbiAgICBsZXQgYWRkX3JhbmdlIGMgYycgPVxuICAgICAgZm9yIGkgPSBpbnRfb2ZfY2hhciBjIHRvIGludF9vZl9jaGFyIGMnIGRvXG4gICAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCAoY2hhcl9vZl9pbnQgaSk7XG4gICAgICBkb25lO1xuICAgIGluXG5cbiAgICBsZXQgZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kID1cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogJyUlJyBhbG9uZSBpcyBub3QgYWNjZXB0ZWQgaW4gY2hhcmFjdGVyIHNldHMsIFxcXG4gICAgICAgICB1c2UgJSUlJSBpbnN0ZWFkIGF0IHBvc2l0aW9uICVkLlwiIHN0ciBzdHJfaW5kXG4gICAgaW5cblxuICAgICgqIFBhcnNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBjaGFyIHNldC4gKilcbiAgICBsZXQgcmVjIHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbGV0IGMgPSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBQYXJzZSB0aGUgY29udGVudCBvZiBhIGNoYXIgc2V0IHVudGlsIHRoZSBmaXJzdCAnXScuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogVGVzdCBmb3IgcmFuZ2UgaW4gY2hhciBzZXQuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG4gICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIHdoZW4gYyA9ICclJyAtPlxuICAgICAgICBhZGRfY2hhciBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgaWYgYyA9ICclJyB0aGVuIGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZDtcbiAgICAgICAgKCogbm90ZSB0aGF0ICdAJyBhbG9uZSBpcyBhY2NlcHRlZCwgYXMgZG9uZSBieSB0aGUgbGVnYWN5XG4gICAgICAgICAgIGltcGxlbWVudGF0aW9uOyB0aGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgJUBcbiAgICAgICAgICAgc28gd2UgY291bGQgd2FybiBvbiB0aGF0ICopXG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGMnXG5cbiAgICAoKiBNYW5hZ2UgcmFuZ2UgaW4gY2hhciBzZXQgKGV4Y2VwdCBpZiB0aGUgJy0nIHRoZSBsYXN0IGNoYXIgYmVmb3JlICddJykgKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIC0+XG4gICAgICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kXG4gICAgICAgICAgfCBfIC0+IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZFxuICAgICAgICBlbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgaW5cbiAgICBsZXQgc3RyX2luZCwgcmV2ZXJzZSA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICAgIHwgJ14nIC0+IHN0cl9pbmQgKyAxLCB0cnVlXG4gICAgICAgIHwgXyAtPiBzdHJfaW5kLCBmYWxzZSBpblxuICAgIGxldCBuZXh0X2luZCA9IHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgIGxldCBjaGFyX3NldCA9IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCBpblxuICAgIG5leHRfaW5kLCAoaWYgcmV2ZXJzZSB0aGVuIHJldl9jaGFyX3NldCBjaGFyX3NldCBlbHNlIGNoYXJfc2V0KVxuXG4gICgqIENvbnN1bWUgYWxsIG5leHQgc3BhY2VzLCByYWlzZSBhbiBGYWlsdXJlIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgaWYgc3RyLltzdHJfaW5kXSA9ICcgJyB0aGVuIHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgZWxzZSBzdHJfaW5kXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmUgaWYgZW5kX2luZCBpc1xuICAgICByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIGFjYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBhY2MgKiAxMCArIChpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJzAnKSBpblxuICAgICAgaWYgbmV3X2FjYyA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBpbnRlZ2VyICVkIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltaXQgJWRcIlxuICAgICAgICAgIHN0ciBuZXdfYWNjIFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgICAgZWxzZVxuICAgICAgICBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgbmV3X2FjY1xuICAgIHwgXyAtPiBzdHJfaW5kLCBhY2NcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZVxuICAgICBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9pbnRlZ2VyIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDBcbiAgICB8ICctJyAtPiAoXG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgICBsZXQgbmV4dF9pbmQsIG4gPSBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgMCBpblxuICAgICAgICBuZXh0X2luZCwgLW5cbiAgICAgIHwgYyAtPlxuICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImRpZ2l0XCIgY1xuICAgIClcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQWRkIGEgbGl0ZXJhbCB0byBhIGZvcm1hdCBmcm9tIGEgbGl0ZXJhbCBjaGFyYWN0ZXIgc3ViLXNlcXVlbmNlLiAqKVxuICBhbmQgYWRkX2xpdGVyYWwgOiB0eXBlIGEgZCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiAoYSwgXywgXywgZCwgZSwgZikgZm10IC0+XG4gICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBmbXQgLT4gbWF0Y2ggc3RyX2luZCAtIGxpdF9zdGFydCB3aXRoXG4gICAgfCAwICAgIC0+IEZtdF9FQkIgZm10XG4gICAgfCAxICAgIC0+IEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoc3RyLltsaXRfc3RhcnRdLCBmbXQpKVxuICAgIHwgc2l6ZSAtPiBGbXRfRUJCIChTdHJpbmdfbGl0ZXJhbCAoU3RyaW5nLnN1YiBzdHIgbGl0X3N0YXJ0IHNpemUsIGZtdCkpXG5cbiAgKCogU2VhcmNoIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdFxuICAgICAoaS5lLiB0aGUgY29ycmVzcG9uZGluZyBcIiV9XCIgb3IgXCIlKVwiKSAqKVxuICBhbmQgc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogdW5jbG9zZWQgc3ViLWZvcm1hdCwgXFxcbiAgICAgICAgIGV4cGVjdGVkIFxcXCIlJSVjXFxcIiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkXCIgc3RyIGMgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICclJyAtPlxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBpZiBzdHIuW3N0cl9pbmQgKyAxXSA9IGMgdGhlbiAoKiBFbmQgb2YgZm9ybWF0IGZvdW5kICopIHN0cl9pbmQgZWxzZVxuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgIHwgJ18nIC0+XG4gICAgICAgICAgKCogU2VhcmNoIGZvciBcIiVfKFwiIG9yIFwiJV97XCIuICopXG4gICAgICAgICAgaWYgc3RyX2luZCArIDIgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMl0gd2l0aFxuICAgICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kIGNcbiAgICAgICAgICBlbmRcbiAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAoKiAley4uLiV9IHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAoKiAlKC4uLiUpIHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnfScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJSguLi4lfS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnKSdcIiAnfSdcbiAgICAgICAgfCAnKScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJXsuLi4lKS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnfSdcIiAnKSdcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgZW5kXG4gICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgKCogQ2hlY2sgaWYgc3ltYiBpcyBhIHZhbGlkIGludCBjb252ZXJzaW9uIGFmdGVyIFwiJWxcIiwgXCIlblwiIG9yIFwiJUxcIiAqKVxuICBhbmQgaXNfaW50X2Jhc2Ugc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+IHRydWVcbiAgICB8IF8gLT4gZmFsc2VcblxuICAoKiBDb252ZXJ0IGEgY2hhciAobCwgbiBvciBMKSB0byBpdHMgYXNzb2NpYXRlZCBjb3VudGVyLiAqKVxuICBhbmQgY291bnRlcl9vZl9jaGFyIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdsJyAtPiBMaW5lX2NvdW50ZXIgIHwgJ24nIC0+IENoYXJfY291bnRlclxuICAgIHwgJ0wnIC0+IFRva2VuX2NvdW50ZXIgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGludF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIG1hdGNoIHBsdXMsIGhhc2gsIHNwYWNlLCBzeW1iIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfZCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X2lcbiAgICB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdkJyAtPiBJbnRfc2QgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnaScgLT4gSW50X3NpXG4gICAgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X3BkIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9waVxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3gnIC0+IEludF94ICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdYJyAtPiBJbnRfWFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3gnIC0+IEludF9DeCB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdYJyAtPiBJbnRfQ1hcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdvJyAtPiBJbnRfb1xuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ28nIC0+IEludF9Db1xuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3UnIC0+IEludF91XG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnZCcgLT4gSW50X0NkXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnaScgLT4gSW50X0NpXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAndScgLT4gSW50X0N1XG4gICAgfCBfLCB0cnVlLCBfLCAneCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0N4XG4gICAgfCBfLCB0cnVlLCBfLCAnWCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NYXG4gICAgfCBfLCB0cnVlLCBfLCAnbycgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NvXG4gICAgfCBfLCB0cnVlLCBfLCAoJ2QnIHwgJ2knIHwgJ3UnKSAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgZmFsc2Ugc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiXG4gICAgfCB0cnVlLCBfLCB0cnVlLCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCB0cnVlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIlxuICAgIHwgdHJ1ZSwgXywgZmFsc2UsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBmYWxzZSBoYXNoIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIGZhbHNlLCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHNwYWNlLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBmbG9hdF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbGV0IGZsYWcgPSBtYXRjaCBwbHVzLCBzcGFjZSB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19cbiAgICB8IGZhbHNlLCAgdHJ1ZSAtPiBGbG9hdF9mbGFnX3NcbiAgICB8ICB0cnVlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX3BcbiAgICB8ICB0cnVlLCAgdHJ1ZSAtPlxuICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEZsb2F0X2ZsYWdfcFxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCIgaW5cbiAgICBsZXQga2luZCA9IG1hdGNoIGhhc2gsIHN5bWIgd2l0aFxuICAgIHwgXywgJ2YnIC0+IEZsb2F0X2ZcbiAgICB8IF8sICdlJyAtPiBGbG9hdF9lXG4gICAgfCBfLCAnRScgLT4gRmxvYXRfRVxuICAgIHwgXywgJ2cnIC0+IEZsb2F0X2dcbiAgICB8IF8sICdHJyAtPiBGbG9hdF9HXG4gICAgfCBfLCAnaCcgLT4gRmxvYXRfaFxuICAgIHwgXywgJ0gnIC0+IEZsb2F0X0hcbiAgICB8IGZhbHNlLCAnRicgLT4gRmxvYXRfRlxuICAgIHwgdHJ1ZSwgJ0YnIC0+IEZsb2F0X0NGXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZSBpblxuICAgIGZsYWcsIGtpbmRcblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgaW5jb21wYXRpYmxlIG9wdGlvbnMuKilcbiAgYW5kIGluY29tcGF0aWJsZV9mbGFnIDogdHlwZSBhIC4gaW50IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZyAtPiBhID1cbiAgICBmdW4gcGN0X2luZCBzdHJfaW5kIHN5bWIgb3B0aW9uIC0+XG4gICAgICBsZXQgc3ViZm10ID0gU3RyaW5nLnN1YiBzdHIgcGN0X2luZCAoc3RyX2luZCAtIHBjdF9pbmQpIGluXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICAlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAnJWMnIGluIHN1Yi1mb3JtYXQgJVNcIlxuICAgICAgICBzdHIgcGN0X2luZCBvcHRpb24gc3ltYiBzdWJmbXRcblxuICBpbiBwYXJzZSAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICgqIEd1YXJkZWQgc3RyaW5nIHRvIGZvcm1hdCBjb252ZXJzaW9ucyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm10dHkgc3RyIGZtdHR5ID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCBmbXR0eSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIlxuICAgICAgc3RyIChzdHJpbmdfb2ZfZm10dHkgZm10dHkpXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgY29tcGF0aWJsZSB3aXRoIGFuIG90aGVyIGZvcm1hdC4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0IHN0ciAoRm9ybWF0IChmbXQnLCBzdHInKSkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IChmbXR0eV9vZl9mbXQgZm10JyksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCIgc3RyIHN0cidcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ibGl0X3N0cmluZyIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsImNhbWxfZm9ybWF0X2ludCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfbm90ZXF1YWwiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ191bnNhZmVfZ2V0IiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiY2FtbF9jYWxsNCIsImEzIiwiY2FtbF9jYWxsNSIsImE0IiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIkFzc2VydF9mYWlsdXJlIiwiQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzIiwiU3RkbGliIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfU3lzIiwiU3RkbGliX0NoYXIiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfSW50IiwiY3JlYXRlX2NoYXJfc2V0IiwicGFyYW0iLCJhZGRfaW5fY2hhcl9zZXQiLCJjaGFyX3NldCIsImMiLCJzdHJfaW5kIiwibWFzayIsImZyZWV6ZV9jaGFyX3NldCIsInJldl9jaGFyX3NldCIsImkiLCJpc19pbl9jaGFyX3NldCIsInBhZF9vZl9wYWRfb3B0IiwicGFkX29wdCIsIndpZHRoIiwicGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IiwiaWduIiwiZm10IiwiaWNvbnYiLCJwcmVjX29wdCIsIm5kZWMiLCJmbXR0eSIsIndpZHRoX29wdCIsImNvdW50ZXIiLCJkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiIsImZjb252IiwiYnVmZmVyX2NyZWF0ZSIsImluaXRfc2l6ZSIsImJ1ZmZlcl9jaGVja19zaXplIiwiYnVmIiwib3ZlcmhlYWQiLCJsZW4iLCJtaW5fbGVuIiwibmV3X2xlbiIsIm5ld19zdHIiLCJidWZmZXJfYWRkX2NoYXIiLCJidWZmZXJfYWRkX3N0cmluZyIsInMiLCJzdHJfbGVuIiwiYnVmZmVyX2NvbnRlbnRzIiwiY2hhcl9vZl9pY29udiIsImNoYXJfb2ZfZmNvbnYiLCJvcHQiLCJjRiIsImJwcmludF9jaGFyX3NldCIsInByaW50X2NoYXIiLCJzZXQiLCJpc19hbG9uZSIsImFmdGVyIiwiYmVmb3JlIiwic3dpdGNoZXIiLCJqIiwiYnByaW50X3BhZHR5IiwicGFkdHkiLCJicHJpbnRfaWdub3JlZF9mbGFnIiwiaWduX2ZsYWciLCJicHJpbnRfcGFkX29wdCIsImJwcmludF9wYWRkaW5nIiwicGFkIiwibiIsImJwcmludF9wcmVjaXNpb24iLCJwcmVjIiwiYnByaW50X2ljb252X2ZsYWciLCJicHJpbnRfYWx0aW50X2ZtdCIsImJwcmludF9mY29udl9mbGFnIiwic3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IiwiZm9ybWF0dGluZ19saXQiLCJzdHIiLCJicHJpbnRfY2hhcl9saXRlcmFsIiwiY2hyIiwiYnByaW50X3N0cmluZ19saXRlcmFsIiwiY3N0X0xpIiwiY3N0X2kiLCJjc3RfbGkiLCJjc3RfbmkiLCJicHJpbnRfZm10dHkiLCJzdWJfZm10dHkiLCJpbnRfb2ZfY3VzdG9tX2FyaXR5IiwieCIsImNzdCIsInN0cmluZ19vZl9mbXQiLCJmbXRpdGVyIiwicmVzdCIsImZtdGluZ19saXQiLCJmbXRpbmdfZ2VuIiwiYXJpdHkiLCJzeW1tIiwidHkiLCJ0eTIiLCJ0eTEiLCJmbXR0eV9yZWxfZGV0IiwibWF0Y2giLCJkZSIsImFmIiwiamQiLCJnYSIsImNzdF9jYW1saW50ZXJuYWxGb3JtYXRfbWwiLCJ0cmFucyIsInJlc3QxIiwicmVzdDIiLCJ0eTEyIiwidHkxMSIsInR5MjIiLCJ0eTIxIiwiZjQiLCJmMiIsImZtdHR5X29mX2ZtdCIsInR5X3Jlc3QiLCJwcmVjX3R5IiwiZm9ybWF0dGluZ19nZW4iLCJmbXR0eV9vZl9jdXN0b20iLCJmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IiwiZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IiwiVHlwZV9taXNtYXRjaCIsInR5cGVfcGFkZGluZyIsInciLCJ0eXBlX3BhZHByZWMiLCJwIiwidHlwZV9mb3JtYXQiLCJ0eXBlX2Zvcm1hdF9nZW4iLCJmbXR0eTAiLCJmbXR0eV9yZXN0IiwiZm10X3Jlc3QiLCJzdWJfZm10dHkxIiwiZm10MSIsImZtdHR5MiIsImZtdDIiLCJmbXR0eTMiLCJmbXQzIiwidHlwZV9pZ25vcmVkX3BhcmFtX29uZSIsInR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aSIsInN1Yl9mbXR0eV9yZXN0Iiwic3ViMl9mbXR0eSIsInN1YjFfZm10dHkiLCJyZWNhc3QiLCJmaXhfcGFkZGluZyIsInJlcyIsImZpeF9pbnRfcHJlY2lzaW9uIiwic3RyaW5nX3RvX2NhbWxfc3RyaW5nIiwibCIsImZvcm1hdF9vZl9mY29udiIsInN5bWIiLCJ0cmFuc2Zvcm1faW50X2FsdCIsInBvcyIsInB1dCIsImxlZnQiLCJjc3RfdSIsImNvbnZlcnRfaW50IiwiY29udmVydF9pbnQzMiIsImNvbnZlcnRfbmF0aXZlaW50IiwiY29udmVydF9pbnQ2NCIsImNvbnZlcnRfZmxvYXQiLCJoZXgiLCJzaWduIiwiY2FtbF9zcGVjaWFsX3ZhbCIsInN0cmluZ19vZl9mbXR0eSIsIm1ha2VfcHJpbnRmIiwiayIsImFjYyIsImthY2MiLCJuZXdfYWNjIiwibyIsIm1ha2VfaWdub3JlZF9wYXJhbSIsIm1ha2VfZnJvbV9mbXR0eSIsIm1ha2VfaW52YWxpZF9hcmciLCJtYWtlX3BhZGRpbmciLCJtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiIsIm1ha2VfY3VzdG9tIiwibWFrZV9pcHJpbnRmIiwia29jIiwiZm5fb2ZfY3VzdG9tX2FyaXR5Iiwib3V0cHV0X2FjYyIsIm1zZyIsImJ1ZnB1dF9hY2MiLCJiIiwic3RycHV0X2FjYyIsImZhaWx3aXRoX21lc3NhZ2UiLCJvcGVuX2JveF9vZl9zdHJpbmciLCJpbnZhbGlkX2JveCIsInBhcnNlX3NwYWNlcyIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleG4iLCJleHBfZW5kIiwiYm94X3R5cGUiLCJtYWtlX3BhZGRpbmdfZm10X2ViYiIsIm1ha2VfcGFkcHJlY19mbXRfZWJiIiwiY3N0X2F0X2NoYXJhY3Rlcl9udW1iZXIiLCJjc3RfaW52YWxpZF9mb3JtYXQiLCJzdWJfZm9ybWF0IiwiZm10X2ViYl9vZl9zdHJpbmciLCJsZWdhY3lfYmVoYXZpb3IiLCJmbGFnIiwiaW52YWxpZF9mb3JtYXRfbWVzc2FnZSIsImludmFsaWRfZm9ybWF0X3dpdGhvdXQiLCJleHBlY3RlZF9jaGFyYWN0ZXIiLCJleHBlY3RlZCIsInJlYWQiLCJjc3RfdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IiwicGFyc2UiLCJsaXRfc3RhcnQiLCJlbmRfaW5kIiwiY3N0XzAiLCJwYXJzZV9mbGFncyIsInBjdF9pbmQiLCJzZXRfZmxhZyIsInplcm8iLCJtaW51cyIsInBsdXMiLCJzcGFjZSIsImhhc2giLCJuZXdfaW5kIiwiY3N0X3ByZWNpc2lvbiIsInBhcnNlX2FmdGVyX3BhZGRpbmciLCJwYXJzZV9saXRlcmFsIiwicGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIiwicGFyc2VfY29udiIsInBhZHByZWMiLCJwYXJzZV9jb252ZXJzaW9uIiwicGx1c191c2VkIiwiZ2V0X3BsdXMiLCJoYXNoX3VzZWQiLCJnZXRfaGFzaCIsInNwYWNlX3VzZWQiLCJnZXRfc3BhY2UiLCJpZ25fdXNlZCIsImdldF9pZ24iLCJwYWRfdXNlZCIsImdldF9wYWQiLCJwcmVjX3VzZWQiLCJnZXRfcHJlYyIsImdldF9wYWRwcmVjIiwiZ2V0X2ludF9wYWQiLCJjaGVja19ub18wIiwib3B0X29mX3BhZCIsImdldF9wYWRfb3B0IiwiZ2V0X3BhZHByZWNfb3B0IiwiZm10X3Jlc3VsdCIsInN1Yl9lbmQiLCJzdWJfZm10IiwiaWdub3JlZCIsIm5leHRfaW5kIiwiY2hhcl9mb3JtYXQiLCJraW5kIiwicGFyc2VfYWZ0ZXJfYXQiLCJzdHJfaW5kXzEiLCJzdHJfaW5kXzIiLCJzdHJfaW5kXzMiLCJvZmZzZXQiLCJzdHJfaW5kXzQiLCJzdHJfaW5kXzUiLCJzaXplIiwicGFyc2VfdGFnIiwiaXNfb3Blbl90YWciLCJpbmQiLCJzdWJfc3RyIiwiZm9ybWF0dGluZyIsInBhcnNlX2NoYXJfc2V0IiwiYWRkX3JhbmdlIiwiZmFpbF9zaW5nbGVfcGVyY2VudCIsInBhcnNlX2NoYXJfc2V0X2NvbnRlbnQiLCJwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIiwicmV2ZXJzZSIsInBhcnNlX3Bvc2l0aXZlIiwicGFyc2VfaW50ZWdlciIsImFkZF9saXRlcmFsIiwic2VhcmNoX3N1YmZvcm1hdF9lbmQiLCJjb21wdXRlX2ludF9jb252IiwiaW5jb21wYXRpYmxlX2ZsYWciLCJvcHRpb24iLCJzdWJmbXQiLCJjc3RfYW5kIiwiY3N0X2JhZF9pbnB1dF9mb3JtYXRfdHlwZV9taXNtIiwiZm9ybWF0X29mX3N0cmluZ19mbXR0eSIsImZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQU4sR0FBQUMsSUFBQUUsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFSLEdBQUFDLElBQUFFLElBQUFFLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQywyQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLGdCQUFBQyxPQ3VCeUIsd0NBQW9C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QWxOLEtBQUE5QztBQUFBQSxRQUFBSixNQ2c2Rm9CO0FBQUEsSUFDbEIsWUFBWTtBQUFBLFVBQUF5SztBQUFBQSxTQUFBQSxNRGo2RmQ7QUFBQTtBQUFBLGFDcTZGVTtBQUFBLEtBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNRHI2RmpDO0FBQUE7QUFBQTtBQUFBLFlBQUE0Rix3QkFBQW5OLEtBQUFqRTtBQUFBQTtBQUFBQSxLQUFBaUUsUUN5NkY0QjtBQUFBLEtBQUFsRCxNQUFBO0FBQUEsS0FBQUEsUUFDUjtBQUFBLElBQ2xCLFlBQTRCLElBQWhCLG1CQUFnQjtBQUFBLFVBQUF5SztBQUFBQSxTQUFBQSxNRDM2RjlCO0FBQUE7QUFBQSxNQzY2Rkksa0RBQzhEO0FBQUEsS0Q5NkZsRTtBQUFBO0FBQUEsR0M4NkZrRTtBQUFBLEdEOTZGbEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyMzc0MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9wcmludGYubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIFhhdmllciBMZXJveSBhbmQgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG5sZXQga2ZwcmludGYgayBvIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBvIGFjYzsgayBvKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGticHJpbnRmIGsgYiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IGJ1ZnB1dF9hY2MgYiBhY2M7IGsgYikgRW5kX29mX2FjYyBmbXRcbmxldCBpa2ZwcmludGYgayBvYyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIG9jIGZtdFxubGV0IGlrYnByaW50ZiA9IGlrZnByaW50ZlxuXG5sZXQgZnByaW50ZiBvYyBmbXQgPSBrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgYnByaW50ZiBiIGZtdCA9IGticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IGlmcHJpbnRmIG9jIGZtdCA9IGlrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgaWJwcmludGYgYiBmbXQgPSBpa2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3Rkb3V0IGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBzdGRlcnIgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGsnIGFjYyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBzdHJwdXRfYWNjIGJ1ZiBhY2M7XG4gICAgayAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXRcblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgKGZ1biBzIC0+IHMpIGZtdFxuXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9CdWZmZXIiLCJDYW1saW50ZXJuYWxGb3JtYXQiLCJTdGRsaWIiLCJrZnByaW50ZiIsImsiLCJvIiwicGFyYW0iLCJmbXQiLCJhY2MiLCJrYnByaW50ZiIsImIiLCJpa2ZwcmludGYiLCJvYyIsImZwcmludGYiLCJicHJpbnRmIiwiaWZwcmludGYiLCJpYnByaW50ZiIsInByaW50ZiIsImVwcmludGYiLCJrc3ByaW50ZiIsImJ1ZiIsInNwcmludGYiLCJzIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLFNBQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFFBQUFDLE1Da0JhO0FBQUEsSUFDWDtBQUFBO0FBQUEsc0JBQUFDO0FBQUFBLGNBQXdCO0FBQUEsY0FBZ0IsdUJBQUs7QUFBQTtBQUFBO0FBQUEsaUJBQWdCO0FBQUE7QUFBQSxZQUFBQyxTQUFBTCxHQUFBTSxHQUFBSjtBQUFBQSxRQUFBQyxNQUNsRDtBQUFBLElBQ1g7QUFBQTtBQUFBLHNCQUFBQztBQUFBQSxjQUF3QjtBQUFBLGNBQWdCLHVCQUFLO0FBQUE7QUFBQTtBQUFBLGlCQUFnQjtBQUFBO0FBQUEsWUFBQUcsVUFBQVAsR0FBQVEsSUFBQU47QUFBQUEsUUFBQUMsTUFDakQ7QUFBQSxJQUNaLG1EQUFxQjtBQUFBO0FBQUEsWUFBQU0sUUFBQUQsSUFBQUw7QUFBQUEsSUFHRiw0QkQxQnJCLG9CQzBCMkM7QUFBQTtBQUFBLFlBQUFPLFFBQUFKLEdBQUFILEtBQ3ZCLDRCRDNCcEIsbUJDMkJ5QztBQUFBLFlBQUFRLFNBQUFILElBQUFMO0FBQUFBLElBQ25CLDZCRDVCdEIsb0JDNEI2QztBQUFBO0FBQUEsWUFBQVMsU0FBQU4sR0FBQUg7QUFBQUEsSUFDeEIsNkJEN0JyQixtQkM2QjJDO0FBQUE7QUFBQSxZQUFBVSxPQUFBVixLQUMxQiwrQkFBa0I7QUFBQSxZQUFBVyxRQUFBWCxLQUNqQiwrQkFBa0I7QUFBQSxZQUFBWSxTQUFBZixHQUFBRTtBQUFBQSxRQUFBQyxNQUV2QjtBQUFBLGFBQUFILElBQUFJO0FBQUFBLFNBQUFZLE1BRUM7QUFBQSxLQUNWO0FBQUEsS0FDRSxPQUFxQixjQUFyQixpQ0FBcUI7QUFBQTtBQUFBLElBQ3pCLG9EQUE2QjtBQUFBO0FBQUEsWUFBQUMsUUFBQWQsS0FFYix5QkFBQWUsR0FBbUIsU0FBQyxPQUFLO0FBQUEsR0R4QzNDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjM4MjcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvcHJpbnRleGMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gUHJpbnRmXG5cbnR5cGUgdCA9IGV4biA9IC4uXG5cbmxldCBwcmludGVycyA9IEF0b21pYy5tYWtlIFtdXG5cbmxldCBsb2NmbXQgPSBmb3JtYXRfb2Zfc3RyaW5nIFwiRmlsZSBcXFwiJXNcXFwiLCBsaW5lICVkLCBjaGFyYWN0ZXJzICVkLSVkOiAlc1wiXG5cbmxldCBmaWVsZCB4IGkgPVxuICBsZXQgZiA9IE9iai5maWVsZCB4IGkgaW5cbiAgaWYgbm90IChPYmouaXNfYmxvY2sgZikgdGhlblxuICAgIHNwcmludGYgXCIlZFwiIChPYmoubWFnaWMgZiA6IGludCkgICAgICAgICAgICgqIGNhbiBhbHNvIGJlIGEgY2hhciAqKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5zdHJpbmdfdGFnIHRoZW5cbiAgICBzcHJpbnRmIFwiJVNcIiAoT2JqLm1hZ2ljIGYgOiBzdHJpbmcpXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLmRvdWJsZV90YWcgdGhlblxuICAgIHN0cmluZ19vZl9mbG9hdCAoT2JqLm1hZ2ljIGYgOiBmbG9hdClcbiAgZWxzZVxuICAgIFwiX1wiXG5cbmxldCByZWMgb3RoZXJfZmllbGRzIHggaSA9XG4gIGlmIGkgPj0gT2JqLnNpemUgeCB0aGVuIFwiXCJcbiAgZWxzZSBzcHJpbnRmIFwiLCAlcyVzXCIgKGZpZWxkIHggaSkgKG90aGVyX2ZpZWxkcyB4IChpKzEpKVxuXG5sZXQgZmllbGRzIHggPVxuICBtYXRjaCBPYmouc2l6ZSB4IHdpdGhcbiAgfCAwIC0+IFwiXCJcbiAgfCAxIC0+IFwiXCJcbiAgfCAyIC0+IHNwcmludGYgXCIoJXMpXCIgKGZpZWxkIHggMSlcbiAgfCBfIC0+IHNwcmludGYgXCIoJXMlcylcIiAoZmllbGQgeCAxKSAob3RoZXJfZmllbGRzIHggMilcblxubGV0IHVzZV9wcmludGVycyB4ID1cbiAgbGV0IHJlYyBjb252ID0gZnVuY3Rpb25cbiAgICB8IGhkIDo6IHRsIC0+XG4gICAgICAgIChtYXRjaCBoZCB4IHdpdGhcbiAgICAgICAgIHwgTm9uZSB8IGV4Y2VwdGlvbiBfIC0+IGNvbnYgdGxcbiAgICAgICAgIHwgU29tZSBzIC0+IFNvbWUgcylcbiAgICB8IFtdIC0+IE5vbmUgaW5cbiAgY29udiAoQXRvbWljLmdldCBwcmludGVycylcblxubGV0IGRlc3RydWN0X2V4dF9jb25zdHJ1Y3RvciB4ID1cbiAgaWYgT2JqLnRhZyB4IDw+IDAgdGhlblxuICAgICgoT2JqLm1hZ2ljIChPYmouZmllbGQgeCAwKSA6IHN0cmluZyksIE5vbmUpXG4gIGVsc2VcbiAgICBsZXQgY29uc3RydWN0b3IgPVxuICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIChPYmouZmllbGQgeCAwKSAwKSA6IHN0cmluZykgaW5cbiAgICAoY29uc3RydWN0b3IsIFNvbWUgKGZpZWxkcyB4KSlcblxubGV0IHN0cmluZ19vZl9leHRlbnNpb25fY29uc3RydWN0b3IgdCA9XG4gIGxldCBjb25zdHJ1Y3RvciwgZmllbGRzX29wdCA9IGRlc3RydWN0X2V4dF9jb25zdHJ1Y3RvciB0IGluXG4gIG1hdGNoIGZpZWxkc19vcHQgd2l0aFxuICB8IE5vbmUgLT4gY29uc3RydWN0b3JcbiAgfCBTb21lIGYgLT4gY29uc3RydWN0b3IgXiBmXG5cbmxldCB0b19zdHJpbmdfZGVmYXVsdCA9IGZ1bmN0aW9uXG4gIHwgT3V0X29mX21lbW9yeSAtPiBcIk91dCBvZiBtZW1vcnlcIlxuICB8IFN0YWNrX292ZXJmbG93IC0+IFwiU3RhY2sgb3ZlcmZsb3dcIlxuICB8IE1hdGNoX2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzUpIFwiUGF0dGVybiBtYXRjaGluZyBmYWlsZWRcIlxuICB8IEFzc2VydF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIkFzc2VydGlvbiBmYWlsZWRcIlxuICB8IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIlVuZGVmaW5lZCByZWN1cnNpdmUgbW9kdWxlXCJcbiAgfCB4IC0+XG4gICAgICBzdHJpbmdfb2ZfZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIChPYmoucmVwciB4KVxuXG5sZXQgdG9fc3RyaW5nIGUgPVxuICBtYXRjaCB1c2VfcHJpbnRlcnMgZSB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IHRvX3N0cmluZ19kZWZhdWx0IGVcblxubGV0IHByaW50IGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBmbHVzaCBzdGRlcnI7XG4gICAgcmFpc2UgeFxuXG5sZXQgY2F0Y2ggZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZmx1c2ggc3Rkb3V0O1xuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBleGl0IDJcblxudHlwZSByYXdfYmFja3RyYWNlX3Nsb3RcbnR5cGUgcmF3X2JhY2t0cmFjZV9lbnRyeSA9IHByaXZhdGUgaW50XG50eXBlIHJhd19iYWNrdHJhY2UgPSByYXdfYmFja3RyYWNlX2VudHJ5IGFycmF5XG5cbmxldCByYXdfYmFja3RyYWNlX2VudHJpZXMgYnQgPSBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZTpcbiAgdW5pdCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZVwiXG5cbmV4dGVybmFsIHJhaXNlX3dpdGhfYmFja3RyYWNlOiBleG4gLT4gcmF3X2JhY2t0cmFjZSAtPiAnYVxuICA9IFwiJXJhaXNlX3dpdGhfYmFja3RyYWNlXCJcblxuKCogRGlzYWJsZSB3YXJuaW5nIDM3OiB2YWx1ZXMgYXJlIGNvbnN0cnVjdGVkIGluIHRoZSBydW50aW1lICopXG50eXBlW0B3YXJuaW5nIFwiLTM3XCJdIGJhY2t0cmFjZV9zbG90ID1cbiAgfCBLbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSAgIDogYm9vbDtcbiAgICAgIGZpbGVuYW1lICAgOiBzdHJpbmc7XG4gICAgICBzdGFydF9sbnVtIDogaW50O1xuICAgICAgc3RhcnRfY2hhciA6IGludDtcbiAgICAgIGVuZF9vZmZzZXQgOiBpbnQ7ICgqIFJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBzdGFydF9sbnVtICopXG4gICAgICBlbmRfbG51bSAgIDogaW50O1xuICAgICAgZW5kX2NoYXIgICA6IGludDsgKCogUmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIGVuZF9sbnVtIGxpbmUgKilcbiAgICAgIGlzX2lubGluZSAgOiBib29sO1xuICAgICAgZGVmbmFtZSAgICA6IHN0cmluZztcbiAgICB9XG4gIHwgVW5rbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSA6IGJvb2xcbiAgICB9XG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90OlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2U6XG4gIHJhd19iYWNrdHJhY2UgLT4gYmFja3RyYWNlX3Nsb3QgYXJyYXkgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlXCJcblxubGV0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidCA9XG4gIHRyeSBTb21lIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBwb3Mgc2xvdCA9XG4gIGxldCBpbmZvIGlzX3JhaXNlID1cbiAgICBpZiBpc19yYWlzZSB0aGVuXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYXRcIiBlbHNlIFwiUmUtcmFpc2VkIGF0XCJcbiAgICBlbHNlXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYnkgcHJpbWl0aXZlIG9wZXJhdGlvbiBhdFwiIGVsc2UgXCJDYWxsZWQgZnJvbVwiXG4gIGluXG4gIG1hdGNoIHNsb3Qgd2l0aFxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgaWYgbC5pc19yYWlzZSB0aGVuXG4gICAgICAgICgqIGNvbXBpbGVyLWluc2VydGVkIHJlLXJhaXNlLCBza2lwcGVkICopIE5vbmVcbiAgICAgIGVsc2VcbiAgICAgICAgU29tZSAoc3ByaW50ZiBcIiVzIHVua25vd24gbG9jYXRpb25cIiAoaW5mbyBmYWxzZSkpXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgbGV0IGxpbmVzID1cbiAgICAgICAgaWYgbC5zdGFydF9sbnVtID0gbC5lbmRfbG51bSB0aGVuXG4gICAgICAgICAgUHJpbnRmLnNwcmludGYgXCIgJWRcIiBsLnN0YXJ0X2xudW1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwicyAlZC0lZFwiIGwuc3RhcnRfbG51bSBsLmVuZF9sbnVtXG4gICAgICBpblxuICAgICAgU29tZSAoc3ByaW50ZiBcIiVzICVzIGluIGZpbGUgXFxcIiVzXFxcIiVzLCBsaW5lJXMsIGNoYXJhY3RlcnMgJWQtJWRcIlxuICAgICAgICAgICAgICAoaW5mbyBsLmlzX3JhaXNlKSBsLmRlZm5hbWUgbC5maWxlbmFtZVxuICAgICAgICAgICAgICAoaWYgbC5pc19pbmxpbmUgdGhlbiBcIiAoaW5saW5lZClcIiBlbHNlIFwiXCIpXG4gICAgICAgICAgICAgIGxpbmVzIGwuc3RhcnRfY2hhciBsLmVuZF9jaGFyKVxuXG5sZXQgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICAgZnByaW50ZiBvdXRjaGFuXG4gICAgICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGZwcmludGYgb3V0Y2hhbiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lXG5cbmxldCBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gcmF3X2JhY2t0cmFjZSA9XG4gIHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOiBwcmludHMgdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IHByaW50X2JhY2t0cmFjZSBvdXRjaGFuID1cbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxubGV0IGJhY2t0cmFjZV90b19zdHJpbmcgYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMTAyNCBpblxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBicHJpbnRmIGIgXCIlc1xcblwiIHN0clxuICAgICAgZG9uZTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCByYXdfYmFja3RyYWNlX3RvX3N0cmluZyByYXdfYmFja3RyYWNlID1cbiAgYmFja3RyYWNlX3RvX3N0cmluZyAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX2lubGluZVxuICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuXG50eXBlIGxvY2F0aW9uID0ge1xuICBmaWxlbmFtZSA6IHN0cmluZztcbiAgbGluZV9udW1iZXIgOiBpbnQ7XG4gIHN0YXJ0X2NoYXIgOiBpbnQ7XG4gIGVuZF9jaGFyIDogaW50O1xuICBlbmRfbGluZSA6IGludDtcbiAgZW5kX2NvbCA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5zdGFydF9sbnVtO1xuICAgICAgc3RhcnRfY2hhciAgPSBsLnN0YXJ0X2NoYXI7XG4gICAgICBlbmRfY2hhciAgICA9IGwuZW5kX29mZnNldDtcbiAgICAgIGVuZF9saW5lICAgID0gbC5lbmRfbG51bTtcbiAgICAgIGVuZF9jb2wgICAgID0gbC5lbmRfY2hhcjtcbiAgICB9XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF9cbiAgfCBLbm93bl9sb2NhdGlvbiB7IGRlZm5hbWUgPSBcIlwiIH0gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gU29tZSBsLmRlZm5hbWVcblxubGV0IGJhY2t0cmFjZV9zbG90cyByYXdfYmFja3RyYWNlID1cbiAgKCogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgU29tZSBpc1xuICAgICByZXR1cm5lZCBvbmx5IGlmIGEgcGFydCBvZiB0aGUgdHJhY2UgaXMgdXNhYmxlLiBUaGlzIGdpdmVzIHVzXG4gICAgIGEgYml0IG1vcmUgd29yayB0aGFuIGp1c3QgY29udmVydF9yYXdfYmFja3RyYWNlLCBidXQgaXQgbWFrZXMgdGhlXG4gICAgIEFQSSBtb3JlIHVzZXItZnJpZW5kbHkgLS0gb3RoZXJ3aXNlIG1vc3QgdXNlcnMgd291bGQgaGF2ZSB0b1xuICAgICByZWltcGxlbWVudCB0aGUgXCJQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgc29ycnlcIiBsb2dpY1xuICAgICB0aGVtc2VsdmVzLiAqKVxuICBtYXRjaCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgYmFja3RyYWNlIC0+XG4gICAgICBsZXQgdXNhYmxlX3Nsb3QgPSBmdW5jdGlvblxuICAgICAgICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuICAgICAgICB8IEtub3duX2xvY2F0aW9uIF8gLT4gdHJ1ZSBpblxuICAgICAgbGV0IHJlYyBleGlzdHNfdXNhYmxlID0gZnVuY3Rpb25cbiAgICAgICAgfCAoLTEpIC0+IGZhbHNlXG4gICAgICAgIHwgaSAtPiB1c2FibGVfc2xvdCBiYWNrdHJhY2UuKGkpIHx8IGV4aXN0c191c2FibGUgKGkgLSAxKSBpblxuICAgICAgaWYgZXhpc3RzX3VzYWJsZSAoQXJyYXkubGVuZ3RoIGJhY2t0cmFjZSAtIDEpXG4gICAgICB0aGVuIFNvbWUgYmFja3RyYWNlXG4gICAgICBlbHNlIE5vbmVcblxubGV0IGJhY2t0cmFjZV9zbG90c19vZl9yYXdfZW50cnkgZW50cnkgPVxuICBiYWNrdHJhY2Vfc2xvdHMgW3wgZW50cnkgfF1cblxubW9kdWxlIFNsb3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGZvcm1hdCA9IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdFxuICBsZXQgaXNfcmFpc2UgPSBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZVxuICBsZXQgaXNfaW5saW5lID0gYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lXG4gIGxldCBsb2NhdGlvbiA9IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uXG4gIGxldCBuYW1lID0gYmFja3RyYWNlX3Nsb3RfZGVmbmFtZVxuZW5kXG5cbmxldCByYXdfYmFja3RyYWNlX2xlbmd0aCBidCA9IEFycmF5Lmxlbmd0aCBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZSAtPiBpbnQgLT4gcmF3X2JhY2t0cmFjZV9zbG90ID0gXCJjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiByYXdfYmFja3RyYWNlX3Nsb3Qgb3B0aW9uXG4gID0gXCJjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XCJcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6XG4gICByZXR1cm5zIHRoZSAqc3RyaW5nKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBnZXRfYmFja3RyYWNlICgpID0gcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5leHRlcm5hbCByZWNvcmRfYmFja3RyYWNlOiBib29sIC0+IHVuaXQgPSBcImNhbWxfcmVjb3JkX2JhY2t0cmFjZVwiXG5leHRlcm5hbCBiYWNrdHJhY2Vfc3RhdHVzOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfYmFja3RyYWNlX3N0YXR1c1wiXG5cbmxldCByZWMgcmVnaXN0ZXJfcHJpbnRlciBmbiA9XG4gIGxldCBvbGRfcHJpbnRlcnMgPSBBdG9taWMuZ2V0IHByaW50ZXJzIGluXG4gIGxldCBuZXdfcHJpbnRlcnMgPSBmbiA6OiBvbGRfcHJpbnRlcnMgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IHByaW50ZXJzIG9sZF9wcmludGVycyBuZXdfcHJpbnRlcnMgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiByZWdpc3Rlcl9wcmludGVyIGZuXG5cbmV4dGVybmFsIGdldF9jYWxsc3RhY2s6IGludCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFja1wiXG5cbmxldCBleG5fc2xvdCB4ID1cbiAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gIGlmIE9iai50YWcgeCA9IDAgdGhlbiBPYmouZmllbGQgeCAwIGVsc2UgeFxuXG5sZXQgZXhuX3Nsb3RfaWQgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMSkgOiBpbnQpXG5cbmxldCBleG5fc2xvdF9uYW1lIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDApIDogc3RyaW5nKVxuXG5leHRlcm5hbCBnZXRfZGVidWdfaW5mb19zdGF0dXMgOiB1bml0IC0+IGludCA9IFwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1c1wiXG5cbigqIERlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHN0YXJ0dXAuaC4gU2VlIGFsc28gYmFja3RyYWNlLmMgKilcbmxldCBlcnJvcnMgPSBbfCBcIlwiO1xuICAoKiBGSUxFX05PVF9GT1VORCAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgbm90IGZvdW5kKVwiO1xuICAoKiBCQURfQllURUNPREUgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGFwcGVhcnMgdG8gYmUgY29ycnVwdClcIjtcbiAgKCogV1JPTkdfTUFHSUMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIpXCI7XG4gICgqIE5PX0ZEUyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgY2Fubm90IGJlIG9wZW5lZDtcXG4gXFxcbiAgICAgIC0tIHRvbyBtYW55IG9wZW4gZmlsZXMuIFRyeSBydW5uaW5nIHdpdGggT0NBTUxSVU5QQVJBTT1iPTIpXCJcbnxdXG5cbmxldCBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlID1cbiAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gIGxldCBzdGF0dXMgPSBnZXRfZGVidWdfaW5mb19zdGF0dXMgKCkgaW5cbiAgaWYgc3RhdHVzIDwgMCB0aGVuXG4gICAgcHJlcnJfZW5kbGluZSBlcnJvcnMuKGFicyBzdGF0dXMpO1xuICBmbHVzaCBzdGRlcnJcblxubGV0IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyID0gcmVmIGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXJcblxubGV0IHNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBmbiA9IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIDo9IGZuXG5cbmxldCBlbXB0eV9iYWNrdHJhY2UgOiByYXdfYmFja3RyYWNlID0gW3wgfF1cblxubGV0IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSA9XG4gIHRyeVxuICAgIGdldF9yYXdfYmFja3RyYWNlICgpXG4gIHdpdGggXyAoKiBPdXRfb2ZfbWVtb3J5PyAqKSAtPlxuICAgIGVtcHR5X2JhY2t0cmFjZVxuXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgICgqIEdldCB0aGUgYmFja3RyYWNlIG5vdywgaW4gY2FzZSBvbmUgb2YgdGhlIFthdF9leGl0XSBmdW5jdGlvblxuICAgICAgIGRlc3Ryb3lzIGl0LiAqKVxuICAgIGxldCByYXdfYmFja3RyYWNlID1cbiAgICAgIGlmIGRlYnVnZ2VyX2luX3VzZSAoKiBTYW1lIHRlc3QgYXMgaW4gW3J1bnRpbWUvcHJpbnRleGMuY10gKikgdGhlblxuICAgICAgICBlbXB0eV9iYWNrdHJhY2VcbiAgICAgIGVsc2VcbiAgICAgICAgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpXG4gICAgaW5cbiAgICAodHJ5IFN0ZGxpYi5kb19hdF9leGl0ICgpIHdpdGggXyAtPiAoKSk7XG4gICAgdHJ5XG4gICAgICAhdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2VcbiAgICB3aXRoIGV4bicgLT5cbiAgICAgIGxldCByYXdfYmFja3RyYWNlJyA9IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yIGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyOiBleGNlcHRpb24gJXNcXG5cIlxuICAgICAgICAodG9fc3RyaW5nIGV4bicpO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZSc7XG4gICAgICBmbHVzaCBzdGRlcnJcbiAgd2l0aFxuICAgIHwgT3V0X29mX21lbW9yeSAtPlxuICAgICAgICBwcmVycl9lbmRsaW5lXG4gICAgICAgICAgXCJGYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlclwiXG5cbigqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFtjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbl0gaW5cbiAgIFtydW50aW1lL3ByaW50ZXhjLmNdIHdoaWNoIGV4cGVjdHMgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlXG4gIHdpdGggXyAtPlxuICAgICgqIFRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICopXG4gICAgKClcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiXG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9vYmpfdGFnIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGw1IiwiYTIiLCJhMyIsImE0IiwiY2FtbF9jYWxsNyIsImE1IiwiYTYiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfQXRvbWljIiwiU3RkbGliIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9PYmoiLCJwcmludGVycyIsImZpZWxkIiwieCIsImkiLCJjc3QiLCJvdGhlcl9maWVsZHMiLCJ1c2VfcHJpbnRlcnMiLCJwYXJhbSIsInRsIiwiaGQiLCJ2YWwiLCJzIiwic3RyaW5nX29mX2V4dGVuc2lvbl9jb25zdHJ1Y3RvIiwidCIsImNvbnN0cnVjdG9yIiwibWF0Y2giLCJmaWVsZHNfb3B0IiwiY3N0X2NoYXJhY3RlcnMiLCJsb2NmbXQiLCJ0b19zdHJpbmdfZGVmYXVsdCIsImNoYXIiLCJsaW5lIiwiZmlsZSIsInRvX3N0cmluZyIsImUiLCJjc3RfVW5jYXVnaHRfZXhjZXB0aW9uIiwiY3N0X1VuY2F1Z2h0X2V4Y2VwdGlvbl9zIiwicHJpbnQiLCJmY3QiLCJhcmciLCJjYXRjaCQiLCJyYXdfYmFja3RyYWNlX2VudHJpZXMiLCJidCIsImNvbnZlcnRfcmF3X2JhY2t0cmFjZSIsImZvcm1hdF9iYWNrdHJhY2Vfc2xvdCIsInBvcyIsInNsb3QiLCJpbmZvIiwiaXNfcmFpc2UiLCJsaW5lcyIsImNzdF9zIiwiY3N0X1Byb2dyYW1fbm90X2xpbmtlZF93aXRoX2dfIiwicHJpbnRfcmF3X2JhY2t0cmFjZSIsIm91dGNoYW4iLCJyYXdfYmFja3RyYWNlIiwiYmFja3RyYWNlIiwiYSIsInN0ciIsInByaW50X2JhY2t0cmFjZSIsInJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIiwiYiIsImJhY2t0cmFjZV9zbG90X2lzX3JhaXNlIiwiYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lIiwiYmFja3RyYWNlX3Nsb3RfbG9jYXRpb24iLCJiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lIiwiYmFja3RyYWNlX3Nsb3RzIiwiYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSIsImVudHJ5IiwicmF3X2JhY2t0cmFjZV9sZW5ndGgiLCJnZXRfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwic3VjY2VzcyIsImV4bl9zbG90IiwiZXhuX3Nsb3RfaWQiLCJleG5fc2xvdF9uYW1lIiwiZXJyb3JzIiwiY3N0X0ZhdGFsX2Vycm9yX2V4Y2VwdGlvbiIsImNzdF9GYXRhbF9lcnJvcl9leGNlcHRpb25fcyIsImRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbiIsImV4biIsInN0YXR1cyIsInVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwic2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwiZW1wdHlfYmFja3RyYWNlIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImRlYnVnZ2VyX2luX3VzZSIsIlN0ZGxpYl9QcmludGV4YyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlDQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFLElBQUFDLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBUixHQUFBQyxJQUFBRSxJQUFBRSxJQUFBQyxJQUFBQyxJQUFBRSxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxXQ21CZTtBQUFBLFFBQWM7QUFBQTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDO0FBQUFBLFFBQUFwQixJQUtuQjtBQUFBLElBQ0Q7QUFBQSxLQUNMLG9EQU1HO0FBQUEsWUFMRztBQUFBO0FBQUEsS0FDTixvREFJRztBQUFBLFlBSEc7QUFBQSxtQ0FDTiw4QkFFRztBQUFBO0FBQUEsT0FBQXFCLE1EaENQLFFDbUI2QjtBQUFBLFlBQUFDLGFBQUFILEdBQUFDO0FBQUFBLElBZ0IzQixzQkFBd0I7QUFBQSxZQUNVLGdDQUFaO0FBQUEsSUFBVyx1REFBdUI7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QUFBLElBQ2I7QUFBQTtBQUFBLFVBQ3dCO0FBQUEsVUFBUjtBQUFBLEtBQWQ7QUFBQTtBQUFBLElBQ0Ysd0NBQVk7QUFBQTtBQUFBLE9BQUFDLDZCQXBUZTtBQUFBLFlBQUFDLCtCQUFBZDtBQUFBQSxJQXdUVztBQUFBO0FBQUEsR0FBZ0M7QUFBQTtBQUFBLElBQUFlLGtCQXhUM0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLDBCQUFBTCxPQUFBTTtBQUFBQSxJQStWM0I7QUFBQSxLQTVCQTtBQUFBO0FBQUEsT0FBQWxDO0FBQUFBLFNBQUEsb0NBTEU7QUFBQSxNQWNBLElBQUssaUNBQUE0QjtBQUFBQSxNQUNMO0FBQUE7QUFBQSxZQUNFO0FBQUE7QUFBQTtBQUFBLFlBQUFBO0FBQUFBO0FBQUFBLFFBQUFBLFFEaldOO0FBQUEsUUFBQTVCLGtCQ2lWSTtBQUFBLFlBbUJ3QztBQUFBLE9BQXRDO0FBQUEsT0FDQTtBQUFBLGVBRUU7QUFBQSxPQURGO0FBQUEsT0FFQTtBQUFBLGVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBNEI7QUFBQUEsVUFBQUEsTUR6V047QUFBQTtBQUFBO0FBQUE7QUFBQSxTQzRXUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBQUEsS0FVSjtBQUFBLEdBQUU7QUFBQSxHQU1KO0FBQUE7QUFBQTtBQUFBLElBQUFPO0FBQUFBLE1BQzJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQ3WDdCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjQzMDksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZnVuLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBpZCA6ICdhIC0+ICdhID0gXCIlaWRlbnRpdHlcIlxubGV0IGNvbnN0IGMgXyA9IGNcbmxldCBjb21wb3NlIGYgZyB4ID0gZiAoZyB4KVxubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgKCkgPSBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIEBAIGZ1bmN0aW9uXG58IEZpbmFsbHlfcmFpc2VkIGV4biAtPiBTb21lIChcIkZ1bi5GaW5hbGx5X3JhaXNlZDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKVxufCBfIC0+IE5vbmVcblxubGV0IHByb3RlY3QgfihmaW5hbGx5IDogdW5pdCAtPiB1bml0KSB3b3JrID1cbiAgbGV0IGZpbmFsbHlfbm9fZXhuICgpID1cbiAgICB0cnkgZmluYWxseSAoKSB3aXRoIGUgLT5cbiAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSAoRmluYWxseV9yYWlzZWQgZSkgYnRcbiAgaW5cbiAgbWF0Y2ggd29yayAoKSB3aXRoXG4gIHwgcmVzdWx0IC0+IGZpbmFsbHlfbm9fZXhuICgpIDsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIHdvcmtfZXhuIC0+XG4gICAgICBsZXQgd29ya19idCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBmaW5hbGx5X25vX2V4biAoKSA7XG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSB3b3JrX2V4biB3b3JrX2J0XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9QcmludGV4YyIsIlN0ZGxpYiIsImNvbnN0JCIsImMiLCJwYXJhbSIsImNvbXBvc2UiLCJnIiwieCIsImZsaXAiLCJ5IiwibmVnYXRlIiwicCIsInYiLCJGaW5hbGx5X3JhaXNlZCIsImV4biIsImR1bW15IiwicHJvdGVjdCIsImZpbmFsbHkkIiwid29yayIsImZpbmFsbHlfbm9fZXhuIiwiZSIsImJ0IiwicmVzdWx0Iiwid29ya19leG4iLCJ3b3JrX2J0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsT0FBQUMsR0FBQUMsT0NnQmdCLFNBQUM7QUFBQSxZQUFBQyxRQUFBVixHQUFBVyxHQUFBQyxHQUNLLE9BQUssY0FBTCxpQkFBSztBQUFBLFlBQUFDLEtBQUFiLEdBQUFZLEdBQUFFLEdBQ1YsMEJBQUs7QUFBQSxZQUFBQyxPQUFBQyxHQUFBQyxHQUNELDJCQUFLO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNRG5CMUI7QUFBQSxHQ3VCUztBQUFBO0FBQUEsY0FBQVQ7QUFBQUEsTUFBNkIsZ0NBRS9CO0FBQUEsVUFBQVUsTUFGK0IsY0FDaUI7QUFBQSxNQUExQiw0REFBaUQ7QUFBQSxLQUNuRTtBQUFBLE9BQUFDLFFBQUE7QUFBQSxZQUFBQyxRQUFBQyxVQUFBQztBQUFBQSxhQUFBQyxlQUFBZjtBQUFBQSxLQUlQLElBQUk7QUFBQSxXQUFBZ0I7QUFBQUE7QUFBQUEsT0FBQUEsSUQ3QlI7QUFBQSxPQUFBQyxLQzhCZTtBQUFBLE9BQUFQLE1BQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFtRDtBQUFBLElBRXZELFFBQUFRLFNBQU07QUFBQSxVQUFBQztBQUFBQTtBQUFBQSxNQUFBQSxXRGpDUjtBQUFBLE1BQUFDLFVDb0NvQjtBQUFBLEtBQ2Q7QUFBQSxLQUFpQjtBQUFBO0FBQUE7QUFBQSxJQUhUO0FBQUEsSUFBaUI7QUFBQSxHQUlxQjtBQUFBLEdBYnpDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHpCWCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI0MzgwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2luX2NoYW5uZWwubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIxIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGluX2NoYW5uZWxcblxudHlwZSBvcGVuX2ZsYWcgPSBTdGRsaWIub3Blbl9mbGFnID1cbiAgfCBPcGVuX3Jkb25seVxuICB8IE9wZW5fd3Jvbmx5XG4gIHwgT3Blbl9hcHBlbmRcbiAgfCBPcGVuX2NyZWF0XG4gIHwgT3Blbl90cnVuY1xuICB8IE9wZW5fZXhjbFxuICB8IE9wZW5fYmluYXJ5XG4gIHwgT3Blbl90ZXh0XG4gIHwgT3Blbl9ub25ibG9ja1xuXG5sZXQgc3RkaW4gPSBTdGRsaWIuc3RkaW5cbmxldCBvcGVuX2JpbiA9IFN0ZGxpYi5vcGVuX2luX2JpblxubGV0IG9wZW5fdGV4dCA9IFN0ZGxpYi5vcGVuX2luXG5sZXQgb3Blbl9nZW4gPSBTdGRsaWIub3Blbl9pbl9nZW5cblxubGV0IHdpdGhfb3BlbiBvcGVuZnVuIHMgZiA9XG4gIGxldCBpYyA9IG9wZW5mdW4gcyBpblxuICBGdW4ucHJvdGVjdCB+ZmluYWxseTooZnVuICgpIC0+IFN0ZGxpYi5jbG9zZV9pbl9ub2VyciBpYylcbiAgICAoZnVuICgpIC0+IGYgaWMpXG5cbmxldCB3aXRoX29wZW5fYmluIHMgZiA9XG4gIHdpdGhfb3BlbiBTdGRsaWIub3Blbl9pbl9iaW4gcyBmXG5cbmxldCB3aXRoX29wZW5fdGV4dCBzIGYgPVxuICB3aXRoX29wZW4gU3RkbGliLm9wZW5faW4gcyBmXG5cbmxldCB3aXRoX29wZW5fZ2VuIGZsYWdzIHBlcm0gcyBmID1cbiAgd2l0aF9vcGVuIChTdGRsaWIub3Blbl9pbl9nZW4gZmxhZ3MgcGVybSkgcyBmXG5cbmxldCBzZWVrID0gU3RkbGliLkxhcmdlRmlsZS5zZWVrX2luXG5sZXQgcG9zID0gU3RkbGliLkxhcmdlRmlsZS5wb3NfaW5cbmxldCBsZW5ndGggPSBTdGRsaWIuTGFyZ2VGaWxlLmluX2NoYW5uZWxfbGVuZ3RoXG5sZXQgY2xvc2UgPSBTdGRsaWIuY2xvc2VfaW5cbmxldCBjbG9zZV9ub2VyciA9IFN0ZGxpYi5jbG9zZV9pbl9ub2VyclxuXG5sZXQgaW5wdXRfY2hhciBpYyA9XG4gIG1hdGNoIFN0ZGxpYi5pbnB1dF9jaGFyIGljIHdpdGhcbiAgfCBjIC0+IFNvbWUgY1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbmxldCBpbnB1dF9ieXRlIGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2J5dGUgaWMgd2l0aFxuICB8IG4gLT4gU29tZSBuXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IGlucHV0X2xpbmUgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfbGluZSBpYyB3aXRoXG4gIHwgcyAtPiBTb21lIHNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gTm9uZVxuXG5sZXQgaW5wdXQgPSBTdGRsaWIuaW5wdXRcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0X2JpZ2FycmF5IDpcbiAgdCAtPiBfIEJpZ2FycmF5LkFycmF5MS50IC0+IGludCAtPiBpbnQgLT4gaW50XG4gID0gXCJjYW1sX21sX2lucHV0X2JpZ2FycmF5XCJcblxubGV0IGlucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IEJpZ2FycmF5LkFycmF5MS5kaW0gYnVmIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJpbnB1dF9iaWdhcnJheVwiXG4gIGVsc2UgdW5zYWZlX2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgYnVmIHBvcyBsZW4gPVxuICBtYXRjaCBTdGRsaWIucmVhbGx5X2lucHV0IGljIGJ1ZiBwb3MgbGVuIHdpdGhcbiAgfCAoKSAtPiBTb21lICgpXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuID1cbiAgaWYgbGVuIDw9IDAgdGhlbiBTb21lICgpIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHVuc2FmZV9pbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiBOb25lXG4gICAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiAob2ZzICsgcikgKGxlbiAtIHIpXG4gIGVuZFxuXG5sZXQgcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IEJpZ2FycmF5LkFycmF5MS5kaW0gYnVmIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRfYmlnYXJyYXlcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXRfYmlnYXJyYXkgaWMgYnVmIG9mcyBsZW5cblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbWF0Y2ggU3RkbGliLnJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuIHdpdGhcbiAgfCBzIC0+IFNvbWUgc1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbigqIFJlYWQgdXAgdG8gW2xlbl0gYnl0ZXMgaW50byBbYnVmXSwgc3RhcnRpbmcgYXQgW29mc10uIFJldHVybiB0b3RhbCBieXRlc1xuICAgcmVhZC4gKilcbmxldCByZWFkX3VwdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3Agb2ZzIGxlbiA9XG4gICAgaWYgbGVuID0gMCB0aGVuIG9mc1xuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gU3RkbGliLmlucHV0IGljIGJ1ZiBvZnMgbGVuIGluXG4gICAgICBpZiByID0gMCB0aGVuXG4gICAgICAgIG9mc1xuICAgICAgZWxzZVxuICAgICAgICBsb29wIChvZnMgKyByKSAobGVuIC0gcilcbiAgICBlbmRcbiAgaW5cbiAgbG9vcCBvZnMgbGVuIC0gb2ZzXG5cbigqIEJlc3QgZWZmb3J0IGF0dGVtcHQgdG8gcmV0dXJuIGEgYnVmZmVyIHdpdGggPj0gKG9mcyArIG4pIGJ5dGVzIG9mIHN0b3JhZ2UsXG4gICBhbmQgc3VjaCB0aGF0IGl0IGNvaW5jaWRlcyB3aXRoIFtidWZdIGF0IGluZGljZXMgPCBbb2ZzXS5cblxuICAgVGhlIHJldHVybmVkIGJ1ZmZlciBpcyBlcXVhbCB0byBbYnVmXSBpdHNlbGYgaWYgaXQgYWxyZWFkeSBoYXMgc3VmZmljaWVudFxuICAgZnJlZSBzcGFjZS5cblxuICAgVGhlIHJldHVybmVkIGJ1ZmZlciBtYXkgaGF2ZSAqZmV3ZXIqIHRoYW4gW29mcyArIG5dIGJ5dGVzIG9mIHN0b3JhZ2UgaWYgdGhpc1xuICAgbnVtYmVyIGlzID4gW1N5cy5tYXhfc3RyaW5nX2xlbmd0aF0uIEhvd2V2ZXIgdGhlIHJldHVybmVkIGJ1ZmZlciB3aWxsXG4gICAqYWx3YXlzKiBoYXZlID4gW29mc10gYnl0ZXMgb2Ygc3RvcmFnZS4gSW4gdGhlIGxpbWl0aW5nIGNhc2Ugd2hlbiBbb2ZzID0gbGVuXG4gICA9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aF0gKHNvIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlc2l6ZSB0aGUgYnVmZmVyIGF0XG4gICBhbGwpLCBhbiBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxuXG5sZXQgZW5zdXJlIGJ1ZiBvZnMgbiA9XG4gIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYnVmIGluXG4gIGlmIGxlbiA+PSBvZnMgKyBuIHRoZW4gYnVmXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgbmV3X2xlbiA9IHJlZiBsZW4gaW5cbiAgICB3aGlsZSAhbmV3X2xlbiA8IG9mcyArIG4gZG9cbiAgICAgIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuICsgMVxuICAgIGRvbmU7XG4gICAgbGV0IG5ld19sZW4gPSAhbmV3X2xlbiBpblxuICAgIGxldCBuZXdfbGVuID1cbiAgICAgIGlmIG5ld19sZW4gPD0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgbmV3X2xlblxuICAgICAgZWxzZSBpZiBvZnMgPCBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgZmFpbHdpdGggXCJJbl9jaGFubmVsLmlucHV0X2FsbDogY2hhbm5lbCBjb250ZW50IFxcXG4gICAgICAgICAgICAgICAgICBpcyBsYXJnZXIgdGhhbiBtYXhpbXVtIHN0cmluZyBsZW5ndGhcIlxuICAgIGluXG4gICAgbGV0IG5ld19idWYgPSBCeXRlcy5jcmVhdGUgbmV3X2xlbiBpblxuICAgIEJ5dGVzLmJsaXQgYnVmIDAgbmV3X2J1ZiAwIG9mcztcbiAgICBuZXdfYnVmXG4gIGVuZFxuXG5sZXQgaW5wdXRfYWxsIGljID1cbiAgbGV0IGNodW5rX3NpemUgPSA2NTUzNiBpbiAoKiBJT19CVUZGRVJfU0laRSAqKVxuICBsZXQgaW5pdGlhbF9zaXplID1cbiAgICB0cnlcbiAgICAgIFN0ZGxpYi5pbl9jaGFubmVsX2xlbmd0aCBpYyAtIFN0ZGxpYi5wb3NfaW4gaWNcbiAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAtMVxuICBpblxuICBsZXQgaW5pdGlhbF9zaXplID0gaWYgaW5pdGlhbF9zaXplIDwgMCB0aGVuIGNodW5rX3NpemUgZWxzZSBpbml0aWFsX3NpemUgaW5cbiAgbGV0IGluaXRpYWxfc2l6ZSA9XG4gICAgaWYgaW5pdGlhbF9zaXplIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICBpbml0aWFsX3NpemVcbiAgICBlbHNlXG4gICAgICBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBpbml0aWFsX3NpemUgaW5cbiAgbGV0IG5yZWFkID0gcmVhZF91cHRvIGljIGJ1ZiAwIGluaXRpYWxfc2l6ZSBpblxuICBpZiBucmVhZCA8IGluaXRpYWxfc2l6ZSB0aGVuICgqIEVPRiByZWFjaGVkLCBidWZmZXIgcGFydGlhbGx5IGZpbGxlZCAqKVxuICAgIEJ5dGVzLnN1Yl9zdHJpbmcgYnVmIDAgbnJlYWRcbiAgZWxzZSBiZWdpbiAoKiBucmVhZCA9IGluaXRpYWxfc2l6ZSwgbWF5YmUgRU9GIHJlYWNoZWQgKilcbiAgICBtYXRjaCBTdGRsaWIuaW5wdXRfY2hhciBpYyB3aXRoXG4gICAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT5cbiAgICAgICAgKCogRU9GIHJlYWNoZWQsIGJ1ZmZlciBpcyBjb21wbGV0ZWx5IGZpbGxlZCAqKVxuICAgICAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICAgIHwgYyAtPlxuICAgICAgICAoKiBFT0Ygbm90IHJlYWNoZWQgKilcbiAgICAgICAgbGV0IHJlYyBsb29wIGJ1ZiBvZnMgPVxuICAgICAgICAgIGxldCBidWYgPSBlbnN1cmUgYnVmIG9mcyBjaHVua19zaXplIGluXG4gICAgICAgICAgbGV0IHJlbSA9IEJ5dGVzLmxlbmd0aCBidWYgLSBvZnMgaW5cbiAgICAgICAgICAoKiBbcmVtXSBjYW4gYmUgPCBbY2h1bmtfc2l6ZV0gaWYgYnVmZmVyIHNpemUgY2xvc2UgdG9cbiAgICAgICAgICAgICBbU3lzLm1heF9zdHJpbmdfbGVuZ3RoXSAqKVxuICAgICAgICAgIGxldCByID0gcmVhZF91cHRvIGljIGJ1ZiBvZnMgcmVtIGluXG4gICAgICAgICAgaWYgciA8IHJlbSB0aGVuICgqIEVPRiByZWFjaGVkICopXG4gICAgICAgICAgICBCeXRlcy5zdWJfc3RyaW5nIGJ1ZiAwIChvZnMgKyByKVxuICAgICAgICAgIGVsc2UgKCogciA9IHJlbSAqKVxuICAgICAgICAgICAgbG9vcCBidWYgKG9mcyArIHJlbSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGJ1ZiA9IGVuc3VyZSBidWYgbnJlYWQgKGNodW5rX3NpemUgKyAxKSBpblxuICAgICAgICBCeXRlcy5zZXQgYnVmIG5yZWFkIGM7XG4gICAgICAgIGxvb3AgYnVmIChucmVhZCArIDEpXG4gIGVuZFxuXG5sZXQgW0B0YWlsX21vZF9jb25zXSByZWMgaW5wdXRfbGluZXMgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfbGluZSBpYyB3aXRoXG4gIHwgbGluZSAtPiBsaW5lIDo6IGlucHV0X2xpbmVzIGljXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IFtdXG5cbmxldCByZWMgZm9sZF9saW5lcyBmIGFjY3UgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfbGluZSBpYyB3aXRoXG4gIHwgbGluZSAtPiBmb2xkX2xpbmVzIGYgKGYgYWNjdSBsaW5lKSBpY1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBhY2N1XG5cbmxldCBzZXRfYmluYXJ5X21vZGUgPSBTdGRsaWIuc2V0X2JpbmFyeV9tb2RlX2luXG5cbmV4dGVybmFsIGlzX2JpbmFyeV9tb2RlIDogaW5fY2hhbm5lbCAtPiBib29sID0gXCJjYW1sX21sX2lzX2JpbmFyeV9tb2RlXCJcblxuZXh0ZXJuYWwgaXNhdHR5IDogdCAtPiBib29sID0gXCJjYW1sX3N5c19pc2F0dHlcIlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JhX2RpbV8xIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfbWxfaW5wdXRfYmlnYXJyYXkiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX1N5cyIsIlN0ZGxpYl9GdW4iLCJzdGRpbiIsIm9wZW5fYmluIiwib3Blbl90ZXh0Iiwib3Blbl9nZW4iLCJ3aXRoX29wZW4iLCJvcGVuZnVuIiwicyIsImljIiwicGFyYW0iLCJ3aXRoX29wZW5fYmluIiwid2l0aF9vcGVuX3RleHQiLCJ3aXRoX29wZW5fZ2VuIiwiZmxhZ3MiLCJwZXJtIiwic2VlayIsInBvcyIsImxlbmd0aCIsImNsb3NlIiwiY2xvc2Vfbm9lcnIiLCJpbnB1dF9jaGFyIiwiYyIsImV4biIsImlucHV0X2J5dGUiLCJuIiwiaW5wdXRfbGluZSIsImlucHV0IiwiaW5wdXRfYmlnYXJyYXkiLCJidWYiLCJvZnMiLCJsZW4iLCJyZWFsbHlfaW5wdXQiLCJyZWFsbHlfaW5wdXRfYmlnYXJyYXkiLCJyIiwicmVhbGx5X2lucHV0X3N0cmluZyIsInJlYWRfdXB0byIsImVuc3VyZSIsIm5ld19sZW4iLCJuZXdfYnVmIiwiaW5wdXRfYWxsIiwiaW5pdGlhbF9zaXplIiwiY2h1bmtfc2l6ZSIsIm5yZWFkIiwicmVtIiwiaW5wdXRfbGluZXMiLCJsaW5lIiwiYmxvY2siLCJkc3QiLCJvZmZzZXQiLCJmb2xkX2xpbmVzIiwiYWNjdSIsInNldF9iaW5hcnlfbW9kZSIsIlN0ZGxpYl9Jbl9jaGFubmVsIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxZQUFBQyxVQUFBQyxTQUFBQyxHQUFBZjtBQUFBQSxRQUFBZ0IsS0NrQ1c7QUFBQSxJQUNUO0FBQUE7QUFBQSxzQkFBQUMsT0FBZ0MsZ0NBQXdCO0FBQUEsc0JBQUFBLE9BQzNDLHdCQUFJLEdBQUM7QUFBQTtBQUFBLFlBQUFDLGNBQUFILEdBQUFmLEdBR2xCLGtDQUFnQztBQUFBLFlBQUFtQixlQUFBSixH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QUFBQSxJQUNaO0FBQUEsS0FDRSxnREFzQkM7QUFBQSxJQXZCSCxRQUFBckIsSUFHUTtBQUFBLFVBQUFDO0FBQUFBLFNBQUFBLFFENUtWO0FBQUEsOEJDK0tRLHVDQWlCSDtBQUFBLEtEaE1MO0FBQUE7QUFBQSxRQUFBTSxRQzZMa0I7QUFBQSxJQUNWO0FBQUEsUUFBQUMsUUFBcUIsZUFBQUQsUUFBQSxPQUFBQyxNQUFBO0FBQUE7QUFBQTtBQUFBLE1BQUFELFFBWFQ7QUFBQSxNQUFBZSxNQUNWO0FBQUEsTUFBQVYsSUFHUTtBQUFBLEtBQ1IsWUFDRSx3REFPUDtBQUFBLFNBQUFKLFFBTE87QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUtQO0FBQUEsWUFBQWUsWUFBQXBDO0FBQUFBLElBR0gsUUFBQXFDLE9BQU07QUFBQSxVQUFBdkI7QUFBQUEsU0FBQUEsTURuTVI7QUFBQSw0QkNxTTZCO0FBQUEsS0RyTTdCO0FBQUE7QUFBQSxRQUFBd0IsUUNvTVksa0JBQUFDLE1BQVEsT0FBQUMsU0FBQTtBQUFBO0FBQUEsS0FEbEIsUUFBQUgsU0FBTTtBQUFBLFdBQUF2QjtBQUFBQSxVQUFBQSxRRG5NUjtBQUFBO0FBQUEsTUNxTTZCO0FBQUEsTUFESztBQUFBO0FBQUEsU0FBQXlCLFFBQXRCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUNtQjtBQUFBLFlBQUFFLFdBQUF6RCxHQUFBMEQsUUFBQTFDO0FBQUFBLFFBQUEwQyxPQUc3QjtBQUFBO0FBQUEsYUFBQUwsT0FBTTtBQUFBLFdBQUF2QjtBQUFBQSxVQUFBQSxNRHhNUjtBQUFBLDZCQzBNNkI7QUFBQSxNRDFNN0I7QUFBQTtBQUFBLFNBQUE0QixTQ3lNeUI7QUFBQSxLQUFhO0FBQUE7QUFBQSxHQUNMO0FBQUE7QUFBQSxJQUFBQyxrQkQxTWpDO0FBQUEsSUFBQUM7QUFBQUEsTUFBQSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI0NjQ3LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2RpZ2VzdC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogVXRpbGl0eSBmdW5jdGlvbnMgKilcblxubGV0IGhleF9vZl9zdHJpbmcgZCA9XG4gIGxldCBjaGFyX2hleCBuID1cbiAgICBDaGFyLmNociAoaWYgbiA8IDEwIHRoZW4gQ2hhci5jb2RlICcwJyArIG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgQ2hhci5jb2RlICdhJyArIG4gLSAxMCkgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggZCBpblxuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIChsZW4gKiAyKSBpblxuICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgIGxldCB4ID0gQ2hhci5jb2RlIGQuW2ldIGluXG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMikgKGNoYXJfaGV4ICh4IGxzciA0KSk7XG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMisxKSAoY2hhcl9oZXggKHggbGFuZCAweDBmKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG5cbmxldCBzdHJpbmdfb2ZfaGV4IHMgPVxuICBsZXQgZGlnaXQgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnMCcuLic5JyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdBJy4uJ0YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCAnYScuLidmJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgXyAtPiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5vZl9oZXhcIiBpblxuICBsZXQgYnl0ZSBpID0gZGlnaXQgcy5baV0gbHNsIDQgKyBkaWdpdCBzLltpKzFdIGluXG4gIFN0cmluZy5pbml0IChTdHJpbmcubGVuZ3RoIHMgLyAyKSAoZnVuIGkgLT4gQ2hhci5jaHIgKGJ5dGUgKDIgKiBpKSkpXG5cbigqIEdlbmVyaWMgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgdHlwZSB0ID0gc3RyaW5nXG4gIHZhbCBoYXNoX2xlbmd0aCA6IGludFxuICB2YWwgY29tcGFyZSA6IHQgLT4gdCAtPiBpbnRcbiAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsIHN0cmluZyA6IHN0cmluZyAtPiB0XG4gIHZhbCBieXRlcyA6IGJ5dGVzIC0+IHRcbiAgdmFsIHN1YnN0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHRcbiAgdmFsIHN1YmJ5dGVzIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB0XG4gIHZhbCBjaGFubmVsIDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdFxuICB2YWwgZmlsZSA6IHN0cmluZyAtPiB0XG4gIHZhbCBvdXRwdXQgOiBvdXRfY2hhbm5lbCAtPiB0IC0+IHVuaXRcbiAgdmFsIGlucHV0IDogaW5fY2hhbm5lbCAtPiB0XG4gIHZhbCB0b19oZXggOiB0IC0+IHN0cmluZ1xuICB2YWwgb2ZfaGV4IDogc3RyaW5nIC0+IHRcbmVuZFxuXG4oKiBCTEFLRTIgaGFzaGluZywgcGFyYW1ldGVyaXplZCBieSBoYXNoIHNpemUgKilcblxubW9kdWxlIEJMQUtFMiAoWDogc2lnIHZhbCBoYXNoX2xlbmd0aCA6IGludCBlbmQpIDogUyA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IHN0cmluZ1xuXG4gIGxldCBoYXNoX2xlbmd0aCA9XG4gICAgaWYgWC5oYXNoX2xlbmd0aCA8IDEgfHwgWC5oYXNoX2xlbmd0aCA+IDY0XG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5CTEFLRTI6IHdyb25nIGhhc2ggc2l6ZVwiO1xuICAgIFguaGFzaF9sZW5ndGhcblxuICBsZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG4gIGxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG4gIHR5cGUgc3RhdGVcblxuICBleHRlcm5hbCBjcmVhdGVfZ2VuOiBpbnQgLT4gc3RyaW5nIC0+IHN0YXRlID0gXCJjYW1sX2JsYWtlMl9jcmVhdGVcIlxuICBleHRlcm5hbCB1cGRhdGU6IHN0YXRlIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfYmxha2UyX3VwZGF0ZVwiXG4gIGV4dGVybmFsIGZpbmFsOiBzdGF0ZSAtPiBpbnQgLT4gdCA9IFwiY2FtbF9ibGFrZTJfZmluYWxcIlxuICBleHRlcm5hbCB1bnNhZmVfc3RyaW5nOiBpbnQgLT4gc3RyaW5nIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsYWtlMl9zdHJpbmdcIlxuXG4gIGxldCBjcmVhdGUgKCkgPSBjcmVhdGVfZ2VuIGhhc2hfbGVuZ3RoIFwiXCJcblxuICBsZXQgc3RyaW5nIHN0ciA9XG4gICAgdW5zYWZlX3N0cmluZyBoYXNoX2xlbmd0aCBcIlwiIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuICBsZXQgYnl0ZXMgYiA9XG4gICAgc3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpXG5cbiAgbGV0IHN1YnN0cmluZyBzdHIgb2ZzIGxlbiA9XG4gICAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IFN0cmluZy5sZW5ndGggc3RyIC0gbGVuXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5zdWJzdHJpbmdcIjtcbiAgICB1bnNhZmVfc3RyaW5nIGhhc2hfbGVuZ3RoIFwiXCIgc3RyIG9mcyBsZW5cblxuICBsZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID1cbiAgICBzdWJzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYikgb2ZzIGxlblxuXG4gIGxldCBjaGFubmVsIGljIHRvcmVhZCA9XG4gICAgbGV0IGJ1Zl9zaXplID0gNDA5NiBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgYnVmX3NpemUgaW5cbiAgICBsZXQgY3R4ID0gY3JlYXRlICgpIGluXG4gICAgaWYgdG9yZWFkIDwgMCB0aGVuIGJlZ2luXG4gICAgICBsZXQgcmVjIGRvX3JlYWQgKCkgPVxuICAgICAgICBsZXQgbiA9IEluX2NoYW5uZWwuaW5wdXQgaWMgYnVmIDAgYnVmX3NpemUgaW5cbiAgICAgICAgaWYgbiA9IDBcbiAgICAgICAgdGhlbiBmaW5hbCBjdHggaGFzaF9sZW5ndGhcbiAgICAgICAgZWxzZSAodXBkYXRlIGN0eCAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWYpIDAgbjsgZG9fcmVhZCAoKSlcbiAgICAgIGluIGRvX3JlYWQgKClcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgbGV0IHJlYyBkb19yZWFkIHRvcmVhZCA9XG4gICAgICAgIGlmIHRvcmVhZCA9IDAgdGhlbiBmaW5hbCBjdHggaGFzaF9sZW5ndGggZWxzZSBiZWdpblxuICAgICAgICAgIGxldCBuID0gSW5fY2hhbm5lbC5pbnB1dCBpYyBidWYgMCAoSW50Lm1pbiBidWZfc2l6ZSB0b3JlYWQpIGluXG4gICAgICAgICAgaWYgbiA9IDBcbiAgICAgICAgICB0aGVuIHJhaXNlIEVuZF9vZl9maWxlXG4gICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgdXBkYXRlIGN0eCAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWYpIDAgbjtcbiAgICAgICAgICAgIGRvX3JlYWQgKHRvcmVhZCAtIG4pXG4gICAgICAgICAgZW5kXG4gICAgICAgIGVuZFxuICAgICAgaW4gZG9fcmVhZCB0b3JlYWRcbiAgICBlbmRcblxuICBsZXQgZmlsZSBmaWxlbmFtZSA9XG4gICAgSW5fY2hhbm5lbC53aXRoX29wZW5fYmluIGZpbGVuYW1lIChmdW4gaWMgLT4gY2hhbm5lbCBpYyAoLTEpKVxuXG4gIGxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPSBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbiAgbGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gaGFzaF9sZW5ndGhcblxuICBsZXQgdG9faGV4IGQgPVxuICAgIGlmIFN0cmluZy5sZW5ndGggZCA8PiBoYXNoX2xlbmd0aCB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICAgIGhleF9vZl9zdHJpbmcgZFxuXG4gIGxldCBvZl9oZXggcyA9XG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IGhhc2hfbGVuZ3RoICogMiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0Lm9mX2hleFwiO1xuICAgIHN0cmluZ19vZl9oZXggc1xuXG5lbmRcblxubW9kdWxlIEJMQUtFMTI4ID0gQkxBS0UyKHN0cnVjdCBsZXQgaGFzaF9sZW5ndGggPSAxNiBlbmQpXG5tb2R1bGUgQkxBS0UyNTYgPSBCTEFLRTIoc3RydWN0IGxldCBoYXNoX2xlbmd0aCA9IDMyIGVuZClcbm1vZHVsZSBCTEFLRTUxMiA9IEJMQUtFMihzdHJ1Y3QgbGV0IGhhc2hfbGVuZ3RoID0gNjQgZW5kKVxuXG4oKiBNRDUgaGFzaGluZyAqKVxuXG5tb2R1bGUgTUQ1ID0gc3RydWN0XG5cbiAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgbGV0IGhhc2hfbGVuZ3RoID0gMTZcblxuICBsZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG4gIGxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG4gIGV4dGVybmFsIHVuc2FmZV9zdHJpbmc6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X3N0cmluZ1wiXG4gIGV4dGVybmFsIGNoYW5uZWw6IGluX2NoYW5uZWwgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X2NoYW5cIlxuXG4gIGxldCBzdHJpbmcgc3RyID1cbiAgICB1bnNhZmVfc3RyaW5nIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuICBsZXQgYnl0ZXMgYiA9IHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG4gIGxldCBzdWJzdHJpbmcgc3RyIG9mcyBsZW4gPVxuICAgIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBTdHJpbmcubGVuZ3RoIHN0ciAtIGxlblxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCJcbiAgICBlbHNlIHVuc2FmZV9zdHJpbmcgc3RyIG9mcyBsZW5cblxuICBsZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID0gc3Vic3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpIG9mcyBsZW5cblxuICBsZXQgZmlsZSBmaWxlbmFtZSA9XG4gICAgSW5fY2hhbm5lbC53aXRoX29wZW5fYmluIGZpbGVuYW1lIChmdW4gaWMgLT4gY2hhbm5lbCBpYyAoLTEpKVxuXG4gIGxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPSBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbiAgbGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gMTZcblxuICBsZXQgdG9faGV4IGQgPVxuICAgIGlmIFN0cmluZy5sZW5ndGggZCA8PiAxNiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICAgIGhleF9vZl9zdHJpbmcgZFxuXG4gIGxldCBvZl9oZXggcyA9XG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IDMyIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QuZnJvbV9oZXhcIjtcbiAgICBzdHJpbmdfb2ZfaGV4IHNcblxuZW5kXG5cbigqIERlZmF1bHQgZXhwb3J0ZWQgaW1wbGVtZW50YXRpb24gaXMgTUQ1ICopXG5cbmluY2x1ZGUgTUQ1XG5cbmxldCBmcm9tX2hleCA9IG9mX2hleFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JsYWtlMl9maW5hbCIsImNhbWxfYmxha2UyX3N0cmluZyIsImNhbWxfYmxha2UyX3VwZGF0ZSIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tZDVfY2hhbiIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0luX2NoYW5uZWwiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfSW50IiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9DaGFyIiwiaGV4X29mX3N0cmluZyIsImQiLCJjaGFyX2hleCIsIm4iLCJsZW4iLCJyZXN1bHQiLCJpIiwieCIsImNzdF9EaWdlc3Rfb2ZfaGV4Iiwic3RyaW5nX29mX2hleCIsInMiLCJkaWdpdCIsImMiLCJjc3RfRGlnZXN0X3N1YnN0cmluZyIsImNzdF9EaWdlc3RfdG9faGV4IiwiQkxBS0UyIiwiWCIsImhhc2hfbGVuZ3RoIiwiY29tcGFyZSIsImVxdWFsIiwiY3N0Iiwic3RyaW5nIiwic3RyIiwiYnl0ZXMiLCJiIiwic3Vic3RyaW5nIiwib2ZzIiwic3ViYnl0ZXMiLCJjaGFubmVsIiwiaWMiLCJ0b3JlYWQiLCJidWYiLCJjdHgiLCJidWZfc2l6ZSIsImZpbGUiLCJmaWxlbmFtZSIsIm91dHB1dCIsImNoYW4iLCJkaWdlc3QiLCJpbnB1dCIsInRvX2hleCIsIm9mX2hleCIsIkJMQUtFMTI4IiwiQkxBS0UyNTYiLCJCTEFLRTUxMiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxn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QUExQixVQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLFlBQUFFLE9BQUFDO0FBQUFBLElDOEpJLDBEQUF1QztBQUFBO0FBQUEsWUFBQUMsTUFBQUMsR0FFcEIsT0FBMEIsT0FBMUIsK0JBQTBCO0FBQUEsWUFBQUMsVUFBQUgsS0FBQUksS0FBQXRCO0FBQUFBLElBRzdDO0FBQUEsS0FFSyxxQ0FBeUI7QUFBQSxJQUR6QixpREFDeUI7QUFBQTtBQUFBLFlBQUF1QixTQUFBSCxHQUFBRSxLQUFBdEI7QUFBQUEsSUFFRyxPQUEwQixVQUExQix5Q0FBa0M7QUFBQTtBQUFBLFlBQUE4QixLQUFBQztBQUFBQSxJQUduRTtBQUFBLHNDQUFBTixJQUE2Qyw0QkFBZSxHQUFDO0FBQUE7QUFBQSxZQUFBTyxPQUFBQyxNQUFBQyxRQUV0QywwQ0FBeUI7QUFBQSxZQUFBQyxNQUFBRixNQUVqQyxzQ0FBMkI7QUFBQSxZQUFBRyxPQUFBdkM7QUFBQUEsSUFHMUM7QUFBQSxLQUE4QjtBQUFBLElBQzlCLHVCQUFlO0FBQUE7QUFBQSxZQUFBd0MsT0FBQS9CO0FBQUFBLElBR2Y7QUFBQSxLQUE4QjtBQUFBLElBQzlCLHVCQUFlO0FBQUE7QUFBQSxHRHRMbkIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyNDg3MiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9iaWdhcnJheS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBNYW51ZWwgU2VycmFubyBldCBYYXZpZXIgTGVyb3ksIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDAgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtCaWdhcnJheV06IGxhcmdlLCBtdWx0aS1kaW1lbnNpb25hbCwgbnVtZXJpY2FsIGFycmF5cyAqKVxuXG4oKiBUaGVzZSB0eXBlcyBpbiBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSB0YWJsZXMgaW5cbiAgIC4uL3R5cGluZy90eXBlb3B0Lm1sICopXG5cbnR5cGUgZmxvYXQxNl9lbHQgPSBGbG9hdDE2X2VsdFxudHlwZSBmbG9hdDMyX2VsdCA9IEZsb2F0MzJfZWx0XG50eXBlIGZsb2F0NjRfZWx0ID0gRmxvYXQ2NF9lbHRcbnR5cGUgaW50OF9zaWduZWRfZWx0ID0gSW50OF9zaWduZWRfZWx0XG50eXBlIGludDhfdW5zaWduZWRfZWx0ID0gSW50OF91bnNpZ25lZF9lbHRcbnR5cGUgaW50MTZfc2lnbmVkX2VsdCA9IEludDE2X3NpZ25lZF9lbHRcbnR5cGUgaW50MTZfdW5zaWduZWRfZWx0ID0gSW50MTZfdW5zaWduZWRfZWx0XG50eXBlIGludDMyX2VsdCA9IEludDMyX2VsdFxudHlwZSBpbnQ2NF9lbHQgPSBJbnQ2NF9lbHRcbnR5cGUgaW50X2VsdCA9IEludF9lbHRcbnR5cGUgbmF0aXZlaW50X2VsdCA9IE5hdGl2ZWludF9lbHRcbnR5cGUgY29tcGxleDMyX2VsdCA9IENvbXBsZXgzMl9lbHRcbnR5cGUgY29tcGxleDY0X2VsdCA9IENvbXBsZXg2NF9lbHRcblxuKCogS2VlcCB0aGUgb3JkZXIgb2YgdGhlc2UgY29uc3RydWN0b3JzIGluIHN5bmMgd2l0aCB0aGUgY2FtbF9iYV9raW5kXG4gICBlbnVtZXJhdGlvbiBpbiBiaWdhcnJheS5oICopXG5cbnR5cGUgKCdhLCAnYikga2luZCA9XG4gIHwgRmxvYXQzMiA6IChmbG9hdCwgZmxvYXQzMl9lbHQpIGtpbmRcbiAgfCBGbG9hdDY0IDogKGZsb2F0LCBmbG9hdDY0X2VsdCkga2luZFxuICB8IEludDhfc2lnbmVkIDogKGludCwgaW50OF9zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50OF91bnNpZ25lZCA6IChpbnQsIGludDhfdW5zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50MTZfc2lnbmVkIDogKGludCwgaW50MTZfc2lnbmVkX2VsdCkga2luZFxuICB8IEludDE2X3Vuc2lnbmVkIDogKGludCwgaW50MTZfdW5zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50MzIgOiAoaW50MzIsIGludDMyX2VsdCkga2luZFxuICB8IEludDY0IDogKGludDY0LCBpbnQ2NF9lbHQpIGtpbmRcbiAgfCBJbnQgOiAoaW50LCBpbnRfZWx0KSBraW5kXG4gIHwgTmF0aXZlaW50IDogKG5hdGl2ZWludCwgbmF0aXZlaW50X2VsdCkga2luZFxuICB8IENvbXBsZXgzMiA6IChDb21wbGV4LnQsIGNvbXBsZXgzMl9lbHQpIGtpbmRcbiAgfCBDb21wbGV4NjQgOiAoQ29tcGxleC50LCBjb21wbGV4NjRfZWx0KSBraW5kXG4gIHwgQ2hhciA6IChjaGFyLCBpbnQ4X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEZsb2F0MTYgOiAoZmxvYXQsIGZsb2F0MTZfZWx0KSBraW5kXG5cbnR5cGUgY19sYXlvdXQgPSBDX2xheW91dF90eXBcbnR5cGUgZm9ydHJhbl9sYXlvdXQgPSBGb3J0cmFuX2xheW91dF90eXAgKCoqKVxuXG50eXBlICdhIGxheW91dCA9XG4gICAgQ19sYXlvdXQ6IGNfbGF5b3V0IGxheW91dFxuICB8IEZvcnRyYW5fbGF5b3V0OiBmb3J0cmFuX2xheW91dCBsYXlvdXRcblxubGV0IGZsb2F0MTYgPSBGbG9hdDE2XG5sZXQgZmxvYXQzMiA9IEZsb2F0MzJcbmxldCBmbG9hdDY0ID0gRmxvYXQ2NFxubGV0IGludDhfc2lnbmVkID0gSW50OF9zaWduZWRcbmxldCBpbnQ4X3Vuc2lnbmVkID0gSW50OF91bnNpZ25lZFxubGV0IGludDE2X3NpZ25lZCA9IEludDE2X3NpZ25lZFxubGV0IGludDE2X3Vuc2lnbmVkID0gSW50MTZfdW5zaWduZWRcbmxldCBpbnQzMiA9IEludDMyXG5sZXQgaW50NjQgPSBJbnQ2NFxubGV0IGludCA9IEludFxubGV0IG5hdGl2ZWludCA9IE5hdGl2ZWludFxubGV0IGNvbXBsZXgzMiA9IENvbXBsZXgzMlxubGV0IGNvbXBsZXg2NCA9IENvbXBsZXg2NFxubGV0IGNoYXIgPSBDaGFyXG5cbmxldCBraW5kX3NpemVfaW5fYnl0ZXMgOiB0eXBlIGEgYi4gKGEsIGIpIGtpbmQgLT4gaW50ID0gZnVuY3Rpb25cbiAgfCBGbG9hdDE2IC0+IDJcbiAgfCBGbG9hdDMyIC0+IDRcbiAgfCBGbG9hdDY0IC0+IDhcbiAgfCBJbnQ4X3NpZ25lZCAtPiAxXG4gIHwgSW50OF91bnNpZ25lZCAtPiAxXG4gIHwgSW50MTZfc2lnbmVkIC0+IDJcbiAgfCBJbnQxNl91bnNpZ25lZCAtPiAyXG4gIHwgSW50MzIgLT4gNFxuICB8IEludDY0IC0+IDhcbiAgfCBJbnQgLT4gU3lzLndvcmRfc2l6ZSAvIDhcbiAgfCBOYXRpdmVpbnQgLT4gU3lzLndvcmRfc2l6ZSAvIDhcbiAgfCBDb21wbGV4MzIgLT4gOFxuICB8IENvbXBsZXg2NCAtPiAxNlxuICB8IENoYXIgLT4gMVxuXG4oKiBLZWVwIHRob3NlIGNvbnN0YW50cyBpbiBzeW5jIHdpdGggdGhlIGNhbWxfYmFfbGF5b3V0IGVudW1lcmF0aW9uXG4gICBpbiBiaWdhcnJheS5oICopXG5cbmxldCBjX2xheW91dCA9IENfbGF5b3V0XG5sZXQgZm9ydHJhbl9sYXlvdXQgPSBGb3J0cmFuX2xheW91dFxuXG5tb2R1bGUgR2VuYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdFxuICBleHRlcm5hbCBjcmVhdGU6ICgnYSwgJ2IpIGtpbmQgLT4gJ2MgbGF5b3V0IC0+IGludCBhcnJheSAtPiAoJ2EsICdiLCAnYykgdFxuICAgICA9IFwiY2FtbF9iYV9jcmVhdGVcIlxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCBhcnJheSAtPiAnYVxuICAgICA9IFwiY2FtbF9iYV9nZXRfZ2VuZXJpY1wiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IGFycmF5IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcImNhbWxfYmFfc2V0X2dlbmVyaWNcIlxuXG4gIGxldCByZWMgY2xvb3AgYXJyIGlkeCBmIGNvbCBtYXggPVxuICAgIGlmIGNvbCA9IEFycmF5Lmxlbmd0aCBpZHggdGhlbiBzZXQgYXJyIGlkeCAoZiBpZHgpXG4gICAgZWxzZSBmb3IgaiA9IDAgdG8gcHJlZCBtYXguKGNvbCkgZG9cbiAgICAgICAgICAgaWR4Lihjb2wpIDwtIGo7XG4gICAgICAgICAgIGNsb29wIGFyciBpZHggZiAoc3VjYyBjb2wpIG1heFxuICAgICAgICAgZG9uZVxuICBsZXQgcmVjIGZsb29wIGFyciBpZHggZiBjb2wgbWF4ID1cbiAgICBpZiBjb2wgPCAwIHRoZW4gc2V0IGFyciBpZHggKGYgaWR4KVxuICAgIGVsc2UgZm9yIGogPSAxIHRvIG1heC4oY29sKSBkb1xuICAgICAgICAgICBpZHguKGNvbCkgPC0gajtcbiAgICAgICAgICAgZmxvb3AgYXJyIGlkeCBmIChwcmVkIGNvbCkgbWF4XG4gICAgICAgICBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW1zIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltcyBpblxuICAgIGxldCBkbGVuID0gQXJyYXkubGVuZ3RoIGRpbXMgaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY2xvb3AgYXJyIChBcnJheS5tYWtlIGRsZW4gMCkgZiAwIGRpbXM7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZmxvb3AgYXJyIChBcnJheS5tYWtlIGRsZW4gMSkgZiAocHJlZCBkbGVuKSBkaW1zOyBhcnJcblxuICBleHRlcm5hbCBudW1fZGltczogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCJjYW1sX2JhX251bV9kaW1zXCJcbiAgZXh0ZXJuYWwgbnRoX2RpbTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCA9IFwiY2FtbF9iYV9kaW1cIlxuICBsZXQgZGltcyBhID1cbiAgICBsZXQgbiA9IG51bV9kaW1zIGEgaW5cbiAgICBsZXQgZCA9IEFycmF5Lm1ha2UgbiAwIGluXG4gICAgZm9yIGkgPSAwIHRvIG4tMSBkbyBkLihpKSA8LSBudGhfZGltIGEgaSBkb25lO1xuICAgIGRcblxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKEFycmF5LmZvbGRfbGVmdCAoICogKSAxIChkaW1zIGFycikpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHNsaWNlX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCBhcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zbGljZVwiXG4gIGV4dGVybmFsIHNsaWNlX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgYXJyYXkgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc2xpY2VcIlxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuZW5kXG5cbm1vZHVsZSBBcnJheTAgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfHxdXG4gIGxldCBnZXQgYXJyID0gR2VuYXJyYXkuZ2V0IGFyciBbfHxdXG4gIGxldCBzZXQgYXJyID0gR2VuYXJyYXkuc2V0IGFyciBbfHxdXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID0ga2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycilcblxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuXG4gIGxldCBvZl92YWx1ZSBraW5kIGxheW91dCB2ID1cbiAgICBsZXQgYSA9IGNyZWF0ZSBraW5kIGxheW91dCBpblxuICAgIHNldCBhIHY7XG4gICAgYVxuICBsZXQgaW5pdCA9IG9mX3ZhbHVlXG5lbmRcblxubW9kdWxlIEFycmF5MSA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0gPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfGRpbXxdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfMVwiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVjYW1sX2JhX3NldF8xXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzFcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8xXCJcbiAgZXh0ZXJuYWwgZGltOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltIGFycilcblxuICBleHRlcm5hbCBzdWI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgJ2MpIHQgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlICh0eXBlIHQpIChhIDogKF8sIF8sIHQpIEdlbmFycmF5LnQpIG4gPVxuICAgIG1hdGNoIGxheW91dCBhIHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IChHZW5hcnJheS5zbGljZV9sZWZ0IGEgW3xufF0gOiAoXywgXywgdCkgR2VuYXJyYXkudClcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IChHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdOiAoXywgXywgdCkgR2VuYXJyYXkudClcbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdCA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcbiAgbGV0IGNfaW5pdCBhcnIgZGltIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbSBkbyB1bnNhZmVfc2V0IGFyciBpIChmIGkpIGRvbmVcbiAgbGV0IGZvcnRyYW5faW5pdCBhcnIgZGltIGYgPVxuICAgIGZvciBpID0gMSB0byBkaW0gZG8gdW5zYWZlX3NldCBhcnIgaSAoZiBpKSBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW0gZiA9XG4gICAgbGV0IGFyciA9IGNyZWF0ZSBraW5kIGxheW91dCBkaW0gaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0gZjsgYXJyXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiBmb3J0cmFuX2luaXQgYXJyIGRpbSBmOyBhcnJcbiAgbGV0IG9mX2FycmF5ICh0eXBlIHQpIGtpbmQgKGxheW91dDogdCBsYXlvdXQpIGRhdGEgPVxuICAgIGxldCBiYSA9IGNyZWF0ZSBraW5kIGxheW91dCAoQXJyYXkubGVuZ3RoIGRhdGEpIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZGF0YSAtIDEgZG8gdW5zYWZlX3NldCBiYSAoaSArIG9mcykgZGF0YS4oaSkgZG9uZTtcbiAgICBiYVxuZW5kXG5cbm1vZHVsZSBBcnJheTIgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3xkaW0xOyBkaW0yfF1cbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfMlwiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlY2FtbF9iYV9zZXRfMlwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2FcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9yZWZfMlwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8yXCJcbiAgZXh0ZXJuYWwgZGltMTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGRpbTI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzJcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0xIGFycikgKiAoZGltMiBhcnIpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OlxuICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlX2xlZnQgYSBuID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bnxdXG4gIGxldCBzbGljZV9yaWdodCBhIG4gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbTEgZGltMiBmID1cbiAgICBmb3IgaSA9IDAgdG8gcHJlZCBkaW0xIGRvXG4gICAgICBmb3IgaiA9IDAgdG8gcHJlZCBkaW0yIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiAoZiBpIGopXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZiA9XG4gICAgZm9yIGogPSAxIHRvIGRpbTIgZG9cbiAgICAgIGZvciBpID0gMSB0byBkaW0xIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiAoZiBpIGopXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltMSBkaW0yIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNfaW5pdCBhcnIgZGltMSBkaW0yIGY7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgZGltMSA9IEFycmF5Lmxlbmd0aCBkYXRhIGluXG4gICAgbGV0IGRpbTIgPSBpZiBkaW0xID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkgaW5cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBkaW0xIC0gMSBkb1xuICAgICAgbGV0IHJvdyA9IGRhdGEuKGkpIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggcm93IDw+IGRpbTIgdGhlblxuICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5Mi5vZl9hcnJheTogbm9uLXJlY3Rhbmd1bGFyIGRhdGFcIik7XG4gICAgICBmb3IgaiA9IDAgdG8gZGltMiAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCBiYSAoaSArIG9mcykgKGogKyBvZnMpIHJvdy4oailcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgIGJhXG5lbmRcblxubW9kdWxlIEFycmF5MyA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0xIGRpbTIgZGltMyA9XG4gICAgR2VuYXJyYXkuY3JlYXRlIGtpbmQgbGF5b3V0IFt8ZGltMTsgZGltMjsgZGltM3xdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgPSBcIiVjYW1sX2JhX3JlZl8zXCJcbiAgZXh0ZXJuYWwgc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV9zZXRfM1wiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gaW50IC0+ICdhXG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzNcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfc2V0XzNcIlxuICBleHRlcm5hbCBkaW0xOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwgZGltMjogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMlwiXG4gIGV4dGVybmFsIGRpbTM6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzNcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0xIGFycikgKiAoZGltMiBhcnIpICogKGRpbTMgYXJyKVxuXG4gIGV4dGVybmFsIHN1Yl9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHN1Yl9yaWdodDpcbiAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBsZXQgc2xpY2VfbGVmdF8xIGEgbiBtID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bjsgbXxdXG4gIGxldCBzbGljZV9yaWdodF8xIGEgbiBtID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG47IG18XVxuICBsZXQgc2xpY2VfbGVmdF8yIGEgbiA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG58XVxuICBsZXQgc2xpY2VfcmlnaHRfMiBhIG4gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbTEgZG9cbiAgICAgIGZvciBqID0gMCB0byBwcmVkIGRpbTIgZG9cbiAgICAgICAgZm9yIGsgPSAwIHRvIHByZWQgZGltMyBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiBrIChmIGkgaiBrKVxuICAgICAgICBkb25lXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmID1cbiAgICBmb3IgayA9IDEgdG8gZGltMyBkb1xuICAgICAgZm9yIGogPSAxIHRvIGRpbTIgZG9cbiAgICAgICAgZm9yIGkgPSAxIHRvIGRpbTEgZG9cbiAgICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogayAoZiBpIGogaylcbiAgICAgICAgZG9uZVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGluaXQgKHR5cGUgdCkga2luZCAobGF5b3V0IDogdCBsYXlvdXQpIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmOyBhcnJcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGRpbTMgZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgZGltMSA9IEFycmF5Lmxlbmd0aCBkYXRhIGluXG4gICAgbGV0IGRpbTIgPSBpZiBkaW0xID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkgaW5cbiAgICBsZXQgZGltMyA9IGlmIGRpbTIgPSAwIHRoZW4gMCBlbHNlIEFycmF5Lmxlbmd0aCBkYXRhLigwKS4oMCkgaW5cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgaW5cbiAgICBsZXQgb2ZzID1cbiAgICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgICAgIENfbGF5b3V0IC0+IDBcbiAgICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gMVxuICAgIGluXG4gICAgZm9yIGkgPSAwIHRvIGRpbTEgLSAxIGRvXG4gICAgICBsZXQgcm93ID0gZGF0YS4oaSkgaW5cbiAgICAgIGlmIEFycmF5Lmxlbmd0aCByb3cgPD4gZGltMiB0aGVuXG4gICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkzLm9mX2FycmF5OiBub24tY3ViaWMgZGF0YVwiKTtcbiAgICAgIGZvciBqID0gMCB0byBkaW0yIC0gMSBkb1xuICAgICAgICBsZXQgY29sID0gcm93LihqKSBpblxuICAgICAgICBpZiBBcnJheS5sZW5ndGggY29sIDw+IGRpbTMgdGhlblxuICAgICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkzLm9mX2FycmF5OiBub24tY3ViaWMgZGF0YVwiKTtcbiAgICAgICAgZm9yIGsgPSAwIHRvIGRpbTMgLSAxIGRvXG4gICAgICAgICAgdW5zYWZlX3NldCBiYSAoaSArIG9mcykgKGogKyBvZnMpIChrICsgb2ZzKSBjb2wuKGspXG4gICAgICAgIGRvbmVcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgIGJhXG5lbmRcblxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkwOiAoJ2EsICdiLCAnYykgQXJyYXkwLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkxOiAoJ2EsICdiLCAnYykgQXJyYXkxLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkyOiAoJ2EsICdiLCAnYykgQXJyYXkyLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkzOiAoJ2EsICdiLCAnYykgQXJyYXkzLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxubGV0IGFycmF5MF9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDAgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTBfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5MV9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDEgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTFfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5Ml9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDIgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTJfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5M19vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDMgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTNfb2ZfZ2VuYXJyYXlcIlxuXG5leHRlcm5hbCByZXNoYXBlOlxuICAgKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnQgLT4gaW50IGFycmF5IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiY2FtbF9iYV9yZXNoYXBlXCJcbmxldCByZXNoYXBlXzAgYSA9IHJlc2hhcGUgYSBbfHxdXG5sZXQgcmVzaGFwZV8xIGEgZGltMSA9IHJlc2hhcGUgYSBbfGRpbTF8XVxubGV0IHJlc2hhcGVfMiBhIGRpbTEgZGltMiA9IHJlc2hhcGUgYSBbfGRpbTE7ZGltMnxdXG5sZXQgcmVzaGFwZV8zIGEgZGltMSBkaW0yIGRpbTMgPSByZXNoYXBlIGEgW3xkaW0xO2RpbTI7ZGltM3xdXG5cbigqIEZvcmNlIGNhbWxfYmFfZ2V0X3sxLDIsMyxOfSB0byBiZSBsaW5rZWQgaW4sIHNpbmNlIHdlIGRvbid0IHJlZmVyXG4gICB0byB0aG9zZSBwcmltaXRpdmVzIGRpcmVjdGx5IGluIHRoaXMgZmlsZSAqKVxuXG5sZXQgXyA9XG4gIGxldCBfID0gR2VuYXJyYXkuZ2V0IGluXG4gIGxldCBfID0gQXJyYXkxLmdldCBpblxuICBsZXQgXyA9IEFycmF5Mi5nZXQgaW5cbiAgbGV0IF8gPSBBcnJheTMuZ2V0IGluXG4gICgpXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5leHRlcm5hbCBnZXQxOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfZ2V0XzFcIlxuZXh0ZXJuYWwgZ2V0MjogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX2dldF8yXCJcbmV4dGVybmFsIGdldDM6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9nZXRfM1wiXG5leHRlcm5hbCBzZXQxOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfc2V0XzFcIlxuZXh0ZXJuYWwgc2V0MjogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX3NldF8yXCJcbmV4dGVybmFsIHNldDM6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9zZXRfM1wiXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmFfY2hhbmdlX2xheW91dCIsImNhbWxfYmFfY3JlYXRlIiwiY2FtbF9iYV9kaW1fMSIsImNhbWxfYmFfZGltXzIiLCJjYW1sX2JhX2tpbmQiLCJjYW1sX2JhX251bV9kaW1zIiwiY2FtbF9iYV9yZXNoYXBlIiwiY2FtbF9iYV9zZXRfMSIsImNhbWxfYmFfc2V0XzIiLCJjYW1sX2JhX3NldF8zIiwiY2FtbF9iYV9zZXRfZ2VuZXJpYyIsImNhbWxfYmFfc2xpY2UiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX211bCIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX1N5cyIsImtpbmRfc2l6ZV9pbl9ieXRlcyIsInBhcmFtIiwiY2xvb3AiLCJhcnIiLCJpZHgiLCJjb2wiLCJtYXgiLCJqIiwiZmxvb3AiLCJpbml0Iiwia2luZCIsImxheW91dCIsImRpbXMiLCJkbGVuIiwiYSIsIm4iLCJkIiwiaSIsInNpemVfaW5fYnl0ZXMiLCJjcmVhdGUiLCJnZXQiLCJzZXQiLCJvZl92YWx1ZSIsInYiLCJkaW0iLCJzbGljZSIsIm9mX2FycmF5IiwiZGF0YSIsImJhIiwib2ZzIiwiZGltMSIsImRpbTIiLCJzbGljZV9sZWZ0Iiwic2xpY2VfcmlnaHQiLCJyb3ciLCJkaW0zIiwic2xpY2VfbGVmdF8xIiwibSIsInNsaWNlX3JpZ2h0XzEiLCJzbGljZV9sZWZ0XzIiLCJzbGljZV9yaWdodF8yIiwiayIsImNzdF9CaWdhcnJheV9BcnJheTNfb2ZfYXJyYXlfbiIsImFycmF5MF9vZl9nZW5hcnJheSIsImFycmF5MV9vZl9nZW5hcnJheSIsImFycmF5Ml9vZl9nZW5hcnJheSIsImFycmF5M19vZl9nZW5hcnJheSIsInJlc2hhcGVfMCIsInJlc2hhcGVfMSIsInJlc2hhcGVfMiIsInJlc2hhcGVfMyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxtQkFB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QUE7QUFBQSxJQVNGO0FBQUEsR0FBRTtBQUFBLFlBQUFFLG1CQUFBN0I7QUFBQUEsSUFZRDtBQUFBO0FBQUEsY0FDRSxtREFBeUM7QUFBQTtBQUFBLFlBQUE4QixtQkFBQTlCO0FBQUFBLElBRTNDO0FBQUE7QUFBQSxjQUNFLG1EQUF5QztBQUFBO0FBQUEsWUFBQStCLG1CQUFBL0I7QUFBQUEsSUFFM0M7QUFBQTtBQUFBLGNBQ0UsbURBQXlDO0FBQUE7QUFBQSxZQUFBZ0MsbUJBQUFoQztBQUFBQSxJQUUzQztBQUFBO0FBQUEsY0FDRSxtREFBeUM7QUFBQTtBQUFBLFlBQUFpQyxVQUFBakMsR0FLOUIsOEJBQWM7QUFBQSxZQUFBa0MsVUFBQWxDLEdBQUFnQixNQUNULG9DQUFrQjtBQUFBLFlBQUFtQixVQUFBbkMsR0FBQWdCLE1BQUFDO0FBQUFBLElBQ2IsMENBQXVCO0FBQUE7QUFBQSxZQUFBbUIsVUFBQXBDLEdBQUFnQixNQUFBQyxNQUFBSTtBQUFBQSxJQUNsQixnREFBNEI7QUFBQTtBQUFBLEdBVTNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRDVaRiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI1MzcwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL3JhbmRvbS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENhbWJpdW0sIENvbGxlZ2UgZGUgRnJhbmNlIGFuZCBJbnJpYSAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICopXG5cbmV4dGVybmFsIHJhbmRvbV9zZWVkOiB1bml0IC0+IGludCBhcnJheSA9IFwiY2FtbF9zeXNfcmFuZG9tX3NlZWRcIlxuXG5tb2R1bGUgU3RhdGUgPSBzdHJ1Y3RcblxuICBvcGVuIEJpZ2FycmF5XG5cbiAgdHlwZSB0ID0gKGludDY0LCBpbnQ2NF9lbHQsIGNfbGF5b3V0KSBBcnJheTEudFxuXG4gIGV4dGVybmFsIG5leHQ6IHQgLT4gKGludDY0W0B1bmJveGVkXSlcbiAgICAgID0gXCJjYW1sX2x4bV9uZXh0XCIgXCJjYW1sX2x4bV9uZXh0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4gIGxldCBjcmVhdGUgKCkgOiB0ID1cbiAgICBBcnJheTEuY3JlYXRlIEludDY0IENfbGF5b3V0IDRcblxuICBsZXQgc2V0IHMgaTEgaTIgaTMgaTQgPVxuICAgIEFycmF5MS51bnNhZmVfc2V0IHMgMCAoSW50NjQubG9nb3IgaTEgMUwpOyAoKiBtdXN0IGJlIG9kZCAqKVxuICAgIEFycmF5MS51bnNhZmVfc2V0IHMgMSBpMjtcbiAgICBBcnJheTEudW5zYWZlX3NldCBzIDIgKGlmIGkzIDw+IDBMIHRoZW4gaTMgZWxzZSAxTCk7ICgqIG11c3Qgbm90IGJlIDAgKilcbiAgICBBcnJheTEudW5zYWZlX3NldCBzIDMgKGlmIGk0IDw+IDBMIHRoZW4gaTQgZWxzZSAyTCkgKCogbXVzdCBub3QgYmUgMCAqKVxuXG4gIGxldCBtayBpMSBpMiBpMyBpNCA9XG4gICAgbGV0IHMgPSBjcmVhdGUgKCkgaW5cbiAgICBzZXQgcyBpMSBpMiBpMyBpNDsgc1xuXG4gIGxldCBzZXJpYWxpemF0aW9uX3ByZWZpeCA9XG4gICAgXCJseG0xOlwiXG4gICAgKCogXCJseG1cIiBkZW5vdGVzIHRoZSBhbGdvcml0aG0gY3VycmVudGx5IGluIHVzZSwgYW5kICcxJyBpc1xuICAgICAgIGEgdmVyc2lvbiBudW1iZXIuIFdlIHNob3VsZCB1cGRhdGUgdGhpcyBwcmVmaXggaWYgd2UgY2hhbmdlXG4gICAgICAgdGhlIFJhbmRvbSBhbGdvcml0aG0gb3IgdGhlIHNlcmlhbGl6YXRpb24gZm9ybWF0LCBzbyB0aGF0IHVzZXJzXG4gICAgICAgZ2V0IGEgY2xlYW4gZXJyb3IgaW5zdGVhZCBvZiBiZWxpZXZpbmcgdGhhdCB0aGV5IGZhaXRoZnVsbHlcbiAgICAgICByZXByb2R1Y2UgdGhlaXIgcHJldmlvdXMgc3RhdGUgYW5kIGluIGZhY3QgZ2V0IGEgZGlmZmVyZW50XG4gICAgICAgc3RyZWFtLlxuXG4gICAgICAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGNvbnN0cmFpbnQgdG8ga2VlcCB0aGUgc2FtZVxuICAgICAgIFwiPG5hbWU+PHZlcj46PGRhdGE+XCIgZm9ybWF0IG9yIG1lc3NhZ2Ugc2l6ZSBpbiBmdXR1cmUgdmVyc2lvbnMsXG4gICAgICAgd2UgY291bGQgY2hhbmdlIHRoZSBmb3JtYXQgY29tcGxldGVseSBpZiB3ZSB3YW50ZWQgYXMgbG9uZ1xuICAgICAgIGFzIHRoZXJlIGlzIG5vIGNvbmZ1c2lvbiBwb3NzaWJsZSB3aXRoIHRoZSBwcmV2aW91cyBmb3JtYXRzLiAqKVxuXG4gIGxldCBzZXJpYWxpemF0aW9uX3ByZWZpeF9sZW4gPVxuICAgIFN0cmluZy5sZW5ndGggc2VyaWFsaXphdGlvbl9wcmVmaXhcblxuICBsZXQgdG9fYmluYXJ5X3N0cmluZyBzID1cbiAgICBsZXQgcHJlZml4ID0gc2VyaWFsaXphdGlvbl9wcmVmaXggaW5cbiAgICBsZXQgcHJlZmxlbiA9IHNlcmlhbGl6YXRpb25fcHJlZml4X2xlbiBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKHByZWZsZW4gKyA0ICogOCkgaW5cbiAgICBCeXRlcy5ibGl0X3N0cmluZyBwcmVmaXggMCBidWYgMCBwcmVmbGVuO1xuICAgIGZvciBpID0gMCB0byAzIGRvXG4gICAgICBCeXRlcy5zZXRfaW50NjRfbGUgYnVmIChwcmVmbGVuICsgaSAqIDgpIChBcnJheTEuZ2V0IHMgaSlcbiAgICBkb25lO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmXG5cbiAgbGV0IG9mX2JpbmFyeV9zdHJpbmcgYnVmID1cbiAgICBsZXQgcHJlZml4ID0gc2VyaWFsaXphdGlvbl9wcmVmaXggaW5cbiAgICBsZXQgcHJlZmxlbiA9IHNlcmlhbGl6YXRpb25fcHJlZml4X2xlbiBpblxuICAgIGlmIFN0cmluZy5sZW5ndGggYnVmIDw+IHByZWZsZW4gKyA0ICogOFxuICAgICAgIHx8IG5vdCAoU3RyaW5nLnN0YXJ0c193aXRoIH5wcmVmaXggYnVmKVxuICAgIHRoZW5cbiAgICAgIGZhaWx3aXRoXG4gICAgICAgIChcIlJhbmRvbS5TdGF0ZS5vZl9iaW5hcnlfc3RyaW5nOiBleHBlY3RlZCBhIGZvcm1hdCBcXFxuICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCBPQ2FtbCBcIiBeIFN5cy5vY2FtbF92ZXJzaW9uKTtcbiAgICBsZXQgaTEgPSBTdHJpbmcuZ2V0X2ludDY0X2xlIGJ1ZiAocHJlZmxlbiArIDAgKiA4KSBpblxuICAgIGxldCBpMiA9IFN0cmluZy5nZXRfaW50NjRfbGUgYnVmIChwcmVmbGVuICsgMSAqIDgpIGluXG4gICAgbGV0IGkzID0gU3RyaW5nLmdldF9pbnQ2NF9sZSBidWYgKHByZWZsZW4gKyAyICogOCkgaW5cbiAgICBsZXQgaTQgPSBTdHJpbmcuZ2V0X2ludDY0X2xlIGJ1ZiAocHJlZmxlbiArIDMgKiA4KSBpblxuICAgIG1rIGkxIGkyIGkzIGk0XG5cbiAgbGV0IGFzc2lnbiAoZHN0OiB0KSAoc3JjOiB0KSA9XG4gICAgQXJyYXkxLmJsaXQgc3JjIGRzdFxuXG4gIGxldCBjb3B5IHMgPVxuICAgIGxldCBzJyA9IGNyZWF0ZSgpIGluIGFzc2lnbiBzJyBzOyBzJ1xuXG4gICgqIFRoZSBzZWVkIGlzIGFuIGFycmF5IG9mIGludGVnZXJzLiAgSXQgY2FuIGJlIGp1c3Qgb25lIGludGVnZXIsXG4gICAgIGJ1dCBpdCBjYW4gYWxzbyBiZSAxMiBvciBtb3JlIGJ5dGVzLiAgVG8gaGlkZSB0aGUgZGlmZmVyZW5jZSxcbiAgICAgd2Ugc2VyaWFsaXplIHRoZSBhcnJheSBhcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLCB0aGVuIGhhc2ggdGhlXG4gICAgIHNlcXVlbmNlIHdpdGggTUQ1IChEaWdlc3QuYnl0ZXMpLiAgTUQ1IGdpdmVzIG9ubHkgMTI4IGJpdHMgd2hpbGVcbiAgICAgd2UgbmVlZCAyNTYgYml0cywgc28gd2UgaGFzaCB0d2ljZSB3aXRoIGRpZmZlcmVudCBzdWZmaXhlcy4gKilcbiAgbGV0IHJlaW5pdCBzIHNlZWQgPVxuICAgIGxldCBuID0gQXJyYXkubGVuZ3RoIHNlZWQgaW5cbiAgICBsZXQgYiA9IEJ5dGVzLmNyZWF0ZSAobiAqIDggKyAxKSBpblxuICAgIGZvciBpID0gMCB0byBuLTEgZG9cbiAgICAgIEJ5dGVzLnNldF9pbnQ2NF9sZSBiIChpICogOCkgKEludDY0Lm9mX2ludCBzZWVkLihpKSlcbiAgICBkb25lO1xuICAgIEJ5dGVzLnNldCBiIChuICogOCkgJ1xceDAxJztcbiAgICBsZXQgZDEgPSBEaWdlc3QuYnl0ZXMgYiBpblxuICAgIEJ5dGVzLnNldCBiIChuICogOCkgJ1xceDAyJztcbiAgICBsZXQgZDIgPSBEaWdlc3QuYnl0ZXMgYiBpblxuICAgIHNldCBzIChTdHJpbmcuZ2V0X2ludDY0X2xlIGQxIDApXG4gICAgICAgICAgKFN0cmluZy5nZXRfaW50NjRfbGUgZDEgOClcbiAgICAgICAgICAoU3RyaW5nLmdldF9pbnQ2NF9sZSBkMiAwKVxuICAgICAgICAgIChTdHJpbmcuZ2V0X2ludDY0X2xlIGQyIDgpXG5cbiAgbGV0IG1ha2Ugc2VlZCA9XG4gICAgbGV0IHMgPSBjcmVhdGUoKSBpbiByZWluaXQgcyBzZWVkOyBzXG5cbiAgbGV0IG1ha2Vfc2VsZl9pbml0ICgpID1cbiAgICBtYWtlIChyYW5kb21fc2VlZCAoKSlcblxuICBsZXQgbWluX2ludDMxID0gLTB4NDAwMF8wMDAwXG4gICAgICAoKiA9IC0ye14zMH0sIHdoaWNoIGlzIFttaW5faW50XSBmb3IgMzEtYml0IGludGVnZXJzICopXG4gIGxldCBtYXhfaW50MzEgPSAweDNGRkZfRkZGRlxuICAgICAgKCogPSAgMnteMzB9LTEsIHdoaWNoIGlzIFttYXhfaW50XSBmb3IgMzEtYml0IGludGVnZXJzICopXG4gICgqIGF2b2lkIGludGVnZXIgbGl0ZXJhbHMgZm9yIHRoZXNlLCAzMi1iaXQgT0NhbWwgd291bGQgcmVqZWN0IHRoZW06ICopXG4gIGxldCBtaW5faW50MzIgPSAtKDEgbHNsIDMxKVxuICAgICAgKCogPSAtMHg4MDAwXzAwMDAgb24gcGxhdGZvcm1zIHdoZXJlIFtTeXMuaW50X3NpemUgPj0gMzJdICopXG4gIGxldCBtYXhfaW50MzIgPSAoMSBsc2wgMzEpIC0gMVxuICAgICAgKCogPSAgMHg3RkZGX0ZGRkYgb24gcGxhdGZvcm1zIHdoZXJlIFtTeXMuaW50X3NpemUgPj0gMzJdICopXG5cbiAgKCogUmV0dXJuIDMwIHJhbmRvbSBiaXRzIGFzIGFuIGludGVnZXIgMCA8PSB4IDwgMl4zMCAqKVxuICBsZXQgYml0cyBzID1cbiAgICBJbnQ2NC50b19pbnQgKG5leHQgcykgbGFuZCBtYXhfaW50MzFcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW25dIChleGNsdWRlZCkuXG4gICAgIFtib3VuZF0gbWF5IGJlIGFueSBwb3NpdGl2ZSBbaW50XS4gIFttYXNrXSBtdXN0IGJlIG9mIHRoZSBmb3JtIFsye15pfS0xXVxuICAgICBhbmQgZ3JlYXRlciBvciBlcXVhbCB0byBbbl0uICBMYXJnZXIgdmFsdWVzIG9mIFttYXNrXSBtYWtlIHRoZSBmdW5jdGlvblxuICAgICBydW4gZmFzdGVyIChmZXdlciBzYW1wbGVzIGFyZSByZWplY3RlZCkuICBTbWFsbGVyIHZhbHVlcyBvZiBbbWFza11cbiAgICAgYXJlIHVzYWJsZSBvbiBhIHdpZGVyIHJhbmdlIG9mIE9DYW1sIGltcGxlbWVudGF0aW9ucy4gICopXG4gIGxldCByZWMgaW50X2F1eCBzIG4gbWFzayA9XG4gICAgKCogV2Ugc3RhcnQgYnkgZHJhd2luZyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGluIHRoZSBbIFswLCBtYXNrXSBdIHJhbmdlICopXG4gICAgbGV0IHIgPSBJbnQ2NC50b19pbnQgKG5leHQgcykgbGFuZCBtYXNrIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgKCogRm9yIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9mIHRoZSByZXN1bHQgYmV0d2VlbiAwIGluY2x1ZGVkIGFuZCBbbl1cbiAgICAgKiBleGNsdWRlZCwgdGhlIHJhbmRvbSBudW1iZXIgW3JdIG11c3QgaGF2ZSBiZWVuIGRyYXduIHVuaWZvcm1seSBpblxuICAgICAqIGFuIGludGVydmFsIHdob3NlIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIFtuXS4gVG8gYWNoaWV2ZSB0aGlzLFxuICAgICAqIHdlIHVzZSByZWplY3Rpb24gc2FtcGxpbmcgb24gdGhlIGdyZWF0ZXN0IGludGVydmFsIFsgWzAsIGsqbi0xXSBdXG4gICAgICogdGhhdCBmaXRzIGluIFsgWzAsIG1hc2tdIF0uICBUaGF0IGlzLCB3ZSByZWplY3QgdGhlXG4gICAgICogc2FtcGxlIGlmIGl0IGZhbGxzIG91dHNpZGUgb2YgdGhpcyBpbnRlcnZhbCwgYW5kIGRyYXcgYWdhaW4uXG4gICAgICogVGhpcyBpcyB3aGF0IHRoZSB0ZXN0IGJlbG93IGRvZXMsIHdoaWxlIGNhcmVmdWx5IGF2b2lkaW5nXG4gICAgICogb3ZlcmZsb3dzIGFuZCBzcGFyaW5nIGEgZGl2aXNpb24gW21hc2sgLyBuXS4gKilcbiAgICBpZiByIC0gdiA+IG1hc2sgLSBuICsgMSB0aGVuIGludF9hdXggcyBuIG1hc2sgZWxzZSB2XG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiAwIChpbmNsdWRlZCkgYW5kIFtib3VuZF0gKGV4Y2x1ZGVkKS5cbiAgICAgVGhlIGJvdW5kIG11c3QgZml0IGluIDMxLWJpdCBzaWduZWQgaW50ZWdlcnMuXG4gICAgIFRoaXMgZnVuY3Rpb24geWllbGRzIHRoZSBzYW1lIG91dHB1dCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlZ2VyIHNpemUuICopXG4gIGxldCBpbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPiBtYXhfaW50MzEgfHwgYm91bmQgPD0gMFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50XCJcbiAgICBlbHNlIGludF9hdXggcyBib3VuZCBtYXhfaW50MzFcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW2JvdW5kXSAoZXhjbHVkZWQpLlxuICAgICBbYm91bmRdIG1heSBiZSBhbnkgcG9zaXRpdmUgW2ludF0uICopXG4gIGxldCBmdWxsX2ludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiUmFuZG9tLmZ1bGxfaW50XCJcbiAgICAoKiBXaGVuIHRoZSBib3VuZCBmaXRzIGluIDMxLWJpdCBzaWduZWQgaW50ZWdlcnMsIHdlIHVzZSB0aGUgc2FtZSBtYXNrXG4gICAgICAgYXMgaW4gZnVuY3Rpb24gW2ludF0gc28gYXMgdG8geWllbGQgdGhlIHNhbWUgb3V0cHV0IG9uIGFsbCBwbGF0Zm9ybXNcbiAgICAgICBzdXBwb3J0ZWQgYnkgT0NhbWwgKDMyLWJpdCBPQ2FtbCwgNjQtYml0IE9DYW1sLCBhbmQgSmF2YVNjcmlwdCkuXG4gICAgICAgV2hlbiB0aGUgYm91bmQgZml0cyBpbiAzMi1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgW21heF9pbnQzMl1cbiAgICAgICBhcyB0aGUgbWFzayBzbyBhcyB0byB5aWVsZCB0aGUgc2FtZSBvdXRwdXQgb24gYWxsIHBsYXRmb3JtcyB3aGVyZVxuICAgICAgIFtTeXMuaW50X3NpemUgPj0gMzJdIChpLmUuIEphdmFTY3JpcHQgYW5kIDY0LWJpdCBPQ2FtbCkuICopXG4gICAgZWxzZVxuICAgICAgaW50X2F1eCBzIGJvdW5kXG4gICAgICAgIChpZiBib3VuZCA8PSBtYXhfaW50MzEgdGhlbiBtYXhfaW50MzFcbiAgICAgICAgIGVsc2UgaWYgYm91bmQgPD0gbWF4X2ludDMyIHRoZW4gbWF4X2ludDMyXG4gICAgICAgICBlbHNlIG1heF9pbnQpXG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBUaGUgW25iaXRzXSBwYXJhbWV0ZXIgaXMgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgc2lnbmVkIGludGVnZXJzXG4gICAgIHdlIGRyYXcgZnJvbSBbc10uXG4gICAgIFdlIG11c3QgaGF2ZSBbLTJ7Xm5iaXRzIC0gMX0gPD0gbWluIDw9IG1heCA8IDJ7Xm5iaXRzIC0gMX1dLlxuICAgICBNb3Jlb3ZlciwgZm9yIHRoZSBpdGVyYXRpb24gdG8gY29udmVyZ2UgcXVpY2tseSwgdGhlIGludGVydmFsXG4gICAgIFtbbWluLCBtYXhdXSBzaG91bGQgaGF2ZSB3aWR0aCBhdCBsZWFzdCBbMntebmJpdHMgLSAxfV0uXG4gICAgIEFzIHRoZSB3aWR0aCBhcHByb2FjaGVzIHRoaXMgbG93ZXIgbGltaXQsIHRoZSBhdmVyYWdlIG51bWJlciBvZlxuICAgICBkcmF3cyBhcHByb2FjaGVzIDIsIHdpdGggYSBxdWl0ZSBoaWdoIHN0YW5kYXJkIGRldmlhdGlvbiAoMiArIGVwc2lsb24pLiAqKVxuICBsZXQgcmVjIGludF9pbl9sYXJnZV9yYW5nZSBzIH5taW4gfm1heCB+bmJpdHMgPVxuICAgIGxldCBkcm9wID0gU3lzLmludF9zaXplIC0gbmJpdHMgaW5cbiAgICAoKiBUaGUgYml0c2hpZnRzIHJlcGxpY2F0ZSB0aGUgW25iaXRzXS10aCBiaXQgKHNpZ24gYml0KSB0byBoaWdoZXIgYml0czogKilcbiAgICBsZXQgciA9ICgoSW50NjQudG9faW50IChuZXh0IHMpKSBsc2wgZHJvcCkgYXNyIGRyb3AgaW5cbiAgICBpZiByIDwgbWluIHx8IHIgPiBtYXggdGhlbiBpbnRfaW5fbGFyZ2VfcmFuZ2UgcyB+bWluIH5tYXggfm5iaXRzIGVsc2UgclxuXG4gICgqIFJldHVybiBhbiBpbnRlZ2VyIGJldHdlZW4gW21pbl0gKGluY2x1ZGVkKSBhbmQgW21heF0gKGluY2x1ZGVkKS5cbiAgICAgW21hc2tdIGlzIGFzIGRlc2NyaWJlZCBmb3IgW2ludF9hdXhdLlxuICAgICBbbmJpdHNdIGlzIGFzIGRlc2NyaWJlZCBmb3IgW2ludF9pbl9sYXJnZV9yYW5nZV0uICopXG4gIGxldCBpbnRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IH5tYXNrIH5uYml0cyA9XG4gICAgbGV0IHNwYW4gPSBtYXggLSBtaW4gKyAxIGluXG4gICAgaWYgc3BhbiA8PSBtYXNrICgqIFtzcGFuXSBpcyBzbWFsbCBlbm91Z2ggKilcbiAgICAmJiBzcGFuID4gMCAgICAgKCogbm8gb3ZlcmZsb3cgb2NjdXJyZWQgd2hlbiBjb21wdXRpbmcgW3NwYW5dICopXG4gICAgdGhlblxuICAgICAgKCogSnVzdCBkcmF3IGEgbnVtYmVyIGluIFtbMCwgc3BhbildIGFuZCBzaGlmdCBpdCBieSBbbWluXS4gKilcbiAgICAgIG1pbiArIGludF9hdXggcyBzcGFuIG1hc2tcbiAgICBlbHNlXG4gICAgICAoKiBTcGFuIHRvbyBsYXJnZSwgdXNlIHRoZSBhbHRlcm5hdGl2ZSBkcmF3aW5nIG1ldGhvZC4gKilcbiAgICAgIGludF9pbl9sYXJnZV9yYW5nZSBzIH5taW4gfm1heCB+bmJpdHNcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIFttaW5dIChpbmNsdWRlZCkgYW5kIFttYXhdIChpbmNsdWRlZCkuXG4gICAgIFdlIG11c3QgaGF2ZSBbbWluIDw9IG1heF0uICopXG4gIGxldCBpbnRfaW5fcmFuZ2UgcyB+bWluIH5tYXggPVxuICAgIGlmIG1pbiA+IG1heCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnRfaW5fcmFuZ2VcIjtcbiAgICAoKiBXaGVuIGJvdGggYm91bmRzIGZpdCBpbiAzMS1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgcGFyYW1ldGVyc1xuICAgICAgIFttYXNrXSBhbmQgW25iaXRzXSBhcHByb3ByaWF0ZSBmb3IgMzEtYml0IGludGVnZXJzLCBzbyBhcyB0b1xuICAgICAgIHlpZWxkIHRoZSBzYW1lIG91dHB1dCBvbiBhbGwgcGxhdGZvcm1zIHN1cHBvcnRlZCBieSBPQ2FtbC5cbiAgICAgICBXaGVuIGJvdGggYm91bmRzIGZpdCBpbiAzMi1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgcGFyYW1ldGVyc1xuICAgICAgIFttYXNrXSBhbmQgW25iaXRzXSBhcHByb3ByaWF0ZSBmb3IgMzItYml0IGludGVnZXJzLCBzbyBhcyB0b1xuICAgICAgIHlpZWxkIHRoZSBzYW1lIG91dHB1dCBvbiBKYXZhU2NyaXB0IGFuZCBvbiA2NC1iaXQgT0NhbWwuICopXG4gICAgaWYgbWluID49IG1pbl9pbnQzMSAmJiBtYXggPD0gbWF4X2ludDMxIHRoZW5cbiAgICAgIGludF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggfm1hc2s6bWF4X2ludDMxIH5uYml0czozMVxuICAgIGVsc2UgaWYgbWluID49IG1pbl9pbnQzMiAmJiBtYXggPD0gbWF4X2ludDMyIHRoZW5cbiAgICAgIGludF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggfm1hc2s6bWF4X2ludDMyIH5uYml0czozMlxuICAgIGVsc2VcbiAgICAgIGludF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggfm1hc2s6bWF4X2ludCB+bmJpdHM6U3lzLmludF9zaXplXG5cbiAgKCogUmV0dXJuIDMyIHJhbmRvbSBiaXRzIGFzIGFuIFtpbnQzMl0gKilcbiAgbGV0IGJpdHMzMiBzID1cbiAgICBJbnQ2NC50b19pbnQzMiAobmV4dCBzKVxuXG4gICgqIFJldHVybiBhbiBbaW50MzJdIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgaW50MzJhdXggcyBuID1cbiAgICBsZXQgciA9IEludDMyLnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKGJpdHMzMiBzKSAxIGluXG4gICAgbGV0IHYgPSBJbnQzMi5yZW0gciBuIGluXG4gICAgKCogRXhwbGFuYXRpb24gb2YgdGhpcyB0ZXN0OiBzZWUgY29tbWVudCBpbiBbaW50X2F1eF0uICopXG4gICAgaWYgSW50MzIuKHN1YiByIHYgPiBhZGQgKHN1YiBtYXhfaW50IG4pIDFsKVxuICAgIHRoZW4gaW50MzJhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDMyIHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMlwiXG4gICAgZWxzZSBpbnQzMmF1eCBzIGJvdW5kXG5cbiAgKCogUmV0dXJuIGFuIFtpbnQzMl0gYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBXZSBtdXN0IGhhdmUgW21pbiA8PSBtYXhdLiAqKVxuICBsZXQgcmVjIGludDMyX2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCA9XG4gICAgbGV0IHIgPSBJbnQ2NC50b19pbnQzMiAobmV4dCBzKSBpblxuICAgIGlmIHIgPCBtaW4gfHwgciA+IG1heCB0aGVuIGludDMyX2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCBlbHNlIHJcblxuICBsZXQgaW50MzJfaW5fcmFuZ2UgcyB+bWluIH5tYXggPVxuICAgIGlmIG1pbiA+IG1heCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMl9pbl9yYW5nZVwiXG4gICAgZWxzZVxuICAgICAgbGV0IHNwYW4gPSBJbnQzMi5zdWNjIChJbnQzMi5zdWIgbWF4IG1pbikgaW5cbiAgICAgICgqIEV4cGxhbmF0aW9uIG9mIHRoaXMgdGVzdDogc2VlIGNvbW1lbnQgaW4gW2ludF9pbl9yYW5nZV9hdXhdLiAqKVxuICAgICAgaWYgc3BhbiA8PSBJbnQzMi56ZXJvIHRoZW5cbiAgICAgICAgaW50MzJfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4XG4gICAgICBlbHNlXG4gICAgICAgIEludDMyLmFkZCBtaW4gKGludDMyYXV4IHMgc3BhbilcblxuICAoKiBSZXR1cm4gNjQgcmFuZG9tIGJpdHMgYXMgYW4gW2ludDY0XSAqKVxuICBsZXQgYml0czY0IHMgPVxuICAgIG5leHQgc1xuXG4gICgqIFJldHVybiBhbiBbaW50NjRdIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgciA9IEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKGJpdHM2NCBzKSAxIGluXG4gICAgbGV0IHYgPSBJbnQ2NC5yZW0gciBuIGluXG4gICAgKCogRXhwbGFuYXRpb24gb2YgdGhpcyB0ZXN0OiBzZWUgY29tbWVudCBpbiBbaW50X2F1eF0uICopXG4gICAgaWYgSW50NjQuKHN1YiByIHYgPiBhZGQgKHN1YiBtYXhfaW50IG4pIDFMKVxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cbiAgKCogUmV0dXJuIGFuIFtpbnQ2NF0gYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBXZSBtdXN0IGhhdmUgW21pbiA8PSBtYXhdLiAqKVxuICBsZXQgcmVjIGludDY0X2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCA9XG4gICAgbGV0IHIgPSBuZXh0IHMgaW5cbiAgICBpZiByIDwgbWluIHx8IHIgPiBtYXggdGhlbiBpbnQ2NF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggZWxzZSByXG5cbiAgbGV0IGludDY0X2luX3JhbmdlIHMgfm1pbiB+bWF4ID1cbiAgICBpZiBtaW4gPiBtYXggdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uaW50NjRfaW5fcmFuZ2VcIlxuICAgIGVsc2VcbiAgICAgIGxldCBzcGFuID0gSW50NjQuc3VjYyAoSW50NjQuc3ViIG1heCBtaW4pIGluXG4gICAgICAoKiBFeHBsYW5hdGlvbiBvZiB0aGlzIHRlc3Q6IHNlZSBjb21tZW50IGluIFtpbnRfaW5fcmFuZ2VfYXV4XS4gKilcbiAgICAgIGlmIHNwYW4gPD0gSW50NjQuemVybyB0aGVuXG4gICAgICAgIGludDY0X2luX3JhbmdlX2F1eCBzIH5taW4gfm1heFxuICAgICAgZWxzZVxuICAgICAgICBJbnQ2NC5hZGQgbWluIChpbnQ2NGF1eCBzIHNwYW4pXG5cbiAgKCogUmV0dXJuIDMyIG9yIDY0IHJhbmRvbSBiaXRzIGFzIGEgW25hdGl2ZWludF0gKilcbiAgbGV0IG5hdGl2ZWJpdHMgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoYml0czMyIHMpXG4gICAgZWxzZSBmdW4gcyAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGJpdHM2NCBzKVxuXG4gICgqIFJldHVybiBhIFtuYXRpdmVpbnRdIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuICopXG4gIGxldCBuYXRpdmVpbnQgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIGJvdW5kIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoaW50MzIgcyAoTmF0aXZlaW50LnRvX2ludDMyIGJvdW5kKSlcbiAgICBlbHNlIGZ1biBzIGJvdW5kIC0+IEludDY0LnRvX25hdGl2ZWludCAoaW50NjQgcyAoSW50NjQub2ZfbmF0aXZlaW50IGJvdW5kKSlcblxuICAoKiBSZXR1cm4gYSBbbmF0aXZlaW50XSBiZXR3ZWVuIFttaW5dIChpbmNsdWRlZCkgYW5kIFttYXhdIChpbmNsdWRlZCkuICopXG4gIGxldCBuYXRpdmVpbnRfaW5fcmFuZ2UgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIH5taW4gfm1heCAtPlxuICAgICAgTmF0aXZlaW50Lm9mX2ludDMyIChpbnQzMl9pbl9yYW5nZSBzXG4gICAgICAgIH5taW46KE5hdGl2ZWludC50b19pbnQzMiBtaW4pIH5tYXg6KE5hdGl2ZWludC50b19pbnQzMiBtYXgpKVxuICAgIGVsc2UgZnVuIHMgfm1pbiB+bWF4IC0+XG4gICAgICBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0X2luX3JhbmdlIHNcbiAgICAgICAgfm1pbjooSW50NjQub2ZfbmF0aXZlaW50IG1pbikgfm1heDooSW50NjQub2ZfbmF0aXZlaW50IG1heCkpXG5cbiAgKCogUmV0dXJuIGEgZmxvYXQgMCA8IHggPCAxIHVuaWZvcm1seSBkaXN0cmlidXRlZCBhbW9uZyB0aGVcbiAgICAgbXVsdGlwbGVzIG9mIDJeLTUzICopXG4gIGxldCByZWMgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IGIgPSBuZXh0IHMgaW5cbiAgICBsZXQgbiA9IEludDY0LnNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxMSBpblxuICAgIGlmIG4gPD4gMEwgdGhlbiBJbnQ2NC50b19mbG9hdCBuICouIDB4MS5wLTUzIGVsc2UgcmF3ZmxvYXQgc1xuXG4gICgqIFJldHVybiBhIGZsb2F0IGJldHdlZW4gMCBhbmQgW2JvdW5kXSAqKVxuICBsZXQgZmxvYXQgcyBib3VuZCA9IHJhd2Zsb2F0IHMgKi4gYm91bmRcblxuICAoKiBSZXR1cm4gYSByYW5kb20gQm9vbGVhbiAqKVxuICBsZXQgYm9vbCBzID0gbmV4dCBzIDwgMExcblxuICAoKiBTcGxpdCBhIG5ldyBQUk5HIG9mZiB0aGUgZ2l2ZW4gUFJORyAqKVxuICBsZXQgc3BsaXQgcyA9XG4gICAgbGV0IGkxID0gYml0czY0IHMgaW4gbGV0IGkyID0gYml0czY0IHMgaW5cbiAgICBsZXQgaTMgPSBiaXRzNjQgcyBpbiBsZXQgaTQgPSBiaXRzNjQgcyBpblxuICAgIG1rIGkxIGkyIGkzIGk0XG5lbmRcblxubGV0IG1rX2RlZmF1bHQgKCkgPVxuICAoKiBUaGlzIGlzIHRoZSBzdGF0ZSBvYnRhaW5lZCB3aXRoIFtTdGF0ZS5tYWtlIFt8IDMxNDE1OTI2NSB8XV0uICopXG4gIFN0YXRlLm1rICgtNjE5Njg3NDI4OTU2NzcwNTA5N0wpXG4gICAgICAgICAgIDU4NjU3MzI0OTgzMzcxMzE4OUxcbiAgICAgICAgICAgKC04NTkxMjY4ODAzODY1MDQzNDA3TClcbiAgICAgICAgICAgNjM4ODYxMzU5NTg0OTc3MjA0NExcblxubGV0IHJhbmRvbV9rZXkgPVxuICBEb21haW4uRExTLm5ld19rZXkgfnNwbGl0X2Zyb21fcGFyZW50OlN0YXRlLnNwbGl0IG1rX2RlZmF1bHRcblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxubGV0IGludCBib3VuZCA9IFN0YXRlLmludCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgYm91bmRcbmxldCBmdWxsX2ludCBib3VuZCA9IFN0YXRlLmZ1bGxfaW50IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBib3VuZFxubGV0IGludF9pbl9yYW5nZSB+bWluIH5tYXggPVxuICBTdGF0ZS5pbnRfaW5fcmFuZ2UgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIH5taW4gfm1heFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIGJvdW5kXG5sZXQgaW50MzJfaW5fcmFuZ2Ugfm1pbiB+bWF4ID1cbiAgU3RhdGUuaW50MzJfaW5fcmFuZ2UgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIH5taW4gfm1heFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgYm91bmRcbmxldCBuYXRpdmVpbnRfaW5fcmFuZ2Ugfm1pbiB+bWF4ID1cbiAgU3RhdGUubmF0aXZlaW50X2luX3JhbmdlIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSB+bWluIH5tYXhcbmxldCBpbnQ2NCBib3VuZCA9IFN0YXRlLmludDY0IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBib3VuZFxubGV0IGludDY0X2luX3JhbmdlIH5taW4gfm1heCA9XG4gIFN0YXRlLmludDY0X2luX3JhbmdlIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSB+bWluIH5tYXhcbmxldCBmbG9hdCBzY2FsZSA9IFN0YXRlLmZsb2F0IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBzY2FsZVxubGV0IGJvb2wgKCkgPSBTdGF0ZS5ib29sIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxubGV0IGJpdHMzMiAoKSA9IFN0YXRlLmJpdHMzMiAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSlcbmxldCBiaXRzNjQgKCkgPSBTdGF0ZS5iaXRzNjQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5sZXQgbmF0aXZlYml0cyAoKSA9IFN0YXRlLm5hdGl2ZWJpdHMgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLnJlaW5pdCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgc2VlZFxubGV0IGluaXQgc2VlZCA9IGZ1bGxfaW5pdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBTcGxpdHRpbmcgKilcblxubGV0IHNwbGl0ICgpID0gU3RhdGUuc3BsaXQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5cbigqIE1hbmlwdWxhdGluZyB0aGUgY3VycmVudCBzdGF0ZS4gKilcblxubGV0IGdldF9zdGF0ZSAoKSA9IFN0YXRlLmNvcHkgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5sZXQgc2V0X3N0YXRlIHMgPSBTdGF0ZS5hc3NpZ24gKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIHNcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9iYV9ibGl0IiwiY2FtbF9iYV9zZXRfMSIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2dyZWF0ZXJ0aGFuIiwiY2FtbF9pbnQ2NF9hZGQiLCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmUiLCJjYW1sX2ludDY0X3N1YiIsImNhbWxfaW50NjRfdG9faW50MzIiLCJjYW1sX2xlc3NlcXVhbCIsImNhbWxfbGVzc3RoYW4iLCJjYW1sX2x4bV9uZXh0IiwiY2FtbF9tb2QiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9zeXNfcmFuZG9tX3NlZWQiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfRG9tYWluIiwiU3RkbGliX1N5cyIsIlN0ZGxpYl9JbnQzMiIsIlN0ZGxpYl9JbnQ2NCIsIlN0ZGxpYiIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9EaWdlc3QiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0JpZ2FycmF5IiwiU3RkbGliX05hdGl2ZWludCIsImNyZWF0ZSIsInBhcmFtIiwic2V0IiwicyIsImkxIiwiaTIiLCJpMyIsImk0IiwibWsiLCJzZXJpYWxpemF0aW9uX3ByZWZpeCIsInRvX2JpbmFyeV9zdHJpbmciLCJidWYiLCJpIiwib2ZfYmluYXJ5X3N0cmluZyIsImNvcHkiLCJzcmMiLCJkc3QiLCJyZWluaXQiLCJzZWVkIiwibiIsImIiLCJkMSIsImQyIiwibWFrZSIsIm1ha2Vfc2VsZl9pbml0IiwiYml0cyIsImludF9hdXgiLCJtYXNrIiwiciIsInYiLCJtYXhfaW50MzEiLCJpbnQiLCJib3VuZCIsIm1heF9pbnQzMiIsImZ1bGxfaW50IiwiaW50X2luX3JhbmdlX2F1eCIsIm1pbiIsIm1heCIsIm5iaXRzIiwic3BhbiIsImRyb3AiLCJpbnRfaW5fcmFuZ2UiLCJiaXRzMzIiLCJpbnQzMmF1eCIsImludDMyIiwiaW50MzJfaW5fcmFuZ2UiLCJpbnQ2NGF1eCIsImludDY0IiwiaW50NjRfaW5fcmFuZ2UiLCJuYXRpdmViaXRzIiwibmF0aXZlaW50IiwibmF0aXZlaW50X2luX3JhbmdlIiwiZmxvYXQiLCJib29sIiwic3BsaXQiLCJta19kZWZhdWx0IiwicmFuZG9tX2tleSIsInNjYWxlIiwiYml0czY0IiwiZnVsbF9pbml0IiwiaW5pdCIsInNlbGZfaW5pdCIsImdldF9zdGF0ZSIsInNldF9zdGF0ZSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDZCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxpQ0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxPQUFBQyxPQzhCSSxrREFBOEI7QUFBQSxZQUFBQyxJQUFBQyxHQUFBQyxJQUFBQyxJQUFBQyxJQUFBQztBQUFBQSxJQUc5QixvQkFBc0I7QUFBQSxJQUN0QjtBQUFBLFFBQUFELE9BQzBCO0FBQUEsSUFBMUI7QUFBQSxRQUFBQyxPQUMwQjtBQUFBLElBQTFCLGdDQUFtRDtBQUFBO0FBQUEsWUFBQUMsR0FBQUosSUFBQUMsSUFBQUMsSUFBQUM7QUFBQUEsUUFBQUosSUFHM0M7QUFBQSxJQUNSO0FBQUEsSUFBaUI7QUFBQSxHQUFHO0FBQUEsT0FBQU0sdUJEeEN4QjtBQUFBLFlBQUFDLGlCQUFBUDtBQUFBQSxRQUFBUSxNQzhEYztBQUFBLElBQ1Y7QUFBQSxRQUFBQyxJQUF3QztBQUFBO0FBQUEsYUFFRztBQUFBLEtBQXpDO0FBQUEsYUFBeUQ7QUFBQSxpQkFFM0QsdUNBQTBCO0FBQUEsS0FGaUM7QUFBQTtBQUFBLEdBRWpDO0FBQUEsWUFBQUMsaUJBQUFGO0FBQUFBO0FBQUFBLEtBQUEsSUFLMUI7QUFBQSxrQkFDVTtBQUFBLElBRFY7QUFBQTtBQUFBO0FBQUEsUUFJSTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBREY7QUFBQTtBQUFBO0FBQUEsS0FBQVAsS0FHTztBQUFBLEtBQUFDLEtBQ0E7QUFBQSxLQUFBQyxLQUNBO0FBQUEsS0FBQUMsS0FDQTtBQUFBLElBQ1QseUJBQWM7QUFBQTtBQUFBLFlBQUFPLEtBQUFDO0FBQUFBLFFBQUFDLE1BTUw7QUFBQSxJQUhUO0FBQUEsSUFHZ0M7QUFBQSxHQUFJO0FBQUEsWUFBQUMsT0FBQWQsR0FBQWU7QUFBQUE7QUFBQUEsS0FBQUMsSUFRcEM7QUFBQSxLQUFBQyxJQUNRO0FBQUEsU0FDUjtBQUFBO0FBQUEsU0FBQVIsSUFBQTtBQUFBO0FBQUEsY0FDK0Isb0JBQWM7QUFBQSxNQUEzQztBQUFBLGNBQW9EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUV0RDtBQUFBLFFBQUFTLEtBQ1M7QUFBQSxJQUNUO0FBQUE7QUFBQSxLQUFBQyxLQUNTO0FBQUEsU0FJSDtBQUFBLFNBREE7QUFBQSxTQURBO0FBQUEsSUFEQSxPQUEwQixPQUExQiw2Q0FHMEI7QUFBQTtBQUFBLFlBQUFDLEtBQUFMLFVBQUFmLElBR3hCLFdBQVksaUJBQWEsU0FBRztBQUFBLFlBQUFxQixlQUFBdkIsT0FHL0IsT0FBZ0IsS0FBaEIsd0JBQWdCO0FBQUEsWUFBQXdCLEtBQUF0QjtBQUFBQSxJQWNSLE9BQVEsb0JBQVIsOEJBQVE7QUFBQSxHQUFlO0FBQUEsWUFBQXVCLFFBQUF2QixHQUFBZ0IsR0FBQVE7QUFBQUEsSUFTZjtBQUFBLFNBQUFDLElBQVEsb0JBQVIsMEJBQUFDLElBQ3JCO0FBQUEsS0FTQSw0Q0FBbUQ7QUFBQTtBQUFBLEdBQUM7QUFBQSxPQUFBQyxZRG5KeEQ7QUFBQSxZQUFBQyxJQUFBNUIsR0FBQTZCO0FBQUFBLElDeUpJLHFDQUVLLG1DQUF5QjtBQUFBLElBRHpCLHlDQUN5QjtBQUFBO0FBQUEsT0FBQUMsWUQzSmxDO0FBQUEsWUFBQUMsU0FBQS9CLEdBQUE2QjtBQUFBQSxJQ2dLSSxlQUNFLDhDQVdnQjtBQUFBO0FBQUE7QUFBQSxPQUhoQjtBQUFBO0FBQUE7QUFBQSwrQkFHZ0I7QUFBQTtBQUFBLFlBQUFHLGlCQUFBaEMsR0FBQWlDLEtBQUFDLEtBQUFWLE1BQUFXO0FBQUFBLFFBQUFDLE9Bb0JsQjtBQUFBLElBQ0EsNkJBSVEsdUNBQW1CO0FBQUEsSUFKM0I7QUFBQTtBQUFBLE1BQUFDLE9BVkE7QUFBQSxNQUFBWixJQUUrQixvQkFBUjtBQUFBLEtBQ3ZCLHlCQUFzRTtBQUFBO0FBQUEsR0FjL0I7QUFBQSxZQUFBYSxhQUFBdEMsR0FBQWlDLEtBQUFDO0FBQUFBLElBS3ZDLGNBQ0U7QUFBQSxJQU9GO0FBQUEsS0FDRSxtREFJOEQ7QUFBQSxJQUgzRDtBQUFBLEtBQ0gsbURBRThEO0FBQUEsSUFBOUQsZ0VBQThEO0FBQUE7QUFBQSxZQUFBSyxPQUFBdkMsR0FJakQsT0FBZixvQkFBZSxpQkFBUTtBQUFBLFlBQUF3QyxTQUFBeEMsR0FBQWdCO0FBQUFBLElBSXZCO0FBQUEsU0FBQVMsSUFBa0MscUJBQUFDLElBQzFCO0FBQUEsS0FFRTtBQUFBLE1BRUw7QUFBQTtBQUFBLEdBQUM7QUFBQSxZQUFBZSxNQUFBekMsR0FBQTZCO0FBQUFBLElBR0g7QUFBQSxjQUNFO0FBQUEsY0FDQSxrQkFBZ0I7QUFBQTtBQUFBLFlBQUFhLGVBQUExQyxHQUFBaUMsS0FBQUM7QUFBQUEsSUFTbEI7QUFBQSxLQUNELG9EQU9pQztBQUFBLFFBQUFFLE9BTHRCO0FBQUEsSUFFUjtBQUFBLEtBR2Esa0NBQWlCO0FBQUEsSUFIWjtBQUFBLFNBQUFYLElBVGYsb0JBQWU7QUFBQSxLQUNwQixnQ0FBVywwQkFBaUQ7QUFBQTtBQUFBLEdBVzVCO0FBQUE7QUFBQSxRRDdQdkM7QUFBQTtBQUFBLFlBQUFrQixTQUFBM0MsR0FBQWdCO0FBQUFBLElDcVFJO0FBQUE7QUFBQSxNQUFBUyxJQUFRLCtCQUpSO0FBQUEsTUFBQUMsSUFLUTtBQUFBLEtBRUU7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFVLGVBQUk7QUFBQSxNQUVuQjtBQUFBO0FBQUEsR0FBQztBQUFBLFlBQUFrQixNQUFBNUMsR0FBQTZCO0FBQUFBLElBR0g7QUFBQSxjQUNFO0FBQUEsY0FDQSxrQkFBZ0I7QUFBQTtBQUFBLFlBQUFnQixlQUFBN0MsR0FBQWlDLEtBQUFDO0FBQUFBLElBU2xCO0FBQUEsS0FDRCxvREFPaUM7QUFBQSxRQUFBRSxPQUx0QiwyQkFBVztBQUFBLElBRW5CO0FBQUEsS0FHYSxPQUFkLG9CQUFjLGtCQUFpQjtBQUFBLElBSFo7QUFBQSxTQUFBWCxJQVRmO0FBQUEsS0FDTCxnQ0FBVywwQkFBaUQ7QUFBQTtBQUFBLEdBVzVCO0FBQUE7QUFBQSxRRGhTdkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQXFCO0FBQUFBLE1BQUE7QUFBQSxrQkFBQTlDLEdDcVNxQyxnQkFBVTtBQUFBLGtCQUFBQSxHQXBDM0MsT0FxQ2Msb0JBckNkLGlCQXFDMkM7QUFBQSxJQUFBK0M7QUFBQUEsTUR0Uy9DO0FBQUEsa0JBQUEvQyxHQUFBNkIsT0MyUzJDLHNCQUFvQztBQUFBO0FBQUEsU0FBQTdCLEdBQUE2QjtBQUFBQSxTQUMzQixPQUE1QixvQkFBbUIsU0FBUyw0QkFBMkI7QUFBQTtBQUFBLElBQUFtQjtBQUFBQSxNRDVTL0U7QUFBQSxrQkFBQWhELEdBQUFpQyxLQUFBQyxLQ2tUeUIsa0NBQzJDO0FBQUE7QUFBQSxTQUFBbEMsR0FBQWlDLEtBQUFDO0FBQUFBLFNBR3ZELE9BRFA7QUFBQSxrQkFBbUI7QUFBQSx1QkFDWiwwQkFBOEIsMEJBQXlCO0FBQUE7QUFBQSxZQUFBZSxNQUFBakQsR0FBQTZCO0FBQUFBLElBS3hEO0FBQUEsU0FBQVosSUFBQSxrQkFBQUQsSUFDQTtBQUFBLEtBQ0w7QUFBQSxNQUFhLHNFQUdxQjtBQUFBO0FBQUE7QUFBQSxZQUFBa0MsS0FBQWxELEdBRzFCLHlDQUFXO0FBQUEsWUFBQW1ELE1BQUFuRDtBQUFBQTtBQUFBQSxLQUFBQyxLQWxFdEI7QUFBQSxLQUFBQyxLQUFBO0FBQUEsS0FBQUMsS0FBQTtBQUFBLEtBQUFDLEtBQUE7QUFBQSxJQXdFQSx5QkFBYztBQUFBO0FBQUEsWUFBQWdELFdBQUF0RCxPQUtoQixxQkFHNkI7QUFBQSxPQUFBdUQsYUFHN0I7QUFBQSxZQUFBL0IsT0FBQXhCO0FBQUFBLElBRXVCLE9BQTJCLEtBQTNCLDZDQUEyQjtBQUFBO0FBQUEsWUFBQThCLE1BQUFDO0FBQUFBLElBQzFCLE9BQTJCLElBQTNCLG9EQUFpQztBQUFBO0FBQUEsWUFBQUUsV0FBQUY7QUFBQUEsSUFDdkIsT0FBMkIsU0FBM0Isb0RBQWlDO0FBQUE7QUFBQSxZQUFBUyxlQUFBTCxLQUFBQztBQUFBQSxJQUVoRCxPQUEyQjtBQUFBLGFBQTNCLHVEQUFxQztBQUFBO0FBQUEsWUFBQU8sUUFBQVo7QUFBQUEsSUFDNUIsT0FBMkIsTUFBM0Isb0RBQWlDO0FBQUE7QUFBQSxZQUFBYSxpQkFBQVQsS0FBQUM7QUFBQUEsSUFFeEMsT0FBMkI7QUFBQSxhQUEzQix1REFBcUM7QUFBQTtBQUFBLFlBQUFhLFlBQUFsQjtBQUFBQSxJQUN0QixPQUEyQixVQUEzQixvREFBaUM7QUFBQTtBQUFBLFlBQUFtQixxQkFBQWYsS0FBQUM7QUFBQUEsSUFFNUMsT0FBMkI7QUFBQSxhQUEzQix1REFBcUM7QUFBQTtBQUFBLFlBQUFVLFFBQUFmO0FBQUFBLElBQ2xDLE9BQTJCLE1BQTNCLG9EQUFpQztBQUFBO0FBQUEsWUFBQWdCLGlCQUFBWixLQUFBQztBQUFBQSxJQUV4QyxPQUEyQjtBQUFBLGFBQTNCLHVEQUFxQztBQUFBO0FBQUEsWUFBQWUsUUFBQUs7QUFBQUEsSUFDOUIsT0FBMkIsTUFBM0Isb0RBQWlDO0FBQUE7QUFBQSxZQUFBSixPQUFBcEQ7QUFBQUEsSUFDdEMsT0FBMkIsS0FBM0IsNkNBQTJCO0FBQUE7QUFBQSxZQUFBeUMsU0FBQXpDO0FBQUFBLElBQ3ZCLE9BQTJCLE9BQTNCLDZDQUEyQjtBQUFBO0FBQUEsWUFBQXlELE9BQUF6RDtBQUFBQSxRQUFBRSxJQUMzQjtBQUFBLElBdEd6Qix1QkFzR29EO0FBQUE7QUFBQSxZQUFBOEMsYUFBQWhEO0FBQUFBLElBQ25CLE9BQTJCLFdBQTNCLDZDQUEyQjtBQUFBO0FBQUEsWUFBQTBELFVBQUF6QztBQUFBQSxJQUU5QixPQUEyQixPQUEzQixtREFBZ0M7QUFBQTtBQUFBLFlBQUEwQyxLQUFBMUMsTUFDbEQsMkJBQW9CO0FBQUEsWUFBQTJDLFVBQUE1RCxPQUNQLE9BQWUsVUFBZix3QkFBZTtBQUFBLFlBQUFxRCxRQUFBckQ7QUFBQUEsSUFJakIsT0FBMkIsTUFBM0IsNkNBQTJCO0FBQUE7QUFBQSxZQUFBNkQsVUFBQTdEO0FBQUFBLElBSXhCLE9BQTJCLEtBQTNCLDZDQUEyQjtBQUFBO0FBQUEsWUFBQThELFVBQUFoRDtBQUFBQSxRQUFBQyxNQUMxQjtBQUFBLElBaFMzQiw2QkFnU3dEO0FBQUE7QUFBQSxHQWpDRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHBWOUQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyNTc2NCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9oYXNodGJsLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBIYXNoIHRhYmxlcyAqKVxuXG4oKiBXZSBkbyBkeW5hbWljIGhhc2hpbmcsIGFuZCByZXNpemUgdGhlIHRhYmxlIGFuZCByZWhhc2ggdGhlIGVsZW1lbnRzXG4gICB3aGVuIHRoZSBsb2FkIGZhY3RvciBiZWNvbWVzIHRvbyBoaWdoLiAqKVxuXG50eXBlICgnYSwgJ2IpIHQgPVxuICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgbXV0YWJsZSBkYXRhOiAoJ2EsICdiKSBidWNrZXRsaXN0IGFycmF5OyAgKCogdGhlIGJ1Y2tldHMgKilcbiAgICBzZWVkOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogZm9yIHJhbmRvbWl6YXRpb24gKilcbiAgICBtdXRhYmxlIGluaXRpYWxfc2l6ZTogaW50OyAgICAgICAgICAgICAgICAoKiBpbml0aWFsIGFycmF5IHNpemUgKilcbiAgfVxuXG5hbmQgKCdhLCAnYikgYnVja2V0bGlzdCA9XG4gICAgRW1wdHlcbiAgfCBDb25zIG9mIHsgbXV0YWJsZSBrZXk6ICdhO1xuICAgICAgICAgICAgICBtdXRhYmxlIGRhdGE6ICdiO1xuICAgICAgICAgICAgICBtdXRhYmxlIG5leHQ6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgfVxuXG4oKiBUaGUgc2lnbiBvZiBpbml0aWFsX3NpemUgZW5jb2RlcyB0aGUgZmFjdCB0aGF0IGEgdHJhdmVyc2FsIGlzXG4gICBvbmdvaW5nIG9yIG5vdC5cblxuICAgVGhpcyBkaXNhYmxlcyB0aGUgZWZmaWNpZW50IGluIHBsYWNlIGltcGxlbWVudGF0aW9uIG9mIHJlc2l6aW5nLlxuKilcblxubGV0IG9uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgfHwgaC5pbml0aWFsX3NpemUgPCAwXG5cbmxldCBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBoLmluaXRpYWxfc2l6ZSA8LSAtIGguaW5pdGlhbF9zaXplXG5cbigqIFRvIHBpY2sgcmFuZG9tIHNlZWRzIGlmIHJlcXVlc3RlZCAqKVxuXG5sZXQgcmFuZG9taXplZF9kZWZhdWx0ID1cbiAgbGV0IHBhcmFtcyA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJPQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT5cbiAgICB0cnkgU3lzLmdldGVudiBcIkNBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+IFwiXCIgaW5cbiAgU3RyaW5nLmNvbnRhaW5zIHBhcmFtcyAnUidcblxubGV0IHJhbmRvbWl6ZWQgPSBBdG9taWMubWFrZSByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IEF0b21pYy5zZXQgcmFuZG9taXplZCB0cnVlXG5sZXQgaXNfcmFuZG9taXplZCAoKSA9IEF0b21pYy5nZXQgcmFuZG9taXplZFxuXG5sZXQgcHJuZ19rZXkgPSBEb21haW4uRExTLm5ld19rZXkgUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0XG5cbigqIEZ1bmN0aW9ucyB3aGljaCBhcHBlYXIgYmVmb3JlIHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSBtdXN0IGVpdGhlciBiZVxuICAgaW5kZXBlbmRlbnQgb2YgdGhlIGhhc2ggZnVuY3Rpb24gb3IgdGFrZSBpdCBhcyBhIHBhcmFtZXRlciAoc2VlICMyMjAyIGFuZFxuICAgY29kZSBiZWxvdyB0aGUgZnVuY3RvciBkZWZpbml0aW9ucy4gKilcblxuKCogQ3JlYXRpbmcgYSBmcmVzaCwgZW1wdHkgdGFibGUgKilcblxubGV0IHJlYyBwb3dlcl8yX2Fib3ZlIHggbiA9XG4gIGlmIHggPj0gbiB0aGVuIHhcbiAgZWxzZSBpZiB4ICogMiA+IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4geFxuICBlbHNlIHBvd2VyXzJfYWJvdmUgKHggKiAyKSBuXG5cbmxldCBjcmVhdGUgPyhyYW5kb20gPSBBdG9taWMuZ2V0IHJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPVxuICAgIGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChEb21haW4uRExTLmdldCBwcm5nX2tleSkgZWxzZSAwXG4gIGluXG4gIHsgaW5pdGlhbF9zaXplID0gczsgc2l6ZSA9IDA7IHNlZWQgPSBzZWVkOyBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5IH1cblxubGV0IGNsZWFyIGggPVxuICBpZiBoLnNpemUgPiAwIHRoZW4gYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBBcnJheS5maWxsIGguZGF0YSAwIChBcnJheS5sZW5ndGggaC5kYXRhKSBFbXB0eVxuICBlbmRcblxubGV0IHJlc2V0IGggPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGguZGF0YSBpblxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgICB8fCBsZW4gPSBhYnMgaC5pbml0aWFsX3NpemUgdGhlblxuICAgIGNsZWFyIGhcbiAgZWxzZSBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIGguZGF0YSA8LSBBcnJheS5tYWtlIChhYnMgaC5pbml0aWFsX3NpemUpIEVtcHR5XG4gIGVuZFxuXG5sZXQgY29weV9idWNrZXRsaXN0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBFbXB0eVxuICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGxldCByZWMgbG9vcCBwcmVjID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgfCBDb25zIHByZWMgLT4gIHByZWMubmV4dCA8LSByXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBsb29wIHIgbmV4dFxuICAgICAgaW5cbiAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgbG9vcCByIG5leHQ7XG4gICAgICByXG5cbmxldCBjb3B5IGggPSB7IGggd2l0aCBkYXRhID0gQXJyYXkubWFwIGNvcHlfYnVja2V0bGlzdCBoLmRhdGEgfVxuXG5sZXQgbGVuZ3RoIGggPSBoLnNpemVcblxubGV0IGluc2VydF9hbGxfYnVja2V0cyBpbmRleGZ1biBpbnBsYWNlIG9kYXRhIG5kYXRhID1cbiAgbGV0IG5zaXplID0gQXJyYXkubGVuZ3RoIG5kYXRhIGluXG4gIGxldCBuZGF0YV90YWlsID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT4gKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gYXMgY2VsbCAtPlxuICAgICAgICBsZXQgY2VsbCA9XG4gICAgICAgICAgaWYgaW5wbGFjZSB0aGVuIGNlbGxcbiAgICAgICAgICBlbHNlIENvbnMge2tleTsgZGF0YTsgbmV4dCA9IEVtcHR5fVxuICAgICAgICBpblxuICAgICAgICBsZXQgbmlkeCA9IGluZGV4ZnVuIGtleSBpblxuICAgICAgICBiZWdpbiBtYXRjaCBuZGF0YV90YWlsLihuaWR4KSB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gbmRhdGEuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBjZWxsO1xuICAgICAgICBlbmQ7XG4gICAgICAgIG5kYXRhX3RhaWwuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIGluc2VydF9idWNrZXQgbmV4dFxuICBpblxuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIG9kYXRhIC0gMSBkb1xuICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gIGRvbmU7XG4gIGlmIGlucGxhY2UgdGhlblxuICAgIGZvciBpID0gMCB0byBuc2l6ZSAtIDEgZG9cbiAgICAgIG1hdGNoIG5kYXRhX3RhaWwuKGkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBFbXB0eVxuICAgIGRvbmVcblxubGV0IHJlc2l6ZSBpbmRleGZ1biBoID1cbiAgbGV0IG9kYXRhID0gaC5kYXRhIGluXG4gIGxldCBvc2l6ZSA9IEFycmF5Lmxlbmd0aCBvZGF0YSBpblxuICBsZXQgbnNpemUgPSBvc2l6ZSAqIDIgaW5cbiAgaWYgbnNpemUgPCBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgbGV0IG5kYXRhID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICAgIGxldCBpbnBsYWNlID0gbm90IChvbmdvaW5nX3RyYXZlcnNhbCBoKSBpblxuICAgIGguZGF0YSA8LSBuZGF0YTsgICAgICAgICAgKCogc28gdGhhdCBpbmRleGZ1biBzZWVzIHRoZSBuZXcgYnVja2V0IGNvdW50ICopXG4gICAgaW5zZXJ0X2FsbF9idWNrZXRzIChpbmRleGZ1biBoKSBpbnBsYWNlIG9kYXRhIG5kYXRhXG4gIGVuZFxuXG5sZXQgaXRlciBmIGggPVxuICBsZXQgcmVjIGRvX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICAoKVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGYga2V5IGRhdGE7IGRvX2J1Y2tldCBuZXh0IGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGRvX2J1Y2tldCBkLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IHJlYyBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBFbXB0eVxuICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIEVtcHR5XG4gICAgICBlbmRcbiAgfCAoQ29ucyAoe2tleTsgZGF0YTsgbmV4dH0gYXMgYykpIGFzIHNsb3QgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGYga2V5IGRhdGEgd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjIG5leHRcbiAgICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIHNsb3RcbiAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gc2xvdFxuICAgICAgICAgIGVuZDtcbiAgICAgICAgICBjLmRhdGEgPC0gZGF0YTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHNsb3QgbmV4dFxuICAgICAgZW5kXG5cbmxldCBmaWx0ZXJfbWFwX2lucGxhY2UgZiBoID1cbiAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgRW1wdHkgaC5kYXRhLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoXG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgZm9sZCBmIGggaW5pdCA9XG4gIGxldCByZWMgZG9fYnVja2V0IGIgYWNjdSA9XG4gICAgbWF0Y2ggYiB3aXRoXG4gICAgICBFbXB0eSAtPlxuICAgICAgICBhY2N1XG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZG9fYnVja2V0IG5leHQgKGYga2V5IGRhdGEgYWNjdSkgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgbGV0IGFjY3UgPSByZWYgaW5pdCBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGFjY3UgOj0gZG9fYnVja2V0IGQuKGkpICFhY2N1XG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgIWFjY3VcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbnR5cGUgc3RhdGlzdGljcyA9IHtcbiAgbnVtX2JpbmRpbmdzOiBpbnQ7XG4gIG51bV9idWNrZXRzOiBpbnQ7XG4gIG1heF9idWNrZXRfbGVuZ3RoOiBpbnQ7XG4gIGJ1Y2tldF9oaXN0b2dyYW06IGludCBhcnJheVxufVxuXG5sZXQgcmVjIGJ1Y2tldF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gYWNjdVxuICB8IENvbnN7bmV4dH0gLT4gYnVja2V0X2xlbmd0aCAoYWNjdSArIDEpIG5leHRcblxubGV0IHN0YXRzIGggPVxuICBsZXQgbWJsID1cbiAgICBBcnJheS5mb2xkX2xlZnQgKGZ1biBtIGIgLT4gSW50Lm1heCBtIChidWNrZXRfbGVuZ3RoIDAgYikpIDAgaC5kYXRhIGluXG4gIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgQXJyYXkuaXRlclxuICAgIChmdW4gYiAtPlxuICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgaC5kYXRhO1xuICB7IG51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSB0YmwgPVxuICAoKiBjYXB0dXJlIGN1cnJlbnQgYXJyYXksIHNvIHRoYXQgZXZlbiBpZiB0aGUgdGFibGUgaXMgcmVzaXplZCB3ZVxuICAgICBrZWVwIGl0ZXJhdGluZyBvbiB0aGUgc2FtZSBhcnJheSAqKVxuICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAoKiBzdGF0ZTogaW5kZXggKiBuZXh0IGJ1Y2tldCB0byB0cmF2ZXJzZSAqKVxuICBsZXQgcmVjIGF1eCBpIGJ1Y2sgKCkgPSBtYXRjaCBidWNrIHdpdGhcbiAgICB8IEVtcHR5IC0+XG4gICAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggdGJsX2RhdGFcbiAgICAgICAgdGhlbiBTZXEuTmlsXG4gICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIFNlcS5Db25zICgoa2V5LCBkYXRhKSwgYXV4IGkgbmV4dClcbiAgaW5cbiAgYXV4IDAgRW1wdHlcblxubGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbmxldCB0b19zZXFfdmFsdWVzIG0gPSBTZXEubWFwIHNuZCAodG9fc2VxIG0pXG5cbigqIEZ1bmN0b3JpYWwgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBzZWVkZWRfaGFzaDogaW50IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICEnYSB0XG4gICAgdmFsIGNyZWF0ZTogaW50IC0+ICdhIHRcbiAgICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgcmVzZXQgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgY29weTogJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGFkZDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmU6ICdhIHQgLT4ga2V5IC0+IHVuaXRcbiAgICB2YWwgZmluZDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2FsbDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZTogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGxlbmd0aDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIHR5cGUgU2VlZGVkUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGUgOiA/cmFuZG9tOmJvb2wgLT4gaW50IC0+ICdhIHRcbiAgICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgcmVzZXQgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgY29weSA6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIHJlbW92ZSA6ICdhIHQgLT4ga2V5IC0+IHVuaXRcbiAgICB2YWwgZmluZCA6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGwgOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gICAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIG1lbSA6ICdhIHQgLT4ga2V5IC0+IGJvb2xcbiAgICB2YWwgaXRlciA6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZTogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkIDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGggOiAnYSB0IC0+IGludFxuICAgIHZhbCBzdGF0czogJ2EgdCAtPiBzdGF0aXN0aWNzXG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZVNlZWRlZChIOiBTZWVkZWRIYXNoZWRUeXBlKTogKFNlZWRlZFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGtleSA9IEgudFxuICAgIHR5cGUgJ2EgaGFzaHRibCA9IChrZXksICdhKSB0XG4gICAgdHlwZSAnYSB0ID0gJ2EgaGFzaHRibFxuICAgIGxldCBjcmVhdGUgPSBjcmVhdGVcbiAgICBsZXQgY2xlYXIgPSBjbGVhclxuICAgIGxldCByZXNldCA9IHJlc2V0XG4gICAgbGV0IGNvcHkgPSBjb3B5XG5cbiAgICBsZXQga2V5X2luZGV4IGgga2V5ID1cbiAgICAgIChILnNlZWRlZF9oYXNoIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGFkZCBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBbXVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhPWQ7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gZCA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxuICAgIGxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBsID0gaC5kYXRhLihpKSBpblxuICAgICAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gICAgICBlbmRcblxuICAgIGxldCByZWMgbWVtX2luX2J1Y2tldCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICAgICAgSC5lcXVhbCBrIGtleSB8fCBtZW1faW5fYnVja2V0IGtleSBuZXh0XG5cbiAgICBsZXQgbWVtIGgga2V5ID1cbiAgICAgIG1lbV9pbl9idWNrZXQga2V5IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IGFkZF9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG4gICAgbGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcblxuICAgIGxldCBpdGVyID0gaXRlclxuICAgIGxldCBmaWx0ZXJfbWFwX2lucGxhY2UgPSBmaWx0ZXJfbWFwX2lucGxhY2VcbiAgICBsZXQgZm9sZCA9IGZvbGRcbiAgICBsZXQgbGVuZ3RoID0gbGVuZ3RoXG4gICAgbGV0IHN0YXRzID0gc3RhdHNcbiAgICBsZXQgdG9fc2VxID0gdG9fc2VxXG4gICAgbGV0IHRvX3NlcV9rZXlzID0gdG9fc2VxX2tleXNcbiAgICBsZXQgdG9fc2VxX3ZhbHVlcyA9IHRvX3NlcV92YWx1ZXNcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKEg6IEhhc2hlZFR5cGUpOiAoUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIGluY2x1ZGUgTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgICAgdHlwZSB0ID0gSC50XG4gICAgICAgIGxldCBlcXVhbCA9IEguZXF1YWxcbiAgICAgICAgbGV0IHNlZWRlZF9oYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbigqIFBvbHltb3JwaGljIGhhc2ggZnVuY3Rpb24tYmFzZWQgdGFibGVzICopXG4oKiBDb2RlIGluY2x1ZGVkIGJlbG93IHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSB0byBndWFyZCBhZ2FpbnN0IGFjY2lkZW50YWxcbiAgIHVzZSAtIHNlZSAjMjIwMiAqKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cblxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbmxldCBoYXNoX3BhcmFtIG4xIG4yIHggPSBzZWVkZWRfaGFzaF9wYXJhbSBuMSBuMiAwIHhcbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5cbmxldCBrZXlfaW5kZXggaCBrZXkgPVxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNFxuICB0aGVuIChzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJIYXNodGJsOiB1bnN1cHBvcnRlZCBoYXNoIHRhYmxlIGZvcm1hdFwiXG5cbmxldCBhZGQgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxubGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgICgpXG4gIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgZW5kXG4gICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxubGV0IHJlbW92ZSBoIGtleSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbmxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbmxldCBmaW5kIGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG5sZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBOb25lXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbmxldCBmaW5kX29wdCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gTm9uZVxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbmxldCBmaW5kX2FsbCBoIGtleSA9XG4gIGxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgcmVjIG1lbV9pbl9idWNrZXQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBrZXkgbmV4dFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbWVtX2luX2J1Y2tldCBrZXkgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcblxubGV0IHJlYnVpbGQgPyhyYW5kb20gPSBBdG9taWMuZ2V0IHJhbmRvbWl6ZWQpIGggPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIGluXG4gIGxldCBzZWVkID1cbiAgICBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoRG9tYWluLkRMUy5nZXQgcHJuZ19rZXkpXG4gICAgZWxzZSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguc2VlZFxuICAgIGVsc2UgMCBpblxuICBsZXQgaCcgPSB7XG4gICAgc2l6ZSA9IGguc2l6ZTtcbiAgICBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5O1xuICAgIHNlZWQgPSBzZWVkO1xuICAgIGluaXRpYWxfc2l6ZSA9IGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5pbml0aWFsX3NpemUgZWxzZSBzXG4gIH0gaW5cbiAgaW5zZXJ0X2FsbF9idWNrZXRzIChrZXlfaW5kZXggaCcpIGZhbHNlIGguZGF0YSBoJy5kYXRhO1xuICBoJ1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9jb21wYXJlIiwiY2FtbF9oYXNoIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3N5c19nZXRlbnYiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1N5cyIsIlN0ZGxpYiIsIlN0ZGxpYl9BdG9taWMiLCJTdGRsaWJfRG9tYWluIiwiU3RkbGliX1JhbmRvbSIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfSW50IiwiU3RkbGliX0FycmF5IiwiU3RkbGliX1N0cmluZyIsIm9uZ29pbmdfdHJhdmVyc2FsIiwiaCIsImZsaXBfb25nb2luZ190cmF2ZXJzYWwiLCJwYXJhbXMiLCJleG4iLCJyYW5kb21pemVkX2RlZmF1bHQiLCJyYW5kb21pemVkIiwicmFuZG9taXplIiwicGFyYW0iLCJpc19yYW5kb21pemVkIiwicHJuZ19rZXkiLCJwb3dlcl8yX2Fib3ZlIiwieCIsIm4iLCJjcmVhdGUiLCJvcHQiLCJpbml0aWFsX3NpemUiLCJyYW5kb20iLCJzIiwic2VlZCIsImNsZWFyIiwicmVzZXQiLCJsZW4iLCJjb3B5X2J1Y2tldGxpc3QiLCJrZXkiLCJkYXRhIiwibmV4dCIsInByZWMiLCJjb3B5IiwibGVuZ3RoIiwiaW5zZXJ0X2FsbF9idWNrZXRzIiwiaW5kZXhmdW4iLCJpbnBsYWNlIiwib2RhdGEiLCJuZGF0YSIsIm5zaXplIiwibmRhdGFfdGFpbCIsImkiLCJjZWxsIiwibmlkeCIsIm1hdGNoIiwicmVzaXplIiwib3NpemUiLCJpdGVyIiwib2xkX3RyYXYiLCJkIiwiZmlsdGVyX21hcF9pbnBsYWNlIiwic2xvdCIsImZvbGQiLCJpbml0IiwiYWNjdSIsImIiLCJidWNrZXRfbGVuZ3RoIiwic3RhdHMiLCJtYmwiLCJtIiwiaGlzdG8iLCJsIiwidG9fc2VxIiwidGJsIiwidGJsX2RhdGEiLCJhdXgiLCJidWNrIiwidG9fc2VxX2tleXMiLCJ0b19zZXFfdmFsdWVzIiwiTWFrZVNlZWRlZCIsIkgiLCJrZXlfaW5kZXgiLCJhZGQiLCJidWNrZXQiLCJyZW1vdmUiLCJrIiwiZmluZCIsImsxIiwiZDEiLCJuZXh0MSIsImsyIiwiZDIiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfb3B0IiwiZmluZF9hbGwiLCJibG9jayIsImRzdCIsIm9mZnNldCIsInJlcGxhY2UiLCJtZW0iLCJhZGRfc2VxIiwidiIsInJlcGxhY2Vfc2VxIiwib2Zfc2VxIiwiTWFrZSIsImVxdWFsIiwic2VlZGVkX2hhc2giLCJpbmNsdWRlIiwic3oiLCJoYXNoIiwiaGFzaF9wYXJhbSIsIm4xIiwibjIiLCJyZWJ1aWxkIl0sIm1hcHBpbmdzIjoiSUFB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LHNCQUFBN0I7QUFBQUEsa0JBQUFrRixJQUFTLFVBQUFuQixJQUFBO0FBQUEsY0FBYyxxQkFBWTtBQUFBO0FBQUEsZUFBRTtBQUFBO0FBQUEsWUFBQW9CLFlBQUFoQyxLQUFBdEI7QUFBQUEsSUFHckM7QUFBQTtBQUFBLHNCQUFBN0I7QUFBQUEsa0JBQUFrRixJQUFTLFVBQUFuQixJQUFBO0FBQUEsY0FBYyx5QkFBZ0I7QUFBQTtBQUFBLGVBQUU7QUFBQTtBQUFBLFlBQUFxQixPQUFBdkQ7QUFBQUEsUUFBQXNCLE1BRy9CO0FBQUEsSUFDVjtBQUFBLElBQWlCO0FBQUEsR0FDZDtBQUFBLFlBQUEyQyxRQUFBdkYsS0FBQWQ7QUFBQUE7QUFBQUEsS0FBQWdCLFNBRU8sZUFBVztBQUFBLEtBQUFDLElBQ2I7QUFBQSxJQUNSO0FBQUE7QUFBQSxVQUNtQztBQUFBLE1BQUFDLE9BQWxCO0FBQUE7QUFBQSxTQUFBQSxPQUNWO0FBQUE7QUFBQSxTQUVQO0FBQUEsS0FBQWxCLE1BRVM7QUFBQSxJQUlUO0FBQUEsa0JBQW1CO0FBQUEsSUFBbUM7QUFBQSxHQUNwRDtBQUFBLEdBOWpCeUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQzRDdEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjY1NzgsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZm9ybWF0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgb2ZfaW50IDogaW50IC0+IHRcbiAgdmFsIHplcm8gOiB0XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaXNfa25vd24gOiB0IC0+IGJvb2xcbmVuZCAgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHRvX2ludCA9IGlkXG4gIGxldCBvZl9pbnQgPSBpZFxuICBsZXQgemVybyA9IDBcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaXNfa25vd24gbiA9IG4gPj0gMFxuZW5kXG5cblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIGJveGVzIGRlZmluaXRpb246XG4gICBhIHByZXR0eS1wcmludGluZyBib3ggaXMgZWl0aGVyXG4gICAtIGhib3g6IGhvcml6b250YWwgYm94IChubyBsaW5lIHNwbGl0dGluZylcbiAgIC0gdmJveDogdmVydGljYWwgYm94IChldmVyeSBicmVhayBoaW50IHNwbGl0cyB0aGUgbGluZSlcbiAgIC0gaHZib3g6IGhvcml6b250YWwvdmVydGljYWwgYm94XG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBib3ggaWYgaXQgZml0cyBvblxuICAgICAgdGhlIGN1cnJlbnQgbGluZSwgb3RoZXJ3aXNlIHRoZSBib3ggYmVoYXZlcyBhcyBhIHZlcnRpY2FsIGJveClcbiAgIC0gaG92Ym94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94XG4gICAgICh0aGUgYm94IGlzIGNvbXBhY3RpbmcgbWF0ZXJpYWwsIHByaW50aW5nIGFzIG11Y2ggbWF0ZXJpYWwgYXMgcG9zc2libGVcbiAgICAgIG9uIGV2ZXJ5IGxpbmVzKVxuICAgLSBib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3ggd2l0aCBlbmhhbmNlZCBib3ggc3RydWN0dXJlXG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBib3ggYnV0IGJyZWFrIGhpbnRzIHNwbGl0XG4gICAgICB0aGUgbGluZSBpZiBzcGxpdHRpbmcgd291bGQgbW92ZSB0byB0aGUgbGVmdClcbiopXG50eXBlIGJveF90eXBlID0gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyB0b2tlbnMgZGVmaW5pdGlvbjpcbiAgIGFyZSBlaXRoZXIgdGV4dCB0byBwcmludCBvciBwcmV0dHkgcHJpbnRpbmdcbiAgIGVsZW1lbnRzIHRoYXQgZHJpdmUgaW5kZW50YXRpb24gYW5kIGxpbmUgc3BsaXR0aW5nLiAqKVxudHlwZSBwcF90b2tlbiA9XG4gIHwgUHBfdGV4dCBvZiBzdHJpbmcgICAgICAgICAgKCogbm9ybWFsIHRleHQgKilcbiAgfCBQcF9icmVhayBvZiB7ICAgICAgICAgICAgICAoKiBjb21wbGV0ZSBicmVhayAqKVxuICAgICAgZml0czogc3RyaW5nICogaW50ICogc3RyaW5nOyAgICgqIGxpbmUgaXMgbm90IHNwbGl0ICopXG4gICAgICBicmVha3M6IHN0cmluZyAqIGludCAqIHN0cmluZzsgKCogbGluZSBpcyBzcGxpdCAqKVxuICAgIH1cbiAgfCBQcF90YnJlYWsgb2YgaW50ICogaW50ICAgICAoKiBnbyB0byBuZXh0IHRhYnVsYXRpb24gKilcbiAgfCBQcF9zdGFiICAgICAgICAgICAgICAgICAgICAoKiBzZXQgYSB0YWJ1bGF0aW9uICopXG4gIHwgUHBfYmVnaW4gb2YgaW50ICogYm94X3R5cGUgKCogYmVnaW5uaW5nIG9mIGEgYm94ICopXG4gIHwgUHBfZW5kICAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgYm94ICopXG4gIHwgUHBfdGJlZ2luIG9mIHRib3ggICAgICAgICAgKCogYmVnaW5uaW5nIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF90ZW5kICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX25ld2xpbmUgICAgICAgICAgICAgICAgICgqIHRvIGZvcmNlIGEgbmV3bGluZSBpbnNpZGUgYSBib3ggKilcbiAgfCBQcF9pZl9uZXdsaW5lICAgICAgICAgICAgICAoKiB0byBkbyBzb21ldGhpbmcgb25seSBpZiB0aGlzIHZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIGhhcyBiZWVuIGJyb2tlbiAqKVxuICB8IFBwX29wZW5fdGFnIG9mIHN0YWcgICAgICAgICAoKiBvcGVuaW5nIGEgdGFnIG5hbWUgKilcbiAgfCBQcF9jbG9zZV90YWcgICAgICAgICAgICAgICAoKiBjbG9zaW5nIHRoZSBtb3N0IHJlY2VudGx5IG9wZW4gdGFnICopXG5cbmFuZCBzdGFnID0gLi5cblxuYW5kIHRib3ggPSBQcF90Ym94IG9mIGludCBsaXN0IHJlZiAgKCogVGFidWxhdGlvbiBib3ggKilcblxudHlwZSB0YWcgPSBzdHJpbmdcbnR5cGUgc3RhZyArPSBTdHJpbmdfdGFnIG9mIHRhZ1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZTpcbiAgIHByZXR0eS1wcmludGluZyBtYXRlcmlhbCBpcyBub3Qgd3JpdHRlbiBpbiB0aGUgb3V0cHV0IGFzIHNvb24gYXMgZW1pdHRlZDtcbiAgIGluc3RlYWQsIHRoZSBtYXRlcmlhbCBpcyBzaW1wbHkgcmVjb3JkZWQgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLFxuICAgdW50aWwgdGhlIGVuY2xvc2luZyBib3ggaGFzIGEga25vd24gY29tcHV0ZWQgc2l6ZSBhbmQgcHJvcGVyIHNwbGl0dGluZ1xuICAgZGVjaXNpb25zIGNhbiBiZSBtYWRlLlxuXG4gICBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgY29udGFpbnMgZm9ybWF0dGluZyBlbGVtZW50cyB0byBiZSBwcmludGVkLlxuICAgRWFjaCBmb3JtYXR0aW5nIGVsZW1lbnQgaXMgYSB0dXBsZSAoc2l6ZSwgdG9rZW4sIGxlbmd0aCksIHdoZXJlXG4gICAtIGxlbmd0aCBpcyB0aGUgZGVjbGFyZWQgbGVuZ3RoIG9mIHRoZSB0b2tlbixcbiAgIC0gc2l6ZSBpcyBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgdG9rZW4gd2hlbiBpdCBpcyBwcmludGVkXG4gICAgIChzaXplIGlzIHNldCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib3ggaXMga25vd24sIHNvIHRoYXQgc2l6ZSBvZiBicmVha1xuICAgICAgaGludHMgYXJlIGRlZmluaXRpdmUpLiAqKVxudHlwZSBwcF9xdWV1ZV9lbGVtID0ge1xuICBtdXRhYmxlIHNpemUgOiBTaXplLnQ7XG4gIHRva2VuIDogcHBfdG9rZW47XG4gIGxlbmd0aCA6IGludDtcbn1cblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfcXVldWUgPSBwcF9xdWV1ZV9lbGVtIFF1ZXVlLnRcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2s6IHNjYW5uaW5nIGVsZW1lbnQgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfc2Nhbl9lbGVtID0ge1xuICBsZWZ0X3RvdGFsIDogaW50OyAoKiBWYWx1ZSBvZiBwcF9sZWZ0X3RvdGFsIHdoZW4gdGhlIGVsZW1lbnQgd2FzIGVucXVldWVkLiAqKVxuICBxdWV1ZV9lbGVtIDogcHBfcXVldWVfZWxlbVxufVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazpcbiAgIHRoZSBmb3JtYXR0aW5nIHN0YWNrIGNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmVcbiAgIGJveGVzOyB0aGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjayBpcyB1c2VkIHRvIHNwbGl0IHRoZSBsaW5lc1xuICAgd2hpbGUgcHJpbnRpbmcgdG9rZW5zLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazogZm9ybWF0dGluZyBzdGFjayBlbGVtZW50IGRlZmluaXRpb24uXG4gICBFYWNoIHN0YWNrIGVsZW1lbnQgZGVzY3JpYmVzIGEgcHJldHR5LXByaW50aW5nIGJveC4gKilcbnR5cGUgcHBfZm9ybWF0X2VsZW0gPSB7IGJveF90eXBlIDogYm94X3R5cGU7IHdpZHRoIDogaW50IH1cblxuKCogVGhlIGZvcm1hdHRlciBkZWZpbml0aW9uLlxuICAgRWFjaCBmb3JtYXR0ZXIgdmFsdWUgaXMgYSBwcmV0dHktcHJpbnRlciBpbnN0YW5jZSB3aXRoIGFsbCBpdHNcbiAgIG1hY2hpbmVyeS4gKilcbnR5cGUgZm9ybWF0dGVyID0ge1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG4gIHBwX3NjYW5fc3RhY2sgOiBwcF9zY2FuX2VsZW0gU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2suICopXG4gIHBwX2Zvcm1hdF9zdGFjayA6IHBwX2Zvcm1hdF9lbGVtIFN0YWNrLnQ7XG4gIHBwX3Rib3hfc3RhY2sgOiB0Ym94IFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzZW1hbnRpY3MgdGFnIHN0YWNrLiAqKVxuICBwcF90YWdfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gIHBwX21hcmtfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gICgqIFZhbHVlIG9mIHJpZ2h0IG1hcmdpbi4gKilcbiAgbXV0YWJsZSBwcF9tYXJnaW4gOiBpbnQ7XG4gICgqIE1pbmltYWwgc3BhY2UgbGVmdCBiZWZvcmUgbWFyZ2luLCB3aGVuIG9wZW5pbmcgYSBib3guICopXG4gIG11dGFibGUgcHBfbWluX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIE1heGltdW0gdmFsdWUgb2YgaW5kZW50YXRpb246XG4gICAgIG5vIGJveCBjYW4gYmUgb3BlbmVkIGZ1cnRoZXIuICopXG4gIG11dGFibGUgcHBfbWF4X2luZGVudCA6IGludDtcbiAgKCogU3BhY2UgcmVtYWluaW5nIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG4gIG11dGFibGUgcHBfc3BhY2VfbGVmdCA6IGludDtcbiAgKCogQ3VycmVudCB2YWx1ZSBvZiBpbmRlbnRhdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9jdXJyZW50X2luZGVudCA6IGludDtcbiAgKCogVHJ1ZSB3aGVuIHRoZSBsaW5lIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgcHJldHR5LXByaW50ZXIuICopXG4gIG11dGFibGUgcHBfaXNfbmV3X2xpbmUgOiBib29sO1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgYWxyZWFkeSBwcmludGVkLiAqKVxuICBtdXRhYmxlIHBwX2xlZnRfdG90YWwgOiBpbnQ7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBldmVyIHB1dCBpbiBxdWV1ZS4gKilcbiAgbXV0YWJsZSBwcF9yaWdodF90b3RhbCA6IGludDtcbiAgKCogQ3VycmVudCBudW1iZXIgb2Ygb3BlbiBib3hlcy4gKilcbiAgbXV0YWJsZSBwcF9jdXJyX2RlcHRoIDogaW50O1xuICAoKiBNYXhpbXVtIG51bWJlciBvZiBib3hlcyB3aGljaCBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgb3Blbi4gKilcbiAgbXV0YWJsZSBwcF9tYXhfYm94ZXMgOiBpbnQ7XG4gICgqIEVsbGlwc2lzIHN0cmluZy4gKilcbiAgbXV0YWJsZSBwcF9lbGxpcHNpcyA6IHN0cmluZztcbiAgKCogT3V0cHV0IGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICAoKiBGbHVzaGluZyBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBicmVhayBoaW50cyBzcGFjZXMuICopXG4gIG11dGFibGUgcHBfb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbiAgKCogQXJlIHRhZ3MgcHJpbnRlZCA/ICopXG4gIG11dGFibGUgcHBfcHJpbnRfdGFncyA6IGJvb2w7XG4gICgqIEFyZSB0YWdzIG1hcmtlZCA/ICopXG4gIG11dGFibGUgcHBfbWFya190YWdzIDogYm9vbDtcbiAgKCogRmluZCBvcGVuaW5nIGFuZCBjbG9zaW5nIG1hcmtlcnMgb2YgdGFncy4gKilcbiAgbXV0YWJsZSBwcF9tYXJrX29wZW5fdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfbWFya19jbG9zZV90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9wcmludF9vcGVuX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgbXV0YWJsZSBwcF9wcmludF9jbG9zZV90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbiAgcHBfcXVldWUgOiBwcF9xdWV1ZTtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIHNwZWNpZmljIHRhZyBoYW5kbGluZyBmdW5jdGlvbnMuICopXG50eXBlIGZvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fc3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gdW5pdDtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIGZ1bmN0aW9ucyB0byBvdXRwdXQgbWF0ZXJpYWwuICopXG50eXBlIGZvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID0ge1xuICBvdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICBvdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICBvdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG59XG5cblxuKCpcblxuICBBdXhpbGlhcmllcyBhbmQgYmFzaWMgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBFbnRlciBhIHRva2VuIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuID1cbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gc3RhdGUucHBfcmlnaHRfdG90YWwgKyB0b2tlbi5sZW5ndGg7XG4gIFF1ZXVlLmFkZCB0b2tlbiBzdGF0ZS5wcF9xdWV1ZVxuXG5cbmxldCBwcF9jbGVhcl9xdWV1ZSBzdGF0ZSA9XG4gIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gMTsgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gMTtcbiAgUXVldWUuY2xlYXIgc3RhdGUucHBfcXVldWVcblxuXG4oKiBQcF9pbmZpbml0eTogbGFyZ2UgdmFsdWUgZm9yIGRlZmF1bHQgdG9rZW5zIHNpemUuXG5cbiAgIFBwX2luZmluaXR5IGlzIGRvY3VtZW50ZWQgYXMgYmVpbmcgZ3JlYXRlciB0aGFuIDFlMTA7IHRvIGF2b2lkXG4gICBjb25mdXNpb24gYWJvdXQgdGhlIHdvcmQgJ2dyZWF0ZXInLCB3ZSBjaG9vc2UgcHBfaW5maW5pdHkgZ3JlYXRlclxuICAgdGhhbiAxZTEwICsgMTsgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGVzdHMgaW4gdGhlIGFsZ29yaXRobSxcbiAgIHBwX2luZmluaXR5IG11c3QgYmUgZXZlbiBvbmUgbW9yZSB0aGFuIDFlMTAgKyAxOyBsZXQncyBzdGFuZCBvbiB0aGVcbiAgIHNhZmUgc2lkZSBieSBjaG9vc2luZyAxLmUxMCsxMC5cblxuICAgUHBfaW5maW5pdHkgY291bGQgcHJvYmFibHkgYmUgMTA3Mzc0MTgyMyB0aGF0IGlzIDJeMzAgLSAxLCB0aGF0IGlzXG4gICB0aGUgbWluaW1hbCB1cHBlciBib3VuZCBmb3IgaW50ZWdlcnM7IG5vdyB0aGF0IG1heF9pbnQgaXMgZGVmaW5lZCxcbiAgIHRoaXMgbGltaXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGFzIG1heF9pbnQgLSAxLlxuXG4gICBIb3dldmVyLCBiZWZvcmUgc2V0dGluZyBwcF9pbmZpbml0eSB0byBzb21ldGhpbmcgYXJvdW5kIG1heF9pbnQsIHdlXG4gICBtdXN0IGNhcmVmdWxseSBkb3VibGUtY2hlY2sgYWxsIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuICAgdGhhdCBpbnZvbHZlIHBwX2luZmluaXR5LCBzaW5jZSBhbnkgb3ZlcmZsb3cgd291bGQgd3JlY2sgaGF2b2MgdGhlXG4gICBwcmV0dHktcHJpbnRpbmcgYWxnb3JpdGhtJ3MgaW52YXJpYW50cy4gR2l2ZW4gdGhhdCB0aGlzIGFyaXRobWV0aWNcbiAgIGNvcnJlY3RuZXNzIGNoZWNrIGlzIGRpZmZpY3VsdCBhbmQgZXJyb3IgcHJvbmUgYW5kIGdpdmVuIHRoYXQgMWUxMFxuICAgKyAxIGlzIGluIHByYWN0aWNlIGxhcmdlIGVub3VnaCwgdGhlcmUgaXMgbm8gbmVlZCB0byBhdHRlbXB0IHRvIHNldFxuICAgcHBfaW5maW5pdHkgdG8gdGhlIHRoZW9yZXRpY2FsbHkgbWF4aW11bSBsaW1pdC4gSXQgaXMgbm90IHdvcnRoIHRoZVxuICAgYnVyZGVuICEgKilcbmxldCBwcF9pbmZpbml0eSA9IDEwMDAwMDAwMTBcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBmb3IgdGhlIGZvcm1hdHRlci4gKilcbmxldCBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHMgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuYW5kIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlID0gc3RhdGUucHBfb3V0X25ld2xpbmUgKClcbmFuZCBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfc3BhY2VzIG5cbmFuZCBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfaW5kZW50IG5cblxuKCogRm9ybWF0IGEgdGV4dHVhbCB0b2tlbiAqKVxubGV0IGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgdGV4dCA9XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHNpemU7XG4gIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgdGV4dDtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gZmFsc2VcblxuKCogRm9ybWF0IGEgc3RyaW5nIGJ5IGl0cyBsZW5ndGgsIGlmIG5vdCBlbXB0eSAqKVxubGV0IGZvcm1hdF9zdHJpbmcgc3RhdGUgcyA9XG4gIGlmIHMgPD4gXCJcIiB0aGVuIGZvcm1hdF9wcF90ZXh0IHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxuKCogVG8gZm9ybWF0IGEgYnJlYWssIGluZGVudGluZyBhIG5ldyBsaW5lLiAqKVxubGV0IGJyZWFrX25ld19saW5lIHN0YXRlIChiZWZvcmUsIG9mZnNldCwgYWZ0ZXIpIHdpZHRoID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSB0cnVlO1xuICBsZXQgaW5kZW50ID0gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZzZXQgaW5cbiAgKCogRG9uJ3QgaW5kZW50IG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LiAqKVxuICBsZXQgcmVhbF9pbmRlbnQgPSBJbnQubWluIHN0YXRlLnBwX21heF9pbmRlbnQgaW5kZW50IGluXG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIHJlYWxfaW5kZW50O1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gZm9yY2UgYSBsaW5lIGJyZWFrIGluc2lkZSBhIGJveDogbm8gb2Zmc2V0IGlzIGFkZGVkLiAqKVxubGV0IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGggPSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgMCwgXCJcIikgd2lkdGhcblxuKCogVG8gZm9ybWF0IGEgYnJlYWsgdGhhdCBmaXRzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgYnJlYWtfc2FtZV9saW5lIHN0YXRlIChiZWZvcmUsIHdpZHRoLCBhZnRlcikgPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gd2lkdGg7XG4gIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgd2lkdGg7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBpbmRlbnQgbm8gbW9yZSB0aGFuIHBwX21heF9pbmRlbnQsIGlmIG9uZSB0cmllcyB0byBvcGVuIGEgYm94XG4gICBiZXlvbmQgcHBfbWF4X2luZGVudCwgdGhlbiB0aGUgYm94IGlzIHJlamVjdGVkIG9uIHRoZSBsZWZ0XG4gICBieSBzaW11bGF0aW5nIGEgYnJlYWsuICopXG5sZXQgcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlXG4gIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgaWYgd2lkdGggPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW5cbiAgICAgIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfZml0cyB8IFBwX2hib3ggLT4gKClcbiAgICAgIHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcblxuXG4oKiBUbyBza2lwIGEgdG9rZW4sIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9za2lwX3Rva2VuIHN0YXRlID1cbiAgbWF0Y2ggUXVldWUudGFrZV9vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogcHJpbnRfaWZfbmV3bGluZSBtdXN0IGhhdmUgYmVlbiB0aGUgbGFzdCBwcmludGluZyBjb21tYW5kICopXG4gIHwgU29tZSB7IHNpemU7IGxlbmd0aDsgXyB9IC0+XG4gICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIC0gbGVuZ3RoO1xuICAgIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCArIFNpemUudG9faW50IHNpemVcblxuXG4oKlxuXG4gIFRoZSBtYWluIHByZXR0eSBwcmludGluZyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEZvcm1hdHRpbmcgYSB0b2tlbiB3aXRoIGEgZ2l2ZW4gc2l6ZS4gKilcbmxldCBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSA9IGZ1bmN0aW9uXG5cbiAgfCBQcF90ZXh0IHMgLT5cbiAgICBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHNcblxuICB8IFBwX2JlZ2luIChvZmYsIHR5KSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgaWYgaW5zZXJ0aW9uX3BvaW50ID4gc3RhdGUucHBfbWF4X2luZGVudCB0aGVuXG4gICAgICAoKiBjYW4gbm90IG9wZW4gYSBib3ggcmlnaHQgdGhlcmUuICopXG4gICAgICBiZWdpbiBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlIGVuZDtcbiAgICBsZXQgd2lkdGggPSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gb2ZmIGluXG4gICAgbGV0IGJveF90eXBlID1cbiAgICAgIG1hdGNoIHR5IHdpdGhcbiAgICAgIHwgUHBfdmJveCAtPiBQcF92Ym94XG4gICAgICB8IFBwX2hib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHMgLT5cbiAgICAgICAgaWYgc2l6ZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiB0eSBlbHNlIFBwX2ZpdHMgaW5cbiAgICBTdGFjay5wdXNoIHsgYm94X3R5cGU7IHdpZHRoIH0gc3RhdGUucHBfZm9ybWF0X3N0YWNrXG5cbiAgfCBQcF9lbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3RiZWdpbiAoUHBfdGJveCBfIGFzIHRib3gpIC0+XG4gICAgU3RhY2sucHVzaCB0Ym94IHN0YXRlLnBwX3Rib3hfc3RhY2tcblxuICB8IFBwX3RlbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF9zdGFiIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCByZWMgYWRkX3RhYiBuID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbbl1cbiAgICAgICAgfCB4IDo6IGwgYXMgbHMgLT4gaWYgbiA8IHggdGhlbiBuIDo6IGxzIGVsc2UgeCA6OiBhZGRfdGFiIG4gbCBpblxuICAgICAgdGFicyA6PSBhZGRfdGFiIChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0KSAhdGFic1xuICAgIGVuZFxuXG4gIHwgUHBfdGJyZWFrIChuLCBvZmYpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHRhYiA9XG4gICAgICAgIG1hdGNoICF0YWJzIHdpdGhcbiAgICAgICAgfCBbXSAtPiBpbnNlcnRpb25fcG9pbnRcbiAgICAgICAgfCBmaXJzdCA6OiBfIC0+XG4gICAgICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgaGVhZCA6OiB0YWlsIC0+XG4gICAgICAgICAgICAgIGlmIGhlYWQgPj0gaW5zZXJ0aW9uX3BvaW50IHRoZW4gaGVhZCBlbHNlIGZpbmQgdGFpbFxuICAgICAgICAgICAgfCBbXSAtPiBmaXJzdCBpblxuICAgICAgICAgIGZpbmQgIXRhYnMgaW5cbiAgICAgIGxldCBvZmZzZXQgPSB0YWIgLSBpbnNlcnRpb25fcG9pbnQgaW5cbiAgICAgIGlmIG9mZnNldCA+PSAwXG4gICAgICB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoXCJcIiwgb2Zmc2V0ICsgbiwgXCJcIilcbiAgICAgIGVsc2UgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIHRhYiArIG9mZiwgXCJcIikgc3RhdGUucHBfbWFyZ2luXG4gICAgZW5kXG5cbiAgfCBQcF9uZXdsaW5lIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyB3aWR0aDsgX30gLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuICAgIGVuZFxuXG4gIHwgUHBfaWZfbmV3bGluZSAtPlxuICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ICE9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICB0aGVuIHBwX3NraXBfdG9rZW4gc3RhdGVcblxuICB8IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gLT5cbiAgICBsZXQgYmVmb3JlLCBvZmYsIF8gPSBicmVha3MgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgICBiZWdpbiBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2hvdmJveCAtPlxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfYm94IC0+XG4gICAgICAgICgqIEhhdmUgdGhlIGxpbmUganVzdCBiZWVuIGJyb2tlbiBoZXJlID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfaXNfbmV3X2xpbmUgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0cyBlbHNlXG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aCBlbHNlXG4gICAgICAgICgqIGJyZWFrIHRoZSBsaW5lIGhlcmUgbGVhZHMgdG8gbmV3IGluZGVudGF0aW9uID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPiBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZlxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2h2Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9maXRzIC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX3Zib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2hib3ggLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIGVuZFxuICAgIGVuZFxuXG4gICB8IFBwX29wZW5fdGFnIHRhZ19uYW1lIC0+XG4gICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyO1xuICAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX21hcmtfc3RhY2tcblxuICAgfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9tYXJrX3N0YWNrIHdpdGhcbiAgICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19jbG9zZV90YWcgdGFnX25hbWUgaW5cbiAgICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlclxuICAgICBlbmRcblxuXG4oKiBQcmludCBpZiB0b2tlbiBzaXplIGlzIGtub3duIGVsc2UgcHJpbnRpbmcgaXMgZGVsYXllZC5cbiAgIFByaW50aW5nIGlzIGRlbGF5ZWQgd2hlbiB0aGUgdGV4dCB3YWl0aW5nIGluIHRoZSBxdWV1ZSByZXF1aXJlc1xuICAgbW9yZSByb29tIHRvIGZvcm1hdCB0aGFuIGV4aXN0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IHJlYyBhZHZhbmNlX2xlZnQgc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS5wZWVrX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBObyB0b2tlbnMgdG8gcHJpbnQgKilcbiAgfCBTb21lIHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IC0+XG4gICAgbGV0IHBlbmRpbmdfY291bnQgPSBzdGF0ZS5wcF9yaWdodF90b3RhbCAtIHN0YXRlLnBwX2xlZnRfdG90YWwgaW5cbiAgICBpZiBTaXplLmlzX2tub3duIHNpemUgfHwgcGVuZGluZ19jb3VudCA+PSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gYmVnaW5cbiAgICAgIFF1ZXVlLnRha2Ugc3RhdGUucHBfcXVldWUgfD4gaWdub3JlOyAoKiBOb3QgZW1wdHk6IHdlIHBlZWsgaW50byBpdCAqKVxuICAgICAgbGV0IHNpemUgPSBpZiBTaXplLmlzX2tub3duIHNpemUgdGhlbiBTaXplLnRvX2ludCBzaXplIGVsc2UgcHBfaW5maW5pdHkgaW5cbiAgICAgIGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplIHRva2VuO1xuICAgICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBsZW5ndGggKyBzdGF0ZS5wcF9sZWZ0X3RvdGFsO1xuICAgICAgKGFkdmFuY2VfbGVmdCBbQHRhaWxjYWxsXSkgc3RhdGVcbiAgICBlbmRcblxuXG4oKiBUbyBlbnF1ZXVlIGEgdG9rZW4gOiB0cnkgdG8gYWR2YW5jZS4gKilcbmxldCBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgdG9rID0gcHBfZW5xdWV1ZSBzdGF0ZSB0b2s7IGFkdmFuY2VfbGVmdCBzdGF0ZVxuXG5cbigqIFRvIGVucXVldWUgc3RyaW5ncy4gKilcbmxldCBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHMgPVxuICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplOyB0b2tlbiA9IFBwX3RleHQgczsgbGVuZ3RoID0gU2l6ZS50b19pbnQgc2l6ZSB9XG5cblxubGV0IGVucXVldWVfc3RyaW5nIHN0YXRlIHMgPVxuICBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSAoU2l6ZS5vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpIHNcblxuXG4oKiBSb3V0aW5lcyBmb3Igc2NhbiBzdGFja1xuICAgZGV0ZXJtaW5lIHNpemUgb2YgYm94ZXMuICopXG5cbigqIFRoZSBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxubGV0IGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGFjayA9XG4gIFN0YWNrLmNsZWFyIHN0YWNrO1xuICBsZXQgcXVldWVfZWxlbSA9IHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF90ZXh0IFwiXCI7IGxlbmd0aCA9IDAgfSBpblxuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IC0xOyBxdWV1ZV9lbGVtIH0gc3RhY2tcblxuKCogU2V0dGluZyB0aGUgc2l6ZSBvZiBib3hlcyBvbiBzY2FuIHN0YWNrOlxuICAgaWYgdHkgPSB0cnVlIHRoZW4gc2l6ZSBvZiBicmVhayBpcyBzZXQgZWxzZSBzaXplIG9mIGJveCBpcyBzZXQ7XG4gICBpbiBlYWNoIGNhc2UgcHBfc2Nhbl9zdGFjayBpcyBwb3BwZWQuXG5cbiAgIE5vdGU6XG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHNjYW4gc3RhY2sgaXMgZXhoYXVzdGl2ZSwgc2luY2Ugc2Nhbl9zdGFjayBpcyBuZXZlclxuICAgZW1wdHkuXG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHRva2VuIGluIHNjYW4gc3RhY2sgaXMgYWxzbyBleGhhdXN0aXZlLFxuICAgc2luY2Ugc2Nhbl9wdXNoIGlzIHVzZWQgb24gYnJlYWtzIGFuZCBvcGVuaW5nIG9mIGJveGVzLiAqKVxubGV0IHNldF9zaXplIHN0YXRlIHR5ID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG4gIHwgU29tZSB7IGxlZnRfdG90YWw7IHF1ZXVlX2VsZW0gfSAtPlxuICAgIGxldCBzaXplID0gU2l6ZS50b19pbnQgcXVldWVfZWxlbS5zaXplIGluXG4gICAgKCogdGVzdCBpZiBzY2FuIHN0YWNrIGNvbnRhaW5zIGFueSBkYXRhIHRoYXQgaXMgbm90IG9ic29sZXRlLiAqKVxuICAgIGlmIGxlZnRfdG90YWwgPCBzdGF0ZS5wcF9sZWZ0X3RvdGFsIHRoZW5cbiAgICAgIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggcXVldWVfZWxlbS50b2tlbiB3aXRoXG4gICAgICB8IFBwX2JyZWFrIF8gfCBQcF90YnJlYWsgKF8sIF8pIC0+XG4gICAgICAgIGlmIHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfYmVnaW4gKF8sIF8pIC0+XG4gICAgICAgIGlmIG5vdCB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX3RleHQgXyB8IFBwX3N0YWIgfCBQcF90YmVnaW4gXyB8IFBwX3RlbmQgfCBQcF9lbmRcbiAgICAgIHwgUHBfbmV3bGluZSB8IFBwX2lmX25ld2xpbmUgfCBQcF9vcGVuX3RhZyBfIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgICAgICgpICgqIHNjYW5fcHVzaCBpcyBvbmx5IHVzZWQgZm9yIGJyZWFrcyBhbmQgYm94ZXMuICopXG5cblxuKCogUHVzaCBhIHRva2VuIG9uIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLlxuICAgSWYgYiBpcyB0cnVlIHNldF9zaXplIGlzIGNhbGxlZC4gKilcbmxldCBzY2FuX3B1c2ggc3RhdGUgYiB0b2tlbiA9XG4gIHBwX2VucXVldWUgc3RhdGUgdG9rZW47XG4gIGlmIGIgdGhlbiBzZXRfc2l6ZSBzdGF0ZSB0cnVlO1xuICBsZXQgZWxlbSA9IHsgbGVmdF90b3RhbCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsOyBxdWV1ZV9lbGVtID0gdG9rZW4gfSBpblxuICBTdGFjay5wdXNoIGVsZW0gc3RhdGUucHBfc2Nhbl9zdGFja1xuXG5cbigqIFRvIG9wZW4gYSBuZXcgYm94IDpcbiAgIHRoZSB1c2VyIG1heSBzZXQgdGhlIGRlcHRoIGJvdW5kIHBwX21heF9ib3hlc1xuICAgYW55IHRleHQgbmVzdGVkIGRlZXBlciBpcyBwcmludGVkIGFzIHRoZSBlbGxpcHNpcyBzdHJpbmcuICopXG5sZXQgcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBicl90eSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfYmVnaW4gKGluZGVudCwgYnJfdHkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgZmFsc2UgZWxlbSBlbHNlXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRoZSBib3ggd2hpY2ggaXMgYWx3YXlzIG9wZW4uICopXG5sZXQgcHBfb3Blbl9zeXNfYm94IHN0YXRlID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaG92Ym94XG5cbigqIENsb3NlIGEgYm94LCBzZXR0aW5nIHNpemVzIG9mIGl0cyBzdWIgYm94ZXMuICopXG5sZXQgcHBfY2xvc2VfYm94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX3ByaW50X3RhZ3MgPC0gYlxubGV0IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX21hcmtfdGFncyA8LSBiXG5sZXQgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9wcmludF90YWdzXG5sZXQgcHBfZ2V0X21hcmtfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmtfdGFnc1xubGV0IHBwX3NldF90YWdzIHN0YXRlIGIgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiOyBwcF9zZXRfbWFya190YWdzIHN0YXRlIGJcblxuXG4oKiBIYW5kbGluZyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zOiBnZXQvc2V0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBtYXJrX29wZW5fc3RhZyA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnO1xuICBwcmludF9vcGVuX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZztcbiAgcHJpbnRfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZztcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl9zdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3N0YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fc3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2Vfc3RhZyA9IHBjdDtcbiAgfSA9XG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gbW90O1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBtY3Q7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHBvdDtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHBjdFxuXG5cbigqIEluaXRpYWxpemUgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfcmluaXQgc3RhdGUgPVxuICBwcF9jbGVhcl9xdWV1ZSBzdGF0ZTtcbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX2Zvcm1hdF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGJveF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGFnX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9tYXJrX3N0YWNrO1xuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSAwO1xuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIDA7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luO1xuICBwcF9vcGVuX3N5c19ib3ggc3RhdGVcblxubGV0IGNsZWFyX3RhZ19zdGFjayBzdGF0ZSA9XG4gIFN0YWNrLml0ZXIgKGZ1biBfIC0+IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIH5lbmRfd2l0aF9uZXdsaW5lID1cbiAgY2xlYXJfdGFnX3N0YWNrIHN0YXRlO1xuICB3aGlsZSBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSBkb1xuICAgIHBwX2Nsb3NlX2JveCBzdGF0ZSAoKVxuICBkb25lO1xuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBwcF9pbmZpbml0eTtcbiAgYWR2YW5jZV9sZWZ0IHN0YXRlO1xuICBpZiBlbmRfd2l0aF9uZXdsaW5lIHRoZW4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHBwX3Jpbml0IHN0YXRlXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBmb3JtYXQgdmFsdWVzIGFuZCB1c2UgYm94ZXMuXG5cbiopXG5cbigqIFRvIGZvcm1hdCBhIHN0cmluZy4gKilcbmxldCBwcF9wcmludF9hc19zaXplIHN0YXRlIHNpemUgcyA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHNcblxuXG5sZXQgcHBfcHJpbnRfYXMgc3RhdGUgaXNpemUgcyA9XG4gIHBwX3ByaW50X2FzX3NpemUgc3RhdGUgKFNpemUub2ZfaW50IGlzaXplKSBzXG5cblxubGV0IHBwX3ByaW50X3N0cmluZyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG5sZXQgcHBfcHJpbnRfYnl0ZXMgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChCeXRlcy5sZW5ndGggcykgKEJ5dGVzLnRvX3N0cmluZyBzKVxuXG4oKiBUbyBmb3JtYXQgYW4gaW50ZWdlci4gKilcbmxldCBwcF9wcmludF9pbnQgc3RhdGUgaSA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoSW50LnRvX3N0cmluZyBpKVxuXG4oKiBUbyBmb3JtYXQgYSBmbG9hdC4gKilcbmxldCBwcF9wcmludF9mbG9hdCBzdGF0ZSBmID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfZmxvYXQgZilcblxuKCogVG8gZm9ybWF0IGEgYm9vbGVhbi4gKilcbmxldCBwcF9wcmludF9ib29sIHN0YXRlIGIgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9ib29sIGIpXG5cbigqIFRvIGZvcm1hdCBhIGNoYXIuICopXG5sZXQgcHBfcHJpbnRfY2hhciBzdGF0ZSBjID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgMSAoU3RyaW5nLm1ha2UgMSBjKVxuXG5sZXQgcHBfcHJpbnRfbm90aGluZyBfc3RhdGUgKCkgPSAoKVxuXG5cbigqIE9wZW5pbmcgYm94ZXMuICopXG5sZXQgcHBfb3Blbl9oYm94IHN0YXRlICgpID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaGJveFxuYW5kIHBwX29wZW5fdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX3Zib3hcblxuYW5kIHBwX29wZW5faHZib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9odmJveFxuYW5kIHBwX29wZW5faG92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaG92Ym94XG5hbmQgcHBfb3Blbl9ib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ib3hcblxuXG4oKiBQcmludGluZyBxdWV1ZWQgdGV4dC5cblxuICAgW3BwX3ByaW50X2ZsdXNoXSBwcmludHMgYWxsIHBlbmRpbmcgaXRlbXMgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGFuZFxuICAgdGhlbiBmbHVzaGVzIHRoZSBsb3cgbGV2ZWwgb3V0cHV0IGRldmljZSBvZiB0aGUgZm9ybWF0dGVyIHRvIGFjdHVhbGx5XG4gICBkaXNwbGF5IHByaW50aW5nIG1hdGVyaWFsLlxuXG4gICBbcHBfcHJpbnRfbmV3bGluZV0gYmVoYXZlcyBhcyBbcHBfcHJpbnRfZmx1c2hdIGFmdGVyIHByaW50aW5nIGFuIGFkZGl0aW9uYWxcbiAgIG5ldyBsaW5lLiAqKVxubGV0IHBwX3ByaW50X25ld2xpbmUgc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSB+ZW5kX3dpdGhfbmV3bGluZTp0cnVlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcbmFuZCBwcF9wcmludF9mbHVzaCBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIH5lbmRfd2l0aF9uZXdsaW5lOmZhbHNlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcblxuXG4oKiBUbyBnZXQgYSBuZXdsaW5lIHdoZW4gb25lIGRvZXMgbm90IHdhbnQgdG8gY2xvc2UgdGhlIGN1cnJlbnQgYm94LiAqKVxubGV0IHBwX2ZvcmNlX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIFRvIGZvcm1hdCBzb21ldGhpbmcsIG9ubHkgaW4gY2FzZSB0aGUgbGluZSBoYXMganVzdCBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9wcmludF9pZl9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlXG4gICAgICB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfaWZfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogR2VuZXJhbGl6ZWQgYnJlYWsgaGludCB0aGF0IGFsbG93cyBwcmludGluZyBzdHJpbmdzIGJlZm9yZS9hZnRlclxuICAgc2FtZS1saW5lIG9mZnNldCAod2lkdGgpIG9yIG5ldy1saW5lIG9mZnNldCAqKVxubGV0IHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZSB+Zml0cyB+YnJlYWtzID1cbiAgbGV0IGJlZm9yZSwgd2lkdGgsIGFmdGVyID0gZml0cyBpblxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCB0b2tlbiA9IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gaW5cbiAgICBsZXQgbGVuZ3RoID0gU3RyaW5nLmxlbmd0aCBiZWZvcmUgKyB3aWR0aCArIFN0cmluZy5sZW5ndGggYWZ0ZXIgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG4oKiBQcmludGluZyBicmVhayBoaW50czpcbiAgIEEgYnJlYWsgaGludCBpbmRpY2F0ZXMgd2hlcmUgYSBib3ggbWF5IGJlIGJyb2tlbi5cbiAgIElmIGxpbmUgaXMgYnJva2VuIHRoZW4gb2Zmc2V0IGlzIGFkZGVkIHRvIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudFxuICAgYm94IGVsc2UgKHRoZSB2YWx1ZSBvZikgd2lkdGggYmxhbmtzIGFyZSBwcmludGVkLiAqKVxubGV0IHBwX3ByaW50X2JyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZVxuICAgIH5maXRzOihcIlwiLCB3aWR0aCwgXCJcIikgfmJyZWFrczooXCJcIiwgb2Zmc2V0LCBcIlwiKVxuXG5cbigqIFByaW50IGEgc3BhY2UgOlxuICAgYSBzcGFjZSBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgYSBzaW5nbGUgc3BhY2UgaWYgdGhlIGJyZWFrIGRvZXMgbm90XG4gICBzcGxpdCB0aGUgbGluZTtcbiAgIGEgY3V0IGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBub3RoaW5nIGlmIHRoZSBicmVhayBkb2VzIG5vdCBzcGxpdCB0aGVcbiAgIGxpbmUuICopXG5sZXQgcHBfcHJpbnRfc3BhY2Ugc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAxIDBcbmFuZCBwcF9wcmludF9jdXQgc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAwIDBcblxuXG4oKiBUYWJ1bGF0aW9uIGJveGVzLiAqKVxubGV0IHBwX29wZW5fdGJveCBzdGF0ZSAoKSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS56ZXJvIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJlZ2luIChQcF90Ym94IChyZWYgW10pKTsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKiBDbG9zZSBhIHRhYnVsYXRpb24gYm94LiAqKVxubGV0IHBwX2Nsb3NlX3Rib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfdGVuZDsgbGVuZ3RoID0gMCB9IGluXG4gICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtO1xuICAgICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggLSAxXG4gIGVuZFxuXG5cbigqIFByaW50IGEgdGFidWxhdGlvbiBicmVhay4gKilcbmxldCBwcF9wcmludF90YnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YnJlYWsgKHdpZHRoLCBvZmZzZXQpOyBsZW5ndGggPSB3aWR0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG5cbmxldCBwcF9wcmludF90YWIgc3RhdGUgKCkgPSBwcF9wcmludF90YnJlYWsgc3RhdGUgMCAwXG5cbmxldCBwcF9zZXRfdGFiIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfc3RhYjsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gY29udHJvbCB0aGUgcHJldHR5LXByaW50ZXJzXG5cbiopXG5cbigqIFNldF9tYXhfYm94ZXMuICopXG5sZXQgcHBfc2V0X21heF9ib3hlcyBzdGF0ZSBuID0gaWYgbiA+IDEgdGhlbiBzdGF0ZS5wcF9tYXhfYm94ZXMgPC0gblxuXG4oKiBUbyBrbm93IHRoZSBjdXJyZW50IG1heGltdW0gbnVtYmVyIG9mIGJveGVzIGFsbG93ZWQuICopXG5sZXQgcHBfZ2V0X21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG5sZXQgcHBfb3Zlcl9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9jdXJyX2RlcHRoID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbigqIEVsbGlwc2lzLiAqKVxubGV0IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0YXRlIHMgPSBzdGF0ZS5wcF9lbGxpcHNpcyA8LSBzXG5hbmQgcHBfZ2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRvIHNldCB0aGUgbWFyZ2luIG9mIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX2xpbWl0IG4gPVxuICBpZiBuIDwgcHBfaW5maW5pdHkgdGhlbiBuIGVsc2UgcHJlZCBwcF9pbmZpbml0eVxuXG5cbigqIEludGVybmFsIHByZXR0eS1wcmludGVyIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWluX3NwYWNlX2xlZnQgPC0gbjtcbiAgICBzdGF0ZS5wcF9tYXhfaW5kZW50IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3Jpbml0IHN0YXRlXG5cblxuKCogSW5pdGlhbGx5LCB3ZSBoYXZlIDpcbiAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdCwgYW5kXG4gICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luLiAqKVxubGV0IHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG4gPVxuICBpZiBuID4gMSB0aGVuXG4gICAgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIChzdGF0ZS5wcF9tYXJnaW4gLSBuKVxuXG5cbmxldCBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9pbmRlbnRcblxubGV0IHBwX3NldF9tYXJnaW4gc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWFyZ2luIDwtIG47XG4gICAgbGV0IG5ld19tYXhfaW5kZW50ID1cbiAgICAgICgqIFRyeSB0byBtYWludGFpbiBtYXhfaW5kZW50IHRvIGl0cyBhY3R1YWwgdmFsdWUuICopXG4gICAgICBpZiBzdGF0ZS5wcF9tYXhfaW5kZW50IDw9IHN0YXRlLnBwX21hcmdpblxuICAgICAgdGhlbiBzdGF0ZS5wcF9tYXhfaW5kZW50IGVsc2VcbiAgICAgICgqIElmIHBvc3NpYmxlIG1haW50YWluIHBwX21pbl9zcGFjZV9sZWZ0IHRvIGl0cyBhY3R1YWwgdmFsdWUsXG4gICAgICAgICBpZiB0aGlzIGxlYWRzIHRvIGEgdG9vIHNtYWxsIG1heF9pbmRlbnQsIHRha2UgaGFsZiBvZiB0aGVcbiAgICAgICAgIG5ldyBtYXJnaW4sIGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiAxLiAqKVxuICAgICAgIEludC5tYXggKEludC5tYXggKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0KVxuICAgICAgICAgICAgICAgIChzdGF0ZS5wcF9tYXJnaW4gLyAyKSkgMSBpblxuICAgICgqIFJlYnVpbGQgaW52YXJpYW50cy4gKilcbiAgICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuZXdfbWF4X2luZGVudFxuXG5cbigqKiBHZW9tZXRyeSBmdW5jdGlvbnMgYW5kIHR5cGVzICopXG50eXBlIGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OmludDsgbWFyZ2luOiBpbnR9XG5cbmxldCB2YWxpZGF0ZV9nZW9tZXRyeSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIGlmIG1heF9pbmRlbnQgPCAyIHRoZW5cbiAgICBFcnJvciBcIm1heF9pbmRlbnQgPCAyXCJcbiAgZWxzZSBpZiBtYXJnaW4gPD0gbWF4X2luZGVudCB0aGVuXG4gICAgRXJyb3IgXCJtYXJnaW4gPD0gbWF4X2luZGVudFwiXG4gIGVsc2UgaWYgbWFyZ2luID49IHBwX2luZmluaXR5IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA+PSBwcF9pbmZpbml0eVwiXG4gIGVsc2UgT2sgKClcblxubGV0IGNoZWNrX2dlb21ldHJ5IGdlb21ldHJ5ID1cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IE9rICgpIC0+IHRydWVcbiAgfCBFcnJvciBfIC0+IGZhbHNlXG5cbmxldCBwcF9nZXRfbWFyZ2luIHN0YXRlICgpID0gc3RhdGUucHBfbWFyZ2luXG5cbmxldCBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIHBwX3NldF9tYXJnaW4gc3RhdGUgbWFyZ2luO1xuICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBtYXhfaW5kZW50O1xuICAoKVxuXG5sZXQgcHBfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBtc2cgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCAoXCJGb3JtYXQucHBfc2V0X2dlb21ldHJ5OiBcIiBeIG1zZykpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIF9tc2cgLT5cbiAgICAgKClcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgPVxuICB7IG1hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RhdGUgKCk7IG1heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSB9XG5cbmxldCBwcF91cGRhdGVfZ2VvbWV0cnkgc3RhdGUgdXBkYXRlID1cbiAgbGV0IGdlb21ldHJ5ID0gcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpIGluXG4gIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlICh1cGRhdGUgZ2VvbWV0cnkpXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUge1xuICAgICAgb3V0X3N0cmluZyA9IGY7XG4gICAgICBvdXRfZmx1c2ggPSBnO1xuICAgICAgb3V0X25ld2xpbmUgPSBoO1xuICAgICAgb3V0X3NwYWNlcyA9IGk7XG4gICAgICBvdXRfaW5kZW50ID0gajtcbiAgICB9ID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGpcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgb3V0X3N0cmluZyA9IHN0YXRlLnBwX291dF9zdHJpbmc7XG4gIG91dF9mbHVzaCA9IHN0YXRlLnBwX291dF9mbHVzaDtcbiAgb3V0X25ld2xpbmUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZTtcbiAgb3V0X3NwYWNlcyA9IHN0YXRlLnBwX291dF9zcGFjZXM7XG4gIG91dF9pbmRlbnQgPSBzdGF0ZS5wcF9vdXRfaW5kZW50O1xufVxuXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgc3RyaW5nIG91dHB1dCBhbmQgZmx1c2ggZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSBmIGcgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7IHN0YXRlLnBwX291dF9mbHVzaCA8LSBnXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoKVxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9uZXdsaW5lIHN0YXRlICgpID0gc3RhdGUucHBfb3V0X3N0cmluZyBcIlxcblwiIDAgIDFcblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IHNwYWNlcy4gKilcbmxldCBibGFua19saW5lID0gU3RyaW5nLm1ha2UgODAgJyAnXG5sZXQgcmVjIGRpc3BsYXlfYmxhbmtzIHN0YXRlIG4gPVxuICBpZiBuID4gMCB0aGVuXG4gIGlmIG4gPD0gODAgdGhlbiBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCBuIGVsc2VcbiAgYmVnaW5cbiAgICBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCA4MDtcbiAgICBkaXNwbGF5X2JsYW5rcyBzdGF0ZSAobiAtIDgwKVxuICBlbmRcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfaW5kZW50ID0gZGlzcGxheV9ibGFua3NcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zIGFzIHByaW50aW5nIHRvIGEgZ2l2ZW5cbiAgIFtTdGRsaWIub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgc3RhdGUgb2MgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIG91dHB1dF9zdWJzdHJpbmcgb2M7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSAoZnVuICgpIC0+IGZsdXNoIG9jKTtcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHN0YXRlXG5cbigqXG5cbiAgRGVmaW5pbmcgc3BlY2lmaWMgZm9ybWF0dGVyc1xuXG4qKVxuXG5sZXQgZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8XCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcbmxldCBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8L1wiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5cbmxldCBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnID0gaWdub3JlXG5sZXQgZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWcgPSBpZ25vcmVcblxuKCogQnVpbGRpbmcgYSBmb3JtYXR0ZXIgZ2l2ZW4gaXRzIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuXG4gICBPdGhlciBmaWVsZHMgZ2V0IHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZXMuICopXG5sZXQgcHBfbWFrZV9mb3JtYXR0ZXIgZiBnIGggaSBqID1cbiAgKCogVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGZvcm1hdHRlciBjb250YWlucyBhIGR1bW15IGJveC4gKilcbiAgbGV0IHBwX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gIGxldCBzeXNfdG9rID1cbiAgICB7IHNpemUgPSBTaXplLnVua25vd247IHRva2VuID0gUHBfYmVnaW4gKDAsIFBwX2hvdmJveCk7IGxlbmd0aCA9IDAgfSBpblxuICBRdWV1ZS5hZGQgc3lzX3RvayBwcF9xdWV1ZTtcbiAgbGV0IHNjYW5fc3RhY2sgPSBTdGFjay5jcmVhdGUgKCkgaW5cbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHNjYW5fc3RhY2s7XG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gMTsgcXVldWVfZWxlbSA9IHN5c190b2sgfSBzY2FuX3N0YWNrO1xuICBsZXQgcHBfbWFyZ2luID0gNzhcbiAgYW5kIHBwX21pbl9zcGFjZV9sZWZ0ID0gMTAgaW5cbiAge1xuICAgIHBwX3NjYW5fc3RhY2sgPSBzY2FuX3N0YWNrO1xuICAgIHBwX2Zvcm1hdF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90Ym94X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3RhZ19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJrX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmdpbiA9IHBwX21hcmdpbjtcbiAgICBwcF9taW5fc3BhY2VfbGVmdCA9IHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luO1xuICAgIHBwX2N1cnJlbnRfaW5kZW50ID0gMDtcbiAgICBwcF9pc19uZXdfbGluZSA9IHRydWU7XG4gICAgcHBfbGVmdF90b3RhbCA9IDE7XG4gICAgcHBfcmlnaHRfdG90YWwgPSAxO1xuICAgIHBwX2N1cnJfZGVwdGggPSAxO1xuICAgIHBwX21heF9ib3hlcyA9IG1heF9pbnQ7XG4gICAgcHBfZWxsaXBzaXMgPSBcIi5cIjtcbiAgICBwcF9vdXRfc3RyaW5nID0gZjtcbiAgICBwcF9vdXRfZmx1c2ggPSBnO1xuICAgIHBwX291dF9uZXdsaW5lID0gaDtcbiAgICBwcF9vdXRfc3BhY2VzID0gaTtcbiAgICBwcF9vdXRfaW5kZW50ID0gajtcbiAgICBwcF9wcmludF90YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya190YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya19vcGVuX3RhZyA9IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZztcbiAgICBwcF9tYXJrX2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWc7XG4gICAgcHBfcHJpbnRfb3Blbl90YWcgPSBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnO1xuICAgIHBwX3ByaW50X2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnO1xuICAgIHBwX3F1ZXVlID0gcHBfcXVldWU7XG4gIH1cblxuXG4oKiBCdWlsZCBhIGZvcm1hdHRlciBvdXQgb2YgaXRzIG91dCBmdW5jdGlvbnMuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9mdW5jdGlvbnMgb3V0X2Z1bnMgPVxuICBwcF9tYWtlX2Zvcm1hdHRlclxuICAgIG91dF9mdW5zLm91dF9zdHJpbmdcbiAgICBvdXRfZnVucy5vdXRfZmx1c2hcbiAgICBvdXRfZnVucy5vdXRfbmV3bGluZVxuICAgIG91dF9mdW5zLm91dF9zcGFjZXNcbiAgICBvdXRfZnVucy5vdXRfaW5kZW50XG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3aXRoIGRlZmF1bHQgZnVuY3Rpb25zIHRvIG91dHB1dCBzcGFjZXMsXG4gIGluZGVudGF0aW9uLCBhbmQgbmV3IGxpbmVzLiAqKVxubGV0IG1ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCA9XG4gIGxldCBwcGYgPSBwcF9tYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggaWdub3JlIGlnbm9yZSBpZ25vcmUgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBwcGZcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbU3RkbGliLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgPVxuICBtYWtlX2Zvcm1hdHRlciAob3V0cHV0X3N1YnN0cmluZyBvYykgKGZ1biAoKSAtPiBmbHVzaCBvYylcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbQnVmZmVyLnRdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9idWZmZXIgYiA9XG4gIG1ha2VfZm9ybWF0dGVyIChCdWZmZXIuYWRkX3N1YnN0cmluZyBiKSBpZ25vcmVcblxuXG4oKiBBbGxvY2F0aW5nIGJ1ZmZlciBmb3IgcHJldHR5LXByaW50aW5nIHB1cnBvc2VzLlxuICAgRGVmYXVsdCBidWZmZXIgc2l6ZSBpcyBwcF9idWZmZXJfc2l6ZSBvciA1MTIuXG4qKVxubGV0IHBwX2J1ZmZlcl9zaXplID0gNTEyXG5sZXQgcHBfbWFrZV9idWZmZXIgKCkgPSBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplXG5cbigqIFRoZSBzdGFuZGFyZCAoc2hhcmVkKSBidWZmZXIuICopXG5sZXQgc3RkYnVmID0gcHBfbWFrZV9idWZmZXIgKClcblxuKCogUHJlZGVmaW5lZCBmb3JtYXR0ZXJzIHN0YW5kYXJkIGZvcm1hdHRlciB0byBwcmludFxuICAgdG8gW1N0ZGxpYi5zdGRvdXRdLCBbU3RkbGliLnN0ZGVycl0sIGFuZCB7IXN0ZGJ1Zn0uICopXG5sZXQgc3RkX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3Rkb3V0XG5hbmQgZXJyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3RkZXJyXG5hbmQgc3RyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9idWZmZXIgc3RkYnVmXG5cbigqIEluaXRpYWxpc2UgZG9tYWluIGxvY2FsIHN0YXRlICopXG5tb2R1bGUgRExTID0gRG9tYWluLkRMU1xuXG5sZXQgc3RkYnVmX2tleSA9IERMUy5uZXdfa2V5IHBwX21ha2VfYnVmZmVyXG5sZXQgXyA9IERMUy5zZXQgc3RkYnVmX2tleSBzdGRidWZcblxubGV0IHN0cl9mb3JtYXR0ZXJfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICBmb3JtYXR0ZXJfb2ZfYnVmZmVyIChETFMuZ2V0IHN0ZGJ1Zl9rZXkpKVxubGV0IF8gPSBETFMuc2V0IHN0cl9mb3JtYXR0ZXJfa2V5IHN0cl9mb3JtYXR0ZXJcblxubGV0IGJ1ZmZlcmVkX291dF9zdHJpbmcga2V5IHN0ciBvZnMgbGVuID1cbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgKERvbWFpbi5ETFMuZ2V0IGtleSkgc3RyIG9mcyBsZW5cblxubGV0IGJ1ZmZlcmVkX291dF9mbHVzaCBvYyBrZXkgKCkgPVxuICBsZXQgYnVmID0gRG9tYWluLkRMUy5nZXQga2V5IGluXG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBsZXQgc3RyID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICBvdXRwdXRfc3Vic3RyaW5nIG9jIHN0ciAwIGxlbiA7XG4gIFN0ZGxpYi5mbHVzaCBvYztcbiAgQnVmZmVyLmNsZWFyIGJ1ZlxuXG5sZXQgc3RkX2J1Zl9rZXkgPSBEb21haW4uRExTLm5ld19rZXkgKGZ1biAoKSAtPiBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplKVxubGV0IGVycl9idWZfa2V5ID0gRG9tYWluLkRMUy5uZXdfa2V5IChmdW4gKCkgLT4gQnVmZmVyLmNyZWF0ZSBwcF9idWZmZXJfc2l6ZSlcblxubGV0IHN0ZF9mb3JtYXR0ZXJfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICBsZXQgcHBmID1cbiAgICBwcF9tYWtlX2Zvcm1hdHRlciAoYnVmZmVyZWRfb3V0X3N0cmluZyBzdGRfYnVmX2tleSlcbiAgICAgIChidWZmZXJlZF9vdXRfZmx1c2ggU3RkbGliLnN0ZG91dCBzdGRfYnVmX2tleSkgaWdub3JlIGlnbm9yZSBpZ25vcmVcbiAgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBEb21haW4uYXRfZXhpdCAocHBfcHJpbnRfZmx1c2ggcHBmKTtcbiAgcHBmKVxubGV0IF8gPSBETFMuc2V0IHN0ZF9mb3JtYXR0ZXJfa2V5IHN0ZF9mb3JtYXR0ZXJcblxubGV0IGVycl9mb3JtYXR0ZXJfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICBsZXQgcHBmID1cbiAgICBwcF9tYWtlX2Zvcm1hdHRlciAoYnVmZmVyZWRfb3V0X3N0cmluZyBlcnJfYnVmX2tleSlcbiAgICAgIChidWZmZXJlZF9vdXRfZmx1c2ggU3RkbGliLnN0ZGVyciBlcnJfYnVmX2tleSkgaWdub3JlIGlnbm9yZSBpZ25vcmVcbiAgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBEb21haW4uYXRfZXhpdCAocHBfcHJpbnRfZmx1c2ggcHBmKTtcbiAgcHBmKVxubGV0IF8gPSBETFMuc2V0IGVycl9mb3JtYXR0ZXJfa2V5IGVycl9mb3JtYXR0ZXJcblxubGV0IGdldF9zdGRfZm9ybWF0dGVyICgpID0gRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleVxubGV0IGdldF9lcnJfZm9ybWF0dGVyICgpID0gRExTLmdldCBlcnJfZm9ybWF0dGVyX2tleVxubGV0IGdldF9zdHJfZm9ybWF0dGVyICgpID0gRExTLmdldCBzdHJfZm9ybWF0dGVyX2tleVxubGV0IGdldF9zdGRidWYgKCkgPSBETFMuZ2V0IHN0ZGJ1Zl9rZXlcblxuKCogW2ZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZl0gZmx1c2hlcyBmb3JtYXR0ZXIgW3BwZl0sXG4gICB0aGVuIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBbYnVmXSB0aGF0IGlzIHJlc2V0LlxuICAgRm9ybWF0dGVyIFtwcGZdIGlzIHN1cHBvc2VkIHRvIHByaW50IHRvIGJ1ZmZlciBbYnVmXSwgb3RoZXJ3aXNlIHRoaXNcbiAgIGZ1bmN0aW9uIGlzIG5vdCByZWFsbHkgdXNlZnVsLiAqKVxubGV0IGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZiA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHBwZiB+ZW5kX3dpdGhfbmV3bGluZTpmYWxzZTtcbiAgbGV0IHMgPSBCdWZmZXIuY29udGVudHMgYnVmIGluXG4gIEJ1ZmZlci5yZXNldCBidWY7XG4gIHNcblxuKCogRmx1c2ggW3N0cl9mb3JtYXR0ZXJdIGFuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIFtzdGRidWZdLiAqKVxubGV0IGZsdXNoX3N0cl9mb3JtYXR0ZXIgKCkgPVxuICBsZXQgc3RkYnVmID0gRExTLmdldCBzdGRidWZfa2V5IGluXG4gIGxldCBzdHJfZm9ybWF0dGVyID0gRExTLmdldCBzdHJfZm9ybWF0dGVyX2tleSBpblxuICBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIHN0ZGJ1ZiBzdHJfZm9ybWF0dGVyXG5cbmxldCBtYWtlX3N5bmNocm9uaXplZF9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgRExTLm5ld19rZXkgKGZ1biAoKSAtPlxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplIGluXG4gICAgbGV0IG91dHB1dCcgPSBCdWZmZXIuYWRkX3N1YnN0cmluZyBidWYgaW5cbiAgICBsZXQgZmx1c2gnICgpID1cbiAgICAgIG91dHB1dCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgMCAoQnVmZmVyLmxlbmd0aCBidWYpO1xuICAgICAgQnVmZmVyLmNsZWFyIGJ1ZjtcbiAgICAgIGZsdXNoICgpXG4gICAgaW5cbiAgICBtYWtlX2Zvcm1hdHRlciBvdXRwdXQnIGZsdXNoJylcblxubGV0IHN5bmNocm9uaXplZF9mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgPVxuICBtYWtlX3N5bmNocm9uaXplZF9mb3JtYXR0ZXIgKG91dHB1dF9zdWJzdHJpbmcgb2MpIChmdW4gKCkgLT4gZmx1c2ggb2MpXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZ1xuKilcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nIGlzIHByZXR0eS1wcmludGluZyB3aXRoIG5vIGxvdyBsZXZlbCBvdXRwdXQuXG5cbiAgV2hlbiB1c2luZyBhIHN5bWJvbGljIGZvcm1hdHRlciwgYWxsIHJlZ3VsYXIgcHJldHR5LXByaW50aW5nIGFjdGl2aXRpZXNcbiAgb2NjdXIgYnV0IG91dHB1dCBtYXRlcmlhbCBpcyBzeW1ib2xpYyBhbmQgc3RvcmVkIGluIGEgYnVmZmVyIG9mIG91dHB1dFxuICBpdGVtcy4gQXQgdGhlIGVuZCBvZiBwcmV0dHktcHJpbnRpbmcsIGZsdXNoaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGFsbG93c1xuICBwb3N0LXByb2Nlc3Npbmcgb2Ygc3ltYm9saWMgb3V0cHV0IGJlZm9yZSBsb3cgbGV2ZWwgb3V0cHV0IG9wZXJhdGlvbnMuXG4qKVxuXG50eXBlIHN5bWJvbGljX291dHB1dF9pdGVtID1cbiAgfCBPdXRwdXRfZmx1c2hcbiAgfCBPdXRwdXRfbmV3bGluZVxuICB8IE91dHB1dF9zdHJpbmcgb2Ygc3RyaW5nXG4gIHwgT3V0cHV0X3NwYWNlcyBvZiBpbnRcbiAgfCBPdXRwdXRfaW5kZW50IG9mIGludFxuXG50eXBlIHN5bWJvbGljX291dHB1dF9idWZmZXIgPSB7XG4gIG11dGFibGUgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDogc3ltYm9saWNfb3V0cHV0X2l0ZW0gbGlzdDtcbn1cblxubGV0IG1ha2Vfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciAoKSA9XG4gIHsgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzID0gW10gfVxuXG5sZXQgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIFtdXG5cbmxldCBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBMaXN0LnJldiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBpdGVtcyA9IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiBpblxuICBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYjtcbiAgaXRlbXNcblxubGV0IGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgaXRlbSA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gaXRlbSA6OiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmb3JtYXR0ZXJfb2Zfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgc3ltYm9saWNfZmx1c2ggc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9mbHVzaFxuICBhbmQgc3ltYm9saWNfbmV3bGluZSBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X25ld2xpbmVcbiAgYW5kIHN5bWJvbGljX3N0cmluZyBzb2IgcyBpIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zdHJpbmcgKFN0cmluZy5zdWIgcyBpIG4pKVxuICBhbmQgc3ltYm9saWNfc3BhY2VzIHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3BhY2VzIG4pXG4gIGFuZCBzeW1ib2xpY19pbmRlbnQgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9pbmRlbnQgbikgaW5cblxuICBsZXQgZiA9IHN5bWJvbGljX3N0cmluZyBzb2JcbiAgYW5kIGcgPSBzeW1ib2xpY19mbHVzaCBzb2JcbiAgYW5kIGggPSBzeW1ib2xpY19uZXdsaW5lIHNvYlxuICBhbmQgaSA9IHN5bWJvbGljX3NwYWNlcyBzb2JcbiAgYW5kIGogPSBzeW1ib2xpY19pbmRlbnQgc29iIGluXG4gIHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgalxuXG4oKlxuXG4gIEJhc2ljIGZ1bmN0aW9ucyBvbiB0aGUgJ3N0YW5kYXJkJyBmb3JtYXR0ZXJcbiAgKHRoZSBmb3JtYXR0ZXIgdGhhdCBwcmludHMgdG8gW1N0ZGxpYi5zdGRvdXRdKS5cblxuKilcblxubGV0IG9wZW5faGJveCB2ID0gcHBfb3Blbl9oYm94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgb3Blbl92Ym94IHYgPSBwcF9vcGVuX3Zib3ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBvcGVuX2h2Ym94IHYgPSBwcF9vcGVuX2h2Ym94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgb3Blbl9ob3Zib3ggdiA9IHBwX29wZW5faG92Ym94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgb3Blbl9ib3ggdiA9IHBwX29wZW5fYm94IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgY2xvc2VfYm94IHYgPSBwcF9jbG9zZV9ib3ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBvcGVuX3N0YWcgdiA9IHBwX29wZW5fc3RhZyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGNsb3NlX3N0YWcgdiA9IHBwX2Nsb3NlX3N0YWcgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9hcyB2IHcgPSBwcF9wcmludF9hcyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdiB3XG5hbmQgcHJpbnRfc3RyaW5nIHYgPSBwcF9wcmludF9zdHJpbmcgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9ieXRlcyB2ID0gcHBfcHJpbnRfYnl0ZXMgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9pbnQgdiA9IHBwX3ByaW50X2ludCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X2Zsb2F0IHYgPSBwcF9wcmludF9mbG9hdCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X2NoYXIgdiA9IHBwX3ByaW50X2NoYXIgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9ib29sIHYgPSBwcF9wcmludF9ib29sIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgcHJpbnRfYnJlYWsgdiB3ID0gcHBfcHJpbnRfYnJlYWsgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHYgd1xuYW5kIHByaW50X2N1dCB2ID0gcHBfcHJpbnRfY3V0IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgcHJpbnRfc3BhY2UgdiA9IHBwX3ByaW50X3NwYWNlIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZm9yY2VfbmV3bGluZSB2ID0gcHBfZm9yY2VfbmV3bGluZSAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X2ZsdXNoIHYgPSBwcF9wcmludF9mbHVzaCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHByaW50X25ld2xpbmUgdiA9IHBwX3ByaW50X25ld2xpbmUgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF9pZl9uZXdsaW5lIHYgPSBwcF9wcmludF9pZl9uZXdsaW5lIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBvcGVuX3Rib3ggdiA9IHBwX29wZW5fdGJveCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGNsb3NlX3Rib3ggdiA9IHBwX2Nsb3NlX3Rib3ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF90YnJlYWsgdiB3ID0gcHBfcHJpbnRfdGJyZWFrIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2IHdcblxuYW5kIHNldF90YWIgdiA9IHBwX3NldF90YWIgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBwcmludF90YWIgdiA9IHBwX3ByaW50X3RhYiAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X21hcmdpbiB2ID0gcHBfc2V0X21hcmdpbiAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9tYXJnaW4gdiA9IHBwX2dldF9tYXJnaW4gKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcblxuYW5kIHNldF9tYXhfaW5kZW50IHYgPSBwcF9zZXRfbWF4X2luZGVudCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9tYXhfaW5kZW50IHYgPSBwcF9nZXRfbWF4X2luZGVudCAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X2dlb21ldHJ5IH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBwcF9zZXRfZ2VvbWV0cnkgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIH5tYXhfaW5kZW50IH5tYXJnaW5cbmFuZCBzYWZlX3NldF9nZW9tZXRyeSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgcHBfc2FmZV9zZXRfZ2VvbWV0cnkgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIH5tYXhfaW5kZW50IH5tYXJnaW5cbmFuZCBnZXRfZ2VvbWV0cnkgdiA9IHBwX2dldF9nZW9tZXRyeSAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHVwZGF0ZV9nZW9tZXRyeSB2ID0gcHBfdXBkYXRlX2dlb21ldHJ5IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfbWF4X2JveGVzIHYgPSBwcF9zZXRfbWF4X2JveGVzIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZ2V0X21heF9ib3hlcyB2ID0gcHBfZ2V0X21heF9ib3hlcyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIG92ZXJfbWF4X2JveGVzIHYgPSBwcF9vdmVyX21heF9ib3hlcyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgdiA9IHBwX3NldF9lbGxpcHNpc190ZXh0IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgdiA9IHBwX2dldF9lbGxpcHNpc190ZXh0IChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHYgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgdiA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyB2ID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgdiB3ID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2IHdcbmFuZCBnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgdiA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyB2ID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIGdldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgdiA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBzZXRfcHJpbnRfdGFncyB2ID1cbiAgcHBfc2V0X3ByaW50X3RhZ3MgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBnZXRfcHJpbnRfdGFncyB2ID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3MgKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpIHZcbmFuZCBzZXRfbWFya190YWdzIHYgPVxuICBwcF9zZXRfbWFya190YWdzIChETFMuZ2V0IHN0ZF9mb3JtYXR0ZXJfa2V5KSB2XG5hbmQgZ2V0X21hcmtfdGFncyB2ID1cbiAgcHBfZ2V0X21hcmtfdGFncyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuYW5kIHNldF90YWdzIHYgPVxuICBwcF9zZXRfdGFncyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgdlxuXG5cbigqIENvbnZlbmllbmNlIGZ1bmN0aW9ucyAqKVxuXG5sZXQgcHBfcHJpbnRfaXRlciA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgaXRlciBwcF92IHBwZiB2ID1cbiAgbGV0IGlzX2ZpcnN0ID0gcmVmIHRydWUgaW5cbiAgbGV0IHBwX3YgdiA9XG4gICAgaWYgIWlzX2ZpcnN0IHRoZW4gaXNfZmlyc3QgOj0gZmFsc2UgZWxzZSBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3YgcHBmIHZcbiAgaW5cbiAgaXRlciBwcF92IHZcblxuKCogVG8gZm9ybWF0IGEgbGlzdCAqKVxubGV0IHBwX3ByaW50X2xpc3QgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmIHYgPVxuICBwcF9wcmludF9pdGVyIH5wcF9zZXAgTGlzdC5pdGVyIHBwX3YgcHBmIHZcblxuKCogVG8gZm9ybWF0IGFuIGFycmF5ICopXG5sZXQgcHBfcHJpbnRfYXJyYXkgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmIHYgPVxuICBwcF9wcmludF9pdGVyIH5wcF9zZXAgQXJyYXkuaXRlciBwcF92IHBwZiB2XG5cbigqIFRvIGZvcm1hdCBhIHNlcXVlbmNlICopXG5sZXQgcHBfcHJpbnRfc2VxID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiBzZXEgPVxuICBwcF9wcmludF9pdGVyIH5wcF9zZXAgU2VxLml0ZXIgcHBfdiBwcGYgc2VxXG5cbigqIFRvIGZvcm1hdCBmcmVlLWZsb3dpbmcgdGV4dCAqKVxubGV0IHBwX3ByaW50X3RleHQgcHBmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBsZWZ0ID0gcmVmIDAgaW5cbiAgbGV0IHJpZ2h0ID0gcmVmIDAgaW5cbiAgbGV0IGZsdXNoICgpID1cbiAgICBwcF9wcmludF9zdHJpbmcgcHBmIChTdHJpbmcuc3ViIHMgIWxlZnQgKCFyaWdodCAtICFsZWZ0KSk7XG4gICAgaW5jciByaWdodDsgbGVmdCA6PSAhcmlnaHQ7XG4gIGluXG4gIHdoaWxlICghcmlnaHQgPD4gbGVuKSBkb1xuICAgIG1hdGNoIHMuWyFyaWdodF0gd2l0aFxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBmbHVzaCAoKTtcbiAgICAgICAgcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGZsdXNoICgpOyBwcF9wcmludF9zcGFjZSBwcGYgKClcbiAgICAgICgqIHRoZXJlIGlzIG5vIHNwZWNpZmljIHN1cHBvcnQgZm9yICdcXHQnXG4gICAgICAgICBhcyBpdCBpcyB1bmNsZWFyIHdoYXQgYSByaWdodCBzZW1hbnRpY3Mgd291bGQgYmUgKilcbiAgICAgIHwgXyAtPiBpbmNyIHJpZ2h0XG4gIGRvbmU7XG4gIGlmICFsZWZ0IDw+IGxlbiB0aGVuIGZsdXNoICgpXG5cbmxldCBwcF9wcmludF9vcHRpb24gPyhub25lID0gZnVuIF8gKCkgLT4gKCkpIHBwX3YgcHBmID0gZnVuY3Rpb25cbnwgTm9uZSAtPiBub25lIHBwZiAoKVxufCBTb21lIHYgLT4gcHBfdiBwcGYgdlxuXG5sZXQgcHBfcHJpbnRfcmVzdWx0IH5vayB+ZXJyb3IgcHBmID0gZnVuY3Rpb25cbnwgT2sgdiAtPiBvayBwcGYgdlxufCBFcnJvciBlIC0+IGVycm9yIHBwZiBlXG5cbmxldCBwcF9wcmludF9laXRoZXIgfmxlZnQgfnJpZ2h0IHBwZiA9IGZ1bmN0aW9uXG58IEVpdGhlci5MZWZ0IGwgLT4gbGVmdCBwcGYgbFxufCBFaXRoZXIuUmlnaHQgciAtPiByaWdodCBwcGYgclxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5sZXQgY29tcHV0ZV90YWcgb3V0cHV0IHRhZ19hY2MgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgb3V0cHV0IHBwZiB0YWdfYWNjO1xuICBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBpZiBsZW4gPCAyIHRoZW4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICBlbHNlIEJ1ZmZlci5zdWIgYnVmIDEgKGxlbiAtIDIpXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICBEZWZpbmluZyBjb250aW51YXRpb25zIHRvIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgb2ZcbiAgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLlxuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxuKCogSW50ZXJwcmV0IGEgZm9ybWF0dGluZyBlbnRpdHkgb24gYSBmb3JtYXR0ZXIuICopXG5sZXQgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmbXRpbmdfbGl0ID0gbWF0Y2ggZm10aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9ib3ggcHBmICgpXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9zdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcblxubGV0IHByaW50ZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyAoRExTLmdldCBzdGRfZm9ybWF0dGVyX2tleSkgYWNjKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBlcHJpbnRmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIChETFMuZ2V0IGVycl9mb3JtYXR0ZXJfa2V5KSBhY2MpXG4gICAgRW5kX29mX2FjYyBmbXRcblxubGV0IGtkcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZlxuICAgIChmdW4gYWNjIC0+IGsgKGZ1biBwcGYgLT4gb3V0cHV0X2FjYyBwcGYgYWNjKSlcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5sZXQgZHByaW50ZiBmbXQgPSBrZHByaW50ZiAoZnVuIGkgLT4gaSkgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgc3RycHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgc3ByaW50ZiBmbXQgPSBrc3ByaW50ZiBpZCBmbXRcblxubGV0IGthc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgb3V0cHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgYXNwcmludGYgZm10ID0ga2FzcHJpbnRmIGlkIGZtdFxuXG4oKiBGbHVzaGluZyBzdGFuZGFyZCBmb3JtYXR0ZXJzIGF0IGVuZCBvZiBleGVjdXRpb24uICopXG5cbmxldCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzICgpID1cbiAgcHBfcHJpbnRfZmx1c2ggKERMUy5nZXQgc3RkX2Zvcm1hdHRlcl9rZXkpICgpO1xuICBwcF9wcmludF9mbHVzaCAoRExTLmdldCBlcnJfZm9ybWF0dGVyX2tleSkgKClcblxubGV0ICgpID0gYXRfZXhpdCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzXG5cbmxldCAoKSA9IERvbWFpbi5iZWZvcmVfZmlyc3Rfc3Bhd24gKGZ1biAoKSAtPlxuICBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzICgpO1xuICBsZXQgZnMgPSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlciAoKSBpblxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuICAgIHtmcyB3aXRoIG91dF9zdHJpbmcgPSBidWZmZXJlZF9vdXRfc3RyaW5nIHN0ZF9idWZfa2V5O1xuICAgICAgICAgICAgIG91dF9mbHVzaCA9IGJ1ZmZlcmVkX291dF9mbHVzaCBTdGRsaWIuc3Rkb3V0IHN0ZF9idWZfa2V5fTtcblxuICBsZXQgZnMgPSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgZXJyX2Zvcm1hdHRlciAoKSBpblxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgZXJyX2Zvcm1hdHRlclxuICAgIHtmcyB3aXRoIG91dF9zdHJpbmcgPSBidWZmZXJlZF9vdXRfc3RyaW5nIGVycl9idWZfa2V5O1xuICAgICAgICAgICAgIG91dF9mbHVzaCA9IGJ1ZmZlcmVkX291dF9mbHVzaCBTdGRsaWIuc3RkZXJyIGVycl9idWZfa2V5fTtcbilcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImR1bW15IiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfUXVldWUiLCJDYW1saW50ZXJuYWxGb3JtYXQiLCJTdGRsaWIiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0RvbWFpbiIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfU3RhY2siLCJTdGRsaWJfSW50IiwiU3RkbGliX0J5dGVzIiwiaWQiLCJ4IiwiU3RyaW5nX3RhZyIsInBwX2VucXVldWUiLCJzdGF0ZSIsInRva2VuIiwicHBfb3V0cHV0X3N0cmluZyIsInMiLCJwcF9vdXRwdXRfbmV3bGluZSIsImZvcm1hdF9wcF90ZXh0Iiwic2l6ZSIsInRleHQiLCJjc3QiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJwYXJhbSIsIndpZHRoIiwiYWZ0ZXIiLCJvZmZzZXQiLCJiZWZvcmUiLCJpbmRlbnQiLCJyZWFsX2luZGVudCIsIm4iLCJicmVha19zYW1lX2xpbmUiLCJmb3JtYXRfcHBfdG9rZW4iLCJtYXRjaCIsInRhYnMiLCJhZGRfdGFiIiwibHMiLCJsIiwibGVuZ3RoIiwidGFnX25hbWUiLCJtYXJrZXIiLCJicmVha3MiLCJmaXRzIiwib2ZmIiwiYm94X3R5cGUiLCJpbnNlcnRpb25fcG9pbnQiLCJmaXJzdCIsInRhYiIsInRhaWwiLCJoZWFkIiwidHkiLCJ0Ym94IiwicHBfaW5maW5pdHkiLCJhZHZhbmNlX2xlZnQiLCJwZW5kaW5nX2NvdW50IiwiZW5xdWV1ZV9hZHZhbmNlIiwidG9rIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJ1bmtub3duIiwiaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIiwic3RhY2siLCJzZXRfc2l6ZSIsInF1ZXVlX2VsZW0iLCJsZWZ0X3RvdGFsIiwic2Nhbl9wdXNoIiwiYiIsImVsZW0iLCJwcF9vcGVuX2JveF9nZW4iLCJicl90eSIsInplcm8iLCJwcF9jbG9zZV9ib3giLCJwcF9vcGVuX3N0YWciLCJwcF9jbG9zZV9zdGFnIiwicHBfc2V0X3ByaW50X3RhZ3MiLCJwcF9zZXRfbWFya190YWdzIiwicHBfZ2V0X3ByaW50X3RhZ3MiLCJwcF9nZXRfbWFya190YWdzIiwicHBfc2V0X3RhZ3MiLCJwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb24iLCJwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb24iLCJwY3QiLCJwb3QiLCJtY3QiLCJtb3QiLCJwcF9yaW5pdCIsInBwX2ZsdXNoX3F1ZXVlIiwiZW5kX3dpdGhfbmV3bGluZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYnl0ZXMiLCJwcF9wcmludF9pbnQiLCJpIiwicHBfcHJpbnRfZmxvYXQiLCJwcF9wcmludF9ib29sIiwicHBfcHJpbnRfY2hhciIsImMiLCJwcF9wcmludF9ub3RoaW5nIiwicHBfb3Blbl9oYm94IiwicHBfb3Blbl92Ym94IiwicHBfb3Blbl9odmJveCIsInBwX29wZW5faG92Ym94IiwicHBfb3Blbl9ib3giLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfaWZfbmV3bGluZSIsInBwX3ByaW50X2N1c3RvbV9icmVhayIsInBwX3ByaW50X2JyZWFrIiwicHBfcHJpbnRfc3BhY2UiLCJwcF9wcmludF9jdXQiLCJwcF9vcGVuX3Rib3giLCJwcF9jbG9zZV90Ym94IiwicHBfcHJpbnRfdGJyZWFrIiwicHBfcHJpbnRfdGFiIiwicHBfc2V0X3RhYiIsInBwX3NldF9tYXhfYm94ZXMiLCJwcF9nZXRfbWF4X2JveGVzIiwicHBfb3Zlcl9tYXhfYm94ZXMiLCJwcF9zZXRfZWxsaXBzaXNfdGV4dCIsInBwX2dldF9lbGxpcHNpc190ZXh0IiwicHBfbGltaXQiLCJwcF9zZXRfbWF4X2luZGVudCIsInBwX2dldF9tYXhfaW5kZW50IiwicHBfc2V0X21hcmdpbiIsIm5ld19tYXhfaW5kZW50IiwidmFsaWRhdGVfZ2VvbWV0cnkiLCJtYXJnaW4iLCJtYXhfaW5kZW50IiwiY2hlY2tfZ2VvbWV0cnkiLCJnZW9tZXRyeSIsInBwX2dldF9tYXJnaW4iLCJwcF9zZXRfZnVsbF9nZW9tZXRyeSIsInBwX3NldF9nZW9tZXRyeSIsIm1zZyIsInBwX3NhZmVfc2V0X2dlb21ldHJ5IiwicHBfZ2V0X2dlb21ldHJ5IiwicHBfdXBkYXRlX2dlb21ldHJ5IiwidXBkYXRlIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwiaiIsImgiLCJnIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwiZGlzcGxheV9uZXdsaW5lIiwiYmxhbmtfbGluZSIsImRpc3BsYXlfYmxhbmtzIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCIsIm9jIiwiZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnIiwiZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWciLCJkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyIsInBwX21ha2VfZm9ybWF0dGVyIiwicHBfcXVldWUiLCJzeXNfdG9rIiwic2Nhbl9zdGFjayIsInBwX21hcmdpbiIsImZvcm1hdHRlcl9vZl9vdXRfZnVuY3Rpb25zIiwib3V0X2Z1bnMiLCJtYWtlX2Zvcm1hdHRlciIsIm91dHB1dCIsImZsdXNoIiwicHBmIiwiZm9ybWF0dGVyX29mX291dF9jaGFubmVsIiwiZm9ybWF0dGVyX29mX2J1ZmZlciIsInBwX2J1ZmZlcl9zaXplIiwicHBfbWFrZV9idWZmZXIiLCJzdGRidWYiLCJzdGRfZm9ybWF0dGVyIiwiZXJyX2Zvcm1hdHRlciIsInN0cl9mb3JtYXR0ZXIiLCJzdGRidWZfa2V5Iiwic3RyX2Zvcm1hdHRlcl9rZXkiLCJidWZmZXJlZF9vdXRfc3RyaW5nIiwia2V5Iiwic3RyIiwib2ZzIiwibGVuIiwiYnVmZmVyZWRfb3V0X2ZsdXNoIiwiYnVmIiwic3RkX2J1Zl9rZXkiLCJlcnJfYnVmX2tleSIsInN0ZF9mb3JtYXR0ZXJfa2V5IiwiZXJyX2Zvcm1hdHRlcl9rZXkiLCJnZXRfc3RkX2Zvcm1hdHRlciIsImdldF9lcnJfZm9ybWF0dGVyIiwiZ2V0X3N0cl9mb3JtYXR0ZXIiLCJnZXRfc3RkYnVmIiwiZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciIsImZsdXNoX3N0cl9mb3JtYXR0ZXIiLCJtYWtlX3N5bmNocm9uaXplZF9mb3JtYXR0ZXIiLCJzeW5jaHJvbml6ZWRfZm9ybWF0dGVyX29mX291dF8iLCJtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIiLCJjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwic29iIiwiZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIiLCJmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiaXRlbXMiLCJhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0iLCJpdGVtIiwiZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9iIiwib3Blbl9oYm94IiwidiIsIm9wZW5fdmJveCIsIm9wZW5faHZib3giLCJvcGVuX2hvdmJveCIsIm9wZW5fYm94IiwiY2xvc2VfYm94Iiwib3Blbl9zdGFnIiwiY2xvc2Vfc3RhZyIsInByaW50X2FzIiwidyIsInByaW50X3N0cmluZyIsInByaW50X2J5dGVzIiwicHJpbnRfaW50IiwicHJpbnRfZmxvYXQiLCJwcmludF9jaGFyIiwicHJpbnRfYm9vbCIsInByaW50X2JyZWFrIiwicHJpbnRfY3V0IiwicHJpbnRfc3BhY2UiLCJmb3JjZV9uZXdsaW5lIiwicHJpbnRfZmx1c2giLCJwcmludF9uZXdsaW5lIiwicHJpbnRfaWZfbmV3bGluZSIsIm9wZW5fdGJveCIsImNsb3NlX3Rib3giLCJwcmludF90YnJlYWsiLCJzZXRfdGFiIiwicHJpbnRfdGFiIiwic2V0X21hcmdpbiIsImdldF9tYXJnaW4iLCJzZXRfbWF4X2luZGVudCIsImdldF9tYXhfaW5kZW50Iiwic2V0X2dlb21ldHJ5Iiwic2FmZV9zZXRfZ2VvbWV0cnkiLCJnZXRfZ2VvbWV0cnkiLCJ1cGRhdGVfZ2VvbWV0cnkiLCJzZXRfbWF4X2JveGVzIiwiZ2V0X21heF9ib3hlcyIsIm92ZXJfbWF4X2JveGVzIiwic2V0X2VsbGlwc2lzX3RleHQiLCJnZXRfZWxsaXBzaXNfdGV4dCIsInNldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwiLCJzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMiLCJnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMiLCJzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMiLCJnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMiLCJzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyIsInNldF9wcmludF90YWdzIiwiZ2V0X3ByaW50X3RhZ3MiLCJzZXRfbWFya190YWdzIiwiZ2V0X21hcmtfdGFncyIsInNldF90YWdzIiwicHBfcHJpbnRfaXRlciIsIm9wdCIsIml0ZXIiLCJwcF92IiwicHBfc2VwIiwiaXNfZmlyc3QiLCJwcF9wcmludF9saXN0IiwicHBfcHJpbnRfYXJyYXkiLCJwcF9wcmludF9zZXEiLCJzZXEiLCJwcF9wcmludF90ZXh0IiwibGVmdCIsInJpZ2h0IiwicHBfcHJpbnRfb3B0aW9uIiwibm9uZSIsInBwX3ByaW50X3Jlc3VsdCIsIm9rIiwiZXJyb3IiLCJlIiwicHBfcHJpbnRfZWl0aGVyIiwiciIsImNvbXB1dGVfdGFnIiwidGFnX2FjYyIsIm91dHB1dF9mb3JtYXR0aW5nX2xpdCIsImZtdGluZ19saXQiLCJvdXRwdXRfYWNjIiwiYWNjIiwicCIsImJ0eSIsInN0cnB1dF9hY2MiLCJrZnByaW50ZiIsImsiLCJmbXQiLCJpa2ZwcmludGYiLCJpZnByaW50ZiIsImZwcmludGYiLCJwcmludGYiLCJlcHJpbnRmIiwia2RwcmludGYiLCJkcHJpbnRmIiwia3NwcmludGYiLCJzcHJpbnRmIiwia2FzcHJpbnRmIiwiYXNwcmludGYiLCJmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzIiwiZnMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElB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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRGg5Q0QiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyODIyMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9jYWxsYmFjay5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUmVnaXN0ZXJpbmcgT0NhbWwgdmFsdWVzIHdpdGggdGhlIEMgcnVudGltZSBmb3IgbGF0ZXIgY2FsbGJhY2tzICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+IE9iai50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0IHJlZ2lzdGVyIG5hbWUgdiA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgKE9iai5yZXByIHYpXG5cbmxldCByZWdpc3Rlcl9leGNlcHRpb24gbmFtZSAoZXhuIDogZXhuKSA9XG4gIGxldCBleG4gPSBPYmoucmVwciBleG4gaW5cbiAgbGV0IHNsb3QgPSBpZiBPYmoudGFnIGV4biA9IE9iai5vYmplY3RfdGFnIHRoZW4gZXhuIGVsc2UgT2JqLmZpZWxkIGV4biAwIGluXG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgc2xvdFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIiwiU3RkbGliX09iaiIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsIm5hbWUiLCJleG4iLCJzbG90Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDRCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLG1CQUFBQyxNQUFBQztBQUFBQTtBQUFBQSxLQUFBLElDeUJnQjtBQUFBLEtBQUFDLE9BQUE7QUFBQSxJQUNkLDRDQUE4QjtBQUFBO0FBQUEsR0QxQmhDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjgyNDYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZmlsZW5hbWUubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgWGF2aWVyIExlcm95IGFuZCBEYW1pZW4gRG9saWdleiwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmxldCBnZW5lcmljX3F1b3RlIHF1b3RlcXVvdGUgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAobCArIDIwKSBpblxuICBCdWZmZXIuYWRkX2NoYXIgYiAnXFwnJztcbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgaWYgcy5baV0gPSAnXFwnJ1xuICAgIHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBxdW90ZXF1b3RlXG4gICAgZWxzZSBCdWZmZXIuYWRkX2NoYXIgYiAgcy5baV1cbiAgZG9uZTtcbiAgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcJyc7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbigqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgT3BlbiBHcm91cCBzcGVjaWZpY2F0aW9uIGZvdW5kIGhlcmU6XG4gIFtbMV1dIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9iYXNlbmFtZS5odG1sXG4gIEluIHN0ZXAgMSBvZiBbWzFdXSwgd2UgY2hvb3NlIHRvIHJldHVybiBcIi5cIiBmb3IgZW1wdHkgaW5wdXQuXG4gICAgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgT0NhbWwpXG4gIEluIHN0ZXAgMiwgd2UgY2hvb3NlIHRvIHByb2Nlc3MgXCIvL1wiIG5vcm1hbGx5LlxuICBTdGVwIDYgaXMgbm90IGltcGxlbWVudGVkOiB3ZSBjb25zaWRlciB0aGF0IHRoZSBbc3VmZml4XSBvcGVyYW5kIGlzXG4gICAgYWx3YXlzIGFic2VudC4gIFN1ZmZpeGVzIGFyZSBoYW5kbGVkIGJ5IFtjaG9wX3N1ZmZpeF0gYW5kIFtjaG9wX2V4dGVuc2lvbl0uXG4qKVxubGV0IGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lIG5hbWUgPVxuICBsZXQgcmVjIGZpbmRfZW5kIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBmaW5kX2VuZCAobiAtIDEpXG4gICAgZWxzZSBmaW5kX2JlZyBuIChuICsgMSlcbiAgYW5kIGZpbmRfYmVnIG4gcCA9XG4gICAgaWYgbiA8IDAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCBwXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIFN0cmluZy5zdWIgbmFtZSAobiArIDEpIChwIC0gbiAtIDEpXG4gICAgZWxzZSBmaW5kX2JlZyAobiAtIDEpIHBcbiAgaW5cbiAgaWYgbmFtZSA9IFwiXCJcbiAgdGhlbiBjdXJyZW50X2Rpcl9uYW1lXG4gIGVsc2UgZmluZF9lbmQgKFN0cmluZy5sZW5ndGggbmFtZSAtIDEpXG5cbigqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgT3BlbiBHcm91cCBzcGVjaWZpY2F0aW9uIGZvdW5kIGhlcmU6XG4gIFtbMl1dIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9kaXJuYW1lLmh0bWxcbiAgSW4gc3RlcCA2IG9mIFtbMl1dLCB3ZSBjaG9vc2UgdG8gcHJvY2VzcyBcIi8vXCIgbm9ybWFsbHkuXG4qKVxubGV0IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWUgbmFtZSA9XG4gIGxldCByZWMgdHJhaWxpbmdfc2VwIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiB0cmFpbGluZ19zZXAgKG4gLSAxKVxuICAgIGVsc2UgYmFzZSBuXG4gIGFuZCBiYXNlIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gY3VycmVudF9kaXJfbmFtZVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBpbnRlcm1lZGlhdGVfc2VwIG5cbiAgICBlbHNlIGJhc2UgKG4gLSAxKVxuICBhbmQgaW50ZXJtZWRpYXRlX3NlcCBuID1cbiAgICBpZiBuIDwgMCB0aGVuIFN0cmluZy5zdWIgbmFtZSAwIDFcbiAgICBlbHNlIGlmIGlzX2Rpcl9zZXAgbmFtZSBuIHRoZW4gaW50ZXJtZWRpYXRlX3NlcCAobiAtIDEpXG4gICAgZWxzZSBTdHJpbmcuc3ViIG5hbWUgMCAobiArIDEpXG4gIGluXG4gIGlmIG5hbWUgPSBcIlwiXG4gIHRoZW4gY3VycmVudF9kaXJfbmFtZVxuICBlbHNlIHRyYWlsaW5nX3NlcCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gMSlcblxubW9kdWxlIHR5cGUgU1lTREVQUyA9IHNpZ1xuICB2YWwgbnVsbCA6IHN0cmluZ1xuICB2YWwgY3VycmVudF9kaXJfbmFtZSA6IHN0cmluZ1xuICB2YWwgcGFyZW50X2Rpcl9uYW1lIDogc3RyaW5nXG4gIHZhbCBkaXJfc2VwIDogc3RyaW5nXG4gIHZhbCBpc19kaXJfc2VwIDogc3RyaW5nIC0+IGludCAtPiBib29sXG4gIHZhbCBpc19yZWxhdGl2ZSA6IHN0cmluZyAtPiBib29sXG4gIHZhbCBpc19pbXBsaWNpdCA6IHN0cmluZyAtPiBib29sXG4gIHZhbCBjaGVja19zdWZmaXggOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2xcbiAgdmFsIGNob3Bfc3VmZml4X29wdCA6IHN1ZmZpeDpzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb25cbiAgdmFsIHRlbXBfZGlyX25hbWUgOiBzdHJpbmdcbiAgdmFsIHF1b3RlIDogc3RyaW5nIC0+IHN0cmluZ1xuICB2YWwgcXVvdGVfY29tbWFuZCA6XG4gICAgc3RyaW5nIC0+ID9zdGRpbjogc3RyaW5nIC0+ID9zdGRvdXQ6IHN0cmluZyAtPiA/c3RkZXJyOiBzdHJpbmdcbiAgICAgICAgICAgLT4gc3RyaW5nIGxpc3QgLT4gc3RyaW5nXG4gIHZhbCBiYXNlbmFtZSA6IHN0cmluZyAtPiBzdHJpbmdcbiAgdmFsIGRpcm5hbWUgOiBzdHJpbmcgLT4gc3RyaW5nXG5lbmRcblxubW9kdWxlIFVuaXggOiBTWVNERVBTID0gc3RydWN0XG4gIGxldCBudWxsID0gXCIvZGV2L251bGxcIlxuICBsZXQgY3VycmVudF9kaXJfbmFtZSA9IFwiLlwiXG4gIGxldCBwYXJlbnRfZGlyX25hbWUgPSBcIi4uXCJcbiAgbGV0IGRpcl9zZXAgPSBcIi9cIlxuICBsZXQgaXNfZGlyX3NlcCBzIGkgPSBzLltpXSA9ICcvJ1xuICBsZXQgaXNfcmVsYXRpdmUgbiA9IFN0cmluZy5sZW5ndGggbiA8IDEgfHwgbi5bMF0gPD4gJy8nXG4gIGxldCBpc19pbXBsaWNpdCBuID1cbiAgICBpc19yZWxhdGl2ZSBuXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgU3RyaW5nLnN1YiBuIDAgMiA8PiBcIi4vXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDMgfHwgU3RyaW5nLnN1YiBuIDAgMyA8PiBcIi4uL1wiKVxuICBsZXQgY2hlY2tfc3VmZml4IG5hbWUgc3VmZiA9XG4gICAgU3RyaW5nLmVuZHNfd2l0aCB+c3VmZml4OnN1ZmYgbmFtZVxuXG4gIGxldCBjaG9wX3N1ZmZpeF9vcHQgfnN1ZmZpeCBmaWxlbmFtZSA9XG4gICAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzdWZmaXggYW5kIGxlbl9mID0gU3RyaW5nLmxlbmd0aCBmaWxlbmFtZSBpblxuICAgIGlmIGxlbl9mID49IGxlbl9zIHRoZW5cbiAgICAgIGxldCByID0gU3RyaW5nLnN1YiBmaWxlbmFtZSAobGVuX2YgLSBsZW5fcykgbGVuX3MgaW5cbiAgICAgIGlmIHIgPSBzdWZmaXggdGhlblxuICAgICAgICBTb21lIChTdHJpbmcuc3ViIGZpbGVuYW1lIDAgKGxlbl9mIC0gbGVuX3MpKVxuICAgICAgZWxzZVxuICAgICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG4gIGxldCB0ZW1wX2Rpcl9uYW1lID1cbiAgICB0cnkgU3lzLmdldGVudiBcIlRNUERJUlwiIHdpdGggTm90X2ZvdW5kIC0+IFwiL3RtcFwiXG4gIGxldCBxdW90ZSA9IGdlbmVyaWNfcXVvdGUgXCInXFxcXCcnXCJcbiAgbGV0IHF1b3RlX2NvbW1hbmQgY21kID9zdGRpbiA/c3Rkb3V0ID9zdGRlcnIgYXJncyA9XG4gICAgU3RyaW5nLmNvbmNhdCBcIiBcIiAoTGlzdC5tYXAgcXVvdGUgKGNtZCA6OiBhcmdzKSlcbiAgICBeIChtYXRjaCBzdGRpbiAgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPFwiIF4gcXVvdGUgZilcbiAgICBeIChtYXRjaCBzdGRvdXQgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPlwiIF4gcXVvdGUgZilcbiAgICBeIChtYXRjaCBzdGRlcnIgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gaWYgc3RkZXJyID0gc3Rkb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIFwiIDI+JjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBcIiAyPlwiIF4gcXVvdGUgZilcbiAgbGV0IGJhc2VuYW1lID0gZ2VuZXJpY19iYXNlbmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWVcbiAgbGV0IGRpcm5hbWUgPSBnZW5lcmljX2Rpcm5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lXG5lbmRcblxubW9kdWxlIFdpbjMyIDogU1lTREVQUyA9IHN0cnVjdFxuICBsZXQgbnVsbCA9IFwiTlVMXCJcbiAgbGV0IGN1cnJlbnRfZGlyX25hbWUgPSBcIi5cIlxuICBsZXQgcGFyZW50X2Rpcl9uYW1lID0gXCIuLlwiXG4gIGxldCBkaXJfc2VwID0gXCJcXFxcXCJcbiAgbGV0IGlzX2Rpcl9zZXAgcyBpID0gbGV0IGMgPSBzLltpXSBpbiBjID0gJy8nIHx8IGMgPSAnXFxcXCcgfHwgYyA9ICc6J1xuICBsZXQgaXNfcmVsYXRpdmUgbiA9XG4gICAgKFN0cmluZy5sZW5ndGggbiA8IDEgfHwgbi5bMF0gPD4gJy8nKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAxIHx8IG4uWzBdIDw+ICdcXFxcJylcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBuLlsxXSA8PiAnOicpXG4gIGxldCBpc19pbXBsaWNpdCBuID1cbiAgICBpc19yZWxhdGl2ZSBuXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgU3RyaW5nLnN1YiBuIDAgMiA8PiBcIi4vXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgU3RyaW5nLnN1YiBuIDAgMiA8PiBcIi5cXFxcXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDMgfHwgU3RyaW5nLnN1YiBuIDAgMyA8PiBcIi4uL1wiKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAzIHx8IFN0cmluZy5zdWIgbiAwIDMgPD4gXCIuLlxcXFxcIilcbiAgbGV0IGNoZWNrX3N1ZmZpeCBuYW1lIHN1ZmYgPVxuICAgU3RyaW5nLmxlbmd0aCBuYW1lID49IFN0cmluZy5sZW5ndGggc3VmZiAmJlxuICAgKGxldCBzID0gU3RyaW5nLnN1YiBuYW1lIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBTdHJpbmcubGVuZ3RoIHN1ZmYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0cmluZy5sZW5ndGggc3VmZikgaW5cbiAgICBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHMgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHN1ZmYpXG5cbiAgbGV0IGNob3Bfc3VmZml4X29wdCB+c3VmZml4IGZpbGVuYW1lID1cbiAgICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHN1ZmZpeCBhbmQgbGVuX2YgPSBTdHJpbmcubGVuZ3RoIGZpbGVuYW1lIGluXG4gICAgaWYgbGVuX2YgPj0gbGVuX3MgdGhlblxuICAgICAgbGV0IHIgPSBTdHJpbmcuc3ViIGZpbGVuYW1lIChsZW5fZiAtIGxlbl9zKSBsZW5fcyBpblxuICAgICAgaWYgU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSByID0gU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSBzdWZmaXggdGhlblxuICAgICAgICBTb21lIChTdHJpbmcuc3ViIGZpbGVuYW1lIDAgKGxlbl9mIC0gbGVuX3MpKVxuICAgICAgZWxzZVxuICAgICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5cbiAgbGV0IHRlbXBfZGlyX25hbWUgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiVEVNUFwiIHdpdGggTm90X2ZvdW5kIC0+IFwiLlwiXG4gIGxldCBxdW90ZSBzID1cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAobCArIDIwKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBiICdcXFwiJztcbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbCB0aGVuIEJ1ZmZlci5hZGRfY2hhciBiICdcXFwiJyBlbHNlXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICdcXFwiJyAtPiBsb29wX2JzIDAgaTtcbiAgICAgIHwgJ1xcXFwnIC0+IGxvb3BfYnMgMCBpO1xuICAgICAgfCBjICAgIC0+IEJ1ZmZlci5hZGRfY2hhciBiIGM7IGxvb3AgKGkrMSk7XG4gICAgYW5kIGxvb3BfYnMgbiBpID1cbiAgICAgIGlmIGkgPSBsIHRoZW4gYmVnaW5cbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInO1xuICAgICAgICBhZGRfYnMgbjtcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICAgfCAnXFxcIicgLT4gYWRkX2JzICgyKm4rMSk7IEJ1ZmZlci5hZGRfY2hhciBiICdcXFwiJzsgbG9vcCAoaSsxKTtcbiAgICAgICAgfCAnXFxcXCcgLT4gbG9vcF9icyAobisxKSAoaSsxKTtcbiAgICAgICAgfCBfICAgIC0+IGFkZF9icyBuOyBsb29wIGlcbiAgICAgIGVuZFxuICAgIGFuZCBhZGRfYnMgbiA9IGZvciBfaiA9IDEgdG8gbiBkbyBCdWZmZXIuYWRkX2NoYXIgYiAnXFxcXCc7IGRvbmVcbiAgICBpblxuICAgIGxvb3AgMDtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuKCpcblF1b3RpbmcgY29tbWFuZHMgZm9yIGV4ZWN1dGlvbiBieSBjbWQuZXhlIGlzIGRpZmZpY3VsdC5cbjEtIEVhY2ggYXJndW1lbnQgaXMgZmlyc3QgcXVvdGVkIHVzaW5nIHRoZSBcInF1b3RlXCIgZnVuY3Rpb24gYWJvdmUsIHRvXG4gICBwcm90ZWN0IGl0IGFnYWluc3QgdGhlIHByb2Nlc3NpbmcgcGVyZm9ybWVkIGJ5IHRoZSBDIHJ1bnRpbWUgc3lzdGVtLFxuICAgdGhlbiBjbWQuZXhlJ3Mgc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIHdpdGggJ14nLCB1c2luZ1xuICAgdGhlIFwicXVvdGVfY21kXCIgZnVuY3Rpb24gYmVsb3cuICBGb3IgbW9yZSBkZXRhaWxzLCBzZWVcbiAgIGh0dHBzOi8vYmxvZ3MubXNkbi5taWNyb3NvZnQuY29tL3R3aXN0eWxpdHRsZXBhc3NhZ2VzYWxsYWxpa2UvMjAxMS8wNC8yM1xuMi0gVGhlIGNvbW1hbmQgYW5kIHRoZSByZWRpcmVjdGlvbiBmaWxlcywgaWYgYW55LCBtdXN0IGJlIGRvdWJsZS1xdW90ZWRcbiAgIGluIGNhc2UgdGhleSBjb250YWluIHNwYWNlcy4gIFRoaXMgcXVvdGluZyBpcyBpbnRlcnByZXRlZCBieSBjbWQuZXhlLFxuICAgbm90IGJ5IHRoZSBDIHJ1bnRpbWUgc3lzdGVtLCBoZW5jZSB0aGUgXCJxdW90ZVwiIGZ1bmN0aW9uIGFib3ZlXG4gICBjYW5ub3QgYmUgdXNlZC4gIFRoZSB0d28gY2hhcmFjdGVycyB3ZSBkb24ndCBrbm93IGhvdyB0byBxdW90ZVxuICAgaW5zaWRlIGEgZG91YmxlLXF1b3RlZCBjbWQuZXhlIHN0cmluZyBhcmUgZG91YmxlLXF1b3RlIGFuZCBwZXJjZW50LlxuICAgV2UganVzdCBmYWlsIGlmIHRoZSBjb21tYW5kIG5hbWUgb3IgdGhlIHJlZGlyZWN0aW9uIGZpbGUgbmFtZXNcbiAgIGNvbnRhaW4gYSBkb3VibGUgcXVvdGUgKG5vdCBhbGxvd2VkIGluIFdpbmRvd3MgZmlsZSBuYW1lcywgYW55d2F5KVxuICAgb3IgYSBwZXJjZW50LiAgU2VlIGZ1bmN0aW9uIFwicXVvdGVfY21kX2ZpbGVuYW1lXCIgYmVsb3cuXG4zLSBUaGUgd2hvbGUgc3RyaW5nIHBhc3NlZCB0byBTeXMuY29tbWFuZCBpcyB0aGVuIGVuY2xvc2VkIGluIGRvdWJsZVxuICAgcXVvdGVzLCB3aGljaCBhcmUgaW1tZWRpYXRlbHkgc3RyaXBwZWQgYnkgY21kLmV4ZS4gIE90aGVyd2lzZSxcbiAgIHNvbWUgb2YgdGhlIGRvdWJsZSBxdW90ZXMgZnJvbSBzdGVwIDIgYWJvdmUgY2FuIGJlIG1pc3BhcnNlZC5cbiAgIFNlZSBlLmcuIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85OTY1MTQxXG4qKVxuICBsZXQgcXVvdGVfY21kIHMgPVxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzICsgMjApIGluXG4gICAgU3RyaW5nLml0ZXJcbiAgICAgIChmdW4gYyAtPlxuICAgICAgICBtYXRjaCBjIHdpdGhcbiAgICAgICAgfCAnKCcgfCAnKScgfCAnIScgfCAnXicgfCAnJScgfCAnXFxcIicgfCAnPCcgfCAnPicgfCAnJicgfCAnfCcgLT5cbiAgICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciBiICdeJzsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciBiIGMpXG4gICAgICBzO1xuICAgIEJ1ZmZlci5jb250ZW50cyBiXG4gIGxldCBxdW90ZV9jbWRfZmlsZW5hbWUgZiA9XG4gICAgaWYgU3RyaW5nLmV4aXN0cyAoZnVuY3Rpb24gJ1xcXCInIHwgJyUnIC0+IHRydWUgfCBfIC0+IGZhbHNlKSBmIHRoZW5cbiAgICAgIGZhaWx3aXRoIChcIkZpbGVuYW1lLnF1b3RlX2NvbW1hbmQ6IGJhZCBmaWxlIG5hbWUgXCIgXiBmKVxuICAgIGVsc2UgaWYgU3RyaW5nLmNvbnRhaW5zIGYgJyAnIHRoZW5cbiAgICAgIFN0cmluZy5jb25jYXQgXCJcIiBbXCJcXFwiXCI7IGY7IFwiXFxcIlwiXVxuICAgIGVsc2VcbiAgICAgIGZcbiAgKCogUmVkaXJlY3Rpb25zIGluIGNtZC5leGU6IHNlZSBodHRwczovL3NzNjQuY29tL250L3N5bnRheC1yZWRpcmVjdGlvbi5odG1sXG4gICAgIGFuZCBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9wcmV2aW91cy12ZXJzaW9ucy93aW5kb3dzL2l0LXByby93aW5kb3dzLXhwL2JiNDkwOTgyKHY9dGVjaG5ldC4xMClcbiAgKilcbiAgbGV0IHF1b3RlX2NvbW1hbmQgY21kID9zdGRpbiA/c3Rkb3V0ID9zdGRlcnIgYXJncyA9XG4gICAgU3RyaW5nLmNvbmNhdCBcIlwiIFtcbiAgICAgIFwiXFxcIlwiO1xuICAgICAgcXVvdGVfY21kX2ZpbGVuYW1lIGNtZDtcbiAgICAgIFwiIFwiO1xuICAgICAgcXVvdGVfY21kIChTdHJpbmcuY29uY2F0IFwiIFwiIChMaXN0Lm1hcCBxdW90ZSBhcmdzKSk7XG4gICAgICAobWF0Y2ggc3RkaW4gIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSBmIC0+IFwiIDxcIiBeIHF1b3RlX2NtZF9maWxlbmFtZSBmKTtcbiAgICAgIChtYXRjaCBzdGRvdXQgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPlwiIF4gcXVvdGVfY21kX2ZpbGVuYW1lIGYpO1xuICAgICAgKG1hdGNoIHN0ZGVyciB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN0ZGVyciA9IHN0ZG91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gXCIgMj4mMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBcIiAyPlwiIF4gcXVvdGVfY21kX2ZpbGVuYW1lIGYpO1xuICAgICAgXCJcXFwiXCJcbiAgICBdXG4gIGxldCBoYXNfZHJpdmUgcyA9XG4gICAgbGV0IGlzX2xldHRlciA9IGZ1bmN0aW9uXG4gICAgICB8ICdBJyAuLiAnWicgfCAnYScgLi4gJ3onIC0+IHRydWVcbiAgICAgIHwgXyAtPiBmYWxzZVxuICAgIGluXG4gICAgU3RyaW5nLmxlbmd0aCBzID49IDIgJiYgaXNfbGV0dGVyIHMuWzBdICYmIHMuWzFdID0gJzonXG4gIGxldCBkcml2ZV9hbmRfcGF0aCBzID1cbiAgICBpZiBoYXNfZHJpdmUgc1xuICAgIHRoZW4gKFN0cmluZy5zdWIgcyAwIDIsIFN0cmluZy5zdWIgcyAyIChTdHJpbmcubGVuZ3RoIHMgLSAyKSlcbiAgICBlbHNlIChcIlwiLCBzKVxuICBsZXQgZGlybmFtZSBzID1cbiAgICBsZXQgKGRyaXZlLCBwYXRoKSA9IGRyaXZlX2FuZF9wYXRoIHMgaW5cbiAgICBsZXQgZGlyID0gZ2VuZXJpY19kaXJuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZSBwYXRoIGluXG4gICAgZHJpdmUgXiBkaXJcbiAgbGV0IGJhc2VuYW1lIHMgPVxuICAgIGxldCAoX2RyaXZlLCBwYXRoKSA9IGRyaXZlX2FuZF9wYXRoIHMgaW5cbiAgICBnZW5lcmljX2Jhc2VuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZSBwYXRoXG5lbmRcblxubW9kdWxlIEN5Z3dpbiA6IFNZU0RFUFMgPSBzdHJ1Y3RcbiAgbGV0IG51bGwgPSBcIi9kZXYvbnVsbFwiXG4gIGxldCBjdXJyZW50X2Rpcl9uYW1lID0gXCIuXCJcbiAgbGV0IHBhcmVudF9kaXJfbmFtZSA9IFwiLi5cIlxuICBsZXQgZGlyX3NlcCA9IFwiL1wiXG4gIGxldCBpc19kaXJfc2VwID0gV2luMzIuaXNfZGlyX3NlcFxuICBsZXQgaXNfcmVsYXRpdmUgPSBXaW4zMi5pc19yZWxhdGl2ZVxuICBsZXQgaXNfaW1wbGljaXQgPSBXaW4zMi5pc19pbXBsaWNpdFxuICBsZXQgY2hlY2tfc3VmZml4ID0gV2luMzIuY2hlY2tfc3VmZml4XG4gIGxldCBjaG9wX3N1ZmZpeF9vcHQgPSBXaW4zMi5jaG9wX3N1ZmZpeF9vcHRcbiAgbGV0IHRlbXBfZGlyX25hbWUgPSBVbml4LnRlbXBfZGlyX25hbWVcbiAgbGV0IHF1b3RlID0gVW5peC5xdW90ZVxuICBsZXQgcXVvdGVfY29tbWFuZCA9IFVuaXgucXVvdGVfY29tbWFuZFxuICBsZXQgYmFzZW5hbWUgPSBnZW5lcmljX2Jhc2VuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZVxuICBsZXQgZGlybmFtZSA9IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWVcbmVuZFxuXG5tb2R1bGUgU3lzZGVwcyA9XG4gICh2YWwgKG1hdGNoIFN5cy5vc190eXBlIHdpdGhcbiAgICAgICB8IFwiV2luMzJcIiAtPiAobW9kdWxlIFdpbjMyOiBTWVNERVBTKVxuICAgICAgIHwgXCJDeWd3aW5cIiAtPiAobW9kdWxlIEN5Z3dpbjogU1lTREVQUylcbiAgICAgICB8IF8gLT4gKG1vZHVsZSBVbml4OiBTWVNERVBTKSkpXG5cbmluY2x1ZGUgU3lzZGVwc1xuXG5sZXQgY29uY2F0IGRpcm5hbWUgZmlsZW5hbWUgPVxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggZGlybmFtZSBpblxuICBpZiBsID0gMCB8fCBpc19kaXJfc2VwIGRpcm5hbWUgKGwtMSlcbiAgdGhlbiBkaXJuYW1lIF4gZmlsZW5hbWVcbiAgZWxzZSBkaXJuYW1lIF4gZGlyX3NlcCBeIGZpbGVuYW1lXG5cbmxldCBjaG9wX3N1ZmZpeCBuYW1lIHN1ZmYgPVxuICBpZiBjaGVja19zdWZmaXggbmFtZSBzdWZmXG4gIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgKFN0cmluZy5sZW5ndGggbmFtZSAtIFN0cmluZy5sZW5ndGggc3VmZilcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkZpbGVuYW1lLmNob3Bfc3VmZml4XCJcblxubGV0IGV4dGVuc2lvbl9sZW4gbmFtZSA9XG4gIGxldCByZWMgY2hlY2sgaTAgaSA9XG4gICAgaWYgaSA8IDAgfHwgaXNfZGlyX3NlcCBuYW1lIGkgdGhlbiAwXG4gICAgZWxzZSBpZiBuYW1lLltpXSA9ICcuJyB0aGVuIGNoZWNrIGkwIChpIC0gMSlcbiAgICBlbHNlIFN0cmluZy5sZW5ndGggbmFtZSAtIGkwXG4gIGluXG4gIGxldCByZWMgc2VhcmNoX2RvdCBpID1cbiAgICBpZiBpIDwgMCB8fCBpc19kaXJfc2VwIG5hbWUgaSB0aGVuIDBcbiAgICBlbHNlIGlmIG5hbWUuW2ldID0gJy4nIHRoZW4gY2hlY2sgaSAoaSAtIDEpXG4gICAgZWxzZSBzZWFyY2hfZG90IChpIC0gMSlcbiAgaW5cbiAgc2VhcmNoX2RvdCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gMSlcblxubGV0IGV4dGVuc2lvbiBuYW1lID1cbiAgbGV0IGwgPSBleHRlbnNpb25fbGVuIG5hbWUgaW5cbiAgaWYgbCA9IDAgdGhlbiBcIlwiIGVsc2UgU3RyaW5nLnN1YiBuYW1lIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBsKSBsXG5cbmxldCBjaG9wX2V4dGVuc2lvbiBuYW1lID1cbiAgbGV0IGwgPSBleHRlbnNpb25fbGVuIG5hbWUgaW5cbiAgaWYgbCA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZpbGVuYW1lLmNob3BfZXh0ZW5zaW9uXCJcbiAgZWxzZSBTdHJpbmcuc3ViIG5hbWUgMCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gbClcblxubGV0IHJlbW92ZV9leHRlbnNpb24gbmFtZSA9XG4gIGxldCBsID0gZXh0ZW5zaW9uX2xlbiBuYW1lIGluXG4gIGlmIGwgPSAwIHRoZW4gbmFtZSBlbHNlIFN0cmluZy5zdWIgbmFtZSAwIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBsKVxuXG5leHRlcm5hbCBvcGVuX2Rlc2M6IHN0cmluZyAtPiBvcGVuX2ZsYWcgbGlzdCAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX3N5c19vcGVuXCJcbmV4dGVybmFsIGNsb3NlX2Rlc2M6IGludCAtPiB1bml0ID0gXCJjYW1sX3N5c19jbG9zZVwiXG5cbmxldCBwcm5nX2tleSA9XG4gIERvbWFpbi5ETFMubmV3X2tleSBSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXRcblxubGV0IHRlbXBfZmlsZV9uYW1lIHRlbXBfZGlyIHByZWZpeCBzdWZmaXggPVxuICBsZXQgcmFuZG9tX3N0YXRlID0gRG9tYWluLkRMUy5nZXQgcHJuZ19rZXkgaW5cbiAgbGV0IHJuZCA9IChSYW5kb20uU3RhdGUuYml0cyByYW5kb21fc3RhdGUpIGxhbmQgMHhGRkZGRkYgaW5cbiAgY29uY2F0IHRlbXBfZGlyIChQcmludGYuc3ByaW50ZiBcIiVzJTA2eCVzXCIgcHJlZml4IHJuZCBzdWZmaXgpXG5cbmxldCBjdXJyZW50X3RlbXBfZGlyX25hbWUgPVxuICBEb21haW4uRExTLm5ld19rZXkgfnNwbGl0X2Zyb21fcGFyZW50OkZ1bi5pZCAoZnVuICgpIC0+IHRlbXBfZGlyX25hbWUpXG5cbmxldCBzZXRfdGVtcF9kaXJfbmFtZSBzID0gRG9tYWluLkRMUy5zZXQgY3VycmVudF90ZW1wX2Rpcl9uYW1lIHNcbmxldCBnZXRfdGVtcF9kaXJfbmFtZSAoKSA9IERvbWFpbi5ETFMuZ2V0IGN1cnJlbnRfdGVtcF9kaXJfbmFtZVxuXG5sZXQgdGVtcF9maWxlID8odGVtcF9kaXIgPSBEb21haW4uRExTLmdldCBjdXJyZW50X3RlbXBfZGlyX25hbWUpIHByZWZpeCBzdWZmaXggPVxuICBsZXQgcmVjIHRyeV9uYW1lIGNvdW50ZXIgPVxuICAgIGxldCBuYW1lID0gdGVtcF9maWxlX25hbWUgdGVtcF9kaXIgcHJlZml4IHN1ZmZpeCBpblxuICAgIHRyeVxuICAgICAgY2xvc2VfZGVzYyhvcGVuX2Rlc2MgbmFtZSBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fZXhjbF0gMG82MDApO1xuICAgICAgbmFtZVxuICAgIHdpdGggU3lzX2Vycm9yIF8gYXMgZSAtPlxuICAgICAgaWYgY291bnRlciA+PSAyMCB0aGVuIHJhaXNlIGUgZWxzZSB0cnlfbmFtZSAoY291bnRlciArIDEpXG4gIGluIHRyeV9uYW1lIDBcblxubGV0IG9wZW5fdGVtcF9maWxlID8obW9kZSA9IFtPcGVuX3RleHRdKSA/KHBlcm1zID0gMG82MDApXG4gICAgPyh0ZW1wX2RpciA9IERvbWFpbi5ETFMuZ2V0IGN1cnJlbnRfdGVtcF9kaXJfbmFtZSlcbiAgICBwcmVmaXggc3VmZml4ID1cbiAgbGV0IHJlYyB0cnlfbmFtZSBjb3VudGVyID1cbiAgICBsZXQgbmFtZSA9IHRlbXBfZmlsZV9uYW1lIHRlbXBfZGlyIHByZWZpeCBzdWZmaXggaW5cbiAgICB0cnlcbiAgICAgIChuYW1lLFxuICAgICAgIG9wZW5fb3V0X2dlbiAoT3Blbl93cm9ubHk6Ok9wZW5fY3JlYXQ6Ok9wZW5fZXhjbDo6bW9kZSkgcGVybXMgbmFtZSlcbiAgICB3aXRoIFN5c19lcnJvciBfIGFzIGUgLT5cbiAgICAgIGlmIGNvdW50ZXIgPj0gMjAgdGhlbiByYWlzZSBlIGVsc2UgdHJ5X25hbWUgKGNvdW50ZXIgKyAxKVxuICBpbiB0cnlfbmFtZSAwXG5cbmxldCB0ZW1wX2RpciA/KHRlbXBfZGlyID0gRG9tYWluLkRMUy5nZXQgY3VycmVudF90ZW1wX2Rpcl9uYW1lKVxuICAgID8ocGVybXMgPSAwbzcwMCkgcHJlZml4IHN1ZmZpeCA9XG4gIGxldCByZWMgdHJ5X25hbWUgY291bnRlciA9XG4gICAgbGV0IG5hbWUgPSB0ZW1wX2ZpbGVfbmFtZSB0ZW1wX2RpciBwcmVmaXggc3VmZml4IGluXG4gICAgdHJ5XG4gICAgICBTeXMubWtkaXIgbmFtZSBwZXJtcztcbiAgICAgIG5hbWVcbiAgICB3aXRoIFN5c19lcnJvciBfIGFzIGUgLT5cbiAgICAgIGlmIGNvdW50ZXIgPj0gMjAgdGhlbiByYWlzZSBlIGVsc2UgdHJ5X25hbWUgKGNvdW50ZXIgKyAxKVxuICBpbiB0cnlfbmFtZSAwXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZXF1YWwiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N5c19nZXRlbnYiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX3RyYW1wb2xpbmVfcmV0dXJuIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9Eb21haW4iLCJTdGRsaWJfUmFuZG9tIiwiU3RkbGliX1ByaW50ZiIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfU3lzIiwiY3N0IiwiZ2VuZXJpY19iYXNlbmFtZSIsImlzX2Rpcl9zZXAiLCJjdXJyZW50X2Rpcl9uYW1lIiwibmFtZSIsIm4iLCJwIiwiZ2VuZXJpY19kaXJuYW1lIiwicyIsImkiLCJpc19yZWxhdGl2ZSIsImlzX2ltcGxpY2l0IiwiY2hlY2tfc3VmZml4Iiwic3VmZiIsImNob3Bfc3VmZml4X29wdCIsInN1ZmZpeCIsImZpbGVuYW1lIiwibGVuX3MiLCJsZW5fZiIsInIiLCJkdW1teSIsInRlbXBfZGlyX25hbWUiLCJleG4iLCJxdW90ZSIsImwiLCJiIiwiY3N0XzIiLCJjc3RfMl8xIiwicXVvdGVfY29tbWFuZCIsImNtZCIsInN0ZGluIiwic3Rkb3V0Iiwic3RkZXJyIiwiYXJncyIsImJhc2VuYW1lIiwiZGlybmFtZSIsImNzdF9kZXZfbnVsbCIsIlVuaXgiLCJjIiwibG9vcCIsImNvdW50ZXIiLCJsb29wX2JzIiwibWF0Y2giLCJhZGRfYnMiLCJqIiwicXVvdGVfY21kX2ZpbGVuYW1lIiwicGFyYW0iLCJkcml2ZV9hbmRfcGF0aCIsInBhdGgiLCJkcml2ZSIsImRpciIsIldpbjMyIiwiQ3lnd2luIiwiU3lzZGVwcyIsIm51bGwkIiwicGFyZW50X2Rpcl9uYW1lIiwiZGlyX3NlcCIsImNvbmNhdCIsImNob3Bfc3VmZml4IiwiZXh0ZW5zaW9uX2xlbiIsImkwIiwiZXh0ZW5zaW9uIiwiY2hvcF9leHRlbnNpb24iLCJyZW1vdmVfZXh0ZW5zaW9uIiwicHJuZ19rZXkiLCJ0ZW1wX2ZpbGVfbmFtZSIsInRlbXBfZGlyIiwicHJlZml4IiwicmFuZG9tX3N0YXRlIiwicm5kIiwiY3VycmVudF90ZW1wX2Rpcl9uYW1lIiwic2V0X3RlbXBfZGlyX25hbWUiLCJnZXRfdGVtcF9kaXJfbmFtZSIsInRlbXBfZmlsZSIsIm9wdCIsImUiLCJvcGVuX3RlbXBfZmlsZSIsIm1vZGUiLCJwZXJtcyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLFlBQUFDLGlCQUFBQyxZQUFBQyxrQkFBQUM7QUFBQUEsSUM2Q2MsaUJBQ1A7QUFBQSxRQUFBQyxNQUNBLHFDQUFBQSxJQUFBO0FBQUE7QUFBQSxLQVZILFVBQWMsK0NBVXNCO0FBQUEsS0FUNUI7QUFBQSxTQUFBQSxNQUF1QjtB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eEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyODk2OCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSJdLCJuYW1lcyI6WyJydW50aW1lIiwiU3RkbGliX0xpc3QiLCJsZW5ndGgiLCJjb21wYXJlX2xlbmd0aHMiLCJjb21wYXJlX2xlbmd0aF93aXRoIiwiaXNfZW1wdHkiLCJjb25zIiwiaGQiLCJ0bCIsIm50aCIsIm50aF9vcHQiLCJyZXYiLCJpbml0IiwiYXBwZW5kIiwicmV2X2FwcGVuZCIsImNvbmNhdCIsImZsYXR0ZW4iLCJlcXVhbCIsImNvbXBhcmUiLCJpdGVyIiwiaXRlcmkiLCJtYXAiLCJtYXBpIiwicmV2X21hcCIsImZpbHRlcl9tYXAiLCJjb25jYXRfbWFwIiwiZm9sZF9sZWZ0X21hcCIsImZvbGRfbGVmdCIsImZvbGRfcmlnaHQiLCJpdGVyMiIsIm1hcDIiLCJyZXZfbWFwMiIsImZvbGRfbGVmdDIiLCJmb2xkX3JpZ2h0MiIsImZvcl9hbGwiLCJleGlzdHMiLCJmb3JfYWxsMiIsImV4aXN0czIiLCJtZW0iLCJtZW1xIiwiZmluZCIsImZpbmRfb3B0IiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwiZmluZF9tYXBpIiwiZmlsdGVyIiwiZmluZF9hbGwiLCJmaWx0ZXJpIiwicGFydGl0aW9uIiwicGFydGl0aW9uX21hcCIsImFzc29jIiwiYXNzb2Nfb3B0IiwiYXNzcSIsImFzc3Ffb3B0IiwibWVtX2Fzc29jIiwibWVtX2Fzc3EiLCJyZW1vdmVfYXNzb2MiLCJyZW1vdmVfYXNzcSIsInNwbGl0IiwiY29tYmluZSIsInNvcnQiLCJzdGFibGVfc29ydCIsImZhc3Rfc29ydCIsInNvcnRfdW5pcSIsIm1lcmdlIiwidG9fc2VxIiwib2Zfc2VxIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsS0FBQTtBQUFBLElBQUFDLEtBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFNBQUEiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyOTExMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2ZtdC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBWZXJ5IHNtYWxsIHRvb2xpbmcgZm9yIGZvcm1hdCBwcmludGVycy4gKilcblxuaW5jbHVkZSBGb3JtYXRcblxudHlwZSAnYSB0ID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbmxldCBsaXN0ID0gcHBfcHJpbnRfbGlzdFxubGV0IGFycmF5ID9wcF9zZXAgZiBmbXQgYXJyID0gbGlzdCA/cHBfc2VwIGYgZm10IChBcnJheS50b19saXN0IGFycilcbmxldCBzdHIgPSBwcF9wcmludF9zdHJpbmdcbmxldCBzZXhwIGZtdCBzIHBwIHggPSBmcHJpbnRmIGZtdCBcIkBbPDM+KCVzQCAlYSlAXVwiIHMgcHAgeFxubGV0IGJ5dGVzIGZtdCB0ID0gRm9ybWF0LmZwcmludGYgZm10IFwiJVNcIiAoQnl0ZXMudG9fc3RyaW5nIHQpXG5cbmxldCBwYWlyIHBwMSBwcDIgZm10ICh2MSwgdjIpID1cbiAgcHAxIGZtdCB2MTtcbiAgcHBfcHJpbnRfc3BhY2UgZm10ICgpO1xuICBwcDIgZm10IHYyXG47O1xuXG5sZXQgdHJpcGxlIHBwMSBwcDIgcHAzIGZtdCAodjEsIHYyLCB2MykgPVxuICBwcDEgZm10IHYxO1xuICBwcF9wcmludF9zcGFjZSBmbXQgKCk7XG4gIHBwMiBmbXQgdjI7XG4gIHBwX3ByaW50X3NwYWNlIGZtdCAoKTtcbiAgcHAzIGZtdCB2M1xuOztcblxubGV0IG9wdCBmIGZtdCB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBwcF9wcmludF9zdHJpbmcgZm10IFwiPE5vbmU+XCJcbiAgfCBTb21lIHggLT4gZnByaW50ZiBmbXQgXCIlYVwiIGYgeFxuOztcblxubGV0IGludCA9IHBwX3ByaW50X2ludFxuXG5sZXQgb3B0aW50IGZtdCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgaSAtPiBmcHJpbnRmIGZtdCBcIkAgJWRcIiBpXG47O1xuXG5sZXQgY2hhciBmbXQgYyA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVjXCIgY1xubGV0IGJvb2wgPSBGb3JtYXQucHBfcHJpbnRfYm9vbFxubGV0IGxpdCBzIGZtdCAoKSA9IHBwX3ByaW50X3N0cmluZyBmbXQgc1xuXG5sZXQgdG9fdG9fc3RyaW5nIHBwIHggPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgcHAgZm10IHg7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG47O1xuXG5sZXQgcXVvdGVkX3N0cmluZyBmbXQgcyA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVTXCIgc1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfRm9ybWF0IiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9BcnJheSIsInBwX3ByaW50X3N0cmluZyIsInBwX3ByaW50X2ludCIsInBwX3ByaW50X3NwYWNlIiwicHBfcHJpbnRfbGlzdCIsImZwcmludGYiLCJhcnJheSIsInBwX3NlcCIsImZtdCIsImFyciIsImNzdF8zIiwiY3N0Iiwic2V4cCIsInMiLCJwcCIsIngiLCJjc3RfUyIsImJ5dGVzIiwidCIsInBhaXIiLCJwcDEiLCJwcDIiLCJwYXJhbSIsInYyIiwidjEiLCJ0cmlwbGUiLCJwcDMiLCJ2MyIsIm9wdCIsIm9wdGludCIsImkiLCJjaGFyIiwiYyIsImJvb2wiLCJsaXQiLCJ0b190b19zdHJpbmciLCJiIiwicXVvdGVkX3N0cmluZyJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLFlBQUFDLE1BQUFDLFFBQUFqQixHQUFBa0IsS0FBQUM7QUFBQUEsSUNPaUQsT0FBbUIsOEJBQW5CLGlDQUFtQjtBQUFBO0FBQUE7QUFBQSxJQUFBQyxRRFBwRTtBQUFBLElBQUFDLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxLQUFBSixLQUFBSyxHQUFBQyxJQUFBQyxHQ1NzQiw0Q0FBb0M7QUFBQSxPQUFBQyxRRFQxRDtBQUFBLFlBQUFDLE1BQUFULEtBQUFVO0FBQUFBLFFBQUEsSUNVMEM7QUFBQSxJQUFtQjtBQUFBO0FBQUEsWUFBQUMsS0FBQUMsS0FBQUMsS0FBQWIsS0FBQWM7QUFBQUEsUUFBQUMsS0FFcEQsVUFBQUMsS0FBQTtBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsSUFBcUIsK0JBQ1g7QUFBQTtBQUFBLFlBQUFDLE9BQUFMLEtBQUFDLEtBQUFLLEtBQUFsQixLQUFBYztBQUFBQSxRQUFBSyxLQUdELFVBQUFKLEtBQUEsVUFBQUMsS0FBQTtBQUFBLElBQ1Q7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUFxQiwrQkFDWDtBQUFBO0FBQUEsV0R2Qlo7QUFBQSxZQUFBSSxJQUFBdEMsR0FBQWtCLEtBQUFPO0FBQUFBLElDMkJFLFFBQ1UscUNBQ3NCO0FBQUEsUUFBQUEsTUFGaEM7QUFBQSxJQUVZLDBDQUFvQjtBQUFBO0FBQUEsV0Q3QmxDO0FBQUEsWUFBQWMsT0FBQXJCLEtBQUFjO0FBQUFBLElDa0NXLFlBQ0M7QUFBQSxRQUFBUSxJQUREO0FBQUEsSUFFRyxxQ0FBb0I7QUFBQTtBQUFBLFdEcENsQztBQUFBLFlBQUFDLEtBQUF2QixLQUFBd0I7QUFBQUEsSUN1Q2lCLDJEQUF5QjtBQUFBO0FBQUEsT0FBQUMsT0R2QzFDO0FBQUEsWUFBQUMsSUFBQXJCLEdBQUFMLEtBQUFjLE9DeUNtQiw4QkFBcUI7QUFBQSxZQUFBYSxhQUFBckIsSUFBQUM7QUFBQUE7QUFBQUEsS0FBQXFCLElBRzlCO0FBQUEsS0FBQTVCLE1BQ0U7QUFBQSxJQUNWO0FBQUEsSUFBUSxxQ0FDUztBQUFBO0FBQUEsV0QvQ25CO0FBQUEsWUFBQTZCLGNBQUE3QixLQUFBSztBQUFBQSxJQ2tEMEIsMkRBQXlCO0FBQUE7QUFBQSxHRGxEbkQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyOTIzMCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2JpdF92ZWN0b3IubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJ0eXBlIHQgPVxuICB7IGxlbiA6IGludFxuICA7IGJpdHMgOiBCeXRlcy50XG4gIH1cblxubGV0IGJ5dGUgcyBpID0gQ2hhci5jb2RlIChCeXRlcy51bnNhZmVfZ2V0IHMgaSlcbmxldCBzZXRfYnl0ZSBzIGkgeCA9IEJ5dGVzLnVuc2FmZV9zZXQgcyBpIChDaGFyLmNociB4KVxubGV0IGxlbmd0aCB0ID0gdC5sZW5cblxubGV0IHVuc2FmZV9zZXQgdiBuIGIgPVxuICBsZXQgaSA9IG4gbHNyIDMgaW5cbiAgbGV0IGMgPSBieXRlIHYuYml0cyBpIGluXG4gIGxldCBtYXNrID0gMSBsc2wgKG4gbGFuZCA3KSBpblxuICBzZXRfYnl0ZSB2LmJpdHMgaSAoaWYgYiB0aGVuIGMgbG9yIG1hc2sgZWxzZSBjIGxhbmQgbG5vdCBtYXNrKVxuOztcblxubGV0IHNldCB2IG4gYiA9XG4gIGlmIG4gPCAwIHx8IG4gPj0gdi5sZW4gdGhlbiBpbnZhbGlkX2FyZyBcIkJpdF92ZWN0b3Iuc2V0XCI7XG4gIHVuc2FmZV9zZXQgdiBuIGJcbjs7XG5cbmxldCB1bnNhZmVfZ2V0IHYgbiA9XG4gIGxldCBpID0gbiBsc3IgMyBpblxuICBieXRlIHYuYml0cyBpIGxhbmQgKDEgbHNsIChuIGxhbmQgNykpID4gMFxuOztcblxubGV0IGdldCB2IG4gPVxuICBpZiBuIDwgMCB8fCBuID49IHYubGVuIHRoZW4gaW52YWxpZF9hcmcgXCJCaXRfdmVjdG9yLmdldFwiO1xuICB1bnNhZmVfZ2V0IHYgblxuOztcblxubGV0IHJlc2V0X3plcm8gdCA9IEJ5dGVzLmZpbGwgdC5iaXRzIDAgKEJ5dGVzLmxlbmd0aCB0LmJpdHMpICdcXDAwMCdcblxubGV0IGNyZWF0ZV96ZXJvIGxlbiA9XG4gIGxldCBiaXRzID1cbiAgICBsZXQgciA9IGxlbiBsYW5kIDcgaW5cbiAgICBsZXQgcSA9IGxlbiBsc3IgMyBpblxuICAgIGxldCBsZW4gPSBpZiByID0gMCB0aGVuIHEgZWxzZSBxICsgMSBpblxuICAgIEJ5dGVzLm1ha2UgbGVuICdcXDAwMCdcbiAgaW5cbiAgeyBsZW47IGJpdHMgfVxuOztcblxubGV0IHBwIGZtdCB7IGxlbjsgYml0cyB9ID1cbiAgbGV0IGxlbiBmbXQgKCkgPSBGbXQuc2V4cCBmbXQgXCJsZW5cIiBGbXQuaW50IGxlbiBpblxuICBsZXQgYml0cyBmbXQgKCkgPSBGbXQuc2V4cCBmbXQgXCJiaXRzXCIgRm10LmJ5dGVzIGJpdHMgaW5cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWFALiVhQC5cIiBsZW4gKCkgYml0cyAoKVxuOztcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ieXRlc191bnNhZmVfZ2V0IiwiY2FtbF9jYWxsNCIsImYiLCJhMCIsImExIiwiYTIiLCJhMyIsImdsb2JhbF9kYXRhIiwiUmVfRm10IiwiU3RkbGliX0Zvcm1hdCIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYiIsIlN0ZGxpYl9DaGFyIiwibGVuZ3RoIiwidCIsInNldCIsInYiLCJuIiwiYiIsImkiLCJzIiwiYyIsIm1hc2siLCJ4IiwiZ2V0IiwicmVzZXRfemVybyIsImNyZWF0ZV96ZXJvIiwibGVuIiwiciIsInEiLCJiaXRzIiwicHAiLCJmbXQiLCJwYXJhbSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDLElBQUFDLElBQUFDLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxZQUFBQyxPQUFBQyxHQ09lLFlBQUs7QUFBQSxZQUFBQyxJQUFBQyxHQUFBQyxHQUFBQztBQUFBQSxRQUFBLElBVWxCO0FBQUEsVUFBNEI7QUFBQTtBQUFBLEtBQUFDLElBUDVCO0FBQUEsS0FBQUMsSUFDQTtBQUFBLEtBQUFDLElBTmE7QUFBQSxLQUFBQyxPQU9iO0FBQUEsS0FBQUMsSUFDQSxtQkFBb0Q7QUFBQSxLQUFBSCxNQUFwRDtBQUFBLElBUG9ELHNDQUFaO0FBQUEsSUFBWTtBQUFBLEdBWXBDO0FBQUEsWUFBQUksSUFBQVIsR0FBQUM7QUFBQUEsUUFBQSxJQVNoQjtBQUFBLFVBQTRCO0FBQUEsUUFBQUUsSUFMNUIsYUFBQUMsSUFDQTtBQUFBLElBbEJhLCtEQWtCQTtBQUFBLEdBS0M7QUFBQSxZQUFBSyxXQUFBWDtBQUFBQSxJQUdHO0FBQUEsa0VBQWdEO0FBQUE7QUFBQSxZQUFBWSxZQUFBQztBQUFBQTtBQUFBQSxLQUFBQyxJQUdqRTtBQUFBLEtBQUFDLElBRUU7QUFBQSxLQUFBRixRQUNBO0FBQUEsS0FBQUcsT0FDQTtBQUFBLElBRUY7QUFBQSxHQUFhO0FBQUEsV0R4Q2Y7QUFBQSxZQUFBQyxHQUFBQyxLQUFBQztBQUFBQSxRQUFBSCxPQzJDTyxVQUFBSCxNQUFBO0FBQUEsYUFBQUEsTUFBQUssS0FBQUM7QUFBQUEsS0FDWSx1REFBOEI7QUFBQTtBQUFBLGFBQUFILE9BQUFFLEtBQUFDO0FBQUFBLEtBQzdCLDBEQUFrQztBQUFBO0FBQUEsSUFDcEQ7QUFBQSx3RUFBNEM7QUFBQTtBQUFBLEdEOUM5QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI5Mjk5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvZHluLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwidHlwZSB0ID1cbiAgfCBJbnQgb2YgaW50XG4gIHwgVHVwbGUgb2YgdCBsaXN0XG4gIHwgRW51bSBvZiBzdHJpbmdcbiAgfCBTdHJpbmcgb2Ygc3RyaW5nXG4gIHwgTGlzdCBvZiB0IGxpc3RcbiAgfCBWYXJpYW50IG9mIHN0cmluZyAqIHQgbGlzdFxuICB8IFJlY29yZCBvZiAoc3RyaW5nICogdCkgbGlzdFxuXG5sZXQgdmFyaWFudCB4IHkgPSBWYXJpYW50ICh4LCB5KVxubGV0IGxpc3QgeCA9IExpc3QgeFxubGV0IGludCB4ID0gSW50IHhcbmxldCBwYWlyIHggeSA9IFR1cGxlIFsgeDsgeSBdXG5sZXQgcmVjb3JkIGZpZWxkcyA9IFJlY29yZCBmaWVsZHNcbmxldCBlbnVtIHggPSBFbnVtIHhcbmxldCBzdHJpbmcgcyA9IFN0cmluZyBzXG5cbmxldCByZXN1bHQgb2sgZXJyID0gZnVuY3Rpb25cbiAgfCBPayBzIC0+IHZhcmlhbnQgXCJPa1wiIFsgb2sgcyBdXG4gIHwgRXJyb3IgZSAtPiB2YXJpYW50IFwiRXJyb3JcIiBbIGVyciBlIF1cbjs7XG5cbmxldCBvcHRpb24gZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBlbnVtIFwiTm9uZVwiXG4gIHwgU29tZSBzIC0+IHZhcmlhbnQgXCJTb21lXCIgWyBmIHMgXVxuOztcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsInZhcmlhbnQiLCJ4IiwieSIsImxpc3QiLCJpbnQiLCJwYWlyIiwicmVjb3JkIiwiZmllbGRzIiwiZW51bSQiLCJzdHJpbmciLCJzIiwicmVzdWx0Iiwib2siLCJlcnIiLCJwYXJhbSIsImUiLCJvcHRpb24iXSwibWFwcGluZ3MiOiJPQUFBQSxVQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFFBQUFDLEdBQUFDLEdDU2tCLGlCQUFjO0FBQUEsWUFBQUMsS0FBQUYsR0FDbkIsY0FBTTtBQUFBLFlBQUFHLElBQUFILEdBQ1AsY0FBSztBQUFBLFlBQUFJLEtBQUFKLEdBQUFDLEdBQ0YsOEJBQWM7QUFBQSxZQUFBSSxPQUFBQyxRQUNULG1CQUFhO0FBQUEsWUFBQUMsTUFBQVAsR0FDcEIsY0FBTTtBQUFBLFlBQUFRLE9BQUFDLEdBQ0osY0FBUTtBQUFBLFlBQUFDLE9BQUFDLElBQUFDLEtBQUFDO0FBQUFBLElBRVo7QUFBQSxTQUFBSixJQUFBLFVBQUFSLElBQ2dCO0FBQUEsS0FUVDtBQUFBO0FBQUEsUUFBQWEsSUFRUCxVQUFBYixNQUVzQjtBQUFBLElBVmY7QUFBQSxHQVVzQjtBQUFBLFlBQUFjLE9BQUFsQixHQUFBZ0I7QUFBQUEsSUFHN0IsWUFSRTtBQUFBLFFBQUFKLElBUUYsVUFBQVIsSUFFb0I7QUFBQSxJQWZiO0FBQUEsR0Fla0I7QUFBQSxHRHhCcEMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyOTMzOSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2NhdGVnb3J5Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwidHlwZSB0ID0gaW50XG5cbmxldCBlcXVhbCAoeCA6IGludCkgKHkgOiBpbnQpID0geCA9IHlcbmxldCBjb21wYXJlICh4IDogaW50KSAoeSA6IGludCkgPSBjb21wYXJlIHggeVxubGV0IHRvX2ludCB4ID0geFxubGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2ludFxubGV0IGludGVyc2VjdCB4IHkgPSB4IGxhbmQgeSA8PiAwXG5sZXQgKCArKyApIHggeSA9IHggbG9yIHlcbmxldCBkdW1teSA9IC0xXG5sZXQgaW5leGlzdGFudCA9IDFcbmxldCBsZXR0ZXIgPSAyXG5sZXQgbm90X2xldHRlciA9IDRcbmxldCBuZXdsaW5lID0gOFxubGV0IGxhc3RuZXdsaW5lID0gMTZcbmxldCBzZWFyY2hfYm91bmRhcnkgPSAzMlxubGV0IHRvX2R5biA9IER5bi5pbnRcblxubGV0IGZyb21fY2hhciA9IGZ1bmN0aW9uXG4gICgqIFNob3VsZCBtYXRjaCBbY3dvcmRdIGRlZmluaXRpb24gKilcbiAgfCAnYScgLi4gJ3onXG4gIHwgJ0EnIC4uICdaJ1xuICB8ICcwJyAuLiAnOSdcbiAgfCAnXycgfCAnXFwxNzAnIHwgJ1xcMTgxJyB8ICdcXDE4NidcbiAgfCAnXFwxOTInIC4uICdcXDIxNCdcbiAgfCAnXFwyMTYnIC4uICdcXDI0NidcbiAgfCAnXFwyNDgnIC4uICdcXDI1NScgLT4gbGV0dGVyXG4gIHwgJ1xcbicgLT4gbm90X2xldHRlciArKyBuZXdsaW5lXG4gIHwgXyAtPiBub3RfbGV0dGVyXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9Gb3JtYXQiLCJSZV9EeW4iLCJlcXVhbCIsIngiLCJ5IiwiY29tcGFyZSIsInRvX2ludCIsInBwIiwiaW50ZXJzZWN0Iiwic3ltYm9sIiwidG9fZHluIiwibGV0dGVyIiwibm90X2xldHRlciIsImZyb21fY2hhciIsInBhcmFtIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxNQUFBQyxHQUFBQyxHQ0VnQyx1QkFBSztBQUFBLE9BQUFDLFVERnJDO0FBQUEsWUFBQUMsT0FBQUgsR0NJZSxTQUFDO0FBQUEsT0FBQUksS0RKaEI7QUFBQSxZQUFBQyxVQUFBTCxHQUFBQyxHQ01vQiw2QkFBYTtBQUFBLFlBQUFLLE9BQUFOLEdBQUFDLEdBQ2hCLGFBQU87QUFBQSxPQUFBTSxTRFB4QixXQUFBQyxTQUFBLEdBQUFDLGFBQUE7QUFBQSxZQUFBQyxVQUFBQztBQUFBQTtBQUFBQTtBQUFBQSxLQ2lCZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHNDQVZDO0FBQUEsTUFVRDtBQUFBO0FBQUEsS0FRUTtBQUFBO0FBQUEsSUFFZjtBQUFBLEdBQVU7QUFBQSxHRDNCbkIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyOTQwMCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2RlbnNlX21hcC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsImxldCBtYWtlIH5zaXplIH5mID1cbiAgbGV0IGNhY2hlID0gQXJyYXkuaW5pdCBzaXplIGYgaW5cbiAgZnVuIGkgLT4gY2FjaGUuKGkpXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJTdGRsaWJfQXJyYXkiLCJtYWtlIiwic2l6ZSIsImYiLCJjYWNoZSIsImkiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLFlBQUFDLEtBQUFDLE1BQUFDO0FBQUFBLFFBQUFDLFFDQ2M7QUFBQSxJQUNaLGdCQUFBQyxHQUFTLGdEQUFTLEVBQWxCO0FBQUEsR0FBa0I7QUFBQSxHREZwQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI5NDE3LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvaW1wb3J0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwibW9kdWxlIExpc3QgPSBTdGRsaWIuTGlzdExhYmVsc1xuXG5tb2R1bGUgUG9seSA9IHN0cnVjdFxuICBsZXQgZXF1YWwgPSAoID0gKVxuICBsZXQgY29tcGFyZSA9IGNvbXBhcmVcbmVuZFxuXG5tb2R1bGUgUGh5c19lcXVhbCA9IHN0cnVjdFxuICBsZXQgZXF1YWwgPSAoID09IClcbmVuZFxuXG5sZXQgKCA9ICkgPSBJbnQuZXF1YWxcbmxldCAoID09ICkgPSBbIGBVc2VfcGh5c19lcXVhbCBdXG5sZXQgKCA8ICkgKHggOiBpbnQpICh5IDogaW50KSA9IHggPCB5XG5sZXQgKCA+ICkgKHggOiBpbnQpICh5IDogaW50KSA9IHggPiB5XG5sZXQgbWluID0gSW50Lm1pblxubGV0IG1heCA9IEludC5tYXhcbmxldCBjb21wYXJlID0gSW50LmNvbXBhcmVcblxubW9kdWxlIEludCA9IHN0cnVjdFxuICBsZXRbQHdhcm5pbmcgXCItMzJcIl0gaGFzaCAoeCA6IGludCkgPSBIYXNodGJsLmhhc2ggeFxuXG4gIGluY2x1ZGUgU3RkbGliLkludFxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0ludCIsImVxdWFsIiwiY29tcGFyZSIsInN5bWJvbCIsIngiLCJ5IiwibWluIiwibWF4IiwiemVybyIsIm9uZSIsIm1pbnVzX29uZSIsImFicyIsIm1heF9pbnQiLCJtaW5faW50IiwibG9nbm90IiwidG9fc3RyaW5nIiwic2VlZGVkX2hhc2giLCJoYXNoIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsWUFBQUQsUUFBQTtBQUFBLE9BQUFFLFNBQUE7QUFBQSxZQUFBQSxTQUFBQyxHQUFBQyxHQ2FnQyxxQkFBSztBQUFBLFlBQUFGLFNBQUFDLEdBQUFDLEdBQ0wscUJBQUs7QUFBQTtBQUFBLElBQUFDLE1EZHJDO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFMLFlBQUE7QUFBQSxJQUFBTSxPQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQWIsVUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBSSxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFRLFlBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsT0FBQSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI5NDg0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvY3NldC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIm1vZHVsZSBMaXN0ID0gc3RydWN0IGVuZFxub3BlbiBJbXBvcnRcblxuKCpcbiAgIFJFIC0gQSByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeVxuXG4gICBDb3B5cmlnaHQgKEMpIDIwMDEgSmVyb21lIFZvdWlsbG9uXG4gICBlbWFpbDogSmVyb21lLlZvdWlsbG9uQHBwcy5qdXNzaWV1LmZyXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGhcbiAgIGxpbmtpbmcgZXhjZXB0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdFxuICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQVxuKilcblxudHlwZSBjID0gaW50XG5cbmxldCBlcXVhbF9jID0gSW50LmVxdWFsXG5sZXQgdG9faW50IHggPSB4XG5sZXQgb2ZfaW50IHggPSB4XG5sZXQgdG9fY2hhciB0ID0gQ2hhci5jaHIgdFxubGV0IG9mX2NoYXIgYyA9IENoYXIuY29kZSBjXG5sZXQgbnVsbF9jaGFyID0gLTFcblxudHlwZSB0ID0gKGMgKiBjKSBsaXN0XG5cbmxldCBjb21wYXJlX3BhaXIgKHgsIHkpICh4JywgeScpID1cbiAgbWF0Y2ggSW50LmNvbXBhcmUgeCB4JyB3aXRoXG4gIHwgMCAtPiBJbnQuY29tcGFyZSB5IHknXG4gIHwgeCAtPiB4XG47O1xuXG5sZXQgZXF1YWxfcGFpciAoeCwgeSkgKHgnLCB5JykgPSBJbnQuZXF1YWwgeCB4JyAmJiBJbnQuZXF1YWwgeSB5J1xubGV0IGVxdWFsIHggeSA9IExpc3QuZXF1YWwgfmVxOmVxdWFsX3BhaXIgeCB5XG5sZXQgY29tcGFyZSB4IHkgPSBMaXN0LmNvbXBhcmUgfmNtcDpjb21wYXJlX3BhaXIgeCB5XG5cbmxldCByZWMgdW5pb24gbCBsJyA9XG4gIG1hdGNoIGwsIGwnIHdpdGhcbiAgfCBfLCBbXSAtPiBsXG4gIHwgW10sIF8gLT4gbCdcbiAgfCAoYzEsIGMyKSA6OiByLCAoYzEnLCBjMicpIDo6IHInIC0+XG4gICAgaWYgYzIgKyAxIDwgYzEnXG4gICAgdGhlbiAoYzEsIGMyKSA6OiB1bmlvbiByIGwnXG4gICAgZWxzZSBpZiBjMicgKyAxIDwgYzFcbiAgICB0aGVuIChjMScsIGMyJykgOjogdW5pb24gbCByJ1xuICAgIGVsc2UgaWYgYzIgPCBjMidcbiAgICB0aGVuIHVuaW9uIHIgKChtaW4gYzEgYzEnLCBjMicpIDo6IHInKVxuICAgIGVsc2UgdW5pb24gKChtaW4gYzEgYzEnLCBjMikgOjogcikgcidcbjs7XG5cbmxldCByZWMgaW50ZXIgbCBsJyA9XG4gIG1hdGNoIGwsIGwnIHdpdGhcbiAgfCBfLCBbXSAtPiBbXVxuICB8IFtdLCBfIC0+IFtdXG4gIHwgKGMxLCBjMikgOjogciwgKGMxJywgYzInKSA6OiByJyAtPlxuICAgIGlmIGMyIDwgYzEnXG4gICAgdGhlbiBpbnRlciByIGwnXG4gICAgZWxzZSBpZiBjMicgPCBjMVxuICAgIHRoZW4gaW50ZXIgbCByJ1xuICAgIGVsc2UgaWYgYzIgPCBjMidcbiAgICB0aGVuIChtYXggYzEgYzEnLCBjMikgOjogaW50ZXIgciBsJ1xuICAgIGVsc2UgKG1heCBjMSBjMScsIGMyJykgOjogaW50ZXIgbCByJ1xuOztcblxubGV0IHJlYyBkaWZmIGwgbCcgPVxuICBtYXRjaCBsLCBsJyB3aXRoXG4gIHwgXywgW10gLT4gbFxuICB8IFtdLCBfIC0+IFtdXG4gIHwgKGMxLCBjMikgOjogciwgKGMxJywgYzInKSA6OiByJyAtPlxuICAgIGlmIGMyIDwgYzEnXG4gICAgdGhlbiAoYzEsIGMyKSA6OiBkaWZmIHIgbCdcbiAgICBlbHNlIGlmIGMyJyA8IGMxXG4gICAgdGhlbiBkaWZmIGwgcidcbiAgICBlbHNlIChcbiAgICAgIGxldCByJycgPSBpZiBjMicgPCBjMiB0aGVuIChjMicgKyAxLCBjMikgOjogciBlbHNlIHIgaW5cbiAgICAgIGlmIGMxIDwgYzEnIHRoZW4gKGMxLCBjMScgLSAxKSA6OiBkaWZmIHInJyByJyBlbHNlIGRpZmYgcicnIHInKVxuOztcblxubGV0IHNpbmdsZSA9XG4gIGxldCBzaW5nbGUgYyA9IFsgYywgYyBdIGluXG4gIERlbnNlX21hcC5tYWtlICgqIGFuIGV4dHJhIGNvbG9yIGZvciBsbmwgKikgfnNpemU6MjU3IH5mOnNpbmdsZVxuOztcblxubGV0IGNzaW5nbGUgaSA9IHNpbmdsZSAoQ2hhci5jb2RlIGkpXG5sZXQgYWRkIGMgbCA9IHVuaW9uIChzaW5nbGUgYykgbFxubGV0IHNlcSBjIGMnID0gaWYgYyA8PSBjJyB0aGVuIFsgYywgYycgXSBlbHNlIFsgYycsIGMgXVxuXG5sZXQgcmVjIG9mZnNldCBvIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IChjMSwgYzIpIDo6IHIgLT4gKGMxICsgbywgYzIgKyBvKSA6OiBvZmZzZXQgbyByXG47O1xuXG5sZXQgZW1wdHkgOiB0ID0gW11cbmxldCBjYW55ID0gWyAwLCAyNTUgXVxubGV0IHVuaW9uX2FsbCB0cyA9IExpc3QuZm9sZF9sZWZ0IH5pbml0OmVtcHR5IH5mOnVuaW9uIHRzXG5sZXQgaW50ZXJzZWN0X2FsbCB0cyA9IExpc3QuZm9sZF9sZWZ0IH5pbml0OmNhbnkgfmY6aW50ZXIgdHNcblxubGV0IHJlYyBtZW0gKGMgOiBpbnQpIHMgPVxuICBtYXRjaCBzIHdpdGhcbiAgfCBbXSAtPiBmYWxzZVxuICB8IChjMSwgYzIpIDo6IHJlbSAtPiBpZiBjIDw9IGMyIHRoZW4gYyA+PSBjMSBlbHNlIG1lbSBjIHJlbVxuOztcblxuKCoqKiopXG5cbmxldCByZWMgaGFzaF9yZWMgPSBmdW5jdGlvblxuICB8IFtdIC0+IDBcbiAgfCAoaSwgaikgOjogciAtPiBpICsgKDEzICogaikgKyAoMjU3ICogaGFzaF9yZWMgcilcbjs7XG5cbmxldCBoYXNoIGwgPSBoYXNoX3JlYyBsIGxhbmQgMHgzRkZGRkZGRlxuXG4oKioqKilcblxubGV0IHByaW50X29uZSBjaCAoYzEsIGMyKSA9XG4gIGlmIEludC5lcXVhbCBjMSBjMiB0aGVuIEZvcm1hdC5mcHJpbnRmIGNoIFwiJWRcIiBjMSBlbHNlIEZvcm1hdC5mcHJpbnRmIGNoIFwiJWQtJWRcIiBjMSBjMlxuOztcblxubGV0IHBwIHRzID0gRm10Lmxpc3QgfnBwX3NlcDooRm10LmxpdCBcIiwgXCIpIHByaW50X29uZSB0c1xuXG5sZXQgdG9fZHluIHQgPVxuICBsZXQgb3BlbiBEeW4gaW5cbiAgbWF0Y2ggdCB3aXRoXG4gIHwgWyAoeCwgeSkgXSB3aGVuIEludC5lcXVhbCB4IHkgLT4gaW50IHhcbiAgfCBfIC0+IExpc3QubWFwIHQgfmY6KGZ1biAoeCwgeSkgLT4gcGFpciAoaW50IHgpIChpbnQgeSkpIHw+IGxpc3Rcbjs7XG5cbmxldCByZWMgaXRlciB0IH5mID1cbiAgbWF0Y2ggdCB3aXRoXG4gIHwgW10gLT4gKClcbiAgfCAoeCwgeSkgOjogeHMgLT5cbiAgICBmIHggeTtcbiAgICBpdGVyIHhzIH5mXG47O1xuXG5sZXQgb25lX2NoYXIgPSBmdW5jdGlvblxuICB8IFsgKGksIGopIF0gd2hlbiBJbnQuZXF1YWwgaSBqIC0+IFNvbWUgaVxuICB8IF8gLT4gTm9uZVxuOztcblxubW9kdWxlIENTZXRNYXAgPSBNYXAuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0gaW50ICogKGludCAqIGludCkgbGlzdFxuXG4gICAgbGV0IGNvbXBhcmUgKGksIHUpIChqLCB2KSA9XG4gICAgICBsZXQgYyA9IEludC5jb21wYXJlIGkgaiBpblxuICAgICAgaWYgYyA8PiAwIHRoZW4gYyBlbHNlIGNvbXBhcmUgdSB2XG4gICAgOztcbiAgZW5kKVxuXG5sZXQgZm9sZF9yaWdodCB0IH5pbml0IH5mID0gTGlzdC5mb2xkX3JpZ2h0IH5mOihmdW4gKHgsIHkpIGFjYyAtPiBmIHggeSBhY2MpIHQgfmluaXRcblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuOztcblxubGV0IHJlYyBwcmVwZW5kIHMgeCBsID1cbiAgbWF0Y2ggcywgbCB3aXRoXG4gIHwgW10sIF8gLT4gbFxuICB8IF9yLCBbXSAtPiBbXVxuICB8IChfYywgYycpIDo6IHIsIChbIChkLCBfZCcpIF0sIF94JykgOjogX3InIHdoZW4gYycgPCBkIC0+IHByZXBlbmQgciB4IGxcbiAgfCAoYywgYycpIDo6IHIsIChbIChkLCBkJykgXSwgeCcpIDo6IHInIC0+XG4gICAgaWYgYyA8PSBkXG4gICAgdGhlblxuICAgICAgaWYgYycgPCBkJ1xuICAgICAgdGhlbiAoWyBkLCBjJyBdLCB4IEAgeCcpIDo6IHByZXBlbmQgciB4ICgoWyBjJyArIDEsIGQnIF0sIHgnKSA6OiByJylcbiAgICAgIGVsc2UgKFsgZCwgZCcgXSwgeCBAIHgnKSA6OiBwcmVwZW5kIHMgeCByJ1xuICAgIGVsc2UgaWYgYyA+IGQnXG4gICAgdGhlbiAoWyBkLCBkJyBdLCB4JykgOjogcHJlcGVuZCBzIHggcidcbiAgICBlbHNlIChbIGQsIGMgLSAxIF0sIHgnKSA6OiBwcmVwZW5kIHMgeCAoKFsgYywgZCcgXSwgeCcpIDo6IHInKVxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG47O1xuXG5sZXQgcGljayA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gaW52YWxpZF9hcmcgXCJSZV9jc2V0LnBpY2tcIlxuICB8ICh4LCBfKSA6OiBfIC0+IHhcbjs7XG5cbmxldCBjc2VxIGMgYycgPSBzZXEgKG9mX2NoYXIgYykgKG9mX2NoYXIgYycpXG5sZXQgcmcgPSBjc2VxXG5sZXQgY2hhciA9IGNzaW5nbGVcbmxldCB1cHBlciA9IHVuaW9uX2FsbCBbIGNzZXEgJ0EnICdaJzsgY3NlcSAnXFwxOTInICdcXDIxNCc7IGNzZXEgJ1xcMjE2JyAnXFwyMjInIF1cbmxldCBjbG93ZXIgPSBvZmZzZXQgMzIgdXBwZXJcbmxldCBjZGlnaXQgPSBjc2VxICcwJyAnOSdcbmxldCBhc2NpaSA9IGNzZXEgJ1xcMDAwJyAnXFwxMjcnXG5sZXQgY2FkZCBjIHMgPSBhZGQgKG9mX2NoYXIgYykgc1xubGV0IHNwYWNlID0gYWRkIChvZl9jaGFyICcgJykgKGNzZXEgJ1xcMDA5JyAnXFwwMTMnKVxubGV0IHhkaWdpdCA9IHVuaW9uX2FsbCBbIGNkaWdpdDsgY3NlcSAnYScgJ2YnOyBjc2VxICdBJyAnRicgXVxuXG5sZXQgY2FscGhhID1cbiAgTGlzdC5mb2xkX3JpZ2h0XG4gICAgfmY6Y2FkZFxuICAgIFsgJ1xcMTcwJzsgJ1xcMTgxJzsgJ1xcMTg2JzsgJ1xcMjIzJzsgJ1xcMjU1JyBdXG4gICAgfmluaXQ6KHVuaW9uIGNsb3dlciB1cHBlcilcbjs7XG5cbmxldCBjYWxudW0gPSB1bmlvbiBjYWxwaGEgY2RpZ2l0XG5cbmxldCBjYXNlX2luc2VucyBzID1cbiAgdW5pb25fYWxsIFsgczsgb2Zmc2V0IDMyIChpbnRlciBzIHVwcGVyKTsgb2Zmc2V0ICgtMzIpIChpbnRlciBzIGNsb3dlcikgXVxuOztcblxubGV0IGN3b3JkID0gY2FkZCAnXycgY2FsbnVtXG5sZXQgbm90bmwgPSBkaWZmIGNhbnkgKGNzaW5nbGUgJ1xcbicpXG5sZXQgbmwgPSBjc2luZ2xlICdcXG4nXG5cbmxldCBzZXQgc3RyID1cbiAgbGV0IHMgPSByZWYgZW1wdHkgaW5cbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggc3RyIC0gMSBkb1xuICAgIHMgOj0gdW5pb24gKGNzaW5nbGUgc3RyLltpXSkgIXNcbiAgZG9uZTtcbiAgIXNcbjs7XG5cbmxldCBibGFuayA9IHNldCBcIlxcdCBcIlxuXG4oKiBDUi1zb21lZGF5IHJncmluYmVyZzogdGhpcyBbbG93ZXJdIGRvZXNuJ3QgbWF0Y2ggW2Nsb3dlcl0gKilcbmxldCBsb3dlciA9IHVuaW9uX2FsbCBbIHJnICdhJyAneic7IGNoYXIgJ1xcMTgxJzsgcmcgJ1xcMjIzJyAnXFwyNDYnOyByZyAnXFwyNDgnICdcXDI1NScgXVxubGV0IGFscGhhID0gdW5pb25fYWxsIFsgbG93ZXI7IHVwcGVyOyBjaGFyICdcXDE3MCc7IGNoYXIgJ1xcMTg2JyBdXG5sZXQgYWxudW0gPSB1bmlvbl9hbGwgWyBhbHBoYTsgY2RpZ2l0IF1cbmxldCB3b3JkYyA9IHVuaW9uX2FsbCBbIGFsbnVtOyBjaGFyICdfJyBdXG5sZXQgY250cmwgPSB1bmlvbl9hbGwgWyByZyAnXFwwMDAnICdcXDAzMSc7IHJnICdcXDEyNycgJ1xcMTU5JyBdXG5sZXQgZ3JhcGggPSB1bmlvbl9hbGwgWyByZyAnXFwwMzMnICdcXDEyNic7IHJnICdcXDE2MCcgJ1xcMjU1JyBdXG5sZXQgcHJpbnQgPSB1bmlvbl9hbGwgWyByZyAnXFwwMzInICdcXDEyNic7IHJnICdcXDE2MCcgJ1xcMjU1JyBdXG5cbmxldCBwdW5jdCA9XG4gIHVuaW9uX2FsbFxuICAgIFsgcmcgJ1xcMDMzJyAnXFwwNDcnXG4gICAgOyByZyAnXFwwNTgnICdcXDA2NCdcbiAgICA7IHJnICdcXDA5MScgJ1xcMDk2J1xuICAgIDsgcmcgJ1xcMTIzJyAnXFwxMjYnXG4gICAgOyByZyAnXFwxNjAnICdcXDE2OSdcbiAgICA7IHJnICdcXDE3MScgJ1xcMTgwJ1xuICAgIDsgcmcgJ1xcMTgyJyAnXFwxODUnXG4gICAgOyByZyAnXFwxODcnICdcXDE5MSdcbiAgICA7IGNoYXIgJ1xcMjE1J1xuICAgIDsgY2hhciAnXFwyNDcnXG4gICAgXVxuOztcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiUmVfSW1wb3J0IiwiU3RkbGliIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfTGlzdExhYmVscyIsIlJlX0R5biIsIlJlX0ZtdCIsIlN0ZGxpYl9Gb3JtYXQiLCJTdGRsaWJfQ2hhciIsIlJlX0RlbnNlX21hcCIsIlN0ZGxpYl9NYXAiLCJlcXVhbF9jIiwidG9faW50IiwieCIsIm9mX2ludCIsInRvX2NoYXIiLCJ0Iiwib2ZfY2hhciIsImMiLCJjb21wYXJlX3BhaXIiLCJwYXJhbSIsInkiLCJlcXVhbF9wYWlyIiwiZXF1YWwiLCJjb21wYXJlIiwidW5pb24iLCJsIiwiciIsImMyIiwiYzEiLCJtYXRjaCIsImludGVyIiwiZGlmZiIsInNpbmdsZSIsImNzaW5nbGUiLCJpIiwiYWRkIiwib2Zmc2V0IiwibyIsImVtcHR5IiwidW5pb25fYWxsIiwidHMiLCJjYW55IiwiaW50ZXJzZWN0X2FsbCIsIm1lbSIsInMiLCJyZW0iLCJoYXNoX3JlYyIsImoiLCJoYXNoIiwicHJpbnRfb25lIiwiY2giLCJwcCIsInRvX2R5biIsIml0ZXIiLCJ4cyIsIm9uZV9jaGFyIiwidiIsInUiLCJDU2V0TWFwIiwiZm9sZF9yaWdodCIsImluaXQiLCJhY2MiLCJpc19lbXB0eSIsInByZXBlbmQiLCJkIiwicGljayIsImNzZXEiLCJ1cHBlciIsImNsb3dlciIsImNkaWdpdCIsImFzY2lpIiwiY2FkZCIsInNwYWNlIiwieGRpZ2l0IiwiY2FscGhhIiwiY2FsbnVtIiwiY2FzZV9pbnNlbnMiLCJjd29yZCIsIm5vdG5sIiwibmwiLCJzZXQiLCJzdHIiLCJibGFuayIsImxvd2VyIiwiYWxwaGEiLCJhbG51bSIsIndvcmRjIiwiY250cmwiLCJncmFwaCIsInByaW50IiwicHVuY3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLFlBQUFDLE9BQUFDLEdDNEJlLFNBQUM7QUFBQSxZQUFBQyxPQUFBRCxHQUNELFNBQUM7QUFBQSxZQUFBRSxRQUFBQyxHQUNBLG1DQUFVO0FBQUEsWUFBQUMsUUFBQUMsR0FDVixTQUFXO0FBQUEsWUFBQUMsYUFBQSxHQUFBQztBQUFBQTtBQUFBQSxLQUFBQyxJQUtWO0FBQUEsS0FBQVIsSUFBQTtBQUFBLEtBQUFRLE1BQUE7QUFBQSxLQUFBUixNQUFBO0FBQUEsS0FBQUEsTUFDVDtBQUFBLElBQWdC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QSxRQURBO0FBQUEsUUFEQTtBQUFBLElBQUFDLFFBRkosY0FDSTtBQUFBLEdBVUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEeFBMIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6Mjk5MTksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9oYXNoX3NldC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIm9wZW4gSW1wb3J0XG5cbm1vZHVsZSBBcnJheSA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyB0ID0gQnl0ZXMudFxuXG4gIGxldCB3b3JkcyA9IDhcbiAgbGV0W0BpbmxpbmVdIGxlbmd0aCB0ID0gQnl0ZXMubGVuZ3RoIHQgLyB3b3Jkc1xuICBsZXRbQGlubGluZV0gdW5zYWZlX2dldCB0IGkgPSBJbnQ2NC50b19pbnQgKEJ5dGVzLmdldF9pbnQ2NF9uZSB0IChpICogd29yZHMpKVxuICBsZXRbQGlubGluZV0gdW5zYWZlX3NldCB0IGkgeCA9IEJ5dGVzLnNldF9pbnQ2NF9uZSB0IChpICogd29yZHMpIChJbnQ2NC5vZl9pbnQgeClcblxuICBsZXRbQGlubGluZV0gbWFrZSBsZW4geCA9XG4gICAgbGV0IHQgPSBCeXRlcy5jcmVhdGUgKGxlbiAqIHdvcmRzKSBpblxuICAgIGZvciBpID0gMCB0byBsZW5ndGggdCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgdCBpIHhcbiAgICBkb25lO1xuICAgIHRcbiAgOztcblxuICBsZXRbQGlubGluZV0gbWFrZV9hYnNlbnQgbGVuID0gQnl0ZXMubWFrZSAobGVuICogd29yZHMpICdcXDI1NSdcbiAgbGV0IGNsZWFyIHQgPSBCeXRlcy5maWxsIHQgMCAoQnl0ZXMubGVuZ3RoIHQpICdcXDI1NSdcblxuICBsZXQgZm9sZF9sZWZ0IHQgfmluaXQgfmYgPVxuICAgIGxldCBpbml0ID0gcmVmIGluaXQgaW5cbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHQgLSAxIGRvXG4gICAgICBpbml0IDo9IGYgIWluaXQgKHVuc2FmZV9nZXQgdCBpKVxuICAgIGRvbmU7XG4gICAgIWluaXRcbiAgOztcbmVuZFxuXG4oKiBBIHNwZWNpYWxpemVkIGhhc2ggdGFibGUgdGhhdCBtYWtlcyB0aGUgZm9sbG93aW5nIHRyYWRlLW9mZnM6XG4gICAtIE9wZW4gYWRkcmVzaW5nLiBCdWNrZXRpbmcgaXMgcXVpdGUgbWVtb3J5IGludGVuc2l2ZSBhbmQgZHVuZSBpcyBhbHJlYWR5XG4gICAgIGEgbWVtb3J5IGhvZy5cbiAgIC0gTm8gYm94aW5nIGZvciBlbXB0eSBzbG90cy4gV2UgbWFrZSB1c2Ugb2YgdGhlIGZhY3QgdGhhdCBpZCdzIGFyZSBuZXZlclxuICAgICBuZWdhdGl2ZSB0byBhY2hpZXZlIHRoaXMuXG4gICAtIE5vIHNhdmluZyBvZiB0aGUgaGFzaC4gUmVjb21wdXRpbmcgdGhlIGhhc2ggZm9yIGlkJ3MgaXMgYSBuby1vcC5cbiopXG5cbnR5cGUgbm9ucmVjIHRhYmxlID1cbiAgeyBtdXRhYmxlIHRhYmxlIDogQXJyYXkudFxuICA7IG11dGFibGUgc2l6ZSA6IGludFxuICB9XG5cbnR5cGUgdCA9IHRhYmxlIE9wdGlvbi50IHJlZlxuXG5sZXQgaW5pdCB0ID1cbiAgaWYgT3B0aW9uLmlzX25vbmUgIXQgdGhlbiB0IDo9IE9wdGlvbi5zb21lIHsgc2l6ZSA9IDA7IHRhYmxlID0gQXJyYXkubWFrZSAwICgtMSkgfTtcbiAgT3B0aW9uLmdldCAhdFxuOztcblxubGV0W0BpbmxpbmVdIHNob3VsZF9ncm93IHQgPVxuICBsZXQgc2xvdHMgPSBBcnJheS5sZW5ndGggdC50YWJsZSBpblxuICBzbG90cyA9IDAgfHwgKHQuc2l6ZSA+IDAgJiYgc2xvdHMgLyB0LnNpemUgPCAyKVxuOztcblxubGV0IGFic2VudCA9IC0xXG5cbmxldCAoKSA9XG4gIGxldCB4ID0gQXJyYXkubWFrZV9hYnNlbnQgMSBpblxuICBhc3NlcnQgKEFycmF5LnVuc2FmZV9nZXQgeCAwID0gYWJzZW50KVxuOztcblxubGV0IGNyZWF0ZSAoKSA9IHJlZiBOb25lXG5cbmxldFtAaW5saW5lXSBpbmRleF9vZl9vZmZzZXQgc2xvdHMgaW5kZXggaSA9XG4gIGxldCBpID0gaW5kZXggKyAhaSBpblxuICBpZiBpID49IHNsb3RzIHRoZW4gaSAtIHNsb3RzIGVsc2UgaVxuOztcblxubGV0IGNsZWFyIHQgPVxuICBtYXRjaCAhdCB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgdCAtPlxuICAgIHQuc2l6ZSA8LSAwO1xuICAgIEFycmF5LmNsZWFyIHQudGFibGVcbjs7XG5cbmxldCBhZGQgdCB4ID1cbiAgbGV0IGhhc2ggPSBJbnQuaGFzaCB4IGluXG4gIGxldCBzbG90cyA9IEFycmF5Lmxlbmd0aCB0LnRhYmxlIGluXG4gIGxldCBpbmRleCA9IGhhc2ggbGFuZCAoc2xvdHMgLSAxKSBpblxuICBsZXQgaW5zZXJ0aW5nID0gcmVmIHRydWUgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaW5zZXJ0aW5nIGRvXG4gICAgbGV0IGlkeCA9IGluZGV4X29mX29mZnNldCBzbG90cyBpbmRleCBpIGluXG4gICAgbGV0IGVsZW0gPSBBcnJheS51bnNhZmVfZ2V0IHQudGFibGUgaWR4IGluXG4gICAgaWYgZWxlbSA9IGFic2VudFxuICAgIHRoZW4gKFxuICAgICAgQXJyYXkudW5zYWZlX3NldCB0LnRhYmxlIGlkeCB4O1xuICAgICAgaW5zZXJ0aW5nIDo9IGZhbHNlKVxuICAgIGVsc2UgaW5jciBpXG4gIGRvbmU7XG4gIHQuc2l6ZSA8LSB0LnNpemUgKyAxXG47O1xuXG5sZXQgcmVzaXplIHQgPVxuICBsZXQgb2xkX3RhYmxlID0gdC50YWJsZSBpblxuICBsZXQgc2xvdHMgPSBBcnJheS5sZW5ndGggb2xkX3RhYmxlIGluXG4gIGxldCB0YWJsZSA9IEFycmF5Lm1ha2VfYWJzZW50IChpZiBzbG90cyA9IDAgdGhlbiAxIGVsc2Ugc2xvdHMgbHNsIDEpIGluXG4gIHQudGFibGUgPC0gdGFibGU7XG4gIGZvciBpID0gMCB0byBzbG90cyAtIDEgZG9cbiAgICBsZXQgZWxlbSA9IEFycmF5LnVuc2FmZV9nZXQgb2xkX3RhYmxlIGkgaW5cbiAgICBpZiBlbGVtIDw+IGFic2VudCB0aGVuIGFkZCB0IGVsZW1cbiAgZG9uZVxuOztcblxubGV0IGFkZCB0IHggPVxuICBsZXQgdCA9IGluaXQgdCBpblxuICBpZiBzaG91bGRfZ3JvdyB0IHRoZW4gcmVzaXplIHQ7XG4gIGFkZCB0IHhcbjs7XG5cbmxldFtAaW5saW5lXSBpc19lbXB0eSB0ID1cbiAgbGV0IHQgPSAhdCBpblxuICBpZiBPcHRpb24uaXNfbm9uZSB0XG4gIHRoZW4gdHJ1ZVxuICBlbHNlIChcbiAgICBsZXQgdCA9IE9wdGlvbi5nZXQgdCBpblxuICAgIHQuc2l6ZSA9IDApXG47O1xuXG5sZXQgbWVtIHQgeCA9XG4gIGxldCB0ID0gIXQgaW5cbiAgaWYgT3B0aW9uLmlzX25vbmUgdCB8fCAoT3B0aW9uLmdldCB0KS5zaXplID0gMFxuICB0aGVuIGZhbHNlXG4gIGVsc2UgKFxuICAgIGxldCB0ID0gT3B0aW9uLmdldCB0IGluXG4gICAgbGV0IGhhc2ggPSBJbnQuaGFzaCB4IGluXG4gICAgbGV0IHNsb3RzID0gQXJyYXkubGVuZ3RoIHQudGFibGUgaW5cbiAgICBsZXQgaW5kZXggPSBoYXNoIGxhbmQgKHNsb3RzIC0gMSkgaW5cbiAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgbGV0IGZvdW5kID0gcmVmIGZhbHNlIGluXG4gICAgd2hpbGUgKG5vdCAhZm91bmQpICYmICFpIDwgc2xvdHMgZG9cbiAgICAgIGxldCBpZHggPSBpbmRleF9vZl9vZmZzZXQgc2xvdHMgaW5kZXggaSBpblxuICAgICAgbGV0IGVsZW0gPSBBcnJheS51bnNhZmVfZ2V0IHQudGFibGUgaWR4IGluXG4gICAgICBpZiBJbnQuZXF1YWwgZWxlbSB4XG4gICAgICB0aGVuIGZvdW5kIDo9IHRydWVcbiAgICAgIGVsc2UgaWYgSW50LmVxdWFsIGVsZW0gYWJzZW50XG4gICAgICB0aGVuIGkgOj0gc2xvdHNcbiAgICAgIGVsc2UgaW5jciBpXG4gICAgZG9uZTtcbiAgICAhZm91bmQpXG47O1xuXG5sZXQgcHAgZm10IHQgPVxuICBsZXQgeyB0YWJsZTsgc2l6ZSB9ID0gaW5pdCB0IGluXG4gIGxldCB0YWJsZSA9XG4gICAgQXJyYXkuZm9sZF9sZWZ0IHRhYmxlIH5pbml0OltdIH5mOihmdW4gYWNjIGkgLT4gaWYgaSA9IGFic2VudCB0aGVuIGFjYyBlbHNlIGkgOjogYWNjKVxuICAgIHw+IExpc3QucmV2XG4gICAgfD4gU3RkbGliLkFycmF5Lm9mX2xpc3RcbiAgaW5cbiAgbGV0IHRhYmxlIGZtdCAoKSA9IEZtdC5zZXhwIGZtdCBcInRhYmxlXCIgRm10LihhcnJheSBpbnQpIHRhYmxlIGluXG4gIGxldCBzaXplIGZtdCAoKSA9IEZtdC5zZXhwIGZtdCBcInNpemVcIiBGbXQuaW50IHNpemUgaW5cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWFALiVhQC5cIiB0YWJsZSAoKSBzaXplICgpXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfY2FsbDQiLCJmIiwiYTAiLCJhMSIsImEyIiwiYTMiLCJnbG9iYWxfZGF0YSIsIlJlX0ZtdCIsIlJlX0ltcG9ydCIsIlN0ZGxpYl9MaXN0TGFiZWxzIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX0Zvcm1hdCIsIlN0ZGxpYl9PcHRpb24iLCJTdGRsaWJfQnl0ZXMiLCJBc3NlcnRfZmFpbHVyZSIsImxlbmd0aCIsInQiLCJ1bnNhZmVfZ2V0IiwiaSIsInVuc2FmZV9zZXQiLCJ4IiwibWFrZV9hYnNlbnQiLCJsZW4iLCJpbml0IiwiYWJzZW50IiwiY3JlYXRlIiwicGFyYW0iLCJpbmRleF9vZl9vZmZzZXQiLCJzbG90cyIsImluZGV4IiwiY2xlYXIiLCJtYXRjaCIsImhhc2giLCJpbnNlcnRpbmciLCJpZHgiLCJlbGVtIiwiYWRkIiwib2xkX3RhYmxlIiwidGFibGUiLCJpc19lbXB0eSIsIm1lbSIsImZvdW5kIiwicHAiLCJmbXQiLCJzaXplIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQyxJQUFBQyxJQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsWUFBQUMsT0FBQUMsR0NNMEIsdUNBQXNCO0FBQUEsWUFBQUMsV0FBQUQsR0FBQUU7QUFBQUEsSUFDSCxPQUFrQztBQUFBLGFBQWxDLDBDQUFrQztBQUFBO0FBQUEsWUFBQUMsV0FBQUgsR0FBQUUsR0FBQUU7QUFBQUEsSUFDWixPQUFnQjtBQUFBLGlDQUFoQiwrQkFBZ0I7QUFBQTtBQUFBLFlBQUFDLFlBQUFDO0FBQUFBLElBVWxELG1EQUErQjtBQUFBO0FBQUEsWUFBQUMsS0FBQVA7QUFBQUEsSUE0QjNEO0FBQUEsU0FBQUEsSUFuQ08sa0NBQ0s7QUFBQSxL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QWdDO0FBQUE7QUFBQSxJQUNsRDtBQUFBLDBFQUE4QztBQUFBO0FBQUEsR0E5RlI7QUFBQTtBQUFBO0FBQUEsRUQzRHhDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzAxMjEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9tYXJrX2luZm9zLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwib3BlbiBJbXBvcnRcblxudHlwZSB0ID0gaW50IGFycmF5XG5cbmxldCBtYWtlIG1hcmtzID1cbiAgbGV0IGxlbiA9IDEgKyBMaXN0LmZvbGRfbGVmdCB+ZjooZnVuIG1hIChpLCBfKSAtPiBtYXggbWEgaSkgfmluaXQ6KC0xKSBtYXJrcyBpblxuICBsZXQgdCA9IEFycmF5Lm1ha2UgbGVuICgtMSkgaW5cbiAgbGV0IHNldCAoaSwgdikgPSB0LihpKSA8LSB2IGluXG4gIExpc3QuaXRlciB+ZjpzZXQgbWFya3M7XG4gIHRcbjs7XG5cbmxldCB0ZXN0IHQgaSA9IGlmIDIgKiBpID49IEFycmF5Lmxlbmd0aCB0IHRoZW4gZmFsc2UgZWxzZSB0LigyICogaSkgPD4gLTFcblxubW9kdWxlIE9mZnNldCA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgaXNfcHJlc2VudCB0ID0gdCA+PSAwXG4gIGxldCBnZXRfbm9fY2hlY2sgdCA9IHRcbmVuZFxuXG5sZXQgc3RhcnRfb2Zmc2V0IHQgaSA9XG4gIGxldCBzdGFydF9pID0gMiAqIGkgaW5cbiAgaWYgc3RhcnRfaSArIDEgPj0gQXJyYXkubGVuZ3RoIHQgdGhlbiAtMSBlbHNlIHQuKHN0YXJ0X2kpXG47O1xuXG5sZXQgc3RvcF9vZmZzZXQgdCBpID1cbiAgbGV0IHN0b3BfaSA9ICgyICogaSkgKyAxIGluXG4gIGlmIHN0b3BfaSA+PSBBcnJheS5sZW5ndGggdCB0aGVuIC0xIGVsc2UgdC4oc3RvcF9pKVxuOztcblxubGV0IG9mZnNldCB0IGkgPVxuICBsZXQgc3RhcnRfaSA9IDIgKiBpIGluXG4gIGxldCBzdG9wX2kgPSBzdGFydF9pICsgMSBpblxuICBpZiBzdG9wX2kgPj0gQXJyYXkubGVuZ3RoIHRcbiAgdGhlbiBOb25lXG4gIGVsc2UgKFxuICAgIGxldCBzdGFydCA9IHQuKHN0YXJ0X2kpIGluXG4gICAgaWYgc3RhcnQgPSAtMVxuICAgIHRoZW4gTm9uZVxuICAgIGVsc2UgKFxuICAgICAgbGV0IHN0b3AgPSB0LihzdG9wX2kpIGluXG4gICAgICBTb21lIChzdGFydCwgc3RvcCkpKVxuOztcblxubGV0IGl0ZXJpIHQgfmYgPVxuICBmb3IgaSA9IDAgdG8gKEFycmF5Lmxlbmd0aCB0IC8gMikgLSAxIGRvXG4gICAgbGV0IGlkeCA9IDIgKiBpIGluXG4gICAgbGV0IHN0YXJ0ID0gdC4oaWR4KSBpblxuICAgIGlmIHN0YXJ0IDw+IC0xXG4gICAgdGhlbiAoXG4gICAgICBsZXQgc3RvcCA9IHQuKGlkeCArIDEpIGluXG4gICAgICBmIGkgc3RhcnQgc3RvcClcbiAgZG9uZVxuOztcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfY2FsbDMiLCJmIiwiYTAiLCJhMSIsImEyIiwiZ2xvYmFsX2RhdGEiLCJSZV9JbXBvcnQiLCJTdGRsaWJfTGlzdExhYmVscyIsIm1ha2UiLCJtYXJrcyIsImxlbiIsIm1hIiwicGFyYW0iLCJpIiwidCIsInNldCIsInYiLCJ0ZXN0IiwiaXNfcHJlc2VudCIsImdldF9ub19jaGVjayIsInN0YXJ0X29mZnNldCIsInN0YXJ0X2kiLCJzdG9wX29mZnNldCIsInN0b3BfaSIsIm9mZnNldCIsInN0YXJ0Iiwic3RvcCIsIml0ZXJpIiwiaWR4Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUMsSUFBQUMsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLFlBQUFDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUFDO0FBQUFBLE9DS2dCO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQUFDLElBQUFDO0FBQUFBLGVBQUFDLElBQWtCO0FBQUEsV0FBa0IscUNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQUFDLElBQ25EO0FBQUEsYUFBQUMsSUFBQUg7QUFBQUEsU0FBQUksSUFDQSxVQUFBSCxJQUFBO0FBQUEsS0FBUztBQUFBLEtBQVU7QUFBQTtBQUFBLElBQzNCO0FBQUEsSUFBc0I7QUFBQSxHQUNyQjtBQUFBLFlBQUFJLEtBQUFILEdBQUFEO0FBQUFBLElBR1ksZ0NBQWdDO0FBQUEsWUFBVztBQUFBLHVEQUFTO0FBQUEsR0FBTTtBQUFBLFlBQUFLLFdBQUFKLEdBS3BELHNCQUFNO0FBQUEsWUFBQUssYUFBQUwsR0FDSixTQUFDO0FBQUEsWUFBQU0sYUFBQU4sR0FBQUQ7QUFBQUEsUUFBQVEsVUFJdEI7QUFBQSxJQUNBO0FBQUE7QUFBQSxjQUE4Qyx5Q0FBVztBQUFBO0FBQUEsWUFBQUMsWUFBQVIsR0FBQUQ7QUFBQUEsUUFBQVUsU0FJekQ7QUFBQSxJQUNBO0FBQUE7QUFBQSxjQUF5Qyx1Q0FBVTtBQUFBO0FBQUEsWUFBQUMsT0FBQVYsR0FBQUQ7QUFBQUEsUUFBQVEsVUFJbkQsV0FBQUUsU0FDQTtBQUFBLElBQ0EsMkJBQ0s7QUFBQSxRQUFBRSxRQUVTO0FBQUEsSUFDVCx1Q0FDRTtBQUFBLFFBQUFDLE9BRVE7QUFBQSxJQUNYO0FBQUEsR0FBb0I7QUFBQSxZQUFBQyxNQUFBYixHQUFBYjtBQUFBQSxRQUFBLElBSXhCO0FBQUE7QUFBQSxTQUFBWSxJQUFBO0FBQUE7QUFBQSxVQUFBZSxNQUNFLFdBQUFILFFBQ1k7QUFBQSxNQUNaO0FBQUEsZUFDSyxhQUFBQyxPQUNRO0FBQUEsT0FDWDtBQUFBO0FBQUEsY0FIRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFIRjtBQUFBLEdBT0k7QUFBQSxHRHJETiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMwMjIwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvcG1hcmsubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJtb2R1bGUgUG1hcmsgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IGVxdWFsICh4IDogaW50KSAoeSA6IGludCkgPSB4ID0geVxuICBsZXQgY29tcGFyZSAoeCA6IGludCkgKHkgOiBpbnQpID0gY29tcGFyZSB4IHlcbiAgbGV0IHIgPSBBdG9taWMubWFrZSAxXG4gIGxldCBnZW4gKCkgPSBBdG9taWMuZmV0Y2hfYW5kX2FkZCByIDFcbiAgbGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2ludFxuZW5kXG5cbmluY2x1ZGUgUG1hcmtcblxubW9kdWxlIFNldCA9IHN0cnVjdFxuICBtb2R1bGUgU2V0ID0gU2V0Lk1ha2UgKFBtYXJrKVxuXG4gIGxldFtAd2FybmluZyBcIi0zMlwiXSB0b19saXN0IHggPVxuICAgIGxldCBvcGVuIFNldCBpblxuICAgIHRvX3NlcSB4IHw+IExpc3Qub2Zfc2VxXG4gIDs7XG5cbiAgaW5jbHVkZSBTZXRcbmVuZFxuXG5sZXQgdG9fZHluID0gRHluLmludFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9BdG9taWMiLCJTdGRsaWJfRm9ybWF0IiwiU3RkbGliX1NldCIsIlJlX0R5biIsImVxdWFsIiwieCIsInkiLCJjb21wYXJlIiwiciIsImdlbiIsInBhcmFtIiwicHAiLCJTZXQiLCJlbXB0eSIsImFkZCIsInNpbmdsZXRvbiIsInJlbW92ZSIsInVuaW9uIiwiaW50ZXIiLCJkaXNqb2ludCIsImRpZmYiLCJjYXJkaW5hbCIsImVsZW1lbnRzIiwibWluX2VsdCIsIm1pbl9lbHRfb3B0IiwibWF4X2VsdCIsIm1heF9lbHRfb3B0IiwiY2hvb3NlIiwiY2hvb3NlX29wdCIsImZpbmQiLCJmaW5kX29wdCIsImZpbmRfZmlyc3QiLCJmaW5kX2ZpcnN0X29wdCIsImZpbmRfbGFzdCIsImZpbmRfbGFzdF9vcHQiLCJpdGVyIiwiZm9sZCIsIm1hcCIsImZpbHRlciIsImZpbHRlcl9tYXAiLCJwYXJ0aXRpb24iLCJzcGxpdCIsImlzX2VtcHR5IiwibWVtIiwic3Vic2V0IiwiZm9yX2FsbCIsImV4aXN0cyIsInRvX2xpc3QiLCJvZl9saXN0IiwidG9fc2VxX2Zyb20iLCJ0b19zZXEiLCJ0b19yZXZfc2VxIiwiYWRkX3NlcSIsIm9mX3NlcSIsInRvX2R5biJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDLEdDR2tDLHVCQUFLO0FBQUEsT0FBQUMsVURIdkMsMEJBQUFDLElDS1U7QUFBQSxZQUFBQyxJQUFBQyxPQUNLLHdDQUF3QjtBQUFBO0FBQUEsSUFBQUMsS0FEaEI7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQXZDLFVBQUE7QUFBQSxJQUFBRyxZQUFBO0FBQUEsSUFBQXFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURMdkIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozMDM0MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2F1dG9tYXRhLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwib3BlbiBJbXBvcnRcblxuKCpcbiAgIFJFIC0gQSByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeVxuXG4gICBDb3B5cmlnaHQgKEMpIDIwMDEgSmVyb21lIFZvdWlsbG9uXG4gICBlbWFpbDogSmVyb21lLlZvdWlsbG9uQHBwcy5qdXNzaWV1LmZyXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGhcbiAgIGxpbmtpbmcgZXhjZXB0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdFxuICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQVxuKilcblxubGV0IGhhc2hfY29tYmluZSBoIGFjY3UgPSAoYWNjdSAqIDY1NTk5KSArIGhcblxubW9kdWxlIElkcyA6IHNpZ1xuICBtb2R1bGUgSWQgOiBzaWdcbiAgICB0eXBlIHRcblxuICAgIHZhbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIHplcm8gOiB0XG4gICAgdmFsIGhhc2ggOiB0IC0+IGludFxuICAgIHZhbCBwcCA6IHQgRm10LnRcblxuICAgIG1vZHVsZSBIYXNoX3NldCA6IHNpZ1xuICAgICAgdHlwZSBpZCA6PSB0XG4gICAgICB0eXBlIHRcblxuICAgICAgdmFsIGNyZWF0ZSA6IHVuaXQgLT4gdFxuICAgICAgdmFsIG1lbSA6IHQgLT4gaWQgLT4gYm9vbFxuICAgICAgdmFsIGFkZCA6IHQgLT4gaWQgLT4gdW5pdFxuICAgICAgdmFsIGNsZWFyIDogdCAtPiB1bml0XG4gICAgZW5kXG4gIGVuZFxuXG4gIHR5cGUgdFxuXG4gIHZhbCBjcmVhdGUgOiB1bml0IC0+IHRcbiAgdmFsIG5leHQgOiB0IC0+IElkLnRcbmVuZCA9IHN0cnVjdFxuICBtb2R1bGUgSWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIG1vZHVsZSBIYXNoX3NldCA9IEhhc2hfc2V0XG5cbiAgICBsZXQgZXF1YWwgPSBJbnQuZXF1YWxcbiAgICBsZXQgemVybyA9IDBcbiAgICBsZXQgaGFzaCB4ID0geFxuICAgIGxldCBwcCA9IEZtdC5pbnRcbiAgZW5kXG5cbiAgdHlwZSB0ID0gaW50IHJlZlxuXG4gIGxldCBjcmVhdGUgKCkgPSByZWYgMFxuXG4gIGxldCBuZXh0IHQgPVxuICAgIGluY3IgdDtcbiAgICAhdFxuICA7O1xuZW5kXG5cbm1vZHVsZSBJZCA9IElkcy5JZFxuXG5tb2R1bGUgU2VtID0gc3RydWN0XG4gIHR5cGUgdCA9XG4gICAgWyBgTG9uZ2VzdFxuICAgIHwgYFNob3J0ZXN0XG4gICAgfCBgRmlyc3RcbiAgICBdXG5cbiAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBgU2hvcnRlc3QgLT4gXCJzaG9ydFwiXG4gICAgfCBgTG9uZ2VzdCAtPiBcImxvbmdcIlxuICAgIHwgYEZpcnN0IC0+IFwiZmlyc3RcIlxuICA7O1xuXG4gIGxldCB0b19keW4gdCA9IER5bi5lbnVtICh0b19zdHJpbmcgdClcbiAgbGV0IGVxdWFsID0gUG9seS5lcXVhbFxuICBsZXQgcHAgY2ggayA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgY2ggKHRvX3N0cmluZyBrKVxuZW5kXG5cbm1vZHVsZSBSZXBfa2luZCA9IHN0cnVjdFxuICB0eXBlIHQgPVxuICAgIFsgYEdyZWVkeVxuICAgIHwgYE5vbl9ncmVlZHlcbiAgICBdXG5cbiAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBgR3JlZWR5IC0+IFwiR3JlZWR5XCJcbiAgICB8IGBOb25fZ3JlZWR5IC0+IFwiTm9uX2dyZWVkeVwiXG4gIDs7XG5cbiAgbGV0IHRvX2R5biB0ID0gRHluLmVudW0gKHRvX3N0cmluZyB0KVxuICBsZXQgcHAgZm10IHQgPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCAodG9fc3RyaW5nIHQpXG5lbmRcblxubW9kdWxlIE1hcmsgOiBzaWdcbiAgdHlwZSB0ID0gcHJpdmF0ZSBpbnRcblxuICB2YWwgY29tcGFyZSA6IHQgLT4gdCAtPiBpbnRcbiAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsIHBwIDogdCBGbXQudFxuICB2YWwgdG9fZHluIDogdCAtPiBEeW4udFxuICB2YWwgc3RhcnQgOiB0XG4gIHZhbCBwcmV2IDogdCAtPiB0XG4gIHZhbCBuZXh0IDogdCAtPiB0XG4gIHZhbCBuZXh0MiA6IHQgLT4gdFxuICB2YWwgZ3JvdXBfY291bnQgOiB0IC0+IGludFxuICB2YWwgb3V0c2lkZV9yYW5nZSA6IHQgLT4gc3RhcnRfaW5jbHVzaXZlOnQgLT4gc3RvcF9pbmNsdXNpdmU6dCAtPiBib29sXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IGVxdWFsID0gSW50LmVxdWFsXG4gIGxldCBjb21wYXJlID0gSW50LmNvbXBhcmVcbiAgbGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2ludFxuICBsZXQgdG9fZHluID0gRHluLmludFxuICBsZXQgc3RhcnQgPSAwXG4gIGxldCBwcmV2IHggPSBwcmVkIHhcbiAgbGV0IG5leHQgeCA9IHN1Y2MgeFxuICBsZXQgbmV4dDIgeCA9IHggKyAyXG4gIGxldCBncm91cF9jb3VudCB4ID0geCAvIDJcblxuICBsZXQgb3V0c2lkZV9yYW5nZSB0IH5zdGFydF9pbmNsdXNpdmUgfnN0b3BfaW5jbHVzaXZlID1cbiAgICB0IDwgc3RhcnRfaW5jbHVzaXZlIHx8IHQgPiBzdG9wX2luY2x1c2l2ZVxuICA7O1xuZW5kXG5cbm1vZHVsZSBJZHggOiBzaWdcbiAgdHlwZSB0ID0gcHJpdmF0ZSBpbnRcblxuICB2YWwgcHAgOiB0IEZtdC50XG4gIHZhbCB0b19keW4gOiB0IC0+IER5bi50XG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgdW5rbm93biA6IHRcbiAgdmFsIGluaXRpYWwgOiB0XG4gIHZhbCB1c2VkIDogdCAtPiBib29sXG4gIHZhbCBtYWtlIDogaW50IC0+IHRcbiAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgdG9fZHluID0gRHluLmludFxuICBsZXQgdG9faW50IHggPSB4XG4gIGxldCBwcCA9IEZvcm1hdC5wcF9wcmludF9pbnRcbiAgbGV0IHVzZWQgdCA9IHQgPj0gMFxuICBsZXQgbWFrZSB4ID0geFxuICBsZXQgZXF1YWwgPSBJbnQuZXF1YWxcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaW5pdGlhbCA9IDBcbmVuZFxuXG5tb2R1bGUgRXhwciA9IHN0cnVjdFxuICB0eXBlIHQgPVxuICAgIHsgaWQgOiBJZC50XG4gICAgOyBkZWYgOiBkZWZcbiAgICB9XG5cbiAgYW5kIGRlZiA9XG4gICAgfCBDc3Qgb2YgQ3NldC50XG4gICAgfCBBbHQgb2YgdCBsaXN0XG4gICAgfCBTZXEgb2YgU2VtLnQgKiB0ICogdFxuICAgIHwgRXBzXG4gICAgfCBSZXAgb2YgUmVwX2tpbmQudCAqIFNlbS50ICogdFxuICAgIHwgTWFyayBvZiBNYXJrLnRcbiAgICB8IEVyYXNlIG9mIE1hcmsudCAqIE1hcmsudFxuICAgIHwgQmVmb3JlIG9mIENhdGVnb3J5LnRcbiAgICB8IEFmdGVyIG9mIENhdGVnb3J5LnRcbiAgICB8IFBtYXJrIG9mIFBtYXJrLnRcblxuICBsZXQgd3JhcF9zZW0gc2VtIHNlbScgdiA9XG4gICAgbGV0IG9wZW4gRHluIGluXG4gICAgbGV0IG5hbWUgPSBTZW0udG9fc3RyaW5nIHNlbScgaW5cbiAgICBtYXRjaCBzZW0gd2l0aFxuICAgIHwgU29tZSBzZW0gd2hlbiBTZW0uZXF1YWwgc2VtIHNlbScgLT4gdlxuICAgIHwgTm9uZSB8IFNvbWUgXyAtPlxuICAgICAgKG1hdGNoIHYgd2l0aFxuICAgICAgIHwgTGlzdCB2IC0+IHZhcmlhbnQgbmFtZSB2XG4gICAgICAgfCBfIC0+IHZhcmlhbnQgbmFtZSBbIHYgXSlcbiAgOztcblxuICBsZXQgcmVjIHNlcV9hc19saXN0IHNlbSA9IGZ1bmN0aW9uXG4gICAgfCBFcHMgLT4gW11cbiAgICB8IENzdCBjcyAtPiBbIENzdCBjcyBdXG4gICAgfCBTZXEgKHNlbScsIHgsIHkpIC0+XG4gICAgICBpZiBTZW0uZXF1YWwgc2VtIHNlbSdcbiAgICAgIHRoZW4geC5kZWYgOjogc2VxX2FzX2xpc3Qgc2VtIHkuZGVmXG4gICAgICBlbHNlIHJhaXNlX25vdHJhY2UgTm90X2ZvdW5kXG4gICAgfCBfIC0+IHJhaXNlX25vdHJhY2UgTm90X2ZvdW5kXG4gIDs7XG5cbiAgbGV0IHNlcV9hc19saXN0IHNlbSB0ID1cbiAgICBtYXRjaCBzZXFfYXNfbGlzdCBzZW0gdCB3aXRoXG4gICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IE5vbmVcbiAgICB8IHMgLT4gU29tZSBzXG4gIDs7XG5cbiAgbGV0IHJlYyBkeW5fb2ZfZGVmIHNlbSA9XG4gICAgbGV0IG9wZW4gRHluIGluXG4gICAgZnVuY3Rpb25cbiAgICB8IENzdCBjc2V0IC0+IENzZXQudG9fZHluIGNzZXRcbiAgICB8IEFsdCBhbHQgLT4gdmFyaWFudCBcIkFsdFwiIChMaXN0Lm1hcCB+ZjoodG9fZHluIHNlbSkgYWx0KVxuICAgIHwgU2VxIChzZW0nLCB4LCB5KSAtPlxuICAgICAgbGV0IHRvX2R5biA9IHRvX2R5biAoU29tZSBzZW0nKSBpblxuICAgICAgbGV0IHggPVxuICAgICAgICBtYXRjaCBzZXFfYXNfbGlzdCBzZW0nIHkuZGVmIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHZhcmlhbnQgXCJTZXFcIiBbIHRvX2R5biB4OyB0b19keW4geSBdXG4gICAgICAgIHwgU29tZSB5IC0+IHZhcmlhbnQgXCJTZXFcIiAodG9fZHluIHggOjogTGlzdC5tYXAgeSB+ZjooZHluX29mX2RlZiBzZW0pKVxuICAgICAgaW5cbiAgICAgIHdyYXBfc2VtIHNlbSBzZW0nIHhcbiAgICB8IEVwcyAtPiBFbnVtIFwiRXBzXCJcbiAgICB8IFJlcCAoXywgc2VtJywgdCkgLT4gd3JhcF9zZW0gc2VtIHNlbScgKHZhcmlhbnQgXCJSZXBcIiBbIHRvX2R5biAoU29tZSBzZW0nKSB0IF0pXG4gICAgfCBNYXJrIG0gLT4gdmFyaWFudCBcIk1hcmtcIiBbIE1hcmsudG9fZHluIG0gXVxuICAgIHwgUG1hcmsgbSAtPiB2YXJpYW50IFwiUG1hcmtcIiBbIFBtYXJrLnRvX2R5biBtIF1cbiAgICB8IEVyYXNlICh4LCB5KSAtPiB2YXJpYW50IFwiRXJhc2VcIiBbIE1hcmsudG9fZHluIHg7IE1hcmsudG9fZHluIHkgXVxuICAgIHwgQmVmb3JlIGMgLT4gdmFyaWFudCBcIkJlZm9yZVwiIFsgQ2F0ZWdvcnkudG9fZHluIGMgXVxuICAgIHwgQWZ0ZXIgYyAtPiB2YXJpYW50IFwiQWZ0ZXJcIiBbIENhdGVnb3J5LnRvX2R5biBjIF1cblxuICBhbmQgdG9fZHluIHNlbSB7IGlkID0gXzsgZGVmIH0gPSBkeW5fb2ZfZGVmIHNlbSBkZWZcblxuICBsZXQgcmVjIHBwX3dpdGhfc2VtIHNlbSBjaCBlID1cbiAgICBsZXQgb3BlbiBGbXQgaW5cbiAgICBtYXRjaCBlLmRlZiB3aXRoXG4gICAgfCBDc3QgbCAtPiBzZXhwIGNoIFwiY3N0XCIgQ3NldC5wcCBsXG4gICAgfCBBbHQgbCAtPiBzZXhwIGNoIFwiYWx0XCIgKGxpc3QgKHBwX3dpdGhfc2VtIHNlbSkpIGxcbiAgICB8IFNlcSAoaywgZSwgZScpIC0+XG4gICAgICBzZXhwIGNoIFwic2VxXCIgKHRyaXBsZSBTZW0ucHAgKHBwX3dpdGhfc2VtIHNlbSkgKHBwX3dpdGhfc2VtIHNlbSkpIChrLCBlLCBlJylcbiAgICB8IEVwcyAtPiBzdHIgY2ggXCJlcHNcIlxuICAgIHwgUmVwIChfcmssIGssIGUpIC0+IHNleHAgY2ggXCJyZXBcIiAocGFpciBTZW0ucHAgKHBwX3dpdGhfc2VtIChTb21lIGspKSkgKGssIGUpXG4gICAgfCBNYXJrIGkgLT4gc2V4cCBjaCBcIm1hcmtcIiBNYXJrLnBwIGlcbiAgICB8IFBtYXJrIGkgLT4gc2V4cCBjaCBcInBtYXJrXCIgUG1hcmsucHAgaVxuICAgIHwgRXJhc2UgKGIsIGUpIC0+IHNleHAgY2ggXCJlcmFzZVwiIChwYWlyIE1hcmsucHAgTWFyay5wcCkgKGIsIGUpXG4gICAgfCBCZWZvcmUgYyAtPiBzZXhwIGNoIFwiYmVmb3JlXCIgQ2F0ZWdvcnkucHAgY1xuICAgIHwgQWZ0ZXIgYyAtPiBzZXhwIGNoIFwiYWZ0ZXJcIiBDYXRlZ29yeS5wcCBjXG4gIDs7XG5cbiAgbGV0IHBwID0gcHBfd2l0aF9zZW0gTm9uZVxuICBsZXQgZXBzX2V4cHIgPSB7IGlkID0gSWQuemVybzsgZGVmID0gRXBzIH1cbiAgbGV0IG1rIGlkcyBkZWYgPSB7IGlkID0gSWRzLm5leHQgaWRzOyBkZWYgfVxuICBsZXQgZW1wdHkgaWRzID0gbWsgaWRzIChBbHQgW10pXG4gIGxldCBjc3QgaWRzIHMgPSBpZiBDc2V0LmlzX2VtcHR5IHMgdGhlbiBlbXB0eSBpZHMgZWxzZSBtayBpZHMgKENzdCBzKVxuICBsZXQgZXBzIGlkcyA9IG1rIGlkcyBFcHNcbiAgbGV0IHJlcCBpZHMga2luZCBzZW0geCA9IG1rIGlkcyAoUmVwIChraW5kLCBzZW0sIHgpKVxuICBsZXQgbWFyayBpZHMgbSA9IG1rIGlkcyAoTWFyayBtKVxuICBsZXQgcG1hcmsgaWRzIGkgPSBtayBpZHMgKFBtYXJrIGkpXG4gIGxldCBlcmFzZSBpZHMgbSBtJyA9IG1rIGlkcyAoRXJhc2UgKG0sIG0nKSlcbiAgbGV0IGJlZm9yZSBpZHMgYyA9IG1rIGlkcyAoQmVmb3JlIGMpXG4gIGxldCBhZnRlciBpZHMgYyA9IG1rIGlkcyAoQWZ0ZXIgYylcblxuICBsZXQgYWx0IGlkcyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBlbXB0eSBpZHNcbiAgICB8IFsgYyBdIC0+IGNcbiAgICB8IGwgLT4gbWsgaWRzIChBbHQgbClcbiAgOztcblxuICBsZXQgc2VxIGlkcyAoa2luZCA6IFNlbS50KSB4IHkgPVxuICAgIG1hdGNoIHguZGVmLCB5LmRlZiB3aXRoXG4gICAgfCBBbHQgW10sIF8gLT4geFxuICAgIHwgXywgQWx0IFtdIC0+IHlcbiAgICB8IEVwcywgXyAtPiB5XG4gICAgfCBfLCBFcHMgd2hlbiBTZW0uZXF1YWwga2luZCBgRmlyc3QgLT4geFxuICAgIHwgXyAtPiBtayBpZHMgKFNlcSAoa2luZCwgeCwgeSkpXG4gIDs7XG5cbiAgbGV0IGlzX2VwcyBleHByID1cbiAgICBtYXRjaCBleHByLmRlZiB3aXRoXG4gICAgfCBFcHMgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuICA7O1xuXG4gIGxldCByZWMgcmVuYW1lIGlkcyB4ID1cbiAgICBtYXRjaCB4LmRlZiB3aXRoXG4gICAgfCBDc3QgXyB8IEVwcyB8IE1hcmsgXyB8IFBtYXJrIF8gfCBFcmFzZSBfIHwgQmVmb3JlIF8gfCBBZnRlciBfIC0+IG1rIGlkcyB4LmRlZlxuICAgIHwgQWx0IGwgLT4gbWsgaWRzIChBbHQgKExpc3QubWFwIH5mOihyZW5hbWUgaWRzKSBsKSlcbiAgICB8IFNlcSAoaywgeSwgeikgLT4gbWsgaWRzIChTZXEgKGssIHJlbmFtZSBpZHMgeSwgcmVuYW1lIGlkcyB6KSlcbiAgICB8IFJlcCAoZywgaywgeSkgLT4gbWsgaWRzIChSZXAgKGcsIGssIHJlbmFtZSBpZHMgeSkpXG4gIDs7XG5lbmRcblxudHlwZSBleHByID0gRXhwci50XG5cbmluY2x1ZGUgRXhwclxuXG5tb2R1bGUgTWFya3MgPSBzdHJ1Y3RcbiAgdHlwZSB0ID1cbiAgICB7IG1hcmtzIDogKE1hcmsudCAqIElkeC50KSBsaXN0XG4gICAgOyBwbWFya3MgOiBQbWFyay5TZXQudFxuICAgIH1cblxuICBsZXQgdG9fZHluIHsgbWFya3M7IHBtYXJrcyB9IDogRHluLnQgPVxuICAgIGxldCBvcGVuIER5biBpblxuICAgIHJlY29yZFxuICAgICAgWyAoIFwibWFya3NcIlxuICAgICAgICAsIExpc3QubWFwIG1hcmtzIH5mOihmdW4gKG0sIGlkeCkgLT4gcGFpciAoTWFyay50b19keW4gbSkgKElkeC50b19keW4gaWR4KSlcbiAgICAgICAgICB8PiBsaXN0IClcbiAgICAgIDsgXCJwbWFya3NcIiwgUG1hcmsuU2V0LnRvX2xpc3QgcG1hcmtzIHw+IExpc3QubWFwIH5mOlBtYXJrLnRvX2R5biB8PiBsaXN0XG4gICAgICBdXG4gIDs7XG5cbiAgbGV0IGVxdWFsIHsgbWFya3M7IHBtYXJrcyB9IHQgPVxuICAgIExpc3QuZXF1YWxcbiAgICAgIH5lcTooZnVuICh4LCB5KSAoeCcsIHknKSAtPiBNYXJrLmVxdWFsIHggeCcgJiYgSWR4LmVxdWFsIHkgeScpXG4gICAgICBtYXJrc1xuICAgICAgdC5tYXJrc1xuICAgICYmIFBtYXJrLlNldC5lcXVhbCBwbWFya3MgdC5wbWFya3NcbiAgOztcblxuICBsZXQgZW1wdHkgPSB7IG1hcmtzID0gW107IHBtYXJrcyA9IFBtYXJrLlNldC5lbXB0eSB9XG5cbiAgbGV0IGhhc2hfbWFya3Nfb2Zmc2V0ID1cbiAgICBsZXQgZiBhY2MgKChhIDogTWFyay50KSwgKGkgOiBJZHgudCkpID1cbiAgICAgIGhhc2hfY29tYmluZSAoYSA6PiBpbnQpIChoYXNoX2NvbWJpbmUgKGkgOj4gaW50KSBhY2MpXG4gICAgaW5cbiAgICBmdW4gbCBpbml0IC0+IExpc3QuZm9sZF9sZWZ0IGwgfmluaXQgfmZcbiAgOztcblxuICBsZXQgaGFzaCBtIGFjY3UgPSBoYXNoX21hcmtzX29mZnNldCBtLm1hcmtzIChoYXNoX2NvbWJpbmUgKEhhc2h0YmwuaGFzaCBtLnBtYXJrcykgYWNjdSlcblxuICBsZXQgbWFya3Nfc2V0X2lkeCA9XG4gICAgbGV0IHJlYyBtYXJrc19zZXRfaWR4IGlkeCBtYXJrcyA9XG4gICAgICBtYXRjaCBtYXJrcyB3aXRoXG4gICAgICB8IFtdIC0+IFtdXG4gICAgICB8IChhLCBpZHgnKSA6OiByZW0gLT5cbiAgICAgICAgaWYgSWR4LmVxdWFsIGlkeCcgSWR4LnVua25vd24gdGhlbiAoYSwgaWR4KSA6OiBtYXJrc19zZXRfaWR4IGlkeCByZW0gZWxzZSBtYXJrc1xuICAgIGluXG4gICAgZnVuIG1hcmtzIGlkeCAtPiB7IG1hcmtzIHdpdGggbWFya3MgPSBtYXJrc19zZXRfaWR4IGlkeCBtYXJrcy5tYXJrcyB9XG4gIDs7XG5cbiAgbGV0IGZpbHRlciB0IChiIDogTWFyay50KSAoZSA6IE1hcmsudCkgPVxuICAgIHsgdCB3aXRoXG4gICAgICBtYXJrcyA9XG4gICAgICAgIExpc3QuZmlsdGVyIHQubWFya3MgfmY6KGZ1biAoKGkgOiBNYXJrLnQpLCBfKSAtPlxuICAgICAgICAgIE1hcmsub3V0c2lkZV9yYW5nZSBpIH5zdGFydF9pbmNsdXNpdmU6YiB+c3RvcF9pbmNsdXNpdmU6ZSlcbiAgICB9XG4gIDs7XG5cbiAgbGV0IHNldF9tYXJrIHQgKGkgOiBNYXJrLnQpID1cbiAgICB7IHQgd2l0aCBtYXJrcyA9IChpLCBJZHgudW5rbm93bikgOjogTGlzdC5yZW1vdmVfYXNzcSBpIHQubWFya3MgfVxuICA7O1xuXG4gIGxldCBzZXRfcG1hcmsgdCBpID0geyB0IHdpdGggcG1hcmtzID0gUG1hcmsuU2V0LmFkZCBpIHQucG1hcmtzIH1cblxuICBsZXQgcHAgZm10IHsgbWFya3M7IHBtYXJrcyB9ID1cbiAgICBGb3JtYXQucHBfb3Blbl9ib3ggZm10IDE7XG4gICAgKG1hdGNoIG1hcmtzIHdpdGhcbiAgICAgfCBbXSAtPiAoKVxuICAgICB8IF8gOjogXyAtPlxuICAgICAgIEZvcm1hdC5mcHJpbnRmXG4gICAgICAgICBmbXRcbiAgICAgICAgIFwiQFs8Mj5tYXJrc0AgJWFAXVwiXG4gICAgICAgICAoRm9ybWF0LnBwX3ByaW50X2xpc3QgKGZ1biBmbXQgKGEsIGkpIC0+XG4gICAgICAgICAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYS0lYVwiIE1hcmsucHAgYSBJZHgucHAgaSkpXG4gICAgICAgICBtYXJrcyk7XG4gICAgKG1hdGNoIFBtYXJrLlNldC50b19saXN0IHBtYXJrcyB3aXRoXG4gICAgIHwgW10gLT4gKClcbiAgICAgfCBwbWFya3MgLT5cbiAgICAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJAWzwyPnBtYXJrcyAlYUBdXCIgKEZvcm1hdC5wcF9wcmludF9saXN0IFBtYXJrLnBwKSBwbWFya3MpO1xuICAgIEZvcm1hdC5wcF9jbG9zZV9ib3ggZm10ICgpXG4gIDs7XG5lbmRcblxubW9kdWxlIFN0YXR1cyA9IHN0cnVjdFxuICB0eXBlIHQgPVxuICAgIHwgRmFpbGVkXG4gICAgfCBNYXRjaCBvZiBNYXJrX2luZm9zLnQgKiBQbWFyay5TZXQudFxuICAgIHwgUnVubmluZ1xuZW5kXG5cbm1vZHVsZSBEZXNjIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCBwcCA6IHQgRm10LnRcblxuICBtb2R1bGUgRSA6IHNpZ1xuICAgIHR5cGUgbm9ucmVjIHQgPSBwcml2YXRlXG4gICAgICB8IFRTZXEgb2YgU2VtLnQgKiB0ICogRXhwci50XG4gICAgICB8IFRFeHAgb2YgTWFya3MudCAqIEV4cHIudFxuICAgICAgfCBUTWF0Y2ggb2YgTWFya3MudFxuICBlbmRcblxuICB2YWwgdG9fZHluIDogdCAtPiBEeW4udFxuICB2YWwgZm9sZF9yaWdodCA6IHQgLT4gaW5pdDonYWNjIC0+IGY6KEUudCAtPiAnYWNjIC0+ICdhY2MpIC0+ICdhY2NcbiAgdmFsIHRzZXEgOiBTZW0udCAtPiB0IC0+IEV4cHIudCAtPiB0IC0+IHRcbiAgdmFsIGluaXRpYWwgOiBFeHByLnQgLT4gdFxuICB2YWwgZW1wdHkgOiB0XG4gIHZhbCBzZXRfaWR4IDogSWR4LnQgLT4gdCAtPiB0XG4gIHZhbCBoYXNoIDogdCAtPiBpbnQgLT4gaW50XG4gIHZhbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCBzdGF0dXMgOiB0IC0+IFN0YXR1cy50XG4gIHZhbCBmaXJzdF9tYXRjaCA6IHQgLT4gTWFya3MudCBvcHRpb25cbiAgdmFsIHJlbW92ZV9tYXRjaGVzIDogdCAtPiB0XG4gIHZhbCBzcGxpdF9hdF9tYXRjaCA6IHQgLT4gdCAqIHRcbiAgdmFsIGFkZF9tYXRjaCA6IHQgLT4gTWFya3MudCAtPiB0XG4gIHZhbCBhZGRfZXBzIDogdCAtPiBNYXJrcy50IC0+IHRcbiAgdmFsIGFkZF9leHByIDogdCAtPiBFLnQgLT4gdFxuICB2YWwgaXRlcl9tYXJrcyA6IHQgLT4gZjooTWFya3MudCAtPiB1bml0KSAtPiB1bml0XG4gIHZhbCByZW1vdmVfZHVwbGljYXRlcyA6IElkLkhhc2hfc2V0LnQgLT4gdCAtPiBFeHByLnQgLT4gdFxuZW5kID0gc3RydWN0XG4gIG1vZHVsZSBFID0gc3RydWN0XG4gICAgdHlwZSB0ID1cbiAgICAgIHwgVFNlcSBvZiBTZW0udCAqIHQgbGlzdCAqIEV4cHIudFxuICAgICAgfCBURXhwIG9mIE1hcmtzLnQgKiBFeHByLnRcbiAgICAgIHwgVE1hdGNoIG9mIE1hcmtzLnRcblxuICAgIGxldCByZWMgZXF1YWxfbGlzdCBsMSBsMiA9IExpc3QuZXF1YWwgfmVxOmVxdWFsIGwxIGwyXG5cbiAgICBhbmQgZXF1YWwgeCB5ID1cbiAgICAgIG1hdGNoIHgsIHkgd2l0aFxuICAgICAgfCBUU2VxIChfLCBsMSwgZTEpLCBUU2VxIChfLCBsMiwgZTIpIC0+IElkLmVxdWFsIGUxLmlkIGUyLmlkICYmIGVxdWFsX2xpc3QgbDEgbDJcbiAgICAgIHwgVEV4cCAobWFya3MxLCBlMSksIFRFeHAgKG1hcmtzMiwgZTIpIC0+XG4gICAgICAgIElkLmVxdWFsIGUxLmlkIGUyLmlkICYmIE1hcmtzLmVxdWFsIG1hcmtzMSBtYXJrczJcbiAgICAgIHwgVE1hdGNoIG1hcmtzMSwgVE1hdGNoIG1hcmtzMiAtPiBNYXJrcy5lcXVhbCBtYXJrczEgbWFya3MyXG4gICAgICB8IF8sIF8gLT4gZmFsc2VcbiAgICA7O1xuXG4gICAgbGV0IHJlYyBoYXNoICh0IDogdCkgYWNjdSA9XG4gICAgICBtYXRjaCB0IHdpdGhcbiAgICAgIHwgVFNlcSAoXywgbCwgZSkgLT5cbiAgICAgICAgaGFzaF9jb21iaW5lIDB4MTcyYTFiY2UgKGhhc2hfY29tYmluZSAoSWQuaGFzaCBlLmlkKSAoaGFzaF9saXN0IGwgYWNjdSkpXG4gICAgICB8IFRFeHAgKG1hcmtzLCBlKSAtPlxuICAgICAgICBoYXNoX2NvbWJpbmUgMHgyYjRjMGQ3NyAoaGFzaF9jb21iaW5lIChJZC5oYXNoIGUuaWQpIChNYXJrcy5oYXNoIG1hcmtzIGFjY3UpKVxuICAgICAgfCBUTWF0Y2ggbWFya3MgLT4gaGFzaF9jb21iaW5lIDB4MWMyMDVhZDUgKE1hcmtzLmhhc2ggbWFya3MgYWNjdSlcblxuICAgIGFuZCBoYXNoX2xpc3QgPVxuICAgICAgbGV0IGYgYWNjIHggPSBoYXNoIHggYWNjIGluXG4gICAgICBmdW4gbCBpbml0IC0+IExpc3QuZm9sZF9sZWZ0IGwgfmluaXQgfmZcbiAgICA7O1xuICBlbmRcblxuICB0eXBlIHQgPSBFLnQgbGlzdFxuXG4gIGxldCByZWMgdG9fZHluIHNlbSB0ID0gRHluLmxpc3QgKExpc3QubWFwIH5mOihkeW5fb2ZfZSBzZW0pIHQpXG5cbiAgYW5kIGR5bl9vZl9lIHNlbSA9XG4gICAgbGV0IG9wZW4gRHluIGluXG4gICAgZnVuY3Rpb25cbiAgICB8IEUuVFNlcSAoc2VtJywgeCwgeSkgLT5cbiAgICAgIHdyYXBfc2VtXG4gICAgICAgIHNlbVxuICAgICAgICBzZW0nXG4gICAgICAgICh2YXJpYW50IFwiVFNlcVwiIFsgdG9fZHluIChTb21lIHNlbScpIHg7IEV4cHIudG9fZHluIChTb21lIHNlbScpIHkgXSlcbiAgICB8IFRFeHAgKG1hcmtzLCBlKSAtPlxuICAgICAgbGV0IGUgPVxuICAgICAgICBsZXQgYmFzZSA9IFsgRXhwci50b19keW4gc2VtIGUgXSBpblxuICAgICAgICBpZiBNYXJrcy4oZXF1YWwgZW1wdHkgbWFya3MpIHRoZW4gYmFzZSBlbHNlIE1hcmtzLnRvX2R5biBtYXJrcyA6OiBiYXNlXG4gICAgICBpblxuICAgICAgdmFyaWFudCBcIlRFeHBcIiBlXG4gICAgfCBUTWF0Y2ggbSAtPiB2YXJpYW50IFwiVE1hcmtzXCIgWyBNYXJrcy50b19keW4gbSBdXG4gIDs7XG5cbiAgbGV0IHRvX2R5biB0ID0gdG9fZHluIE5vbmUgdFxuXG4gIG9wZW4gRVxuXG4gIGxldCBlcXVhbCA9IEUuZXF1YWxfbGlzdFxuICBsZXQgaGFzaCA9IEUuaGFzaF9saXN0XG5cbiAgbGV0IHRzZXEnIGtpbmQgeCB5ID1cbiAgICBtYXRjaCB4IHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIFRFeHAgKG1hcmtzLCB7IGRlZiA9IEVwczsgXyB9KSBdIC0+IFsgVEV4cCAobWFya3MsIHkpIF1cbiAgICB8IF8gLT4gWyBUU2VxIChraW5kLCB4LCB5KSBdXG4gIDs7XG5cbiAgbGV0IHRzZXEga2luZCB4IHkgcmVtID0gdHNlcScga2luZCB4IHkgQCByZW1cblxuICBsZXQgcmVjIGZvbGRfcmlnaHQgdCB+aW5pdCB+ZiA9XG4gICAgbWF0Y2ggdCB3aXRoXG4gICAgfCBbXSAtPiBpbml0XG4gICAgfCB4IDo6IHhzIC0+IGYgeCAoZm9sZF9yaWdodCB4cyB+aW5pdCB+ZilcbiAgOztcblxuICBsZXQgcmVjIGl0ZXJfbWFya3MgdCB+ZiA9XG4gICAgTGlzdC5pdGVyIHQgfmY6KGZ1biAoZSA6IEUudCkgLT5cbiAgICAgIG1hdGNoIGUgd2l0aFxuICAgICAgfCBUU2VxIChfLCBsLCBfKSAtPiBpdGVyX21hcmtzIGwgfmZcbiAgICAgIHwgVEV4cCAobWFya3MsIF8pIHwgVE1hdGNoIG1hcmtzIC0+IGYgbWFya3MpXG4gIDs7XG5cbiAgbGV0IHJlYyBwcmludF9zdGF0ZV9yZWMgY2ggZSAoeSA6IEV4cHIudCkgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgVE1hdGNoIG1hcmtzIC0+IEZvcm1hdC5mcHJpbnRmIGNoIFwiQFs8Mj4oVE1hdGNoQCAlYSlAXVwiIE1hcmtzLnBwIG1hcmtzXG4gICAgfCBUU2VxIChzZW0sIGwnLCB4KSAtPlxuICAgICAgRm9ybWF0LmZwcmludGYgY2ggXCJAWzwyPihUU2VxQCAlYUAgXCIgU2VtLnBwIHNlbTtcbiAgICAgIHByaW50X3N0YXRlX2xzdCBjaCBsJyB4O1xuICAgICAgRm9ybWF0LmZwcmludGYgY2ggXCJAICVhKUBdXCIgRXhwci5wcCB4XG4gICAgfCBURXhwIChtYXJrcywgeyBkZWYgPSBFcHM7IF8gfSkgLT5cbiAgICAgIEZvcm1hdC5mcHJpbnRmIGNoIFwiQFs8Mj4oVEV4cEAgJWFAICglYSlAIChlcHMpKUBdXCIgSWQucHAgeS5pZCBNYXJrcy5wcCBtYXJrc1xuICAgIHwgVEV4cCAobWFya3MsIHgpIC0+XG4gICAgICBGb3JtYXQuZnByaW50ZiBjaCBcIkBbPDI+KFRFeHBAICVhQCAoJWEpQCAlYSlAXVwiIElkLnBwIHguaWQgTWFya3MucHAgbWFya3MgRXhwci5wcCB4XG5cbiAgYW5kIHByaW50X3N0YXRlX2xzdCBjaCBsIHkgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gRm9ybWF0LmZwcmludGYgY2ggXCIoKVwiXG4gICAgfCBlIDo6IHJlbSAtPlxuICAgICAgcHJpbnRfc3RhdGVfcmVjIGNoIGUgeTtcbiAgICAgIExpc3QuaXRlciByZW0gfmY6KGZ1biBlIC0+XG4gICAgICAgIEZvcm1hdC5mcHJpbnRmIGNoIFwiQCB8IFwiO1xuICAgICAgICBwcmludF9zdGF0ZV9yZWMgY2ggZSB5KVxuICA7O1xuXG4gIGxldCBwcCBjaCB0ID0gcHJpbnRfc3RhdGVfbHN0IGNoIFsgdCBdIHsgaWQgPSBJZC56ZXJvOyBkZWYgPSBFcHMgfVxuXG4gIGxldCByZWMgZmlyc3RfbWF0Y2ggPSBmdW5jdGlvblxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgVE1hdGNoIG1hcmtzIDo6IF8gLT4gU29tZSBtYXJrc1xuICAgIHwgXyA6OiByIC0+IGZpcnN0X21hdGNoIHJcbiAgOztcblxuICBsZXQgcmVtb3ZlX21hdGNoZXMgdCA9XG4gICAgTGlzdC5maWx0ZXIgdCB+ZjooZnVuY3Rpb25cbiAgICAgIHwgVE1hdGNoIF8gLT4gZmFsc2VcbiAgICAgIHwgXyAtPiB0cnVlKVxuICA7O1xuXG4gIGxldCBzcGxpdF9hdF9tYXRjaCA9XG4gICAgbGV0IHJlYyBzcGxpdF9hdF9tYXRjaF9yZWMgbCA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBUTWF0Y2ggXyA6OiByIC0+IExpc3QucmV2IGwsIHJlbW92ZV9tYXRjaGVzIHJcbiAgICAgIHwgeCA6OiByIC0+IHNwbGl0X2F0X21hdGNoX3JlYyAoeCA6OiBsKSByXG4gICAgaW5cbiAgICBmdW4gbCAtPiBzcGxpdF9hdF9tYXRjaF9yZWMgW10gbFxuICA7O1xuXG4gIGxldCBzdGF0dXMgOiBfIC0+IFN0YXR1cy50ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IEZhaWxlZFxuICAgIHwgVE1hdGNoIG0gOjogXyAtPiBNYXRjaCAoTWFya19pbmZvcy5tYWtlIChtLm1hcmtzIDo+IChpbnQgKiBpbnQpIGxpc3QpLCBtLnBtYXJrcylcbiAgICB8IF8gLT4gUnVubmluZ1xuICA7O1xuXG4gIGxldCBzZXRfaWR4ID1cbiAgICBsZXQgcmVjIGYgaWR4ID0gZnVuY3Rpb25cbiAgICAgIHwgVE1hdGNoIG1hcmtzIC0+IFRNYXRjaCAoTWFya3MubWFya3Nfc2V0X2lkeCBtYXJrcyBpZHgpXG4gICAgICB8IFRTZXEgKGtpbmQsIGwsIHgpIC0+IFRTZXEgKGtpbmQsIHNldF9pZHggaWR4IGwsIHgpXG4gICAgICB8IFRFeHAgKG1hcmtzLCB4KSAtPiBURXhwIChNYXJrcy5tYXJrc19zZXRfaWR4IG1hcmtzIGlkeCwgeClcbiAgICBhbmQgc2V0X2lkeCBpZHggeHMgPSBMaXN0Lm1hcCB4cyB+ZjooZiBpZHgpIGluXG4gICAgc2V0X2lkeFxuICA7O1xuXG4gIGxldFtAb2NhbWwud2FybmluZyBcIi0zMlwiXSBwcCBmbXQgdCA9XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiWyVhXVwiIChGb3JtYXQucHBfcHJpbnRfbGlzdCB+cHBfc2VwOihGbXQubGl0IFwiOyBcIikgcHApIHRcbiAgOztcblxuICBsZXQgZW1wdHkgPSBbXVxuICBsZXQgaW5pdGlhbCBleHByID0gWyBURXhwIChNYXJrcy5lbXB0eSwgZXhwcikgXVxuICBsZXQgYWRkX21hdGNoIHQgbWFya3MgPSBUTWF0Y2ggbWFya3MgOjogdFxuICBsZXQgYWRkX2VwcyB0IG1hcmtzID0gVEV4cCAobWFya3MsIGVwc19leHByKSA6OiB0XG4gIGxldCBhZGRfZXhwciB0IGV4cHIgPSBleHByIDo6IHRcblxuICBsZXQgcmVtb3ZlX2R1cGxpY2F0ZXMgPVxuICAgIGxldCByZWMgbG9vcCBzZWVuIGwgeSA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gW11cbiAgICAgIHwgKFRNYXRjaCBfIGFzIHgpIDo6IF8gLT5cbiAgICAgICAgKCogVHJ1bmNhdGUgYWZ0ZXIgZmlyc3QgbWF0Y2ggKilcbiAgICAgICAgWyB4IF1cbiAgICAgIHwgVFNlcSAoa2luZCwgbCwgeCkgOjogciAtPlxuICAgICAgICBsZXQgbCA9IGxvb3Agc2VlbiBsIHggaW5cbiAgICAgICAgbGV0IHIgPSBsb29wIHNlZW4gciB5IGluXG4gICAgICAgIHRzZXEga2luZCBsIHggclxuICAgICAgfCAoVEV4cCAoX21hcmtzLCB7IGRlZiA9IEVwczsgXyB9KSBhcyBlKSA6OiByIC0+XG4gICAgICAgIGlmIElkLkhhc2hfc2V0Lm1lbSBzZWVuIHkuaWRcbiAgICAgICAgdGhlbiBsb29wIHNlZW4gciB5XG4gICAgICAgIGVsc2UgKFxuICAgICAgICAgIElkLkhhc2hfc2V0LmFkZCBzZWVuIHkuaWQ7XG4gICAgICAgICAgZSA6OiBsb29wIHNlZW4gciB5KVxuICAgICAgfCAoVEV4cCAoX21hcmtzLCB4KSBhcyBlKSA6OiByIC0+XG4gICAgICAgIGlmIElkLkhhc2hfc2V0Lm1lbSBzZWVuIHguaWRcbiAgICAgICAgdGhlbiBsb29wIHNlZW4gciB5XG4gICAgICAgIGVsc2UgKFxuICAgICAgICAgIElkLkhhc2hfc2V0LmFkZCBzZWVuIHguaWQ7XG4gICAgICAgICAgZSA6OiBsb29wIHNlZW4gciB5KVxuICAgIGluXG4gICAgZnVuIHNlZW4gbCB5IC0+XG4gICAgICBJZC5IYXNoX3NldC5jbGVhciBzZWVuO1xuICAgICAgbG9vcCBzZWVuIGwgeVxuICA7O1xuZW5kXG5cbm1vZHVsZSBFID0gRGVzYy5FXG5cbm1vZHVsZSBTdGF0ZSA9IHN0cnVjdFxuICB0eXBlIHQgPVxuICAgIHsgaWR4IDogSWR4LnRcbiAgICA7IGNhdGVnb3J5IDogQ2F0ZWdvcnkudFxuICAgIDsgZGVzYyA6IERlc2MudFxuICAgIDsgbXV0YWJsZSBzdGF0dXMgOiBTdGF0dXMudCBvcHRpb25cbiAgICA7IGhhc2ggOiBpbnRcbiAgICB9XG4gICgqIFRocmVhZC1zYWZldHk6IFdlIHVzZSBkb3VibGUtY2hlY2tlZCBsb2NraW5nIHRvIGFjY2VzcyBmaWVsZFxuICAgICBbc3RhdHVzXSBpbiBmdW5jdGlvbiBbc3RhdHVzXSBiZWxvdy4gKilcblxuICBsZXQgcHAgZm10IHQgPSBEZXNjLnBwIGZtdCB0LmRlc2NcbiAgbGV0W0BpbmxpbmVdIGlkeCB0ID0gdC5pZHhcbiAgbGV0IHRvX2R5biB0ID0gRGVzYy50b19keW4gdC5kZXNjXG5cbiAgbGV0IGR1bW15ID1cbiAgICB7IGlkeCA9IElkeC51bmtub3duXG4gICAgOyBjYXRlZ29yeSA9IENhdGVnb3J5LmR1bW15XG4gICAgOyBkZXNjID0gRGVzYy5lbXB0eVxuICAgIDsgc3RhdHVzID0gTm9uZVxuICAgIDsgaGFzaCA9IC0xXG4gICAgfVxuICA7O1xuXG4gIGxldCBoYXNoIGlkeCBjYXQgZGVzYyA9XG4gICAgRGVzYy5oYXNoIGRlc2MgKGhhc2hfY29tYmluZSBpZHggKGhhc2hfY29tYmluZSAoQ2F0ZWdvcnkudG9faW50IGNhdCkgMCkpXG4gICAgbGFuZCAweDNGRkZGRkZGXG4gIDs7XG5cbiAgbGV0IG1rIGlkeCBjYXQgZGVzYyA9XG4gICAgeyBpZHg7IGNhdGVnb3J5ID0gY2F0OyBkZXNjOyBzdGF0dXMgPSBOb25lOyBoYXNoID0gaGFzaCAoaWR4IDo+IGludCkgY2F0IGRlc2MgfVxuICA7O1xuXG4gIGxldCBjcmVhdGUgY2F0IGUgPSBtayBJZHguaW5pdGlhbCBjYXQgKERlc2MuaW5pdGlhbCBlKVxuXG4gIGxldCBlcXVhbCB7IGlkeDsgY2F0ZWdvcnk7IGRlc2M7IHN0YXR1cyA9IF87IGhhc2ggfSB0ID1cbiAgICBJbnQuZXF1YWwgaGFzaCB0Lmhhc2hcbiAgICAmJiBJZHguZXF1YWwgaWR4IHQuaWR4XG4gICAgJiYgQ2F0ZWdvcnkuZXF1YWwgY2F0ZWdvcnkgdC5jYXRlZ29yeVxuICAgICYmIERlc2MuZXF1YWwgZGVzYyB0LmRlc2NcbiAgOztcblxuICAoKiBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgbXV0ZXggaGFzIGFscmVhZHkgYmVlbiBhY3F1aXJlZCAqKVxuICBsZXQgc3RhdHVzX25vX211dGV4IHMgPVxuICAgIG1hdGNoIHMuc3RhdHVzIHdpdGhcbiAgICB8IFNvbWUgcyAtPiBzXG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgc3QgPSBEZXNjLnN0YXR1cyBzLmRlc2MgaW5cbiAgICAgIHMuc3RhdHVzIDwtIFNvbWUgc3Q7XG4gICAgICBzdFxuICA7O1xuXG4gIGxldCBzdGF0dXMgbSBzID1cbiAgICBtYXRjaCBzLnN0YXR1cyB3aXRoXG4gICAgfCBTb21lIHMgLT4gc1xuICAgIHwgTm9uZSAtPlxuICAgICAgTXV0ZXgubG9jayBtO1xuICAgICAgbGV0IHN0ID0gc3RhdHVzX25vX211dGV4IHMgaW5cbiAgICAgIE11dGV4LnVubG9jayBtO1xuICAgICAgc3RcbiAgOztcblxuICBtb2R1bGUgVGFibGUgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgICAgdHlwZSBub25yZWMgdCA9IHRcblxuICAgICAgbGV0IGVxdWFsID0gZXF1YWxcbiAgICAgIGxldCBoYXNoIHQgPSB0Lmhhc2hcbiAgICBlbmQpXG5lbmRcblxuKCoqKiogRmluZCBhIGZyZWUgaW5kZXggKioqKilcblxubW9kdWxlIFdvcmtpbmdfYXJlYSA9IHN0cnVjdFxuICB0eXBlIHQgPVxuICAgIHsgbXV0YWJsZSBpZHMgOiBCaXRfdmVjdG9yLnRcbiAgICA7IHNlZW4gOiBJZC5IYXNoX3NldC50XG4gICAgOyBpbmRleF9jb3VudCA6IGludCBBdG9taWMudFxuICAgIH1cblxuICBsZXQgY3JlYXRlICgpID1cbiAgICB7IGlkcyA9IEJpdF92ZWN0b3IuY3JlYXRlX3plcm8gMVxuICAgIDsgc2VlbiA9IElkLkhhc2hfc2V0LmNyZWF0ZSAoKVxuICAgIDsgaW5kZXhfY291bnQgPSBBdG9taWMubWFrZSAwXG4gICAgfVxuICA7O1xuXG4gIGxldCBpbmRleF9jb3VudCB3ID0gQXRvbWljLmdldCB3LmluZGV4X2NvdW50XG5cbiAgbGV0IG1hcmtfdXNlZF9pbmRpY2VzIHRibCA9XG4gICAgRGVzYy5pdGVyX21hcmtzIH5mOihmdW4gbWFya3MgLT5cbiAgICAgIExpc3QuaXRlciBtYXJrcy5tYXJrcyB+ZjooZnVuIChfLCBpKSAtPlxuICAgICAgICBpZiBJZHgudXNlZCBpIHRoZW4gQml0X3ZlY3Rvci5zZXQgdGJsIChpIDo+IGludCkgdHJ1ZSkpXG4gIDs7XG5cbiAgbGV0IHJlYyBmaW5kX2ZyZWUgdGJsIGlkeCBsZW4gPVxuICAgIGlmIGlkeCA9IGxlbiB8fCBub3QgKEJpdF92ZWN0b3IuZ2V0IHRibCBpZHgpIHRoZW4gaWR4IGVsc2UgZmluZF9mcmVlIHRibCAoaWR4ICsgMSkgbGVuXG4gIDs7XG5cbiAgbGV0IGZyZWVfaW5kZXggdCBsID1cbiAgICBCaXRfdmVjdG9yLnJlc2V0X3plcm8gdC5pZHM7XG4gICAgbWFya191c2VkX2luZGljZXMgdC5pZHMgbDtcbiAgICBsZXQgbGVuID0gQml0X3ZlY3Rvci5sZW5ndGggdC5pZHMgaW5cbiAgICBsZXQgaWR4ID0gZmluZF9mcmVlIHQuaWRzIDAgbGVuIGluXG4gICAgaWYgaWR4ID0gbGVuXG4gICAgdGhlbiAoXG4gICAgICB0LmlkcyA8LSBCaXRfdmVjdG9yLmNyZWF0ZV96ZXJvICgyICogbGVuKTtcbiAgICAgICgqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiB0aGUgbXV0ZXggaXMgbG9ja2VkLiBTbyB3ZVxuICAgICAgICAgYXJlIHN1cmUgdGhhdCB0aGlzIGlzIGFsd2F5cyBjb2hlcmVudCB3aXRoIHRoZSBsZW5ndGggb2ZcbiAgICAgICAgIFt0Lmlkc10uICopXG4gICAgICBBdG9taWMuc2V0IHQuaW5kZXhfY291bnQgKDIgKiBsZW4pKTtcbiAgICBJZHgubWFrZSBpZHhcbiAgOztcbmVuZFxuXG4oKioqKiBDb21wdXRhdGlvbiBvZiB0aGUgbmV4dCBzdGF0ZSAqKioqKVxuXG50eXBlIGN0eCA9XG4gIHsgYyA6IENzZXQuY1xuICA7IHByZXZfY2F0IDogQ2F0ZWdvcnkudFxuICA7IG5leHRfY2F0IDogQ2F0ZWdvcnkudFxuICB9XG5cbmxldCByZWMgZGVsdGFfZXhwciAoeyBjOyBfIH0gYXMgY3R4KSBtYXJrcyAoeCA6IEV4cHIudCkgcmVtID1cbiAgKCpGb3JtYXQuZXByaW50ZiBcIiVkQC5cIiB4LmlkOyopXG4gIG1hdGNoIHguZGVmIHdpdGhcbiAgfCBDc3QgcyAtPiBpZiBDc2V0Lm1lbSBjIHMgdGhlbiBEZXNjLmFkZF9lcHMgcmVtIG1hcmtzIGVsc2UgcmVtXG4gIHwgQWx0IGwgLT4gZGVsdGFfYWx0IGN0eCBtYXJrcyBsIHJlbVxuICB8IFNlcSAoa2luZCwgeSwgeikgLT5cbiAgICBsZXQgeSA9IGRlbHRhX2V4cHIgY3R4IG1hcmtzIHkgRGVzYy5lbXB0eSBpblxuICAgIGRlbHRhX3NlcSBjdHgga2luZCB5IHogcmVtXG4gIHwgUmVwIChyZXBfa2luZCwga2luZCwgeSkgLT4gZGVsdGFfcmVwIGN0eCBtYXJrcyB4IHJlcF9raW5kIGtpbmQgeSByZW1cbiAgfCBFcHMgLT4gRGVzYy5hZGRfbWF0Y2ggcmVtIG1hcmtzXG4gIHwgTWFyayBpIC0+IERlc2MuYWRkX21hdGNoIHJlbSAoTWFya3Muc2V0X21hcmsgbWFya3MgaSlcbiAgfCBQbWFyayBpIC0+IERlc2MuYWRkX21hdGNoIHJlbSAoTWFya3Muc2V0X3BtYXJrIG1hcmtzIGkpXG4gIHwgRXJhc2UgKGIsIGUpIC0+IERlc2MuYWRkX21hdGNoIHJlbSAoTWFya3MuZmlsdGVyIG1hcmtzIGIgZSlcbiAgfCBCZWZvcmUgY2F0IC0+XG4gICAgaWYgQ2F0ZWdvcnkuaW50ZXJzZWN0IGN0eC5uZXh0X2NhdCBjYXQgdGhlbiBEZXNjLmFkZF9tYXRjaCByZW0gbWFya3MgZWxzZSByZW1cbiAgfCBBZnRlciBjYXQgLT5cbiAgICBpZiBDYXRlZ29yeS5pbnRlcnNlY3QgY3R4LnByZXZfY2F0IGNhdCB0aGVuIERlc2MuYWRkX21hdGNoIHJlbSBtYXJrcyBlbHNlIHJlbVxuXG5hbmQgZGVsdGFfcmVwIGN0eCBtYXJrcyB4IHJlcF9raW5kIGtpbmQgeSByZW0gPVxuICBsZXQgeSwgbWFya3MnID1cbiAgICBsZXQgeSA9IGRlbHRhX2V4cHIgY3R4IG1hcmtzIHkgRGVzYy5lbXB0eSBpblxuICAgIG1hdGNoIERlc2MuZmlyc3RfbWF0Y2ggeSB3aXRoXG4gICAgfCBOb25lIC0+IHksIG1hcmtzXG4gICAgfCBTb21lIG1hcmtzIC0+IERlc2MucmVtb3ZlX21hdGNoZXMgeSwgbWFya3NcbiAgaW5cbiAgbWF0Y2ggcmVwX2tpbmQgd2l0aFxuICB8IGBHcmVlZHkgLT4gRGVzYy50c2VxIGtpbmQgeSB4IChEZXNjLmFkZF9tYXRjaCByZW0gbWFya3MnKVxuICB8IGBOb25fZ3JlZWR5IC0+IERlc2MuYWRkX21hdGNoIChEZXNjLnRzZXEga2luZCB5IHggcmVtKSBtYXJrc1xuXG5hbmQgZGVsdGFfYWx0IGN0eCBtYXJrcyBsIHJlbSA9IExpc3QuZm9sZF9yaWdodCBsIH5pbml0OnJlbSB+ZjooZGVsdGFfZXhwciBjdHggbWFya3MpXG5cbmFuZCBkZWx0YV9zZXEgY3R4IChraW5kIDogU2VtLnQpIHkgeiByZW0gPVxuICBtYXRjaCBEZXNjLmZpcnN0X21hdGNoIHkgd2l0aFxuICB8IE5vbmUgLT4gRGVzYy50c2VxIGtpbmQgeSB6IHJlbVxuICB8IFNvbWUgbWFya3MgLT5cbiAgICAobWF0Y2gga2luZCB3aXRoXG4gICAgIHwgYExvbmdlc3QgLT4gRGVzYy50c2VxIGtpbmQgKERlc2MucmVtb3ZlX21hdGNoZXMgeSkgeiAoZGVsdGFfZXhwciBjdHggbWFya3MgeiByZW0pXG4gICAgIHwgYFNob3J0ZXN0IC0+IGRlbHRhX2V4cHIgY3R4IG1hcmtzIHogKERlc2MudHNlcSBraW5kIChEZXNjLnJlbW92ZV9tYXRjaGVzIHkpIHogcmVtKVxuICAgICB8IGBGaXJzdCAtPlxuICAgICAgIGxldCB5LCB5JyA9IERlc2Muc3BsaXRfYXRfbWF0Y2ggeSBpblxuICAgICAgIERlc2MudHNlcSBraW5kIHkgeiAoZGVsdGFfZXhwciBjdHggbWFya3MgeiAoRGVzYy50c2VxIGtpbmQgeScgeiByZW0pKSlcbjs7XG5cbmxldCByZWMgZGVsdGFfZSBjdHggbWFya3MgKHggOiBFLnQpIHJlbSA9XG4gIG1hdGNoIHggd2l0aFxuICB8IFRTZXEgKGtpbmQsIHksIHopIC0+XG4gICAgbGV0IHkgPSBkZWx0YV9kZXNjIGN0eCBtYXJrcyB5IERlc2MuZW1wdHkgaW5cbiAgICBkZWx0YV9zZXEgY3R4IGtpbmQgeSB6IHJlbVxuICB8IFRFeHAgKG1hcmtzLCBlKSAtPiBkZWx0YV9leHByIGN0eCBtYXJrcyBlIHJlbVxuICB8IFRNYXRjaCBfIC0+IERlc2MuYWRkX2V4cHIgcmVtIHhcblxuYW5kIGRlbHRhX2Rlc2MgY3R4IG1hcmtzIChsIDogRGVzYy50KSByZW0gPVxuICBEZXNjLmZvbGRfcmlnaHQgbCB+aW5pdDpyZW0gfmY6KGZ1biB5IGFjYyAtPiBkZWx0YV9lIGN0eCBtYXJrcyB5IGFjYylcbjs7XG5cbmxldCBkZWx0YSAodGJsX3JlZiA6IFdvcmtpbmdfYXJlYS50KSBuZXh0X2NhdCBjaGFyIChzdCA6IFN0YXRlLnQpID1cbiAgbGV0IGV4cHIgPVxuICAgIGxldCBwcmV2X2NhdCA9IHN0LmNhdGVnb3J5IGluXG4gICAgbGV0IGN0eCA9IHsgYyA9IGNoYXI7IG5leHRfY2F0OyBwcmV2X2NhdCB9IGluXG4gICAgRGVzYy5yZW1vdmVfZHVwbGljYXRlc1xuICAgICAgdGJsX3JlZi5zZWVuXG4gICAgICAoZGVsdGFfZGVzYyBjdHggTWFya3MuZW1wdHkgc3QuZGVzYyBEZXNjLmVtcHR5KVxuICAgICAgRXhwci5lcHNfZXhwclxuICBpblxuICBsZXQgaWR4ID0gV29ya2luZ19hcmVhLmZyZWVfaW5kZXggdGJsX3JlZiBleHByIGluXG4gIGxldCBleHByID0gRGVzYy5zZXRfaWR4IGlkeCBleHByIGluXG4gIFN0YXRlLm1rIGlkeCBuZXh0X2NhdCBleHByXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX3RyYW1wb2xpbmVfcmV0dXJuIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGw0IiwiYTIiLCJhMyIsImNhbWxfY2FsbDYiLCJhNCIsImE1IiwiZ2xvYmFsX2RhdGEiLCJSZV9Dc2V0IiwiUmVfQ2F0ZWdvcnkiLCJTdGRsaWJfTGlzdExhYmVscyIsIlJlX0ltcG9ydCIsIlJlX0JpdF92ZWN0b3IiLCJTdGRsaWJfQXRvbWljIiwiU3RkbGliX011dGV4IiwiUmVfRHluIiwiU3RkbGliX0Zvcm1hdCIsIlJlX0ZtdCIsIlJlX01hcmtfaW5mb3MiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYiIsIlJlX1BtYXJrIiwiU3RkbGliX0hhc2h0YmwiLCJSZV9IYXNoX3NldCIsImhhc2hfY29tYmluZSIsImgiLCJhY2N1IiwiZXF1YWwiLCJwcCIsImNyZWF0ZSIsInBhcmFtIiwidG9fc3RyaW5nIiwidG9fZHluIiwidCIsImNoIiwiayIsImZtdCIsImNvbXBhcmUiLCJwcmV2IiwieCIsIm5leHQiLCJuZXh0MiIsImdyb3VwX2NvdW50IiwidG9faW50Iiwid3JhcF9zZW0iLCJzZW0iLCJ2IiwibmFtZSIsImNzIiwieSIsImR5bl9vZl9kZWYiLCJjc2V0IiwiYWx0IiwicyIsImV4biIsIm1hdGNoIiwiY3N0X1NlcSIsIm0iLCJjIiwiZGVmIiwicHBfd2l0aF9zZW0iLCJlIiwibCIsImkiLCJiIiwibWsiLCJpZHMiLCJlbXB0eSIsImNzdCIsImVwcyIsInJlcCIsImtpbmQiLCJtYXJrIiwicG1hcmsiLCJlcmFzZSIsImJlZm9yZSIsImFmdGVyIiwic2VxIiwiaXNfZXBzIiwiZXhwciIsInJlbmFtZSIsInoiLCJnIiwiY3N0X21hcmtzIiwicG1hcmtzIiwibWFya3MiLCJpZHgiLCJhY2MiLCJhIiwiaGFzaCIsImluaXQiLCJ1bmtub3duIiwibWFya3Nfc2V0X2lkeCIsInJlbSIsImNzdF8yIiwiZXF1YWxfbGlzdCIsImwxIiwibDIiLCJlMSIsImUyIiwibWFya3MxIiwibWFya3MyIiwibGV0cmVjX2Z1bmN0aW9uX2NvbnRleHQiLCJoYXNoX2xpc3QiLCJiYXNlIiwidHNlcSIsImZvbGRfcmlnaHQiLCJ4cyIsIml0ZXJfbWFya3MiLCJjc3RfVEV4cCIsInByaW50X3N0YXRlX3JlYyIsInByaW50X3N0YXRlX2xzdCIsInplcm8iLCJmaXJzdF9tYXRjaCIsInIiLCJyZW1vdmVfbWF0Y2hlcyIsInNldF9pZHgiLCJhZGRfbWF0Y2giLCJsb29wIiwic2VlbiIsImR1bW15IiwiY2F0IiwiZGVzYyIsImNhdGVnb3J5Iiwic3RhdHVzX25vX211dGV4Iiwic3QiLCJzdGF0dXMiLCJUYWJsZSIsImluZGV4X2NvdW50IiwidyIsImVwc19leHByIiwiZGVsdGFfZXhwciIsImNvdW50ZXIiLCJjdHgiLCJyZXBfa2luZCIsInN0b3BfaW5jbHVzaXZlIiwic3RhcnRfaW5jbHVzaXZlIiwiZGVsdGFfc2VxIiwiZGVsdGFfZGVzYyIsImRlbHRhIiwidGJsX3JlZiIsIm5leHRfY2F0IiwiY2hhciIsInByZXZfY2F0IiwidGJsIiwibGVuIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFBRSxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQVAsR0FBQUMsSUFBQUUsSUFBQUUsSUFBQUMsSUFBQUUsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElB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QXNCO0FBQUEsSUEwR3hCO0FBQUEsUUFBQWlFLE1BQTJCO0FBQUEsSUFDM0I7QUFBQTtBQUFBLGVBQUEzRDtBQUFBQSxPQVZFO0FBQUE7QUFBQSx5QkFBQXZEO0FBQUFBLHFCQUFBaUMsSUFBeUIsY0E5Z0JoQjtBQUFBLGlCQStnQk0sV0FBTSwwQ0FBbUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQUFrRixNQVVoRDtBQUFBLEtBQUFELFFBQ1Y7QUFBQSxLQUFBMUQsTUFBVTtBQUFBO0FBQUEsS0FQUDtBQUFBO0FBQUE7QUFBQSxVQUFpQjtBQUFBLFVBQUFBLFFBQXVDO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FReEQ7QUFBQSxNQUVRO0FBQUEsTUFJVDtBQUFBO0FBQUEsU0FBQVAsU0E4RU87QUFBQSxLQUNYLGtDQUEwQjtBQUFBO0FBQUE7QUFBQSxHQXBNeEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR2a0JKIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzEzMjQsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9jb2xvcl9tYXAubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBJbiByZWFsaXR5LCB0aGlzIGNhbiByZWFsbHkgYmUgcmVwcmVzZW50ZWQgYXMgYSBib29sIGFycmF5LlxuXG4gICBUaGUgcmVwcmVzZW50YXRpb24gaXMgYmVzdCB0aG91Z2h0IG9mIGFzIGEgbGlzdCBvZiBhbGwgY2hhcnMgYWxvbmcgd2l0aCBhXG4gICBmbGFnOlxuXG4gICAoYSwgMCksIChiLCAxKSwgKGMsIDApLCAoZCwgMCksIC4uLlxuXG4gICBjaGFyYWN0ZXJzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBjb2xvciBhcmUgcmVwcmVzZW50ZWQgYnkgc2VxdW5jZXMgb2ZcbiAgIGNoYXJhY3RlcnMgd2l0aCB0aGUgZmxhZyBzZXQgdG8gMC5cbiopXG5cbnR5cGUgdCA9IEJ5dGVzLnRcblxubW9kdWxlIFJlcHIgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgbGV0IHJlcHIgdCBjb2xvciA9IHQuW0NzZXQudG9faW50IGNvbG9yXVxuICBsZXQgbGVuZ3RoID0gU3RyaW5nLmxlbmd0aFxuZW5kXG5cbm1vZHVsZSBUYWJsZSA9IHN0cnVjdFxuICB0eXBlIHQgPSBzdHJpbmdcblxuICBsZXQgZ2V0X2NoYXIgdCBjID0gdC5bQ3NldC50b19pbnQgY11cbiAgbGV0IGdldCB0IGMgPSBDc2V0Lm9mX2NoYXIgKFN0cmluZy51bnNhZmVfZ2V0IHQgKENoYXIuY29kZSBjKSlcblxuICBsZXQgdHJhbnNsYXRlX2NvbG9ycyAoY20gOiB0KSBjc2V0ID1cbiAgICBDc2V0LmZvbGRfcmlnaHQgY3NldCB+aW5pdDpDc2V0LmVtcHR5IH5mOihmdW4gaSBqIGwgLT5cbiAgICAgIGxldCBzdGFydCA9IGdldF9jaGFyIGNtIGkgaW5cbiAgICAgIGxldCBzdG9wID0gZ2V0X2NoYXIgY20gaiBpblxuICAgICAgQ3NldC51bmlvbiAoQ3NldC5jc2VxIHN0YXJ0IHN0b3ApIGwpXG4gIDs7XG5lbmRcblxubGV0IG1ha2UgKCkgPSBCeXRlcy5tYWtlIDI1NyAnXFwwMDAnXG5cbmxldCBmbGF0dGVuIGNtID1cbiAgbGV0IGMgPSBCeXRlcy5jcmVhdGUgMjU2IGluXG4gIGxldCBjb2xvcl9yZXByID0gQnl0ZXMuY3JlYXRlIDI1NiBpblxuICBsZXQgdiA9IHJlZiAwIGluXG4gIEJ5dGVzLnNldCBjIDAgJ1xcMDAwJztcbiAgQnl0ZXMuc2V0IGNvbG9yX3JlcHIgMCAnXFwwMDAnO1xuICBmb3IgaSA9IDEgdG8gMjU1IGRvXG4gICAgaWYgQnl0ZXMuZ2V0IGNtIGkgPD4gJ1xcMDAwJyB0aGVuIGluY3IgdjtcbiAgICBCeXRlcy5zZXQgYyBpIChDaGFyLmNociAhdik7XG4gICAgQnl0ZXMuc2V0IGNvbG9yX3JlcHIgIXYgKENoYXIuY2hyIGkpXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYywgQnl0ZXMuc3ViX3N0cmluZyBjb2xvcl9yZXByIDAgKCF2ICsgMSlcbjs7XG5cbigqIG1hcmsgYWxsIHRoZSBlbmRwb2ludHMgb2YgdGhlIGludGVydmFscyBvZiB0aGUgY2hhciBzZXQgd2l0aCB0aGUgMSBieXRlICopXG5sZXQgc3BsaXQgdCBzZXQgPVxuICBDc2V0Lml0ZXIgc2V0IH5mOihmdW4gaSBqIC0+XG4gICAgQnl0ZXMuc2V0IHQgKENzZXQudG9faW50IGkpICdcXDAwMSc7XG4gICAgQnl0ZXMuc2V0IHQgKENzZXQudG9faW50IGogKyAxKSAnXFwwMDEnKVxuOztcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ieXRlc19zZXQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfc3RyaW5nX2dldCIsImdsb2JhbF9kYXRhIiwiUmVfQ3NldCIsIlN0ZGxpYl9DaGFyIiwiU3RkbGliX0J5dGVzIiwicmVwciIsInQiLCJjb2xvciIsImxlbmd0aCIsImdldF9jaGFyIiwiYyIsImdldCIsInRyYW5zbGF0ZV9jb2xvcnMiLCJjbSIsImNzZXQiLCJpIiwiaiIsImwiLCJzdGFydCIsInN0b3AiLCJtYWtlIiwicGFyYW0iLCJmbGF0dGVuIiwiY29sb3JfcmVwciIsInYiLCJzcGxpdCIsInNldCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsWUFBQUMsS0FBQUMsR0FBQUM7QUFBQUEsSUNnQndCLE9BQUgsbUJBQUcsNkJBQWtCO0FBQUE7QUFBQSxPQUFBQyxTRGhCMUM7QUFBQSxZQUFBQyxTQUFBSCxHQUFBSTtBQUFBQSxJQ3VCd0IsT0FBSCxtQkFBRyx5QkFBYztBQUFBO0FBQUEsWUFBQUMsSUFBQUwsR0FBQUk7QUFBQUEsSUFDdEIsa0VBQWdEO0FBQUE7QUFBQSxZQUFBRSxpQkFBQUMsSUFBQUM7QUFBQUEsSUFHNUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxzQkFBQUMsR0FBQUMsR0FBQUM7QUFBQUE7QUFBQUEsZUFBQUMsUUFDYztBQUFBLGVBQUFDLE9BQ0Q7QUFBQSxtQkFDQTtBQUFBLGNBQXNCLGtDQUFFO0FBQUEsZUFBQztBQUFBO0FBQUEsWUFBQUMsS0FBQUMsT0FJNUIseUNBQXFCO0FBQUEsWUFBQUMsUUFBQVQ7QUFBQUEsUUFBQUgsSUFHekIsd0JBQUFhLGFBQ1M7QUFBQSxJQUVqQjtBQUFBLElBQ0E7QUFBQSxRQUFBQyxJQUE2QixHQUFBVCxJQUFBO0FBQUE7QUFBQSxLQUV4QjtBQUFBLFVBQUFTLE1BQThCLFdBQUFBLE1BQ2pDO0FBQUE7QUFBQSxVQUFBQSxNQURpQjtBQUFBLEtBQ2pCLHFCQUFjO0FBQUEsS0FDZCxnQ0FBd0I7QUFBQSxhQUFZO0FBQUE7QUFBQSxjQUVaO0FBQUEsTUFBMUIsNkNBQXdCO0FBQUE7QUFBQSxLQUZjO0FBQUE7QUFBQTtBQUFBLEdBRTBCO0FBQUEsWUFBQUMsTUFBQW5CLEdBQUFvQjtBQUFBQSxJQUtoRTtBQUFBO0FBQUE7QUFBQSxzQkFBQVgsR0FBQUM7QUFBQUEsY0FDRSxrQkFBWTtBQUFBLGNBQ0MsT0FBYixrQkFBYSxvQ0FBeUI7QUFBQSxlQUFDO0FBQUE7QUFBQSxHRHREM0MiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozMTQwNSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL2FzdC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIm9wZW4gSW1wb3J0XG5cbnR5cGUgKCdhLCBfKSBhc3QgPVxuICB8IEFsdGVybmF0aXZlIDogJ2EgbGlzdCAtPiAoJ2EsIFs+IGBVbmNhc2VkIF0pIGFzdFxuICB8IE5vX2Nhc2UgOiAnYSAtPiAoJ2EsIFs+IGBDYXNlZCBdKSBhc3RcbiAgfCBDYXNlIDogJ2EgLT4gKCdhLCBbPiBgQ2FzZWQgXSkgYXN0XG5cbmxldCBkeW5fb2ZfYXN0IGYgPVxuICBsZXQgb3BlbiBEeW4gaW5cbiAgZnVuY3Rpb25cbiAgfCBBbHRlcm5hdGl2ZSB4cyAtPiB2YXJpYW50IFwiQWx0ZXJuYXRpdmVcIiAoTGlzdC5tYXAgeHMgfmYpXG4gIHwgTm9fY2FzZSBhIC0+IHZhcmlhbnQgXCJOb19jYXNlXCIgWyBmIGEgXVxuICB8IENhc2UgYSAtPiB2YXJpYW50IFwiQ2FzZVwiIFsgZiBhIF1cbjs7XG5cbmxldCBlbXB0eV9hbHRlcm5hdGl2ZSA6ICgnYSwgJ2IpIGFzdCA9IEFsdGVybmF0aXZlIFtdXG5cbmxldCBlcXVhbF9hc3QgKHR5cGUgYSkgZXEgKHggOiAoYSwgWyBgVW5jYXNlZCBdKSBhc3QpICh5IDogKGEsIFsgYFVuY2FzZWQgXSkgYXN0KSA9XG4gIG1hdGNoIHgsIHkgd2l0aFxuICB8IEFsdGVybmF0aXZlIGEsIEFsdGVybmF0aXZlIGIgLT4gTGlzdC5lcXVhbCB+ZXEgYSBiXG47O1xuXG5sZXQgcHBfYXN0ICh0eXBlIGEgYikgZiBmbXQgKGFzdCA6IChhLCBiKSBhc3QpID1cbiAgbGV0IG9wZW4gRm10IGluXG4gIGxldCB2YXIgcyByZSA9IHNleHAgZm10IHMgZiByZSBpblxuICBtYXRjaCBhc3Qgd2l0aFxuICB8IEFsdGVybmF0aXZlIGFsdCAtPiBzZXhwIGZtdCBcIkFsdGVybmF0aXZlXCIgKGxpc3QgZikgYWx0XG4gIHwgQ2FzZSBjIC0+IHZhciBcIkNhc2VcIiBjXG4gIHwgTm9fY2FzZSBjIC0+IHZhciBcIk5vX2Nhc2VcIiBjXG47O1xuXG50eXBlIGNzZXQgPVxuICB8IENzZXQgb2YgQ3NldC50XG4gIHwgSW50ZXJzZWN0aW9uIG9mIGNzZXQgbGlzdFxuICB8IENvbXBsZW1lbnQgb2YgY3NldCBsaXN0XG4gIHwgRGlmZmVyZW5jZSBvZiBjc2V0ICogY3NldFxuICB8IENhc3Qgb2YgKGNzZXQsIFsgYENhc2VkIHwgYFVuY2FzZWQgXSkgYXN0XG5cbmxldCByZWMgZHluX29mX2NzZXQgPVxuICBsZXQgb3BlbiBEeW4gaW5cbiAgZnVuY3Rpb25cbiAgfCBDc2V0IGNzZXQgLT4gdmFyaWFudCBcIkNzZXRcIiBbIENzZXQudG9fZHluIGNzZXQgXVxuICB8IEludGVyc2VjdGlvbiB4cyAtPiB2YXJpYW50IFwiSW50ZXJzZWN0aW9uXCIgKExpc3QubWFwIHhzIH5mOmR5bl9vZl9jc2V0KVxuICB8IENvbXBsZW1lbnQgeHMgLT4gdmFyaWFudCBcIkNvbXBsZW1lbnRcIiAoTGlzdC5tYXAgeHMgfmY6ZHluX29mX2NzZXQpXG4gIHwgRGlmZmVyZW5jZSAoeCwgeSkgLT4gdmFyaWFudCBcIkRpZmZlcmVuY2VcIiBbIGR5bl9vZl9jc2V0IHg7IGR5bl9vZl9jc2V0IHkgXVxuICB8IENhc3QgYyAtPiB2YXJpYW50IFwiQ2FzdFwiIFsgZHluX29mX2FzdCBkeW5fb2ZfY3NldCBjIF1cbjs7XG5cbnR5cGUgKCdhLCAnY2FzZSkgZ2VuID1cbiAgfCBTZXQgb2YgJ2FcbiAgfCBBc3Qgb2YgKCgnYSwgJ2Nhc2UpIGdlbiwgJ2Nhc2UpIGFzdFxuICB8IFNlcXVlbmNlIG9mICgnYSwgJ2Nhc2UpIGdlbiBsaXN0XG4gIHwgUmVwZWF0IG9mICgnYSwgJ2Nhc2UpIGdlbiAqIGludCAqIGludCBvcHRpb25cbiAgfCBCZWdfb2ZfbGluZVxuICB8IEVuZF9vZl9saW5lXG4gIHwgQmVnX29mX3dvcmRcbiAgfCBFbmRfb2Zfd29yZFxuICB8IE5vdF9ib3VuZFxuICB8IEJlZ19vZl9zdHJcbiAgfCBFbmRfb2Zfc3RyXG4gIHwgTGFzdF9lbmRfb2ZfbGluZVxuICB8IFN0YXJ0XG4gIHwgU3RvcFxuICB8IEdyb3VwIG9mIHN0cmluZyBvcHRpb24gKiAoJ2EsICdjYXNlKSBnZW5cbiAgfCBOb19ncm91cCBvZiAoJ2EsICdjYXNlKSBnZW5cbiAgfCBOZXN0IG9mICgnYSwgJ2Nhc2UpIGdlblxuICB8IFBtYXJrIG9mIFBtYXJrLnQgKiAoJ2EsICdjYXNlKSBnZW5cbiAgfCBTZW0gb2YgQXV0b21hdGEuU2VtLnQgKiAoJ2EsICdjYXNlKSBnZW5cbiAgfCBTZW1fZ3JlZWR5IG9mIEF1dG9tYXRhLlJlcF9raW5kLnQgKiAoJ2EsICdjYXNlKSBnZW5cblxubGV0IHJlYyBkeW5fb2ZfZ2VuIGYgPVxuICBsZXQgb3BlbiBEeW4gaW5cbiAgZnVuY3Rpb25cbiAgfCBTZXQgYSAtPiB2YXJpYW50IFwiU2V0XCIgWyBmIGEgXVxuICB8IEFzdCBhc3QgLT4gdmFyaWFudCBcIkFzdFwiIFsgZHluX29mX2FzdCAoZHluX29mX2dlbiBmKSBhc3QgXVxuICB8IFNlcXVlbmNlIHhzIC0+IHZhcmlhbnQgXCJTZXF1ZW5jZVwiIChMaXN0Lm1hcCB4cyB+ZjooZHluX29mX2dlbiBmKSlcbiAgfCBSZXBlYXQgKGdlbiwgbWluLCBtYXgpIC0+XG4gICAgbGV0IGJhc2UgPVxuICAgICAgbWF0Y2ggbWF4IHdpdGhcbiAgICAgIHwgTm9uZSAtPiBbXVxuICAgICAgfCBTb21lIHggLT4gWyBpbnQgeCBdXG4gICAgaW5cbiAgICB2YXJpYW50IFwiUmVwZWF0XCIgKGR5bl9vZl9nZW4gZiBnZW4gOjogaW50IG1pbiA6OiBiYXNlKVxuICB8IEJlZ19vZl9saW5lIC0+IGVudW0gXCJCZWdfb2ZfbGluZVwiXG4gIHwgRW5kX29mX2xpbmUgLT4gZW51bSBcIkVuZF9vZl9saW5lXCJcbiAgfCBCZWdfb2Zfd29yZCAtPiBlbnVtIFwiQmVnX29mX3dvcmRcIlxuICB8IEVuZF9vZl93b3JkIC0+IGVudW0gXCJFbmRfb2Zfd29yZFwiXG4gIHwgTm90X2JvdW5kIC0+IGVudW0gXCJOb3RfYm91bmRcIlxuICB8IEJlZ19vZl9zdHIgLT4gZW51bSBcIkJlZ19vZl9zdHJcIlxuICB8IEVuZF9vZl9zdHIgLT4gZW51bSBcIkVuZF9vZl9zdHJcIlxuICB8IExhc3RfZW5kX29mX2xpbmUgLT4gZW51bSBcIkxhc3RfZW5kX29mX2xpbmVcIlxuICB8IFN0YXJ0IC0+IGVudW0gXCJTdGFydFwiXG4gIHwgU3RvcCAtPiBlbnVtIFwiU3RvcFwiXG4gIHwgR3JvdXAgKG5hbWUsIHQpIC0+XG4gICAgbGV0IGFyZ3MgPVxuICAgICAgbGV0IGFyZ3MgPSBbIGR5bl9vZl9nZW4gZiB0IF0gaW5cbiAgICAgIG1hdGNoIG5hbWUgd2l0aFxuICAgICAgfCBOb25lIC0+IGFyZ3NcbiAgICAgIHwgU29tZSBuYW1lIC0+IHN0cmluZyBuYW1lIDo6IGFyZ3NcbiAgICBpblxuICAgIHZhcmlhbnQgXCJHcm91cFwiIGFyZ3NcbiAgfCBOb19ncm91cCB4IC0+IHZhcmlhbnQgXCJOb19ncm91cFwiIFsgZHluX29mX2dlbiBmIHggXVxuICB8IE5lc3QgeCAtPiB2YXJpYW50IFwiTmVzdFwiIFsgZHluX29mX2dlbiBmIHggXVxuICB8IFBtYXJrIChwbWFyaywgdCkgLT4gdmFyaWFudCBcIlBtYXJrXCIgWyBQbWFyay50b19keW4gcG1hcms7IGR5bl9vZl9nZW4gZiB0IF1cbiAgfCBTZW0gKHNlbSwgdCkgLT4gdmFyaWFudCBcIlNlbVwiIFsgQXV0b21hdGEuU2VtLnRvX2R5biBzZW07IGR5bl9vZl9nZW4gZiB0IF1cbiAgfCBTZW1fZ3JlZWR5IChyZXAsIHQpIC0+XG4gICAgdmFyaWFudCBcIlNlbV9ncmVlZHlcIiBbIEF1dG9tYXRhLlJlcF9raW5kLnRvX2R5biByZXA7IGR5bl9vZl9nZW4gZiB0IF1cbjs7XG5cbmxldCByZWMgcHBfZ2VuIHBwX2NzZXQgZm10IHQgPVxuICBsZXQgb3BlbiBGb3JtYXQgaW5cbiAgbGV0IG9wZW4gRm10IGluXG4gIGxldCBwcCA9IHBwX2dlbiBwcF9jc2V0IGluXG4gIGxldCB2YXIgcyByZSA9IHNleHAgZm10IHMgcHAgcmUgaW5cbiAgbGV0IHNlcSBzIHJlbCA9IHNleHAgZm10IHMgKGxpc3QgcHApIHJlbCBpblxuICBtYXRjaCB0IHdpdGhcbiAgfCBTZXQgY3NldCAtPiBwcF9jc2V0IGZtdCBjc2V0XG4gIHwgU2VxdWVuY2Ugc3EgLT4gc2VxIFwiU2VxdWVuY2VcIiBzcVxuICB8IFJlcGVhdCAocmUsIHN0YXJ0LCBzdG9wKSAtPlxuICAgIGxldCBwcCcgZm10ICgpID0gZnByaW50ZiBmbXQgXCIlYUAgJWQlYVwiIHBwIHJlIHN0YXJ0IG9wdGludCBzdG9wIGluXG4gICAgc2V4cCBmbXQgXCJSZXBlYXRcIiBwcCcgKClcbiAgfCBCZWdfb2ZfbGluZSAtPiBzdHIgZm10IFwiQmVnX29mX2xpbmVcIlxuICB8IEVuZF9vZl9saW5lIC0+IHN0ciBmbXQgXCJFbmRfb2ZfbGluZVwiXG4gIHwgQmVnX29mX3dvcmQgLT4gc3RyIGZtdCBcIkJlZ19vZl93b3JkXCJcbiAgfCBFbmRfb2Zfd29yZCAtPiBzdHIgZm10IFwiRW5kX29mX3dvcmRcIlxuICB8IE5vdF9ib3VuZCAtPiBzdHIgZm10IFwiTm90X2JvdW5kXCJcbiAgfCBCZWdfb2Zfc3RyIC0+IHN0ciBmbXQgXCJCZWdfb2Zfc3RyXCJcbiAgfCBFbmRfb2Zfc3RyIC0+IHN0ciBmbXQgXCJFbmRfb2Zfc3RyXCJcbiAgfCBMYXN0X2VuZF9vZl9saW5lIC0+IHN0ciBmbXQgXCJMYXN0X2VuZF9vZl9saW5lXCJcbiAgfCBTdGFydCAtPiBzdHIgZm10IFwiU3RhcnRcIlxuICB8IFN0b3AgLT4gc3RyIGZtdCBcIlN0b3BcIlxuICB8IEdyb3VwIChOb25lLCBjKSAtPiB2YXIgXCJHcm91cFwiIGNcbiAgfCBHcm91cCAoU29tZSBuLCBjKSAtPiBzZXhwIGZtdCBcIk5hbWVkX2dyb3VwXCIgKHBhaXIgc3RyIHBwKSAobiwgYylcbiAgfCBOZXN0IGMgLT4gdmFyIFwiTmVzdFwiIGNcbiAgfCBQbWFyayAobSwgcikgLT4gc2V4cCBmbXQgXCJQbWFya1wiIChwYWlyIFBtYXJrLnBwIHBwKSAobSwgcilcbiAgfCBBc3QgYSAtPiBwcF9hc3QgcHAgZm10IGFcbiAgfCBTZW0gKHNlbSwgYSkgLT4gc2V4cCBmbXQgXCJTZW1cIiAocGFpciBBdXRvbWF0YS5TZW0ucHAgcHApIChzZW0sIGEpXG4gIHwgU2VtX2dyZWVkeSAoaywgcmUpIC0+IHNleHAgZm10IFwiU2VtX2dyZWVkeVwiIChwYWlyIEF1dG9tYXRhLlJlcF9raW5kLnBwIHBwKSAoaywgcmUpXG4gIHwgTm9fZ3JvdXAgYyAtPiB2YXIgXCJOb19ncm91cFwiIGNcbjs7XG5cbmxldCByZWMgcHBfY3NldCBmbXQgY3NldCA9XG4gIGxldCBvcGVuIEZtdCBpblxuICBsZXQgc2VxIHMgcmVsID0gc2V4cCBmbXQgcyAobGlzdCBwcF9jc2V0KSByZWwgaW5cbiAgbWF0Y2ggY3NldCB3aXRoXG4gIHwgQ2FzdCBzIC0+IHBwX2FzdCBwcF9jc2V0IGZtdCBzXG4gIHwgQ3NldCBzIC0+IHNleHAgZm10IFwiU2V0XCIgQ3NldC5wcCBzXG4gIHwgSW50ZXJzZWN0aW9uIGMgLT4gc2VxIFwiSW50ZXJzZWN0aW9uXCIgY1xuICB8IENvbXBsZW1lbnQgYyAtPiBzZXEgXCJDb21wbGVtZW50XCIgY1xuICB8IERpZmZlcmVuY2UgKGEsIGIpIC0+IHNleHAgZm10IFwiRGlmZmVyZW5jZVwiIChwYWlyIHBwX2NzZXQgcHBfY3NldCkgKGEsIGIpXG47O1xuXG5sZXQgcmVjIGVxdWFsIGNzZXQgeDEgeDIgPVxuICBtYXRjaCB4MSwgeDIgd2l0aFxuICB8IFNldCBzMSwgU2V0IHMyIC0+IGNzZXQgczEgczJcbiAgfCBTZXF1ZW5jZSBsMSwgU2VxdWVuY2UgbDIgLT4gTGlzdC5lcXVhbCB+ZXE6KGVxdWFsIGNzZXQpIGwxIGwyXG4gIHwgUmVwZWF0ICh4MScsIGkxLCBqMSksIFJlcGVhdCAoeDInLCBpMiwgajIpIC0+XG4gICAgSW50LmVxdWFsIGkxIGkyICYmIE9wdGlvbi5lcXVhbCBJbnQuZXF1YWwgajEgajIgJiYgZXF1YWwgY3NldCB4MScgeDInXG4gIHwgQmVnX29mX2xpbmUsIEJlZ19vZl9saW5lXG4gIHwgRW5kX29mX2xpbmUsIEVuZF9vZl9saW5lXG4gIHwgQmVnX29mX3dvcmQsIEJlZ19vZl93b3JkXG4gIHwgRW5kX29mX3dvcmQsIEVuZF9vZl93b3JkXG4gIHwgTm90X2JvdW5kLCBOb3RfYm91bmRcbiAgfCBCZWdfb2Zfc3RyLCBCZWdfb2Zfc3RyXG4gIHwgRW5kX29mX3N0ciwgRW5kX29mX3N0clxuICB8IExhc3RfZW5kX29mX2xpbmUsIExhc3RfZW5kX29mX2xpbmVcbiAgfCBTdGFydCwgU3RhcnRcbiAgfCBTdG9wLCBTdG9wIC0+IHRydWVcbiAgfCBHcm91cCBfLCBHcm91cCBfIC0+XG4gICAgKCogRG8gbm90IG1lcmdlIGdyb3VwcyEgKilcbiAgICBmYWxzZVxuICB8IFBtYXJrIChtMSwgcjEpLCBQbWFyayAobTIsIHIyKSAtPiBQbWFyay5lcXVhbCBtMSBtMiAmJiBlcXVhbCBjc2V0IHIxIHIyXG4gIHwgTmVzdCB4LCBOZXN0IHkgLT4gZXF1YWwgY3NldCB4IHlcbiAgfCBBc3QgeCwgQXN0IHkgLT4gZXF1YWxfYXN0IChlcXVhbCBjc2V0KSB4IHlcbiAgfCBTZW0gKHNlbSwgYSksIFNlbSAoc2VtJywgYScpIC0+IFBvbHkuZXF1YWwgc2VtIHNlbScgJiYgZXF1YWwgY3NldCBhIGEnXG4gIHwgU2VtX2dyZWVkeSAocmVwLCBhKSwgU2VtX2dyZWVkeSAocmVwJywgYScpIC0+IFBvbHkuZXF1YWwgcmVwIHJlcCcgJiYgZXF1YWwgY3NldCBhIGEnXG4gIHwgXyAtPiBmYWxzZVxuOztcblxudHlwZSB0ID0gKGNzZXQsIFsgYENhc2VkIHwgYFVuY2FzZWQgXSkgZ2VuXG50eXBlIG5vX2Nhc2UgPSAoQ3NldC50LCBbIGBVbmNhc2VkIF0pIGdlblxuXG5sZXQgdG9fZHluID0gZHluX29mX2dlbiBkeW5fb2ZfY3NldFxubGV0IHBwID0gcHBfZ2VuIHBwX2NzZXRcbmxldCBjc2V0IGNzZXQgPSBTZXQgKENzZXQgY3NldClcblxubGV0IHJlYyBoYW5kbGVfY2FzZV9jc2V0IGlnbl9jYXNlID0gZnVuY3Rpb25cbiAgfCBDc2V0IHMgLT4gaWYgaWduX2Nhc2UgdGhlbiBDc2V0LmNhc2VfaW5zZW5zIHMgZWxzZSBzXG4gIHwgQ2FzdCAoQWx0ZXJuYXRpdmUgbCkgLT4gTGlzdC5tYXAgfmY6KGhhbmRsZV9jYXNlX2NzZXQgaWduX2Nhc2UpIGwgfD4gQ3NldC51bmlvbl9hbGxcbiAgfCBDb21wbGVtZW50IGwgLT5cbiAgICBMaXN0Lm1hcCB+ZjooaGFuZGxlX2Nhc2VfY3NldCBpZ25fY2FzZSkgbCB8PiBDc2V0LnVuaW9uX2FsbCB8PiBDc2V0LmRpZmYgQ3NldC5jYW55XG4gIHwgRGlmZmVyZW5jZSAociwgcicpIC0+XG4gICAgQ3NldC5pbnRlclxuICAgICAgKGhhbmRsZV9jYXNlX2NzZXQgaWduX2Nhc2UgcilcbiAgICAgIChDc2V0LmRpZmYgQ3NldC5jYW55IChoYW5kbGVfY2FzZV9jc2V0IGlnbl9jYXNlIHInKSlcbiAgfCBJbnRlcnNlY3Rpb24gbCAtPiBMaXN0Lm1hcCB+ZjooaGFuZGxlX2Nhc2VfY3NldCBpZ25fY2FzZSkgbCB8PiBDc2V0LmludGVyc2VjdF9hbGxcbiAgfCBDYXN0IChOb19jYXNlIGEpIC0+IGhhbmRsZV9jYXNlX2NzZXQgdHJ1ZSBhXG4gIHwgQ2FzdCAoQ2FzZSBhKSAtPiBoYW5kbGVfY2FzZV9jc2V0IGZhbHNlIGFcbjs7XG5cbmxldCByZWMgaGFuZGxlX2Nhc2UgaWduX2Nhc2UgOiB0IC0+IChDc2V0LnQsIFsgYFVuY2FzZWQgXSkgZ2VuID0gZnVuY3Rpb25cbiAgfCBTZXQgcyAtPiBTZXQgKGhhbmRsZV9jYXNlX2NzZXQgaWduX2Nhc2UgcylcbiAgfCBTZXF1ZW5jZSBsIC0+IFNlcXVlbmNlIChMaXN0Lm1hcCB+ZjooaGFuZGxlX2Nhc2UgaWduX2Nhc2UpIGwpXG4gIHwgQXN0IChBbHRlcm5hdGl2ZSBsKSAtPlxuICAgIGxldCBsID0gTGlzdC5tYXAgfmY6KGhhbmRsZV9jYXNlIGlnbl9jYXNlKSBsIGluXG4gICAgQXN0IChBbHRlcm5hdGl2ZSBsKVxuICB8IFJlcGVhdCAociwgaSwgaikgLT4gUmVwZWF0IChoYW5kbGVfY2FzZSBpZ25fY2FzZSByLCBpLCBqKVxuICB8ICggQmVnX29mX2xpbmVcbiAgICB8IEVuZF9vZl9saW5lXG4gICAgfCBCZWdfb2Zfd29yZFxuICAgIHwgRW5kX29mX3dvcmRcbiAgICB8IE5vdF9ib3VuZFxuICAgIHwgQmVnX29mX3N0clxuICAgIHwgRW5kX29mX3N0clxuICAgIHwgTGFzdF9lbmRfb2ZfbGluZVxuICAgIHwgU3RhcnRcbiAgICB8IFN0b3AgKSBhcyByIC0+IHJcbiAgfCBTZW0gKGssIHIpIC0+IFNlbSAoaywgaGFuZGxlX2Nhc2UgaWduX2Nhc2UgcilcbiAgfCBTZW1fZ3JlZWR5IChrLCByKSAtPiBTZW1fZ3JlZWR5IChrLCBoYW5kbGVfY2FzZSBpZ25fY2FzZSByKVxuICB8IEdyb3VwIChuLCByKSAtPiBHcm91cCAobiwgaGFuZGxlX2Nhc2UgaWduX2Nhc2UgcilcbiAgfCBOb19ncm91cCByIC0+IE5vX2dyb3VwIChoYW5kbGVfY2FzZSBpZ25fY2FzZSByKVxuICB8IE5lc3QgciAtPiBOZXN0IChoYW5kbGVfY2FzZSBpZ25fY2FzZSByKVxuICB8IEFzdCAoQ2FzZSByKSAtPiBoYW5kbGVfY2FzZSBmYWxzZSByXG4gIHwgQXN0IChOb19jYXNlIHIpIC0+IGhhbmRsZV9jYXNlIHRydWUgclxuICB8IFBtYXJrIChpLCByKSAtPiBQbWFyayAoaSwgaGFuZGxlX2Nhc2UgaWduX2Nhc2Ugcilcbjs7XG5cbm1vZHVsZSBFeHBvcnQgPSBzdHJ1Y3RcbiAgdHlwZSBub25yZWMgdCA9IHRcblxuICBsZXQgcHAgPSBwcFxuXG4gIGxldCBzZXEgPSBmdW5jdGlvblxuICAgIHwgWyByIF0gLT4gclxuICAgIHwgbCAtPiBTZXF1ZW5jZSBsXG4gIDs7XG5cbiAgbGV0IGNoYXIgPVxuICAgIGxldCBmID0gRGVuc2VfbWFwLm1ha2UgfnNpemU6MjU2IH5mOihmdW4gaSAtPiBjc2V0IChDc2V0LmNzaW5nbGUgKENoYXIuY2hyIGkpKSkgaW5cbiAgICBmdW4gYyAtPiBmIChDaGFyLmNvZGUgYylcbiAgOztcblxuICBsZXQgYW55ID0gY3NldCBDc2V0LmNhbnlcblxuICBsZXQgc3RyIHMgOiB0ID1cbiAgICBsZXQgbCA9IHJlZiBbXSBpblxuICAgIGZvciBpID0gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgICAgbCA6PSBjaGFyIHMuW2ldIDo6ICFsXG4gICAgZG9uZTtcbiAgICBzZXEgIWxcbiAgOztcblxuICBsZXQgYXNfc2V0X2VsZW1zIGVsZW1zID1cbiAgICBtYXRjaFxuICAgICAgTGlzdC5tYXAgZWxlbXMgfmY6KGZ1bmN0aW9uXG4gICAgICAgIHwgU2V0IGUgLT4gZVxuICAgICAgICB8IF8gLT4gcmFpc2Vfbm90cmFjZSBFeGl0KVxuICAgIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiBFeGl0IC0+IE5vbmVcbiAgICB8IGUgLT4gU29tZSBlXG4gIDs7XG5cbiAgbGV0IGVtcHR5IDogdCA9IEFzdCBlbXB0eV9hbHRlcm5hdGl2ZVxuXG4gIGxldCBhbHQgKGVsZW1zIDogdCBsaXN0KSA6IHQgPVxuICAgIG1hdGNoIGVsZW1zIHdpdGhcbiAgICB8IFtdIC0+IGVtcHR5XG4gICAgfCBbIHggXSAtPiB4XG4gICAgfCBfIC0+XG4gICAgICAobWF0Y2ggYXNfc2V0X2VsZW1zIGVsZW1zIHdpdGhcbiAgICAgICB8IE5vbmUgLT4gQXN0IChBbHRlcm5hdGl2ZSBlbGVtcylcbiAgICAgICB8IFNvbWUgZWxlbXMgLT4gU2V0IChDYXN0IChBbHRlcm5hdGl2ZSBlbGVtcykpKVxuICA7O1xuXG4gIGxldCBlcHNpbG9uID0gc2VxIFtdXG5cbiAgbGV0IHJlcG4gciBpIGogPVxuICAgIGlmIGkgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJSZS5yZXBuXCI7XG4gICAgbWF0Y2ggaiwgaSB3aXRoXG4gICAgfCBTb21lIGosIF8gd2hlbiBqIDwgaSAtPiBpbnZhbGlkX2FyZyBcIlJlLnJlcG5cIlxuICAgIHwgU29tZSAwLCAwIC0+IGVwc2lsb25cbiAgICB8IFNvbWUgMSwgMSAtPiByXG4gICAgfCBfIC0+IFJlcGVhdCAociwgaSwgailcbiAgOztcblxuICBsZXQgcmVwIHIgPSByZXBuIHIgMCBOb25lXG4gIGxldCByZXAxIHIgPSByZXBuIHIgMSBOb25lXG4gIGxldCBvcHQgciA9IHJlcG4gciAwIChTb21lIDEpXG4gIGxldCBib2wgPSBCZWdfb2ZfbGluZVxuICBsZXQgZW9sID0gRW5kX29mX2xpbmVcbiAgbGV0IGJvdyA9IEJlZ19vZl93b3JkXG4gIGxldCBlb3cgPSBFbmRfb2Zfd29yZFxuICBsZXQgd29yZCByID0gc2VxIFsgYm93OyByOyBlb3cgXVxuICBsZXQgbm90X2JvdW5kYXJ5ID0gTm90X2JvdW5kXG4gIGxldCBib3MgPSBCZWdfb2Zfc3RyXG4gIGxldCBlb3MgPSBFbmRfb2Zfc3RyXG4gIGxldCB3aG9sZV9zdHJpbmcgciA9IHNlcSBbIGJvczsgcjsgZW9zIF1cbiAgbGV0IGxlb2wgPSBMYXN0X2VuZF9vZl9saW5lXG4gIGxldCBzdGFydCA9IFN0YXJ0XG4gIGxldCBzdG9wID0gU3RvcFxuXG4gIHR5cGUgJ2IgZiA9IHsgZiA6ICdhLiAnYSAtPiAoJ2EsICdiKSBhc3QgfVxuXG4gIGxldCBtYWtlX3NldCBmIHQgPVxuICAgIG1hdGNoIHQgd2l0aFxuICAgIHwgU2V0IHggLT4gU2V0IChDYXN0IChmLmYgeCkpXG4gICAgfCBfIC0+IEFzdCAoZi5mIHQpXG4gIDs7XG5cbiAgbGV0IHByZXNlcnZlX3NldCBmIHQgPVxuICAgIG1hdGNoIHQgd2l0aFxuICAgIHwgU2V0IF8gLT4gdFxuICAgIHwgXyAtPiBmIHRcbiAgOztcblxuICBsZXQgbG9uZ2VzdCA9IHByZXNlcnZlX3NldCAoZnVuIHQgLT4gU2VtIChgTG9uZ2VzdCwgdCkpXG4gIGxldCBzaG9ydGVzdCA9IHByZXNlcnZlX3NldCAoZnVuIHQgLT4gU2VtIChgU2hvcnRlc3QsIHQpKVxuICBsZXQgZmlyc3QgPSBwcmVzZXJ2ZV9zZXQgKGZ1biB0IC0+IFNlbSAoYEZpcnN0LCB0KSlcbiAgbGV0IGdyZWVkeSA9IHByZXNlcnZlX3NldCAoZnVuIHQgLT4gU2VtX2dyZWVkeSAoYEdyZWVkeSwgdCkpXG4gIGxldCBub25fZ3JlZWR5ID0gcHJlc2VydmVfc2V0IChmdW4gdCAtPiBTZW1fZ3JlZWR5IChgTm9uX2dyZWVkeSwgdCkpXG4gIGxldCBncm91cCA/bmFtZSByID0gR3JvdXAgKG5hbWUsIHIpXG4gIGxldCBub19ncm91cCA9IHByZXNlcnZlX3NldCAoZnVuIHQgLT4gTm9fZ3JvdXAgdClcbiAgbGV0IG5lc3QgciA9IE5lc3QgclxuICBsZXQgc2V0IHN0ciA9IGNzZXQgKENzZXQuc2V0IHN0cilcblxuICBsZXQgbWFyayByID1cbiAgICBsZXQgaSA9IFBtYXJrLmdlbiAoKSBpblxuICAgIGksIFBtYXJrIChpLCByKVxuICA7O1xuXG4gICgqKioqIENoYXJhY3RlciBzZXRzICoqKiopXG4gIGxldCBhc19zZXRfb3JfZXJyb3IgbmFtZSBlbGVtcyA9XG4gICAgbWF0Y2ggYXNfc2V0X2VsZW1zIGVsZW1zIHdpdGhcbiAgICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgbmFtZVxuICAgIHwgU29tZSBzIC0+IHNcbiAgOztcblxuICBsZXQgaW50ZXIgZWxlbXMgPSBTZXQgKEludGVyc2VjdGlvbiAoYXNfc2V0X29yX2Vycm9yIFwiUmUuaW50ZXJcIiBlbGVtcykpXG4gIGxldCBjb21wbCBlbGVtcyA9IFNldCAoQ29tcGxlbWVudCAoYXNfc2V0X29yX2Vycm9yIFwiUmUuY29tcGxcIiBlbGVtcykpXG5cbiAgbGV0IGRpZmYgciByJyA9XG4gICAgbWF0Y2ggciwgcicgd2l0aFxuICAgIHwgU2V0IHIsIFNldCByJyAtPiBTZXQgKERpZmZlcmVuY2UgKHIsIHInKSlcbiAgICB8IF8sIF8gLT4gaW52YWxpZF9hcmcgXCJSZS5kaWZmXCJcbiAgOztcblxuICBsZXQgY2FzZSA9XG4gICAgbGV0IGYgPSB7IGYgPSAoZnVuIHIgLT4gQ2FzZSByKSB9IGluXG4gICAgZnVuIHQgLT4gbWFrZV9zZXQgZiB0XG4gIDs7XG5cbiAgbGV0IG5vX2Nhc2UgPVxuICAgIGxldCBmID0geyBmID0gKGZ1biByIC0+IE5vX2Nhc2UgcikgfSBpblxuICAgIGZ1biB0IC0+IG1ha2Vfc2V0IGYgdFxuICA7O1xuXG4gIGxldCB3aXRuZXNzIHQgPVxuICAgIGxldCByZWMgd2l0bmVzcyAodCA6IG5vX2Nhc2UpID1cbiAgICAgIG1hdGNoIHQgd2l0aFxuICAgICAgfCBTZXQgYyAtPiBTdHJpbmcubWFrZSAxIChDc2V0LnRvX2NoYXIgKENzZXQucGljayBjKSlcbiAgICAgIHwgU2VxdWVuY2UgeHMgLT4gU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCB+Zjp3aXRuZXNzIHhzKVxuICAgICAgfCBBc3QgKEFsdGVybmF0aXZlICh4IDo6IF8pKSAtPiB3aXRuZXNzIHhcbiAgICAgIHwgQXN0IChBbHRlcm5hdGl2ZSBbXSkgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IFJlcGVhdCAociwgZnJvbSwgX3RvKSAtPlxuICAgICAgICBsZXQgdyA9IHdpdG5lc3MgciBpblxuICAgICAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggdyAqIGZyb20pIGluXG4gICAgICAgIGZvciBfaSA9IDEgdG8gZnJvbSBkb1xuICAgICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGIgd1xuICAgICAgICBkb25lO1xuICAgICAgICBCdWZmZXIuY29udGVudHMgYlxuICAgICAgfCBOb19ncm91cCByIC0+IHdpdG5lc3MgclxuICAgICAgfCBTZW1fZ3JlZWR5IChfLCByKSB8IFNlbSAoXywgcikgfCBOZXN0IHIgfCBQbWFyayAoXywgcikgfCBHcm91cCAoXywgcikgLT4gd2l0bmVzcyByXG4gICAgICB8IEJlZ19vZl9saW5lXG4gICAgICB8IEVuZF9vZl9saW5lXG4gICAgICB8IEJlZ19vZl93b3JkXG4gICAgICB8IEVuZF9vZl93b3JkXG4gICAgICB8IE5vdF9ib3VuZFxuICAgICAgfCBCZWdfb2Zfc3RyXG4gICAgICB8IExhc3RfZW5kX29mX2xpbmVcbiAgICAgIHwgU3RhcnRcbiAgICAgIHwgU3RvcFxuICAgICAgfCBFbmRfb2Zfc3RyIC0+IFwiXCJcbiAgICBpblxuICAgIHdpdG5lc3MgKGhhbmRsZV9jYXNlIGZhbHNlIHQpXG4gIDs7XG5lbmRcblxub3BlbiBFeHBvcnRcblxubGV0IHJlYyBtZXJnZV9zZXF1ZW5jZXMgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgQXN0IChBbHRlcm5hdGl2ZSBsJykgOjogciAtPiBtZXJnZV9zZXF1ZW5jZXMgKGwnIEAgcilcbiAgfCBTZXF1ZW5jZSAoeCA6OiB5KSA6OiByIC0+XG4gICAgKG1hdGNoIG1lcmdlX3NlcXVlbmNlcyByIHdpdGhcbiAgICAgfCBTZXF1ZW5jZSAoeCcgOjogeScpIDo6IHInIHdoZW4gZXF1YWwgQ3NldC5lcXVhbCB4IHgnIC0+XG4gICAgICAgU2VxdWVuY2UgWyB4OyBBc3QgKEFsdGVybmF0aXZlIFsgc2VxIHk7IHNlcSB5JyBdKSBdIDo6IHInXG4gICAgIHwgcicgLT4gU2VxdWVuY2UgKHggOjogeSkgOjogcicpXG4gIHwgeCA6OiByIC0+IHggOjogbWVyZ2Vfc2VxdWVuY2VzIHJcbjs7XG5cbigqWFhYIFVzZSBhIGJldHRlciBhbGdvcml0aG0gYWxsb3dpbmcgbm9uLWNvbnRpZ3VvdXMgcmVnaW9ucz8gKilcblxubGV0IGNvbG9yaXplIGNvbG9yX21hcCAocmVnZXhwIDogbm9fY2FzZSkgPVxuICBsZXQgbG5sID0gcmVmIGZhbHNlIGluXG4gIGxldCByZWMgY29sb3JpemUgcmVnZXhwID1cbiAgICBtYXRjaCAocmVnZXhwIDogbm9fY2FzZSkgd2l0aFxuICAgIHwgU2V0IHMgLT4gQ29sb3JfbWFwLnNwbGl0IGNvbG9yX21hcCBzXG4gICAgfCBTZXF1ZW5jZSBsIC0+IExpc3QuaXRlciB+Zjpjb2xvcml6ZSBsXG4gICAgfCBBc3QgKEFsdGVybmF0aXZlIGwpIC0+IExpc3QuaXRlciB+Zjpjb2xvcml6ZSBsXG4gICAgfCBSZXBlYXQgKHIsIF8sIF8pIC0+IGNvbG9yaXplIHJcbiAgICB8IEJlZ19vZl9saW5lIHwgRW5kX29mX2xpbmUgLT4gQ29sb3JfbWFwLnNwbGl0IGNvbG9yX21hcCBDc2V0Lm5sXG4gICAgfCBCZWdfb2Zfd29yZCB8IEVuZF9vZl93b3JkIHwgTm90X2JvdW5kIC0+IENvbG9yX21hcC5zcGxpdCBjb2xvcl9tYXAgQ3NldC5jd29yZFxuICAgIHwgQmVnX29mX3N0ciB8IEVuZF9vZl9zdHIgfCBTdGFydCB8IFN0b3AgLT4gKClcbiAgICB8IExhc3RfZW5kX29mX2xpbmUgLT4gbG5sIDo9IHRydWVcbiAgICB8IE5vX2dyb3VwIHIgfCBHcm91cCAoXywgcikgfCBOZXN0IHIgfCBQbWFyayAoXywgcikgLT4gY29sb3JpemUgclxuICAgIHwgU2VtIChfLCByKSB8IFNlbV9ncmVlZHkgKF8sIHIpIC0+IGNvbG9yaXplIHJcbiAgaW5cbiAgY29sb3JpemUgcmVnZXhwO1xuICAhbG5sXG47O1xuXG5sZXQgcmVjIGFuY2hvcmVkX2FzdCA6ICh0LCBfKSBhc3QgLT4gYm9vbCA9IGZ1bmN0aW9uXG4gIHwgQWx0ZXJuYXRpdmUgYWxzIC0+IExpc3QuZm9yX2FsbCB+ZjphbmNob3JlZCBhbHNcbiAgfCBOb19jYXNlIHIgfCBDYXNlIHIgLT4gYW5jaG9yZWQgclxuXG5hbmQgYW5jaG9yZWQgOiB0IC0+IGJvb2wgPSBmdW5jdGlvblxuICB8IEFzdCBhIC0+IGFuY2hvcmVkX2FzdCBhXG4gIHwgU2VxdWVuY2UgbCAtPiBMaXN0LmV4aXN0cyB+ZjphbmNob3JlZCBsXG4gIHwgUmVwZWF0IChyLCBpLCBfKSAtPiBpID4gMCAmJiBhbmNob3JlZCByXG4gIHwgTm9fZ3JvdXAgciB8IFNlbSAoXywgcikgfCBTZW1fZ3JlZWR5IChfLCByKSB8IEdyb3VwIChfLCByKSB8IE5lc3QgciB8IFBtYXJrIChfLCByKSAtPlxuICAgIGFuY2hvcmVkIHJcbiAgfCBTZXQgX1xuICB8IEJlZ19vZl9saW5lXG4gIHwgRW5kX29mX2xpbmVcbiAgfCBCZWdfb2Zfd29yZFxuICB8IEVuZF9vZl93b3JkXG4gIHwgTm90X2JvdW5kXG4gIHwgRW5kX29mX3N0clxuICB8IExhc3RfZW5kX29mX2xpbmVcbiAgfCBTdG9wIC0+IGZhbHNlXG4gIHwgQmVnX29mX3N0ciB8IFN0YXJ0IC0+IHRydWVcbjs7XG5cbmxldCB0X29mX2NzZXQgeCA9IFNldCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsNSIsImEyIiwiYTMiLCJhNCIsImdsb2JhbF9kYXRhIiwiUmVfQ3NldCIsIlJlX0R5biIsIlN0ZGxpYl9MaXN0TGFiZWxzIiwiUmVfUG1hcmsiLCJSZV9BdXRvbWF0YSIsIlJlX0ZtdCIsIlN0ZGxpYl9Gb3JtYXQiLCJSZV9JbXBvcnQiLCJTdGRsaWJfT3B0aW9uIiwiU3RkbGliIiwiUmVfQ29sb3JfbWFwIiwiU3RkbGliX1N0cmluZyIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9DaGFyIiwiUmVfRGVuc2VfbWFwIiwiY3N0X0FsdGVybmF0aXZlIiwiY3N0X0Nhc2UiLCJjc3RfTm9fY2FzZSIsImR5bl9vZl9hc3QiLCJwYXJhbSIsInhzIiwiYSIsInBwX2FzdCIsImZtdCIsImFzdCIsInZhciQiLCJzIiwicmUiLCJhbHQiLCJjIiwiY3N0X0NvbXBsZW1lbnQiLCJjc3RfRGlmZmVyZW5jZSIsImNzdF9JbnRlcnNlY3Rpb24iLCJkeW5fb2ZfY3NldCIsImNzZXQiLCJ5IiwieCIsImNzdF9CZWdfb2ZfbGluZSIsImNzdF9CZWdfb2Zfc3RyIiwiY3N0X0JlZ19vZl93b3JkIiwiY3N0X0VuZF9vZl9saW5lIiwiY3N0X0VuZF9vZl9zdHIiLCJjc3RfRW5kX29mX3dvcmQiLCJjc3RfR3JvdXAiLCJjc3RfTGFzdF9lbmRfb2ZfbGluZSIsImNzdF9OZXN0IiwiY3N0X05vX2dyb3VwIiwiY3N0X05vdF9ib3VuZCIsImNzdF9QbWFyayIsImNzdF9SZXBlYXQiLCJjc3RfU2VtIiwiY3N0X1NlbV9ncmVlZHkiLCJjc3RfU2VxdWVuY2UiLCJjc3RfU2V0IiwiY3N0X1N0YXJ0IiwiY3N0X1N0b3AiLCJkeW5fb2ZfZ2VuIiwibWF4IiwibWluIiwiZ2VuIiwiYmFzZSIsInQiLCJuYW1lIiwiYXJncyIsInBtYXJrIiwic2VtIiwicmVwIiwicHBfZ2VuIiwicHBfY3NldCIsInBwIiwicmVsIiwic3RvcCIsInN0YXJ0IiwibWF0Y2giLCJuIiwiciIsIm0iLCJrIiwic2VxIiwiYiIsImVxdWFsIiwieDEiLCJ4MiIsInMyIiwiczEiLCJqMiIsImkyIiwiajEiLCJpMSIsInIyIiwibTIiLCJyMSIsIm0xIiwibDIiLCJsMSIsImVxIiwidG9fZHluIiwiaGFuZGxlX2Nhc2VfY3NldCIsImlnbl9jYXNlIiwibCIsImhhbmRsZV9jYXNlIiwiaiIsImkiLCJjaGFyIiwiYW55Iiwic3RyIiwiYXNfc2V0X2VsZW1zIiwiZWxlbXMiLCJlIiwiZXhuIiwiZW1wdHkiLCJlcHNpbG9uIiwicmVwbiIsImNzdF9SZV9yZXBuIiwicmVwMSIsIm9wdCIsImJvdyIsImVvdyIsIndvcmQiLCJib3MiLCJlb3MiLCJ3aG9sZV9zdHJpbmciLCJtYWtlX3NldCIsImxvbmdlc3QiLCJzaG9ydGVzdCIsImZpcnN0IiwiZ3JlZWR5Iiwibm9uX2dyZWVkeSIsImdyb3VwIiwibm9fZ3JvdXAiLCJuZXN0Iiwic2V0IiwibWFyayIsImFzX3NldF9vcl9lcnJvciIsImludGVyIiwiY29tcGwiLCJkaWZmIiwiY2FzZSQiLCJub19jYXNlIiwid2l0bmVzcyIsImNzdCIsImZyb20iLCJ3IiwibWVyZ2Vfc2VxdWVuY2VzIiwiY29sb3JpemUiLCJjb2xvcl9tYXAiLCJyZWdleHAiLCJsbmwiLCJhbmNob3JlZCIsImFscyIsInRfb2ZfY3Nl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RSxTQUFBakk7QUFBQUEsUUFBQUEsUUFPcUI7QUFBQTtBQUFBO0FBQUEsbUNBZUQ7QUFBQTtBQUFBLE1BZkM7QUFBQTtBQUFBLGFBQUFFLElBQUE7QUFBQSxTQUppQjtBQUFBLGNBQUFnSSxNQUFBO0FBQUEsVUFDckIsc0RBa0JPO0FBQUE7QUFBQSxhQUFBMUUsSUFuQmM7QUFBQSxTQUVsQjtBQUFBO0FBQUE7QUFBQSxhQUFBd0IsSUFFQztBQUFBLFNBRVQsb0RBYVk7QUFBQTtBQUFBLGFBQUFHLElBZkgsVUFBQTNCLE1BQUEsY0FHSDtBQUFBLFNBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FIRjtBQUFBO0FBQUE7QUFBQSxLQWNmO0FBQUE7QUFBQSxHQUNrQjtBQUFBLFlBQUEyRSxVQUFBbEgsR0FHWixjQUFLO0FBQUEsR0ExRm5CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEaldKIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzIzNjEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9ncm91cC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIFJlc3VsdCBvZiBhIHN1Y2Nlc3NmdWwgbWF0Y2guICopXG50eXBlIHQgPVxuICB7ICgqIElucHV0IHN0cmluZy4gTWF0Y2hlZCBzdHJpbmdzIGFyZSBzdWJzdHJpbmdzIG9mIHMgKilcbiAgICBzIDogc3RyaW5nXG4gICAgICAoKiBNYXBwaW5nIGZyb20gZ3JvdXAgaW5kaWNlcyB0byBwb3NpdGlvbnMgaW4gZ3Bvcy4gZ3JvdXAgaSBoYXMgcG9zaXRpb25zIDIqaVxuICAgICAgICAgLSAxLCAyKmkgKyAxIGluIGdwb3MuIElmIHRoZSBncm91cCB3YXNuJ3QgbWF0Y2hlZCwgdGhlbiBpdHMgY29ycmVzcG9uZGluZ1xuICAgICAgICAgICB2YWx1ZXMgaW4gbWFya3Mgd2lsbCBiZSAtMSwtMSAqKVxuICA7IG1hcmtzIDogTWFya19pbmZvcy50XG4gIDsgKCogTWFya3MgcG9zaXRpb25zLiBpLmUuIHRob3NlIG1hcmtzIGNyZWF0ZWQgd2l0aCBSZS5tYXJrcyAqKVxuICAgIHBtYXJrcyA6IFBtYXJrLlNldC50XG4gIDsgKCogR3JvdXAgcG9zaXRpb25zLiBBZGphY2VudCBlbGVtZW50cyBhcmUgKHN0YXJ0LCBzdG9wKSBvZiBncm91cCBtYXRjaC5cbiAgICAgICBpbmRleGVkIGJ5IHRoZSB2YWx1ZXMgaW4gbWFya3MuIFNvIGdyb3VwIGkgaW4gYW4gcmUgd291bGQgYmUgdGhlIHN1YnN0cmluZzpcblxuICAgICAgIHN0YXJ0ID0gdC5ncG9zLihtYXJrcy4oMippKSkgLSAxXG4gICAgICAgc3RvcCA9IHQuZ3Bvcy4obWFya3MuKDIqaSArIDEpKSAtIDEgKilcbiAgICBncG9zIDogaW50IGFycmF5XG4gIDsgKCogTnVtYmVyIG9mIGdyb3VwcyB0aGUgcmVndWxhciBleHByZXNzaW9uIGNvbnRhaW5zLiBNYXRjaGVkIG9yIG5vdCAqKVxuICAgIGdjb3VudCA6IGludFxuICB9XG5cbmxldCBjcmVhdGUgcyB+Z2NvdW50IH5ncG9zIG1hcmtzIHBtYXJrcyA9IHsgczsgZ2NvdW50OyBncG9zOyBtYXJrczsgcG1hcmtzIH1cblxubW9kdWxlIE9mZnNldCA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgYWJzZW50ID0gLTFcbiAgbGV0IGlzX3ByZXNlbnQgdCA9IHQgPj0gMFxuICBsZXQgZ2V0X25vX2NoZWNrIHQgPSB0XG5lbmRcblxubGV0IHN0YXJ0X29mZnNldCB0IGkgPVxuICBsZXQgaSA9IE1hcmtfaW5mb3Muc3RhcnRfb2Zmc2V0IHQubWFya3MgaSBpblxuICBpZiBNYXJrX2luZm9zLk9mZnNldC5pc19wcmVzZW50IGlcbiAgdGhlbiB0Lmdwb3MuKE1hcmtfaW5mb3MuT2Zmc2V0LmdldF9ub19jaGVjayBpKVxuICBlbHNlIE9mZnNldC5hYnNlbnRcbjs7XG5cbmxldCBzdG9wX29mZnNldCB0IGkgPVxuICBsZXQgaSA9IE1hcmtfaW5mb3Muc3RvcF9vZmZzZXQgdC5tYXJrcyBpIGluXG4gIGlmIE1hcmtfaW5mb3MuT2Zmc2V0LmlzX3ByZXNlbnQgaVxuICB0aGVuIHQuZ3Bvcy4oTWFya19pbmZvcy5PZmZzZXQuZ2V0X25vX2NoZWNrIGkpXG4gIGVsc2UgT2Zmc2V0LmFic2VudFxuOztcblxubGV0IG9mZnNldF9vcHQgdCBpID1cbiAgTWFya19pbmZvcy5vZmZzZXQgdC5tYXJrcyBpXG4gIHw+IE9wdGlvbi5tYXAgKGZ1biAoc3RhcnQsIHN0b3ApIC0+IHQuZ3Bvcy4oc3RhcnQpLCB0Lmdwb3MuKHN0b3ApKVxuOztcblxubGV0IG9yX25vdF9mb3VuZCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBTb21lIHMgLT4gc1xuOztcblxubGV0IG9mZnNldCB0IGkgPSBvZmZzZXRfb3B0IHQgaSB8PiBvcl9ub3RfZm91bmRcblxubGV0IGdldF9vcHQgdCBpID1cbiAgb2Zmc2V0X29wdCB0IGkgfD4gT3B0aW9uLm1hcCAoZnVuIChwMSwgcDIpIC0+IFN0cmluZy5zdWIgdC5zIHAxIChwMiAtIHAxKSlcbjs7XG5cbmxldCBwbWFya3MgdCA9IHQucG1hcmtzXG5sZXQgZ2V0IHQgaSA9IGdldF9vcHQgdCBpIHw+IG9yX25vdF9mb3VuZFxubGV0IHN0YXJ0X29wdCBzdWJzIGkgPSBvZmZzZXRfb3B0IHN1YnMgaSB8PiBPcHRpb24ubWFwIGZzdFxubGV0IHN0YXJ0IHN1YnMgaSA9IHN0YXJ0X29wdCBzdWJzIGkgfD4gb3Jfbm90X2ZvdW5kXG5sZXQgc3RvcF9vcHQgc3VicyBpID0gb2Zmc2V0X29wdCBzdWJzIGkgfD4gT3B0aW9uLm1hcCBzbmRcbmxldCBzdG9wIHN1YnMgaSA9IHN0b3Bfb3B0IHN1YnMgaSB8PiBvcl9ub3RfZm91bmRcbmxldCB0ZXN0IHQgaSA9IE1hcmtfaW5mb3MudGVzdCB0Lm1hcmtzIGlcbmxldCBnZXRfb3B0IHQgaSA9IGlmIHRlc3QgdCBpIHRoZW4gU29tZSAoZ2V0IHQgaSkgZWxzZSBOb25lXG5sZXQgZHVtbXlfb2Zmc2V0ID0gLTEsIC0xXG5cbmxldCBhbGxfb2Zmc2V0IHQgPVxuICBsZXQgcmVzID0gQXJyYXkubWFrZSB0Lmdjb3VudCBkdW1teV9vZmZzZXQgaW5cbiAgTWFya19pbmZvcy5pdGVyaSB0Lm1hcmtzIH5mOihmdW4gaSBzdGFydCBzdG9wIC0+XG4gICAgbGV0IHAxID0gdC5ncG9zLihzdGFydCkgaW5cbiAgICBsZXQgcDIgPSB0Lmdwb3MuKHN0b3ApIGluXG4gICAgcmVzLihpKSA8LSBwMSwgcDIpO1xuICByZXNcbjs7XG5cbmxldCBkdW1teV9zdHJpbmcgPSBcIlwiXG5cbmxldCBhbGwgdCA9XG4gIGxldCByZXMgPSBBcnJheS5tYWtlIHQuZ2NvdW50IGR1bW15X3N0cmluZyBpblxuICBNYXJrX2luZm9zLml0ZXJpIHQubWFya3MgfmY6KGZ1biBpIHN0YXJ0IHN0b3AgLT5cbiAgICBsZXQgcDEgPSB0Lmdwb3MuKHN0YXJ0KSBpblxuICAgIGxldCBwMiA9IHQuZ3Bvcy4oc3RvcCkgaW5cbiAgICByZXMuKGkpIDwtIFN0cmluZy5zdWIgdC5zIHAxIChwMiAtIHAxKSk7XG4gIHJlc1xuOztcblxubGV0IHBwIGZtdCB0ID1cbiAgbGV0IG1hdGNoZXMgPVxuICAgIGxldCBvZmZzZXRzID0gYWxsX29mZnNldCB0IGluXG4gICAgbGV0IHN0cnMgPSBhbGwgdCBpblxuICAgIEFycmF5LnRvX2xpc3QgKEFycmF5LmluaXQgKEFycmF5Lmxlbmd0aCBzdHJzKSAoZnVuIGkgLT4gc3Rycy4oaSksIG9mZnNldHMuKGkpKSlcbiAgaW5cbiAgbGV0IG9wZW4gRm9ybWF0IGluXG4gIGxldCBvcGVuIEZtdCBpblxuICBsZXQgcHBfbWF0Y2ggZm10IChzdHIsIChzdGFydCwgc3RvcCkpID0gZnByaW50ZiBmbXQgXCJAWyglcyAoJWQgJWQpKUBdXCIgc3RyIHN0YXJ0IHN0b3AgaW5cbiAgc2V4cCBmbXQgXCJHcm91cFwiIChsaXN0IHBwX21hdGNoKSBtYXRjaGVzXG47O1xuXG5sZXQgbmJfZ3JvdXBzIHQgPSB0Lmdjb3VudFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwzIiwiZiIsImEwIiwiYTEiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0Zvcm1hdCIsIlN0ZGxpYl9BcnJheSIsIlJlX0ZtdCIsIlN0ZGxpYl9TdHJpbmciLCJSZV9NYXJrX2luZm9zIiwiU3RkbGliX09wdGlvbiIsIlN0ZGxpYiIsImNyZWF0ZSIsInMiLCJnY291bnQiLCJncG9zIiwibWFya3MiLCJwbWFya3MiLCJpc19wcmVzZW50IiwidCIsImdldF9ub19jaGVjayIsImFic2VudCIsInN0YXJ0X29mZnNldCIsImkiLCJzdG9wX29mZnNldCIsIm9mZnNldF9vcHQiLCJwYXJhbSIsInN0b3AiLCJzdGFydCIsIm9yX25vdF9mb3VuZCIsIm9mZnNldCIsImdldCIsInAyIiwicDEiLCJzdGFydF9vcHQiLCJzdWJzIiwic3RvcF9vcHQiLCJ0ZXN0IiwiZ2V0X29wdCIsImR1bW15X29mZnNldCIsImFsbF9vZmZzZXQiLCJyZXMiLCJjc3QiLCJhbGwiLCJwcCIsImZtdCIsIm9mZnNldHMiLCJzdHJzIiwibWF0Y2hlcyIsInBwX21hdGNoIiwibWF0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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBWSxHQUFBQyxLQUFBMUI7QUFBQUE7QUFBQUEsS0FBQTJCLFVDNEZrQjtBQUFBLEtBQUFDLE9BQ0g7QUFBQTtBQUFBLE9BQ0c7QUFBQTtBQUFBO0FBQUEsa0JBQUF4QjtBQUFBQSxjQUFBLElBQW9EO0FBQUEsVUFBViwrQ0FBUTtBQUFBLFNBQWE7QUFBQSxLQUFBeUIsVUFBN0U7QUFBQSxhQUFBQyxTQUFBSixLQUFBbkI7QUFBQUEsU0FBQXdCLFFBSVcsVUFBQXZCLE9BQUEsVUFBQUMsUUFBQSxVQUFBdUIsTUFBQTtBQUFBLEtBQTJCO0FBQUEsc0VBQTZDO0FBQUE7QUFBQSxZQUNwRTtBQUFBLElBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQSw0QkFBZjtBQUFBLHFCQUF1QjtBQUFBO0FBQUEsWUFBQUMsVUFBQWpDLEdBR3hCLFlBQVE7QUFBQSxHRHRHMUIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozMjU0MiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL3NsaWNlLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwib3BlbiBJbXBvcnRcblxudHlwZSB0ID1cbiAgeyBzIDogc3RyaW5nXG4gIDsgcG9zIDogaW50XG4gIDsgbGVuIDogaW50XG4gIH1cblxubW9kdWxlIEwgPSBzdHJ1Y3RcbiAgdHlwZSBub25yZWMgdCA9IHQgbGlzdFxuXG4gIGxldCBnZXRfc3Vic3RyaW5nIHNsaWNlcyB+c3RhcnQgfnN0b3AgPVxuICAgIGlmIHN0b3AgPSBzdGFydFxuICAgIHRoZW4gXCJcIlxuICAgIGVsc2UgKFxuICAgICAgbGV0IHNsaWNlcyA9XG4gICAgICAgIGxldCByZWMgZHJvcCBzbGljZXMgcmVtYWlucyA9XG4gICAgICAgICAgaWYgcmVtYWlucyA9IDBcbiAgICAgICAgICB0aGVuIHNsaWNlc1xuICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgbWF0Y2ggc2xpY2VzIHdpdGhcbiAgICAgICAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICB8ICh7IHMgPSBfOyBwb3M7IGxlbiB9IGFzIHNsaWNlKSA6OiB4cyAtPlxuICAgICAgICAgICAgICBsZXQgcmVtYWlucycgPSByZW1haW5zIC0gbGVuIGluXG4gICAgICAgICAgICAgIGlmIHJlbWFpbnMnID49IDBcbiAgICAgICAgICAgICAgdGhlbiBkcm9wIHhzIHJlbWFpbnMnXG4gICAgICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgICAgIGxldCBwb3MgPSBwb3MgKyByZW1haW5zIGluXG4gICAgICAgICAgICAgICAgbGV0IGxlbiA9IGxlbiAtIHJlbWFpbnMgaW5cbiAgICAgICAgICAgICAgICB7IHNsaWNlIHdpdGggcG9zOyBsZW4gfSA6OiB4cykpXG4gICAgICAgIGluXG4gICAgICAgIGRyb3Agc2xpY2VzIHN0YXJ0XG4gICAgICBpblxuICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKHN0b3AgLSBzdGFydCkgaW5cbiAgICAgIGxldCByZWMgdGFrZSBzbGljZXMgcmVtYWlucyA9XG4gICAgICAgIGlmIHJlbWFpbnMgPiAwXG4gICAgICAgIHRoZW4gKFxuICAgICAgICAgIG1hdGNoIHNsaWNlcyB3aXRoXG4gICAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IHsgczsgcG9zOyBsZW4gfSA6OiB4cyAtPlxuICAgICAgICAgICAgbGV0IHJlbWFpbnMnID0gcmVtYWlucyAtIGxlbiBpblxuICAgICAgICAgICAgaWYgcmVtYWlucycgPiAwXG4gICAgICAgICAgICB0aGVuIChcbiAgICAgICAgICAgICAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYnVmIHMgcG9zIGxlbjtcbiAgICAgICAgICAgICAgdGFrZSB4cyByZW1haW5zJylcbiAgICAgICAgICAgIGVsc2UgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYnVmIHMgcG9zIHJlbWFpbnMpXG4gICAgICBpblxuICAgICAgdGFrZSBzbGljZXMgKHN0b3AgLSBzdGFydCk7XG4gICAgICBCdWZmZXIuY29udGVudHMgYnVmKVxuICA7O1xuXG4gIGxldCByZWMgZHJvcCB0IHJlbWFpbnMgPVxuICAgIGlmIHJlbWFpbnMgPSAwXG4gICAgdGhlbiB0XG4gICAgZWxzZSAoXG4gICAgICBtYXRjaCB0IHdpdGhcbiAgICAgIHwgW10gLT4gW11cbiAgICAgIHwgKHsgcyA9IF87IHBvczsgbGVuIH0gYXMgc2xpY2UpIDo6IHQgLT5cbiAgICAgICAgaWYgcmVtYWlucyA+PSBsZW5cbiAgICAgICAgdGhlbiBkcm9wIHQgKHJlbWFpbnMgLSBsZW4pXG4gICAgICAgIGVsc2UgKFxuICAgICAgICAgIGxldCBkZWx0YSA9IGxlbiAtIHJlbWFpbnMgaW5cbiAgICAgICAgICB7IHNsaWNlIHdpdGggcG9zID0gcG9zICsgZGVsdGE7IGxlbiA9IGxlbiAtIGRlbHRhIH0gOjogdCkpXG4gIDs7XG5cbiAgbGV0IGRyb3BfcmV2IHQgcmVtYWlucyA9XG4gICAgKCogVE9ETyBVc2UgYSBwcm9wZXIgZnVuY3Rpb25hbCBxdWV1ZSAqKVxuICAgIGlmIHJlbWFpbnMgPSAwIHRoZW4gdCBlbHNlIExpc3QucmV2IChkcm9wIChMaXN0LnJldiB0KSByZW1haW5zKVxuICA7O1xuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImdsb2JhbF9kYXRhIiwiUmVfSW1wb3J0IiwiU3RkbGliX0xpc3RMYWJlbHMiLCJTdGRsaWJfQnVmZmVyIiwiQXNzZXJ0X2ZhaWx1cmUiLCJjc3RfbGliX3NsaWNlX21sIiwiZ2V0X3N1YnN0cmluZyIsInNsaWNlcyIsInJlbWFpbnMiLCJzdG9wIiwic2xpY2UiLCJsZW4iLCJwb3MiLCJidWYiLCJtYXRjaCIsInMiLCJkcm9wX3JldiIsInQiLCJkZWx0YSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsY0FBQUMsUUFBQUMsU0FBQUM7QUFBQUE7QUFBQUE7QUFBQUEsS0NZTywyQ0FDRTtBQUFBLFNBQUFGLFdBRFUsUUFBQUMsWUFBQTtBQUFBO0FBQUEsTUFLTiw4Q0FBQUQsV0FBVztBQUFBLE1BRVQ7QUFBQSxPQUVLO0FBQUE7QUFBQSxPQUFBQSxXQUZMO0FBQUEsT0FBQUcsUUFBQTtBQUFBLE9BQUFDLE1BQUE7QUFBQSxPQUFBQyxNQUFBO0FBQUEsT0FBQUosWUFJRDtBQUFBLE1BQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQUFJLFFBRUs7QUFBQSxNQUFBRCxRQUVIO0FBQUEsTUFBQUosV0FDQTtBQUFBO0FBQUE7QUFBQSxLQUFBTSxNQUlBO0FBQUEsS0FBQUwsWUFjVjtBQUFBLEtBQUFELFdBQUE7QUFBQSxLQUFBQyxZQUFBO0FBQUE7QUFBQSxLQVpLO0FBQUEsTUFDRTtBQUFBLE9BRUs7QUFBQTtBQUFBLE9BQUFELFdBRkw7QUFBQSxPQUFBTyxRQUFBO0FBQUEsT0FBQUgsUUFBQTtBQUFBLE9BQUFDLFFBQUE7QUFBQSxPQUFBRyxJQUFBO0FBQUEsT0FBQVAsWUFJRDtBQUFBLE1BQ0c7QUFBQSxPQUVEO0FBQUEsT0FBa0M7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUUvQjtBQUFBO0FBQUEsS0FFZSx1Q0FDTjtBQUFBO0FBQUE7QUFBQSxZQUFBUSxTQUFBQyxLQUFBVDtBQUFBQSxJQW1CbkIsMENBQWlCO0FBQUE7QUFBQSxLQUFBUyxNQUFzQjtBQUFBLEtBQUFBLElBQU47QUFBQSxLQUFBVCxVQUFBO0FBQUE7QUFBQSxLQWZqQztBQUFBLGNBQVc7QUFBQTtBQUFBLFVBQUFTLE1BRVQsTUFBQVAsUUFBQSxNQUFBQyxNQUFBLFVBQUFDLE1BQUE7QUFBQSxNQUlEO0FBQUEsV0FBQUosWUFDSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBVSxRQUNBO0FBQUEsV0FFSDtBQUFBO0FBQUE7QUFBQSxjQU5JO0FBQUEsS0FXcUQ7QUFBQTtBQUFBO0FBQUEsR0RuRW5FIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzI2NDEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9jb21waWxlLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwib3BlbiBJbXBvcnRcblxubGV0IHJlYyBpdGVyIG4gZiB2ID0gaWYgSW50LmVxdWFsIG4gMCB0aGVuIHYgZWxzZSBpdGVyIChuIC0gMSkgZiAoZiB2KVxuXG5tb2R1bGUgSWR4IDogc2lnXG4gIHR5cGUgdCBbQEBpbW1lZGlhdGVdXG5cbiAgdmFsIHVua25vd24gOiB0XG4gIHZhbCBtYWtlX2JyZWFrIDogQXV0b21hdGEuSWR4LnQgLT4gdFxuICB2YWwgb2ZfaWR4IDogQXV0b21hdGEuSWR4LnQgLT4gdFxuICB2YWwgaXNfaWR4IDogdCAtPiBib29sXG4gIHZhbCBpc19icmVhayA6IHQgLT4gYm9vbFxuICB2YWwgaXNfdW5rbm93biA6IHQgLT4gYm9vbFxuICB2YWwgaWR4IDogdCAtPiBpbnRcbiAgdmFsIGJyZWFrX2lkeCA6IHQgLT4gaW50XG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHVua25vd24gPSAtMlxuICBsZXQgYnJlYWsgPSAtM1xuICBsZXQgb2ZfaWR4ICh4IDogQXV0b21hdGEuSWR4LnQpID0gQXV0b21hdGEuSWR4LnRvX2ludCB4IFtAQGlubGluZSBhbHdheXNdXG4gIGxldCBpc19pZHggdCA9IHQgPj0gMCBbQEBpbmxpbmUgYWx3YXlzXVxuICBsZXQgaXNfYnJlYWsgeCA9IHggPD0gYnJlYWsgW0BAaW5saW5lIGFsd2F5c11cbiAgbGV0IGlzX3Vua25vd24geCA9IHggPSB1bmtub3duIFtAQGlubGluZSBhbHdheXNdXG4gIGxldCBpZHggdCA9IHQgW0BAaW5saW5lIGFsd2F5c11cbiAgbGV0IG1ha2VfYnJlYWsgKGlkeCA6IEF1dG9tYXRhLklkeC50KSA9IC01IC0gQXV0b21hdGEuSWR4LnRvX2ludCBpZHggW0BAaW5saW5lIGFsd2F5c11cbiAgbGV0IGJyZWFrX2lkeCB0ID0gKHQgKyA1KSAqIC0xIFtAQGlubGluZSBhbHdheXNdXG5lbmRcblxudHlwZSBtYXRjaF9pbmZvID1cbiAgfCBNYXRjaCBvZiBHcm91cC50XG4gIHwgRmFpbGVkXG4gIHwgUnVubmluZyBvZiB7IG5vX21hdGNoX3N0YXJ0c19iZWZvcmUgOiBpbnQgfVxuXG50eXBlIHN0YXRlX2luZm8gPVxuICB7IGlkeCA6IElkeC50XG4gIDsgKCogSW5kZXggb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHBvc2l0aW9uIHRhYmxlLlxuICAgICAgIE5vdCB5ZXQgY29tcHV0ZWQgdHJhbnNpdGlvbnMgcG9pbnQgdG8gYSBkdW1teSBzdGF0ZSB3aGVyZVxuICAgICAgIFtpZHhdIGlzIHNldCB0byBbdW5rbm93bl07XG4gICAgICAgSWYgW2lkeF0gaXMgc2V0IHRvIFticmVha10gZm9yIHN0YXRlcyB0aGF0IGVpdGhlciBhbHdheXNcbiAgICAgICBzdWNjZWVkIG9yIGFsd2F5cyBmYWlsLiAqKVxuICAgIG11dGFibGUgZmluYWwgOiAoQ2F0ZWdvcnkudCAqIChBdXRvbWF0YS5JZHgudCAqIEF1dG9tYXRhLlN0YXR1cy50KSkgbGlzdFxuICA7ICgqIE1hcHBpbmcgZnJvbSB0aGUgY2F0ZWdvcnkgb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvXG4gICAgICAgLSB0aGUgaW5kZXggd2hlcmUgdGhlIG5leHQgcG9zaXRpb24gc2hvdWxkIGJlIHNhdmVkXG4gICAgICAgLSBwb3NzaWJseSwgdGhlIGxpc3Qgb2YgbWFya3MgKGFuZCB0aGUgY29ycmVzcG9uZGluZyBpbmRpY2VzKVxuICAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgYmVzdCBtYXRjaCAqKVxuICAgIGRlc2MgOiBBdXRvbWF0YS5TdGF0ZS50ICgqIERlc2NyaXB0aW9uIG9mIHRoaXMgc3RhdGUgb2YgdGhlIGF1dG9tYXRhICopXG4gIH1cblxuKCogVGhyZWFkLXNhZmV0eTogd2UgdXNlIGRvdWJsZS1jaGVja2VkIGxvY2tpbmcgdG8gYWNjZXNzIGZpZWxkIFtmaW5hbF0uICopXG5cbigqIEEgc3RhdGUgW3RdIGlzIGEgcGFpciBjb21wb3NlZCBvZiBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZVxuICAgc3RhdGUgW3N0YXRlX2luZm9dIGFuZCBhIHRyYW5zaXRpb24gdGFibGUgW3QgYXJyYXldLCBpbmRleGVkIGJ5XG4gICBjb2xvci4gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbiwgdG8gYXZvaWQgYW4gaW5kaXJlY3Rpb24sIHdlIG1hbnVhbGx5XG4gICB1bmJveCB0aGUgdHJhbnNpdGlvbiB0YWJsZTogd2UgYWxsb2NhdGUgYSBzaW5nbGUgYXJyYXksIHdpdGggdGhlXG4gICBzdGF0ZSBpbmZvcm1hdGlvbiBhdCBpbmRleCAwLCBmb2xsb3dlZCBieSB0aGUgdHJhbnNpdGlvbnMuICopXG5tb2R1bGUgU3RhdGUgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIG1ha2UgOiBuY29sOmludCAtPiBzdGF0ZV9pbmZvIC0+IHRcbiAgdmFsIG1ha2VfYnJlYWsgOiBzdGF0ZV9pbmZvIC0+IHRcbiAgdmFsIGdldF9pbmZvIDogdCAtPiBzdGF0ZV9pbmZvXG4gIHZhbCBmb2xsb3dfdHJhbnNpdGlvbiA6IHQgLT4gY29sb3I6Q3NldC5jIC0+IHRcbiAgdmFsIHNldF90cmFuc2l0aW9uIDogdCAtPiBjb2xvcjpDc2V0LmMgLT4gdCAtPiB1bml0XG4gIHZhbCBpc191bmtub3duX3RyYW5zaXRpb24gOiB0IC0+IGNvbG9yOkNzZXQuYyAtPiBib29sXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gVGFibGUgb2YgdCBhcnJheSBbQEB1bmJveGVkXVxuXG4gICgqIFRocmVhZC1zYWZldHk6XG4gICAgIFdlIHN0b3JlIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBhdCBpbmRleCAwLiBGb3Igb3RoZXIgZWxlbWVudHNcbiAgICAgb2YgdGhlIHRyYW5zaXRpb24gdGFibGUsIHdoaWNoIGFyZSBsYXppbHkgY29tcHV0ZWQsIHdlIHVzZVxuICAgICBkb3VibGUtY2hlY2tlZCBsb2NraW5nLiAqKVxuXG4gIGxldCBnZXRfaW5mbyAoVGFibGUgc3QpIDogc3RhdGVfaW5mbyA9IE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBzdCAwKVxuICBbQEBpbmxpbmUgYWx3YXlzXVxuICA7O1xuXG4gIGxldCBzZXRfaW5mbyAoVGFibGUgc3QpIChpbmZvIDogc3RhdGVfaW5mbykgPSBzdC4oMCkgPC0gT2JqLm1hZ2ljIGluZm9cblxuICBsZXQgZm9sbG93X3RyYW5zaXRpb24gKFRhYmxlIHN0KSB+Y29sb3IgPSBBcnJheS51bnNhZmVfZ2V0IHN0ICgxICsgQ3NldC50b19pbnQgY29sb3IpXG4gIFtAQGlubGluZSBhbHdheXNdXG4gIDs7XG5cbiAgbGV0IHNldF90cmFuc2l0aW9uIChUYWJsZSBzdCkgfmNvbG9yIHN0JyA9IHN0LigxICsgQ3NldC50b19pbnQgY29sb3IpIDwtIHN0J1xuXG4gIGxldCBpc191bmtub3duX3RyYW5zaXRpb24gc3QgfmNvbG9yID1cbiAgICBsZXQgc3QnID0gZm9sbG93X3RyYW5zaXRpb24gc3QgfmNvbG9yIGluXG4gICAgbGV0IGluZm8gPSBnZXRfaW5mbyBzdCcgaW5cbiAgICBJZHguaXNfdW5rbm93biBpbmZvLmlkeFxuICA7O1xuXG4gIGxldCBkdW1teSAoaW5mbyA6IHN0YXRlX2luZm8pID0gVGFibGUgW3wgT2JqLm1hZ2ljIGluZm8gfF1cbiAgbGV0IHVua25vd25fc3RhdGUgPSBkdW1teSB7IGlkeCA9IElkeC51bmtub3duOyBmaW5hbCA9IFtdOyBkZXNjID0gQXV0b21hdGEuU3RhdGUuZHVtbXkgfVxuXG4gIGxldCBtYWtlIH5uY29sIHN0YXRlID1cbiAgICBsZXQgc3QgPSBUYWJsZSAoQXJyYXkubWFrZSAobmNvbCArIDEpIHVua25vd25fc3RhdGUpIGluXG4gICAgc2V0X2luZm8gc3Qgc3RhdGU7XG4gICAgc3RcbiAgOztcblxuICBsZXQgbWFrZV9icmVhayBzdGF0ZSA9IFRhYmxlIFt8IE9iai5tYWdpYyBzdGF0ZSB8XVxuZW5kXG5cbigqIEF1dG9tYXRhIChjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24pICopXG50eXBlIHJlID1cbiAgeyBpbml0aWFsIDogQXV0b21hdGEuZXhwclxuICA7ICgqIFRoZSB3aG9sZSByZWd1bGFyIGV4cHJlc3Npb24gKilcbiAgICBtdXRhYmxlIGluaXRpYWxfc3RhdGVzIDogKENhdGVnb3J5LnQgKiBTdGF0ZS50KSBsaXN0XG4gIDsgKCogSW5pdGlhbCBzdGF0ZXMsIGluZGV4ZWQgYnkgaW5pdGlhbCBjYXRlZ29yeSAqKVxuICAgIGNvbG9ycyA6IENvbG9yX21hcC5UYWJsZS50XG4gIDsgKCogQ29sb3IgdGFibGUgKilcbiAgICBjb2xvcl9yZXByIDogQ29sb3JfbWFwLlJlcHIudFxuICA7ICgqIFRhYmxlIGZyb20gY29sb3JzIHRvIG9uZSBjaGFyYWN0ZXIgb2YgdGhpcyBjb2xvciAqKVxuICAgIG5jb2xvciA6IGludFxuICA7ICgqIE51bWJlciBvZiBjb2xvcnMuICopXG4gICAgbG5sIDogQ3NldC5jXG4gIDsgKCogQ29sb3Igb2YgdGhlIGxhc3QgbmV3bGluZS4gW0NzZXQubnVsbF9jaGFyXSBpZiB1bm5lY2Vzc2FyeSAqKVxuICAgIHRibCA6IEF1dG9tYXRhLldvcmtpbmdfYXJlYS50XG4gIDsgKCogVGVtcG9yYXJ5IHRhYmxlIHVzZWQgdG8gY29tcHV0ZSB0aGUgZmlyc3QgYXZhaWxhYmxlIGluZGV4XG4gICAgICAgd2hlbiBjb21wdXRpbmcgYSBuZXcgc3RhdGUgKilcbiAgICBzdGF0ZXMgOiBTdGF0ZS50IEF1dG9tYXRhLlN0YXRlLlRhYmxlLnRcbiAgOyAoKiBTdGF0ZXMgb2YgdGhlIGRldGVybWluaXN0aWMgYXV0b21hdGEgKilcbiAgICBncm91cF9uYW1lcyA6IChzdHJpbmcgKiBpbnQpIGxpc3RcbiAgOyAoKiBOYW1lZCBncm91cHMgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAqKVxuICAgIGdyb3VwX2NvdW50IDogaW50XG4gIDsgKCogTnVtYmVyIG9mIGdyb3VwcyBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uICopXG4gICAgbXV0ZXggOiBNdXRleC50XG4gIH1cblxuKCogVGhyZWFkLXNhZmV0eTpcbiAgIFdlIHVzZSBkb3VibGUtY2hlY2tlZCBsb2NraW5nIHRvIGFjY2VzcyBmaWVsZCBbaW5pdGlhbF9zdGF0ZXNdLiBUaGVcbiAgIHN0YXRlIHRhYmxlIFtzdGF0ZXNdIGFuZCB0aGUgd29ya2luZyBhcmVhIFt0YmxdIGFyZSBvbmx5IGFjY2Vzc2VkXG4gICB3aXRoIHRoZSBtdXRleCBbbXV0ZXhdIGxvY2tlZC5cbiAgIFRoZSB3b3JraW5nIGFyZWEgaXMgc2hhcmVkIGJldHdlZW4gYWxsIHRocmVhZHMuIFRoaXMgbWlnaHQgYmVcbiAgIGluZWZmaWNpZW50IGlmIG1hbnkgdGhyZWFkcyBhcmUgdXBkYXRpbmcgdGhlIGF1dG9tYXRvbi4gSXQgc2VlbXNcbiAgIGNvbXBsaWNhdGVkIHRvIG1hbmFnZSBhIHdvcmtpbmcgYXJlYSBwZXIgZG9tYWluIGFuZCBwZXIgcmVndWxhclxuICAgZXhwcmVzc2lvbi4gU28sIGlmIHRoaXMgYmVjb21lcyBhbiBpc3N1ZSwgaXQgbWlnaHQganVzdCBiZSBzaW1wbGVyXG4gICB0byBhbGxvY2F0ZSBhIGZyZXNoIHdvcmtpbmcgYXJlYSB3aGVuZXZlciBuZWVkZWQuXG4qKVxuXG5sZXQgcHBfcmUgY2ggcmUgPSBBdXRvbWF0YS5wcCBjaCByZS5pbml0aWFsXG5sZXQgZ3JvdXBfY291bnQgcmUgPSByZS5ncm91cF9jb3VudFxubGV0IGdyb3VwX25hbWVzIHJlID0gcmUuZ3JvdXBfbmFtZXNcblxubW9kdWxlIFBvc2l0aW9ucyA9IHN0cnVjdFxuICAoKiBJbmZvcm1hdGlvbiB1c2VkIGR1cmluZyBtYXRjaGluZyAqKVxuICB0eXBlIHQgPVxuICAgIHsgbXV0YWJsZSBwb3NpdGlvbnMgOiBpbnQgYXJyYXlcbiAgICA7ICgqIEFycmF5IG9mIG1hcmsgcG9zaXRpb25zXG4gICAgICAgICBUaGUgbWFyayBhcmUgb2ZmIGJ5IG9uZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAqKVxuICAgICAgbXV0YWJsZSBsZW5ndGggOiBpbnRcbiAgICB9XG5cbiAgbGV0IGVtcHR5ID0geyBwb3NpdGlvbnMgPSBbfHxdOyBsZW5ndGggPSAwIH1cbiAgbGV0IGxlbmd0aCB0ID0gdC5sZW5ndGhcbiAgbGV0IHVuc2FmZV9zZXQgdCBpZHggcG9zID0gQXJyYXkudW5zYWZlX3NldCB0LnBvc2l0aW9ucyBpZHggcG9zXG5cbiAgbGV0IHJlYyByZXNpemUgaWR4IHQgPVxuICAgIHQubGVuZ3RoIDwtIDIgKiB0Lmxlbmd0aDtcbiAgICBpZiBpZHggPj0gdC5sZW5ndGhcbiAgICB0aGVuIHJlc2l6ZSBpZHggdFxuICAgIGVsc2UgKFxuICAgICAgbGV0IHBvcyA9IHQucG9zaXRpb25zIGluXG4gICAgICB0LnBvc2l0aW9ucyA8LSBBcnJheS5tYWtlIHQubGVuZ3RoIDA7XG4gICAgICBBcnJheS5ibGl0IHBvcyAwIHQucG9zaXRpb25zIDAgKEFycmF5Lmxlbmd0aCBwb3MpKVxuICA7O1xuXG4gIGxldCBzZXQgdCBpZHggcG9zID1cbiAgICBpZiBpZHggPj0gbGVuZ3RoIHQgdGhlbiByZXNpemUgaWR4IHQ7XG4gICAgdW5zYWZlX3NldCB0IGlkeCBwb3NcbiAgOztcblxuICBsZXQgYWxsIHQgPSB0LnBvc2l0aW9uc1xuICBsZXQgZmlyc3QgdCA9IHQucG9zaXRpb25zLigwKVxuXG4gIGxldCBtYWtlIH5ncm91cHMgcmUgPVxuICAgIGlmIGdyb3Vwc1xuICAgIHRoZW4gKFxuICAgICAgKCogV2UgaW5pdGlhbGl6ZSB0aGlzIHRhYmxlIHdpdGggYSByZWFzb25hYmxlIHNpemUuIFRoZSByZXF1aXJlZFxuICAgICAgICAgc2l6ZSBtYXkgY2hhbmdlIHdoZW4gdGhlIGF1dG9tYXRvbiBnZXRzIHVwZGF0ZWQuIFNvIHdlIGFyZVxuICAgICAgICAgYWx3YXlzIGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgbGFyZ2UgZW5vdWdoIGJlZm9yZSBtb2RpZnlpbmcgaXQuICopXG4gICAgICBsZXQgbGVuZ3RoID0gQXV0b21hdGEuV29ya2luZ19hcmVhLmluZGV4X2NvdW50IHJlLnRibCArIDEgaW5cbiAgICAgIHsgcG9zaXRpb25zID0gQXJyYXkubWFrZSBsZW5ndGggMDsgbGVuZ3RoIH0pXG4gICAgZWxzZSBlbXB0eVxuICA7O1xuZW5kXG5cbigqKioqKVxuXG5sZXQgY2F0ZWdvcnkgcmUgfmNvbG9yID1cbiAgaWYgQ3NldC5lcXVhbF9jIGNvbG9yIENzZXQubnVsbF9jaGFyXG4gIHRoZW4gQ2F0ZWdvcnkuaW5leGlzdGFudCAoKiBTcGVjaWFsIGNhdGVnb3J5IGZvciB0aGUgbGFzdCBuZXdsaW5lICopXG4gIGVsc2UgaWYgQ3NldC5lcXVhbF9jIGNvbG9yIHJlLmxubFxuICB0aGVuIENhdGVnb3J5LihsYXN0bmV3bGluZSArKyBuZXdsaW5lICsrIG5vdF9sZXR0ZXIpXG4gIGVsc2UgQ2F0ZWdvcnkuZnJvbV9jaGFyIChDb2xvcl9tYXAuUmVwci5yZXByIHJlLmNvbG9yX3JlcHIgY29sb3IpXG47O1xuXG4oKioqKilcblxubGV0IGZpbmRfc3RhdGUgcmUgZGVzYyA9XG4gIHRyeSBBdXRvbWF0YS5TdGF0ZS5UYWJsZS5maW5kIHJlLnN0YXRlcyBkZXNjIHdpdGhcbiAgfCBOb3RfZm91bmQgLT5cbiAgICBsZXQgc3QgPVxuICAgICAgbGV0IGJyZWFrX3N0YXRlID1cbiAgICAgICAgbWF0Y2ggQXV0b21hdGEuU3RhdGUuc3RhdHVzX25vX211dGV4IGRlc2Mgd2l0aFxuICAgICAgICB8IFJ1bm5pbmcgLT4gZmFsc2VcbiAgICAgICAgfCBGYWlsZWQgfCBNYXRjaCBfIC0+IHRydWVcbiAgICAgIGluXG4gICAgICBsZXQgc3QgPVxuICAgICAgICB7IGlkeCA9XG4gICAgICAgICAgICAobGV0IGlkeCA9IEF1dG9tYXRhLlN0YXRlLmlkeCBkZXNjIGluXG4gICAgICAgICAgICAgaWYgYnJlYWtfc3RhdGUgdGhlbiBJZHgubWFrZV9icmVhayBpZHggZWxzZSBJZHgub2ZfaWR4IGlkeClcbiAgICAgICAgOyBmaW5hbCA9IFtdXG4gICAgICAgIDsgZGVzY1xuICAgICAgICB9XG4gICAgICBpblxuICAgICAgaWYgYnJlYWtfc3RhdGUgdGhlbiBTdGF0ZS5tYWtlX2JyZWFrIHN0IGVsc2UgU3RhdGUubWFrZSB+bmNvbDpyZS5uY29sb3Igc3RcbiAgICBpblxuICAgIEF1dG9tYXRhLlN0YXRlLlRhYmxlLmFkZCByZS5zdGF0ZXMgZGVzYyBzdDtcbiAgICBzdFxuOztcblxuKCoqKiogTWF0Y2ggd2l0aCBtYXJrcyAqKioqKVxuXG5sZXQgZGVsdGEgcmUgY2F0IH5jb2xvciBzdCA9IEF1dG9tYXRhLmRlbHRhIHJlLnRibCBjYXQgY29sb3Igc3QuZGVzY1xuXG5sZXQgdmFsaWRhdGUgcmUgKHMgOiBzdHJpbmcpIH5wb3Mgc3QgPVxuICBsZXQgY29sb3IgPSBDb2xvcl9tYXAuVGFibGUuZ2V0IHJlLmNvbG9ycyBzLltwb3NdIGluXG4gIE11dGV4LmxvY2sgcmUubXV0ZXg7XG4gIGlmIFN0YXRlLmlzX3Vua25vd25fdHJhbnNpdGlvbiBzdCB+Y29sb3JcbiAgdGhlbiAoXG4gICAgbGV0IHN0JyA9XG4gICAgICBsZXQgZGVzYycgPVxuICAgICAgICBsZXQgY2F0ID0gY2F0ZWdvcnkgcmUgfmNvbG9yIGluXG4gICAgICAgIGRlbHRhIHJlIGNhdCB+Y29sb3IgKFN0YXRlLmdldF9pbmZvIHN0KVxuICAgICAgaW5cbiAgICAgIGZpbmRfc3RhdGUgcmUgZGVzYydcbiAgICBpblxuICAgIFN0YXRlLnNldF90cmFuc2l0aW9uIHN0IH5jb2xvciBzdCcpO1xuICBNdXRleC51bmxvY2sgcmUubXV0ZXhcbjs7XG5cbmxldCBuZXh0IGNvbG9ycyBzdCBzIHBvcyA9XG4gIFN0YXRlLmZvbGxvd190cmFuc2l0aW9uIHN0IH5jb2xvcjooQ29sb3JfbWFwLlRhYmxlLmdldCBjb2xvcnMgKFN0cmluZy51bnNhZmVfZ2V0IHMgcG9zKSlcbjs7XG5cbmxldCByZWMgbG9vcCByZSB+Y29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zIH5sYXN0IHN0MCBzdCA9XG4gIGlmIHBvcyA8IGxhc3RcbiAgdGhlbiAoXG4gICAgbGV0IHN0JyA9IG5leHQgY29sb3JzIHN0IHMgcG9zIGluXG4gICAgbGV0IGlkeCA9IChTdGF0ZS5nZXRfaW5mbyBzdCcpLmlkeCBpblxuICAgIGlmIElkeC5pc19pZHggaWR4XG4gICAgdGhlblxuICAgICAgaWYgSWR4LmlkeCBpZHggPCBQb3NpdGlvbnMubGVuZ3RoIHBvc2l0aW9uc1xuICAgICAgdGhlbiAoXG4gICAgICAgIFBvc2l0aW9ucy51bnNhZmVfc2V0IHBvc2l0aW9ucyAoSWR4LmlkeCBpZHgpIHBvcztcbiAgICAgICAgbG9vcCByZSB+Y29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zOihwb3MgKyAxKSB+bGFzdCBzdCcgc3QnKVxuICAgICAgZWxzZSAoXG4gICAgICAgICgqIFJlc2l6ZSBwb3NpdGlvbiBhcnJheSAqKVxuICAgICAgICBQb3NpdGlvbnMuc2V0IHBvc2l0aW9ucyAoSWR4LmlkeCBpZHgpIHBvcztcbiAgICAgICAgbG9vcCByZSB+Y29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zOihwb3MgKyAxKSB+bGFzdCBzdCcgc3QnKVxuICAgIGVsc2UgaWYgSWR4LmlzX2JyZWFrIGlkeFxuICAgIHRoZW4gKFxuICAgICAgUG9zaXRpb25zLnNldCBwb3NpdGlvbnMgKElkeC5icmVha19pZHggaWR4KSBwb3M7XG4gICAgICBzdCcpXG4gICAgZWxzZSAoXG4gICAgICAoKiBVbmtub3duICopXG4gICAgICB2YWxpZGF0ZSByZSBzIH5wb3Mgc3QwO1xuICAgICAgbG9vcCByZSB+Y29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zIH5sYXN0IHN0MCBzdDApKVxuICBlbHNlIHN0XG47O1xuXG5sZXQgcmVjIGxvb3Bfbm9fbWFyayByZSB+Y29sb3JzIHMgfnBvcyB+bGFzdCBzdDAgc3QgPVxuICBpZiBwb3MgPCBsYXN0XG4gIHRoZW4gKFxuICAgIGxldCBzdCcgPSBuZXh0IGNvbG9ycyBzdCBzIHBvcyBpblxuICAgIGxldCBpZHggPSAoU3RhdGUuZ2V0X2luZm8gc3QnKS5pZHggaW5cbiAgICBpZiBJZHguaXNfaWR4IGlkeFxuICAgIHRoZW4gbG9vcF9ub19tYXJrIHJlIH5jb2xvcnMgcyB+cG9zOihwb3MgKyAxKSB+bGFzdCBzdCcgc3QnXG4gICAgZWxzZSBpZiBJZHguaXNfYnJlYWsgaWR4XG4gICAgdGhlbiBzdCdcbiAgICBlbHNlIChcbiAgICAgICgqIFVua25vd24gKilcbiAgICAgIHZhbGlkYXRlIHJlIHMgfnBvcyBzdDA7XG4gICAgICBsb29wX25vX21hcmsgcmUgfmNvbG9ycyBzIH5wb3Mgfmxhc3Qgc3QwIHN0MCkpXG4gIGVsc2Ugc3Rcbjs7XG5cbmxldCBmaW5hbCByZSBzdCBjYXQgPVxuICB0cnkgTGlzdC5hc3NxIGNhdCBzdC5maW5hbCB3aXRoXG4gIHwgTm90X2ZvdW5kIC0+XG4gICAgTXV0ZXgubG9jayByZS5tdXRleDtcbiAgICBsZXQgcmVzID1cbiAgICAgIHRyeSBMaXN0LmFzc3EgY2F0IHN0LmZpbmFsIHdpdGhcbiAgICAgIHwgTm90X2ZvdW5kIC0+XG4gICAgICAgIGxldCBzdCcgPSBkZWx0YSByZSBjYXQgfmNvbG9yOkNzZXQubnVsbF9jaGFyIHN0IGluXG4gICAgICAgIGxldCByZXMgPSBBdXRvbWF0YS5TdGF0ZS5pZHggc3QnLCBBdXRvbWF0YS5TdGF0ZS5zdGF0dXNfbm9fbXV0ZXggc3QnIGluXG4gICAgICAgIHN0LmZpbmFsIDwtIChjYXQsIHJlcykgOjogc3QuZmluYWw7XG4gICAgICAgIHJlc1xuICAgIGluXG4gICAgTXV0ZXgudW5sb2NrIHJlLm11dGV4O1xuICAgIHJlc1xuOztcblxubGV0IGZpbmRfaW5pdGlhbF9zdGF0ZSByZSBjYXQgPVxuICB0cnkgTGlzdC5hc3NxIGNhdCByZS5pbml0aWFsX3N0YXRlcyB3aXRoXG4gIHwgTm90X2ZvdW5kIC0+XG4gICAgTXV0ZXgubG9jayByZS5tdXRleDtcbiAgICBsZXQgcmVzID1cbiAgICAgIHRyeSBMaXN0LmFzc3EgY2F0IHJlLmluaXRpYWxfc3RhdGVzIHdpdGhcbiAgICAgIHwgTm90X2ZvdW5kIC0+XG4gICAgICAgIGxldCBzdCA9IGZpbmRfc3RhdGUgcmUgKEF1dG9tYXRhLlN0YXRlLmNyZWF0ZSBjYXQgcmUuaW5pdGlhbCkgaW5cbiAgICAgICAgcmUuaW5pdGlhbF9zdGF0ZXMgPC0gKGNhdCwgc3QpIDo6IHJlLmluaXRpYWxfc3RhdGVzO1xuICAgICAgICBzdFxuICAgIGluXG4gICAgTXV0ZXgudW5sb2NrIHJlLm11dGV4O1xuICAgIHJlc1xuOztcblxubGV0IGdldF9jb2xvciByZSAocyA6IHN0cmluZykgcG9zID1cbiAgaWYgcG9zIDwgMFxuICB0aGVuIENzZXQubnVsbF9jaGFyXG4gIGVsc2UgKFxuICAgIGxldCBzbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgaWYgcG9zID49IHNsZW5cbiAgICB0aGVuIENzZXQubnVsbF9jaGFyXG4gICAgZWxzZSBpZiBwb3MgPSBzbGVuIC0gMVxuICAgICAgICAgICAgJiYgKG5vdCAoQ3NldC5lcXVhbF9jIHJlLmxubCBDc2V0Lm51bGxfY2hhcikpXG4gICAgICAgICAgICAmJiBDaGFyLmVxdWFsIChTdHJpbmcudW5zYWZlX2dldCBzIHBvcykgJ1xcbidcbiAgICB0aGVuICgqIFNwZWNpYWwgY2FzZSBmb3IgdGhlIGxhc3QgbmV3bGluZSAqKVxuICAgICAgcmUubG5sXG4gICAgZWxzZSBDb2xvcl9tYXAuVGFibGUuZ2V0IHJlLmNvbG9ycyAoU3RyaW5nLnVuc2FmZV9nZXQgcyBwb3MpKVxuOztcblxubGV0IHJlYyBoYW5kbGVfbGFzdF9uZXdsaW5lIHJlIHBvc2l0aW9ucyB+cG9zIHN0IH5ncm91cHMgPVxuICBsZXQgc3QnID0gU3RhdGUuZm9sbG93X3RyYW5zaXRpb24gc3QgfmNvbG9yOnJlLmxubCBpblxuICBsZXQgaW5mbyA9IFN0YXRlLmdldF9pbmZvIHN0JyBpblxuICBpZiBJZHguaXNfaWR4IGluZm8uaWR4XG4gIHRoZW4gKFxuICAgIGlmIGdyb3VwcyB0aGVuIFBvc2l0aW9ucy5zZXQgcG9zaXRpb25zIChJZHguaWR4IGluZm8uaWR4KSBwb3M7XG4gICAgc3QnKVxuICBlbHNlIGlmIElkeC5pc19icmVhayBpbmZvLmlkeFxuICB0aGVuIChcbiAgICBpZiBncm91cHMgdGhlbiBQb3NpdGlvbnMuc2V0IHBvc2l0aW9ucyAoSWR4LmJyZWFrX2lkeCBpbmZvLmlkeCkgcG9zO1xuICAgIHN0JylcbiAgZWxzZSAoXG4gICAgKCogVW5rbm93biAqKVxuICAgIGxldCBjb2xvciA9IHJlLmxubCBpblxuICAgIE11dGV4LmxvY2sgcmUubXV0ZXg7XG4gICAgaWYgU3RhdGUuaXNfdW5rbm93bl90cmFuc2l0aW9uIHN0IH5jb2xvclxuICAgIHRoZW4gKFxuICAgICAgbGV0IHN0JyA9XG4gICAgICAgIGxldCBkZXNjID1cbiAgICAgICAgICBsZXQgY2F0ID0gY2F0ZWdvcnkgcmUgfmNvbG9yIGluXG4gICAgICAgICAgbGV0IHJlYWxfYyA9IENvbG9yX21hcC5UYWJsZS5nZXQgcmUuY29sb3JzICdcXG4nIGluXG4gICAgICAgICAgZGVsdGEgcmUgY2F0IH5jb2xvcjpyZWFsX2MgKFN0YXRlLmdldF9pbmZvIHN0KVxuICAgICAgICBpblxuICAgICAgICBmaW5kX3N0YXRlIHJlIGRlc2NcbiAgICAgIGluXG4gICAgICBTdGF0ZS5zZXRfdHJhbnNpdGlvbiBzdCB+Y29sb3Igc3QnKTtcbiAgICBNdXRleC51bmxvY2sgcmUubXV0ZXg7XG4gICAgaGFuZGxlX2xhc3RfbmV3bGluZSByZSBwb3NpdGlvbnMgfnBvcyBzdCB+Z3JvdXBzKVxuOztcblxubGV0IHJlYyBzY2FuX3N0ciByZSBwb3NpdGlvbnMgKHMgOiBzdHJpbmcpIGluaXRpYWxfc3RhdGUgfmxhc3QgfnBvcyB+Z3JvdXBzID1cbiAgaWYgbGFzdCA9IFN0cmluZy5sZW5ndGggc1xuICAgICAmJiAobm90IChDc2V0LmVxdWFsX2MgcmUubG5sIENzZXQubnVsbF9jaGFyKSlcbiAgICAgJiYgbGFzdCA+IHBvc1xuICAgICAmJiBDaGFyLmVxdWFsIChTdHJpbmcuZ2V0IHMgKGxhc3QgLSAxKSkgJ1xcbidcbiAgdGhlbiAoXG4gICAgbGV0IGxhc3QgPSBsYXN0IC0gMSBpblxuICAgIGxldCBzdCA9IHNjYW5fc3RyIHJlIHBvc2l0aW9ucyB+cG9zIHMgaW5pdGlhbF9zdGF0ZSB+bGFzdCB+Z3JvdXBzIGluXG4gICAgaWYgSWR4LmlzX2JyZWFrIChTdGF0ZS5nZXRfaW5mbyBzdCkuaWR4XG4gICAgdGhlbiBzdFxuICAgIGVsc2UgaGFuZGxlX2xhc3RfbmV3bGluZSByZSBwb3NpdGlvbnMgfnBvczpsYXN0IHN0IH5ncm91cHMpXG4gIGVsc2UgaWYgZ3JvdXBzXG4gIHRoZW4gbG9vcCByZSB+Y29sb3JzOnJlLmNvbG9ycyB+cG9zaXRpb25zIHMgfnBvcyB+bGFzdCBpbml0aWFsX3N0YXRlIGluaXRpYWxfc3RhdGVcbiAgZWxzZSBsb29wX25vX21hcmsgcmUgfmNvbG9yczpyZS5jb2xvcnMgcyB+cG9zIH5sYXN0IGluaXRpYWxfc3RhdGUgaW5pdGlhbF9zdGF0ZVxuOztcblxuKCogVGhpcyBmdW5jdGlvbiBhZGRzIGEgZmluYWwgYm91bmRhcnkgY2hlY2sgb24gdGhlIGlucHV0LlxuICAgVGhpcyBpcyB1c2VmdWwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgb3V0cHV0IGZhaWxlZCBiZWNhdXNlXG4gICBvZiBpbnN1ZmZpY2llbnQgaW5wdXQsIG9yIHRvIHZlcmlmeSB0aGF0IHRoZSBvdXRwdXQgYWN0dWFsbHlcbiAgIG1hdGNoZXMgZm9yIHJlZ2V4IHRoYXQgaGF2ZSBib3VuZGFyeSBjb25kaXRpb25zIHdpdGggcmVzcGVjdFxuICAgdG8gdGhlIGlucHV0IHN0cmluZy5cbiopXG5sZXQgZmluYWxfYm91bmRhcnlfY2hlY2sgcmUgcG9zaXRpb25zIH5sYXN0IH5zbGVuIHMgc3RhdGVfaW5mbyB+Z3JvdXBzID1cbiAgbGV0IGlkeCwgcmVzID1cbiAgICBsZXQgZmluYWxfY2F0ID1cbiAgICAgIENhdGVnb3J5LihcbiAgICAgICAgc2VhcmNoX2JvdW5kYXJ5XG4gICAgICAgICsrIGlmIGxhc3QgPSBzbGVuIHRoZW4gaW5leGlzdGFudCBlbHNlIGNhdGVnb3J5IHJlIH5jb2xvcjooZ2V0X2NvbG9yIHJlIHMgbGFzdCkpXG4gICAgaW5cbiAgICBmaW5hbCByZSBzdGF0ZV9pbmZvIGZpbmFsX2NhdFxuICBpblxuICAobWF0Y2ggZ3JvdXBzLCByZXMgd2l0aFxuICAgfCB0cnVlLCBNYXRjaCBfIC0+IFBvc2l0aW9ucy5zZXQgcG9zaXRpb25zIChBdXRvbWF0YS5JZHgudG9faW50IGlkeCkgbGFzdFxuICAgfCBfIC0+ICgpKTtcbiAgcmVzXG47O1xuXG5sZXQgbWFrZV9tYXRjaF9zdHIgcmUgcG9zaXRpb25zIH5sZW4gfmdyb3VwcyB+cGFydGlhbCBzIH5wb3MgPVxuICBsZXQgc2xlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbGFzdCA9IGlmIGxlbiA9IC0xIHRoZW4gc2xlbiBlbHNlIHBvcyArIGxlbiBpblxuICBsZXQgc3QgPVxuICAgIGxldCBpbml0aWFsX3N0YXRlID1cbiAgICAgIGxldCBpbml0aWFsX2NhdCA9XG4gICAgICAgIENhdGVnb3J5LihcbiAgICAgICAgICBzZWFyY2hfYm91bmRhcnlcbiAgICAgICAgICArKyBpZiBwb3MgPSAwIHRoZW4gaW5leGlzdGFudCBlbHNlIGNhdGVnb3J5IHJlIH5jb2xvcjooZ2V0X2NvbG9yIHJlIHMgKHBvcyAtIDEpKSlcbiAgICAgIGluXG4gICAgICBmaW5kX2luaXRpYWxfc3RhdGUgcmUgaW5pdGlhbF9jYXRcbiAgICBpblxuICAgIHNjYW5fc3RyIHJlIHBvc2l0aW9ucyBzIGluaXRpYWxfc3RhdGUgfnBvcyB+bGFzdCB+Z3JvdXBzXG4gIGluXG4gIGxldCBzdGF0ZV9pbmZvID0gU3RhdGUuZ2V0X2luZm8gc3QgaW5cbiAgaWYgSWR4LmlzX2JyZWFrIHN0YXRlX2luZm8uaWR4IHx8IChwYXJ0aWFsICYmIG5vdCBncm91cHMpXG4gIHRoZW4gQXV0b21hdGEuU3RhdGUuc3RhdHVzIHJlLm11dGV4IHN0YXRlX2luZm8uZGVzY1xuICBlbHNlIGlmIHBhcnRpYWwgJiYgZ3JvdXBzXG4gIHRoZW4gKFxuICAgIG1hdGNoIEF1dG9tYXRhLlN0YXRlLnN0YXR1cyByZS5tdXRleCBzdGF0ZV9pbmZvLmRlc2Mgd2l0aFxuICAgIHwgKE1hdGNoIF8gfCBGYWlsZWQpIGFzIHN0YXR1cyAtPiBzdGF0dXNcbiAgICB8IFJ1bm5pbmcgLT5cbiAgICAgICgqIFRoaXMgY291bGQgYmUgYmVjYXVzZSBpdCdzIHN0aWxsIG5vdCBmdWxseSBtYXRjaGVkLCBvciBpdFxuICAgICAgICAgY291bGQgYmUgdGhhdCBiZWNhdXNlIHdlIG5lZWQgdG8gcnVuIHNwZWNpYWwgZW5kIG9mIGlucHV0XG4gICAgICAgICBjaGVja3MuICopXG4gICAgICAobWF0Y2ggZmluYWxfYm91bmRhcnlfY2hlY2sgcmUgcG9zaXRpb25zIH5sYXN0IH5zbGVuIHMgc3RhdGVfaW5mbyB+Z3JvdXBzIHdpdGhcbiAgICAgICB8IE1hdGNoIF8gYXMgc3RhdHVzIC0+IHN0YXR1c1xuICAgICAgIHwgRmFpbGVkIHwgUnVubmluZyAtPlxuICAgICAgICAgKCogQSBmYWlsdXJlIGhlcmUganVzdCBtZWFucyB0aGF0IHdlIG5lZWQgbW9yZSBkYXRhLCBpLmUuXG4gICAgICAgICAgICBpdCdzIGEgcGFydGlhbCBtYXRjaC4gKilcbiAgICAgICAgIFJ1bm5pbmcpKVxuICBlbHNlIGZpbmFsX2JvdW5kYXJ5X2NoZWNrIHJlIHBvc2l0aW9ucyB+bGFzdCB+c2xlbiBzIHN0YXRlX2luZm8gfmdyb3Vwc1xuOztcblxubW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyB0ID1cbiAgICB7IHN0YXRlIDogU3RhdGUudFxuICAgIDsgcmUgOiByZVxuICAgIH1cblxuICB0eXBlICdhIGZlZWQgPVxuICAgIHwgT2sgb2YgJ2FcbiAgICB8IE5vX21hdGNoXG5cbiAgbGV0IGNyZWF0ZSByZSA9XG4gICAgbGV0IGNhdGVnb3J5ID0gQ2F0ZWdvcnkuKHNlYXJjaF9ib3VuZGFyeSArKyBpbmV4aXN0YW50KSBpblxuICAgIGxldCBzdGF0ZSA9IGZpbmRfaW5pdGlhbF9zdGF0ZSByZSBjYXRlZ29yeSBpblxuICAgIHsgc3RhdGU7IHJlIH1cbiAgOztcblxuICBsZXQgZmVlZCB0IHMgfnBvcyB+bGVuID1cbiAgICAoKiBUT0RPIGJvdW5kIGNoZWNrcz8gKilcbiAgICBsZXQgbGFzdCA9IHBvcyArIGxlbiBpblxuICAgIGxldCBzdGF0ZSA9IGxvb3Bfbm9fbWFyayB0LnJlIH5jb2xvcnM6dC5yZS5jb2xvcnMgcyB+bGFzdCB+cG9zIHQuc3RhdGUgdC5zdGF0ZSBpblxuICAgIGxldCBpbmZvID0gU3RhdGUuZ2V0X2luZm8gc3RhdGUgaW5cbiAgICBpZiBJZHguaXNfYnJlYWsgaW5mby5pZHhcbiAgICAgICAmJlxuICAgICAgIG1hdGNoIEF1dG9tYXRhLlN0YXRlLnN0YXR1cyB0LnJlLm11dGV4IGluZm8uZGVzYyB3aXRoXG4gICAgICAgfCBGYWlsZWQgLT4gdHJ1ZVxuICAgICAgIHwgTWF0Y2ggXyB8IFJ1bm5pbmcgLT4gZmFsc2VcbiAgICB0aGVuIE5vX21hdGNoXG4gICAgZWxzZSBPayB7IHQgd2l0aCBzdGF0ZSB9XG4gIDs7XG5cbiAgbGV0IGZpbmFsaXplIHQgcyB+cG9zIH5sZW4gPVxuICAgICgqIFRPRE8gYm91bmQgY2hlY2tzPyAqKVxuICAgIGxldCBsYXN0ID0gcG9zICsgbGVuIGluXG4gICAgbGV0IHN0YXRlID0gc2Nhbl9zdHIgdC5yZSBQb3NpdGlvbnMuZW1wdHkgcyB0LnN0YXRlIH5sYXN0IH5wb3Mgfmdyb3VwczpmYWxzZSBpblxuICAgIGxldCBpbmZvID0gU3RhdGUuZ2V0X2luZm8gc3RhdGUgaW5cbiAgICBtYXRjaFxuICAgICAgbGV0IF9pZHgsIHJlcyA9XG4gICAgICAgIGxldCBmaW5hbF9jYXQgPSBDYXRlZ29yeS4oc2VhcmNoX2JvdW5kYXJ5ICsrIGluZXhpc3RhbnQpIGluXG4gICAgICAgIGZpbmFsIHQucmUgaW5mbyBmaW5hbF9jYXRcbiAgICAgIGluXG4gICAgICByZXNcbiAgICB3aXRoXG4gICAgfCBSdW5uaW5nIHwgRmFpbGVkIC0+IGZhbHNlXG4gICAgfCBNYXRjaCBfIC0+IHRydWVcbiAgOztcblxuICBtb2R1bGUgR3JvdXAgPSBzdHJ1Y3RcbiAgICB0eXBlIG5vbnJlYyB0ID1cbiAgICAgIHsgdCA6IHRcbiAgICAgIDsgcG9zaXRpb25zIDogUG9zaXRpb25zLnRcbiAgICAgIDsgc2xpY2VzIDogU2xpY2UuTC50XG4gICAgICA7IGFic19wb3MgOiBpbnRcbiAgICAgIDsgZmlyc3RfbWF0Y2hfcG9zIDogaW50XG4gICAgICB9XG5cbiAgICBsZXQgbm9fbWF0Y2hfc3RhcnRzX2JlZm9yZSB0ID0gdC5maXJzdF9tYXRjaF9wb3NcblxuICAgIGxldCBjcmVhdGUgdCA9XG4gICAgICB7IHRcbiAgICAgIDsgcG9zaXRpb25zID0gUG9zaXRpb25zLm1ha2Ugfmdyb3Vwczp0cnVlIHQucmVcbiAgICAgIDsgc2xpY2VzID0gW11cbiAgICAgIDsgYWJzX3BvcyA9IDBcbiAgICAgIDsgZmlyc3RfbWF0Y2hfcG9zID0gMFxuICAgICAgfVxuICAgIDs7XG5cbiAgICBtb2R1bGUgTWF0Y2ggPSBzdHJ1Y3RcbiAgICAgIHR5cGUgdCA9XG4gICAgICAgIHsgcG1hcmtzIDogUG1hcmsuU2V0LnRcbiAgICAgICAgOyBzbGljZXMgOiBTbGljZS5MLnRcbiAgICAgICAgOyBtYXJrcyA6IE1hcmtfaW5mb3MudFxuICAgICAgICA7IHBvc2l0aW9ucyA6IGludCBhcnJheVxuICAgICAgICA7IHN0YXJ0X3BvcyA6IGludFxuICAgICAgICB9XG5cbiAgICAgIGxldCB0ZXN0X21hcmsgdCBtYXJrID0gUG1hcmsuU2V0Lm1lbSBtYXJrIHQucG1hcmtzXG5cbiAgICAgIGxldCBnZXQgdCBpID1cbiAgICAgICAgTWFya19pbmZvcy5vZmZzZXQgdC5tYXJrcyBpXG4gICAgICAgIHw+IE9wdGlvbi5tYXAgKGZ1biAoc3RhcnQsIHN0b3ApIC0+XG4gICAgICAgICAgbGV0IHN0YXJ0ID0gdC5wb3NpdGlvbnMuKHN0YXJ0KSAtIHQuc3RhcnRfcG9zIGluXG4gICAgICAgICAgbGV0IHN0b3AgPSB0LnBvc2l0aW9ucy4oc3RvcCkgLSB0LnN0YXJ0X3BvcyBpblxuICAgICAgICAgIFNsaWNlLkwuZ2V0X3N1YnN0cmluZyB0LnNsaWNlcyB+c3RhcnQgfnN0b3ApXG4gICAgICA7O1xuXG4gICAgICBsZXQgbWFrZSB+c3RhcnRfcG9zIH5wbWFya3MgfnNsaWNlcyB+bWFya3MgfnBvc2l0aW9ucyA9XG4gICAgICAgIGxldCBwb3NpdGlvbnMgPSBQb3NpdGlvbnMuYWxsIHBvc2l0aW9ucyBpblxuICAgICAgICB7IHBtYXJrczsgc2xpY2VzOyBwb3NpdGlvbnM7IG1hcmtzOyBzdGFydF9wb3MgfVxuICAgICAgOztcbiAgICBlbmRcblxuICAgIGxldCByZWMgbG9vcCByZSB+YWJzX3BvcyB+Y29sb3JzIH5wb3NpdGlvbnMgcyB+cG9zIH5sYXN0IHN0MCBzdCA9XG4gICAgICBpZiBwb3MgPCBsYXN0XG4gICAgICB0aGVuIChcbiAgICAgICAgbGV0IHN0JyA9IG5leHQgY29sb3JzIHN0IHMgcG9zIGluXG4gICAgICAgIGxldCBpZHggPSAoU3RhdGUuZ2V0X2luZm8gc3QnKS5pZHggaW5cbiAgICAgICAgaWYgSWR4LmlzX2lkeCBpZHhcbiAgICAgICAgdGhlblxuICAgICAgICAgIGlmIElkeC5pZHggaWR4IDwgUG9zaXRpb25zLmxlbmd0aCBwb3NpdGlvbnNcbiAgICAgICAgICB0aGVuIChcbiAgICAgICAgICAgIFBvc2l0aW9ucy51bnNhZmVfc2V0IHBvc2l0aW9ucyAoSWR4LmlkeCBpZHgpIChhYnNfcG9zICsgcG9zKTtcbiAgICAgICAgICAgIGxvb3AgcmUgfmFic19wb3MgfmNvbG9ycyB+cG9zaXRpb25zIHMgfnBvczoocG9zICsgMSkgfmxhc3Qgc3QnIHN0JylcbiAgICAgICAgICBlbHNlIChcbiAgICAgICAgICAgICgqIFJlc2l6ZSBwb3NpdGlvbiBhcnJheSAqKVxuICAgICAgICAgICAgUG9zaXRpb25zLnNldCBwb3NpdGlvbnMgKElkeC5pZHggaWR4KSAoYWJzX3BvcyArIHBvcyk7XG4gICAgICAgICAgICBsb29wIHJlIH5hYnNfcG9zIH5jb2xvcnMgfnBvc2l0aW9ucyBzIH5wb3M6KHBvcyArIDEpIH5sYXN0IHN0JyBzdCcpXG4gICAgICAgIGVsc2UgaWYgSWR4LmlzX2JyZWFrIGlkeFxuICAgICAgICB0aGVuIChcbiAgICAgICAgICBQb3NpdGlvbnMuc2V0IHBvc2l0aW9ucyAoSWR4LmJyZWFrX2lkeCBpZHgpIChhYnNfcG9zICsgcG9zKTtcbiAgICAgICAgICBzdCcpXG4gICAgICAgIGVsc2UgKFxuICAgICAgICAgICgqIFVua25vd24gKilcbiAgICAgICAgICB2YWxpZGF0ZSByZSBzIH5wb3Mgc3QwO1xuICAgICAgICAgIGxvb3AgcmUgfmFic19wb3MgfmNvbG9ycyB+cG9zaXRpb25zIHMgfnBvcyB+bGFzdCBzdDAgc3QwKSlcbiAgICAgIGVsc2Ugc3RcbiAgICA7O1xuXG4gICAgbGV0IGZlZWQgKHsgdDsgcG9zaXRpb25zOyBzbGljZXM7IGFic19wb3M7IGZpcnN0X21hdGNoX3BvcyA9IF8gfSBhcyB0dCkgcyB+cG9zIH5sZW4gPVxuICAgICAgbGV0IHN0YXRlID1cbiAgICAgICAgKCogVE9ETyBib3VuZCBjaGVja3M/ICopXG4gICAgICAgIGxldCBsYXN0ID0gcG9zICsgbGVuIGluXG4gICAgICAgIGxvb3AgdC5yZSB+YWJzX3BvcyB+Y29sb3JzOnQucmUuY29sb3JzIHMgfnBvc2l0aW9ucyB+bGFzdCB+cG9zIHQuc3RhdGUgdC5zdGF0ZVxuICAgICAgaW5cbiAgICAgIGxldCBpbmZvID0gU3RhdGUuZ2V0X2luZm8gc3RhdGUgaW5cbiAgICAgIGlmIElkeC5pc19icmVhayBpbmZvLmlkeFxuICAgICAgICAgJiZcbiAgICAgICAgIG1hdGNoIEF1dG9tYXRhLlN0YXRlLnN0YXR1cyB0LnJlLm11dGV4IGluZm8uZGVzYyB3aXRoXG4gICAgICAgICB8IEZhaWxlZCAtPiB0cnVlXG4gICAgICAgICB8IE1hdGNoIF8gfCBSdW5uaW5nIC0+IGZhbHNlXG4gICAgICB0aGVuIE5vX21hdGNoXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IHQgPSB7IHQgd2l0aCBzdGF0ZSB9IGluXG4gICAgICAgIGxldCBzbGljZXMgPSB7IFNsaWNlLnM7IHBvczsgbGVuIH0gOjogc2xpY2VzIGluXG4gICAgICAgIGxldCBmaXJzdF9tYXRjaF9wb3MgPSBQb3NpdGlvbnMuZmlyc3QgcG9zaXRpb25zIGluXG4gICAgICAgIGxldCBzbGljZXMgPSBTbGljZS5MLmRyb3BfcmV2IHNsaWNlcyAoZmlyc3RfbWF0Y2hfcG9zIC0gdHQuZmlyc3RfbWF0Y2hfcG9zKSBpblxuICAgICAgICBsZXQgYWJzX3BvcyA9IGFic19wb3MgKyBsZW4gaW5cbiAgICAgICAgT2sgeyB0dCB3aXRoIHQ7IHNsaWNlczsgYWJzX3BvczsgZmlyc3RfbWF0Y2hfcG9zIH0pXG4gICAgOztcblxuICAgIGxldCBmaW5hbGl6ZVxuICAgICAgKHsgdDsgcG9zaXRpb25zOyBzbGljZXM7IGFic19wb3M7IGZpcnN0X21hdGNoX3BvcyA9IF8gfSBhcyB0dClcbiAgICAgIHNcbiAgICAgIH5wb3NcbiAgICAgIH5sZW5cbiAgICAgIDogTWF0Y2gudCBmZWVkXG4gICAgICA9XG4gICAgICAoKiBUT0RPIGJvdW5kIGNoZWNrcz8gKilcbiAgICAgIGxldCBsYXN0ID0gcG9zICsgbGVuIGluXG4gICAgICBsZXQgaW5mbyA9XG4gICAgICAgIGxldCBzdGF0ZSA9XG4gICAgICAgICAgbG9vcCB0LnJlIH5hYnNfcG9zIH5jb2xvcnM6dC5yZS5jb2xvcnMgcyB+cG9zaXRpb25zIH5sYXN0IH5wb3MgdC5zdGF0ZSB0LnN0YXRlXG4gICAgICAgIGluXG4gICAgICAgIFN0YXRlLmdldF9pbmZvIHN0YXRlXG4gICAgICBpblxuICAgICAgbWF0Y2hcbiAgICAgICAgbWF0Y2ggQXV0b21hdGEuU3RhdGUuc3RhdHVzIHQucmUubXV0ZXggaW5mby5kZXNjIHdpdGhcbiAgICAgICAgfCAoTWF0Y2ggXyB8IEZhaWxlZCkgYXMgcyAtPiBzXG4gICAgICAgIHwgUnVubmluZyAtPlxuICAgICAgICAgIGxldCBpZHgsIHJlcyA9XG4gICAgICAgICAgICBsZXQgZmluYWxfY2F0ID0gQ2F0ZWdvcnkuKHNlYXJjaF9ib3VuZGFyeSArKyBpbmV4aXN0YW50KSBpblxuICAgICAgICAgICAgZmluYWwgdC5yZSBpbmZvIGZpbmFsX2NhdFxuICAgICAgICAgIGluXG4gICAgICAgICAgKG1hdGNoIHJlcyB3aXRoXG4gICAgICAgICAgIHwgUnVubmluZyB8IEZhaWxlZCAtPiAoKVxuICAgICAgICAgICB8IE1hdGNoIF8gLT4gUG9zaXRpb25zLnNldCBwb3NpdGlvbnMgKEF1dG9tYXRhLklkeC50b19pbnQgaWR4KSAoYWJzX3BvcyArIGxhc3QpKTtcbiAgICAgICAgICByZXNcbiAgICAgIHdpdGhcbiAgICAgIHwgUnVubmluZyB8IEZhaWxlZCAtPiBOb19tYXRjaFxuICAgICAgfCBNYXRjaCAobWFya3MsIHBtYXJrcykgLT5cbiAgICAgICAgbGV0IGZpcnN0X21hdGNoX3Bvc2l0aW9uID0gUG9zaXRpb25zLmZpcnN0IHBvc2l0aW9ucyBpblxuICAgICAgICBsZXQgc2xpY2VzID1cbiAgICAgICAgICBsZXQgc2xpY2VzID1cbiAgICAgICAgICAgIGxldCBzbGljZXMgPSB7IFNsaWNlLnM7IHBvczsgbGVuIH0gOjogc2xpY2VzIGluXG4gICAgICAgICAgICBTbGljZS5MLmRyb3BfcmV2IHNsaWNlcyAoZmlyc3RfbWF0Y2hfcG9zaXRpb24gLSB0dC5maXJzdF9tYXRjaF9wb3MpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBMaXN0LnJldiBzbGljZXNcbiAgICAgICAgaW5cbiAgICAgICAgT2sgKE1hdGNoLm1ha2UgfnN0YXJ0X3BvczpmaXJzdF9tYXRjaF9wb3NpdGlvbiB+cG1hcmtzIH5tYXJrcyB+c2xpY2VzIH5wb3NpdGlvbnMpXG4gICAgOztcbiAgZW5kXG5lbmRcblxubGV0IG1hdGNoX3N0cl9ub19ib3VuZHMgfmdyb3VwcyB+cGFydGlhbCByZSBzIH5wb3MgfmxlbiA9XG4gIGxldCBwb3NpdGlvbnMgPSBQb3NpdGlvbnMubWFrZSB+Z3JvdXBzIHJlIGluXG4gIG1hdGNoIG1ha2VfbWF0Y2hfc3RyIHJlIHBvc2l0aW9ucyB+bGVuIH5ncm91cHMgfnBhcnRpYWwgcyB+cG9zIHdpdGhcbiAgfCBNYXRjaCAobWFya3MsIHBtYXJrcykgLT5cbiAgICBNYXRjaFxuICAgICAgKEdyb3VwLmNyZWF0ZSBzIG1hcmtzIHBtYXJrcyB+Z3BvczooUG9zaXRpb25zLmFsbCBwb3NpdGlvbnMpIH5nY291bnQ6cmUuZ3JvdXBfY291bnQpXG4gIHwgRmFpbGVkIC0+IEZhaWxlZFxuICB8IFJ1bm5pbmcgLT5cbiAgICBsZXQgbm9fbWF0Y2hfc3RhcnRzX2JlZm9yZSA9IGlmIGdyb3VwcyB0aGVuIFBvc2l0aW9ucy5maXJzdCBwb3NpdGlvbnMgZWxzZSAwIGluXG4gICAgUnVubmluZyB7IG5vX21hdGNoX3N0YXJ0c19iZWZvcmUgfVxuOztcblxubGV0IG1hdGNoX3N0cl9wIHJlIHMgfnBvcyB+bGVuID1cbiAgaWYgcG9zIDwgMCB8fCBsZW4gPCAtMSB8fCBwb3MgKyBsZW4gPiBTdHJpbmcubGVuZ3RoIHNcbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLmV4ZWM6IG91dCBvZiBib3VuZHNcIjtcbiAgbWF0Y2ggbWFrZV9tYXRjaF9zdHIgcmUgUG9zaXRpb25zLmVtcHR5IH5sZW4gfmdyb3VwczpmYWxzZSB+cGFydGlhbDpmYWxzZSBzIH5wb3Mgd2l0aFxuICB8IE1hdGNoIF8gLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2Vcbjs7XG5cbmxldCBtYXRjaF9zdHIgfmdyb3VwcyB+cGFydGlhbCByZSBzIH5wb3MgfmxlbiA9XG4gIGlmIHBvcyA8IDAgfHwgbGVuIDwgLTEgfHwgcG9zICsgbGVuID4gU3RyaW5nLmxlbmd0aCBzXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJSZS5leGVjOiBvdXQgb2YgYm91bmRzXCI7XG4gIG1hdGNoX3N0cl9ub19ib3VuZHMgfmdyb3VwcyB+cGFydGlhbCByZSBzIH5wb3MgfmxlblxuOztcblxubGV0IG1rX3JlIH5pbml0aWFsIH5jb2xvcnMgfmNvbG9yX3JlcHIgfm5jb2xvciB+bG5sIH5ncm91cF9uYW1lcyB+Z3JvdXBfY291bnQgPVxuICB7IGluaXRpYWxcbiAgOyBpbml0aWFsX3N0YXRlcyA9IFtdXG4gIDsgY29sb3JzXG4gIDsgY29sb3JfcmVwclxuICA7IG5jb2xvclxuICA7IGxubFxuICA7IHRibCA9IEF1dG9tYXRhLldvcmtpbmdfYXJlYS5jcmVhdGUgKClcbiAgOyBzdGF0ZXMgPSBBdXRvbWF0YS5TdGF0ZS5UYWJsZS5jcmVhdGUgOTdcbiAgOyBncm91cF9uYW1lc1xuICA7IGdyb3VwX2NvdW50XG4gIDsgbXV0ZXggPSBNdXRleC5jcmVhdGUgKClcbiAgfVxuOztcblxuKCoqKiogQ29tcGlsYXRpb24gKioqKilcblxubW9kdWxlIEEgPSBBdXRvbWF0YVxuXG5sZXQgZW5mb3JjZV9raW5kIGlkcyBraW5kIGtpbmQnIGNyID1cbiAgbWF0Y2gga2luZCwga2luZCcgd2l0aFxuICB8IGBGaXJzdCwgYEZpcnN0IC0+IGNyXG4gIHwgYEZpcnN0LCBrIC0+IEEuc2VxIGlkcyBrIGNyIChBLmVwcyBpZHMpXG4gIHwgXyAtPiBjclxuOztcblxudHlwZSBjb250ZXh0ID1cbiAgeyBpZHMgOiBBLklkcy50XG4gIDsga2luZCA6IEEuU2VtLnRcbiAgOyBpZ25fZ3JvdXAgOiBib29sXG4gIDsgZ3JlZWR5IDogQS5SZXBfa2luZC50XG4gIDsgcG9zIDogQS5NYXJrLnQgcmVmXG4gIDsgbmFtZXMgOiAoc3RyaW5nICogaW50KSBsaXN0IHJlZlxuICA7IGNhY2hlIDogQ3NldC50IENzZXQuQ1NldE1hcC50IHJlZlxuICA7IGNvbG9ycyA6IENvbG9yX21hcC5UYWJsZS50XG4gIH1cblxubGV0IHRyYW5zX3NldCBjYWNoZSAoY20gOiBDb2xvcl9tYXAuVGFibGUudCkgcyA9XG4gIG1hdGNoIENzZXQub25lX2NoYXIgcyB3aXRoXG4gIHwgU29tZSBpIC0+IENzZXQuY3NpbmdsZSAoQ29sb3JfbWFwLlRhYmxlLmdldF9jaGFyIGNtIGkpXG4gIHwgTm9uZSAtPlxuICAgIGxldCB2ID0gQ3NldC5oYXNoIHMsIHMgaW5cbiAgICAodHJ5IENzZXQuQ1NldE1hcC5maW5kIHYgIWNhY2hlIHdpdGhcbiAgICAgfCBOb3RfZm91bmQgLT5cbiAgICAgICBsZXQgbCA9IENvbG9yX21hcC5UYWJsZS50cmFuc2xhdGVfY29sb3JzIGNtIHMgaW5cbiAgICAgICBjYWNoZSA6PSBDc2V0LkNTZXRNYXAuYWRkIHYgbCAhY2FjaGU7XG4gICAgICAgbClcbjs7XG5cbmxldCBtYWtlX3JlcGVhdGVyIGlkcyBjciBraW5kIGdyZWVkeSA9XG4gIG1hdGNoIGdyZWVkeSB3aXRoXG4gIHwgYEdyZWVkeSAtPiBmdW4gcmVtIC0+IEEuYWx0IGlkcyBbIEEuc2VxIGlkcyBraW5kIChBLnJlbmFtZSBpZHMgY3IpIHJlbTsgQS5lcHMgaWRzIF1cbiAgfCBgTm9uX2dyZWVkeSAtPlxuICAgIGZ1biByZW0gLT4gQS5hbHQgaWRzIFsgQS5lcHMgaWRzOyBBLnNlcSBpZHMga2luZCAoQS5yZW5hbWUgaWRzIGNyKSByZW0gXVxuOztcblxuKCogWFhYIHNob3VsZCBwcm9iYWJseSBjb21wdXRlIGEgY2F0ZWdvcnkgbWFzayAqKVxubGV0IHJlYyB0cmFuc2xhdGVcbiAgKHsgaWRzOyBraW5kOyBpZ25fZ3JvdXA7IGdyZWVkeTsgcG9zOyBuYW1lczsgY2FjaGU7IGNvbG9ycyB9IGFzIGN0eClcbiAgKGFzdCA6IEFzdC5ub19jYXNlKVxuICA9XG4gIG1hdGNoIGFzdCB3aXRoXG4gIHwgU2V0IHMgLT4gQS5jc3QgaWRzICh0cmFuc19zZXQgY2FjaGUgY29sb3JzIHMpLCBraW5kXG4gIHwgU2VxdWVuY2UgbCAtPiB0cmFuc19zZXEgY3R4IGwsIGtpbmRcbiAgfCBBc3QgKEFsdGVybmF0aXZlIGwpIC0+XG4gICAgKG1hdGNoIEFzdC5tZXJnZV9zZXF1ZW5jZXMgbCB3aXRoXG4gICAgIHwgWyByJyBdIC0+XG4gICAgICAgbGV0IGNyLCBraW5kJyA9IHRyYW5zbGF0ZSBjdHggcicgaW5cbiAgICAgICBlbmZvcmNlX2tpbmQgaWRzIGtpbmQga2luZCcgY3IsIGtpbmRcbiAgICAgfCBtZXJnZWRfc2VxdWVuY2VzIC0+XG4gICAgICAgKCBBLmFsdFxuICAgICAgICAgICBpZHNcbiAgICAgICAgICAgKExpc3QubWFwIG1lcmdlZF9zZXF1ZW5jZXMgfmY6KGZ1biByJyAtPlxuICAgICAgICAgICAgICBsZXQgY3IsIGtpbmQnID0gdHJhbnNsYXRlIGN0eCByJyBpblxuICAgICAgICAgICAgICBlbmZvcmNlX2tpbmQgaWRzIGtpbmQga2luZCcgY3IpKVxuICAgICAgICwga2luZCApKVxuICB8IFJlcGVhdCAocicsIGksIGopIC0+XG4gICAgbGV0IGNyLCBraW5kJyA9IHRyYW5zbGF0ZSBjdHggcicgaW5cbiAgICBsZXQgcmVtID1cbiAgICAgIG1hdGNoIGogd2l0aFxuICAgICAgfCBOb25lIC0+IEEucmVwIGlkcyBncmVlZHkga2luZCcgY3JcbiAgICAgIHwgU29tZSBqIC0+XG4gICAgICAgIGxldCBmID0gbWFrZV9yZXBlYXRlciBpZHMgY3Iga2luZCcgZ3JlZWR5IGluXG4gICAgICAgIGl0ZXIgKGogLSBpKSBmIChBLmVwcyBpZHMpXG4gICAgaW5cbiAgICBpdGVyIGkgKGZ1biByZW0gLT4gQS5zZXEgaWRzIGtpbmQnIChBLnJlbmFtZSBpZHMgY3IpIHJlbSkgcmVtLCBraW5kXG4gIHwgQmVnX29mX2xpbmUgLT4gQS5hZnRlciBpZHMgQ2F0ZWdvcnkuKGluZXhpc3RhbnQgKysgbmV3bGluZSksIGtpbmRcbiAgfCBFbmRfb2ZfbGluZSAtPiBBLmJlZm9yZSBpZHMgQ2F0ZWdvcnkuKGluZXhpc3RhbnQgKysgbmV3bGluZSksIGtpbmRcbiAgfCBCZWdfb2Zfd29yZCAtPlxuICAgICggQS5zZXFcbiAgICAgICAgaWRzXG4gICAgICAgIGBGaXJzdFxuICAgICAgICAoQS5hZnRlciBpZHMgQ2F0ZWdvcnkuKGluZXhpc3RhbnQgKysgbm90X2xldHRlcikpXG4gICAgICAgIChBLmJlZm9yZSBpZHMgQ2F0ZWdvcnkubGV0dGVyKVxuICAgICwga2luZCApXG4gIHwgRW5kX29mX3dvcmQgLT5cbiAgICAoIEEuc2VxXG4gICAgICAgIGlkc1xuICAgICAgICBgRmlyc3RcbiAgICAgICAgKEEuYWZ0ZXIgaWRzIENhdGVnb3J5LmxldHRlcilcbiAgICAgICAgKEEuYmVmb3JlIGlkcyBDYXRlZ29yeS4oaW5leGlzdGFudCArKyBub3RfbGV0dGVyKSlcbiAgICAsIGtpbmQgKVxuICB8IE5vdF9ib3VuZCAtPlxuICAgICggQS5hbHRcbiAgICAgICAgaWRzXG4gICAgICAgIFsgQS5zZXEgaWRzIGBGaXJzdCAoQS5hZnRlciBpZHMgQ2F0ZWdvcnkubGV0dGVyKSAoQS5iZWZvcmUgaWRzIENhdGVnb3J5LmxldHRlcilcbiAgICAgICAgOyAobGV0IGNhdCA9IENhdGVnb3J5LihpbmV4aXN0YW50ICsrIG5vdF9sZXR0ZXIpIGluXG4gICAgICAgICAgIEEuc2VxIGlkcyBgRmlyc3QgKEEuYWZ0ZXIgaWRzIGNhdCkgKEEuYmVmb3JlIGlkcyBjYXQpKVxuICAgICAgICBdXG4gICAgLCBraW5kIClcbiAgfCBCZWdfb2Zfc3RyIC0+IEEuYWZ0ZXIgaWRzIENhdGVnb3J5LmluZXhpc3RhbnQsIGtpbmRcbiAgfCBFbmRfb2Zfc3RyIC0+IEEuYmVmb3JlIGlkcyBDYXRlZ29yeS5pbmV4aXN0YW50LCBraW5kXG4gIHwgTGFzdF9lbmRfb2ZfbGluZSAtPiBBLmJlZm9yZSBpZHMgQ2F0ZWdvcnkuKGluZXhpc3RhbnQgKysgbGFzdG5ld2xpbmUpLCBraW5kXG4gIHwgU3RhcnQgLT4gQS5hZnRlciBpZHMgQ2F0ZWdvcnkuc2VhcmNoX2JvdW5kYXJ5LCBraW5kXG4gIHwgU3RvcCAtPiBBLmJlZm9yZSBpZHMgQ2F0ZWdvcnkuc2VhcmNoX2JvdW5kYXJ5LCBraW5kXG4gIHwgU2VtIChraW5kJywgcicpIC0+XG4gICAgbGV0IGNyLCBraW5kJycgPSB0cmFuc2xhdGUgeyBjdHggd2l0aCBraW5kID0ga2luZCcgfSByJyBpblxuICAgIGVuZm9yY2Vfa2luZCBpZHMga2luZCcga2luZCcnIGNyLCBraW5kJ1xuICB8IFNlbV9ncmVlZHkgKGdyZWVkeScsIHInKSAtPiB0cmFuc2xhdGUgeyBjdHggd2l0aCBncmVlZHkgPSBncmVlZHknIH0gcidcbiAgfCBHcm91cCAobiwgcicpIC0+XG4gICAgaWYgaWduX2dyb3VwXG4gICAgdGhlbiB0cmFuc2xhdGUgY3R4IHInXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcCA9ICFwb3MgaW5cbiAgICAgIGxldCAoKSA9XG4gICAgICAgIG1hdGNoIG4gd2l0aFxuICAgICAgICB8IFNvbWUgbmFtZSAtPiBuYW1lcyA6PSAobmFtZSwgQS5NYXJrLmdyb3VwX2NvdW50IHApIDo6ICFuYW1lc1xuICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgIGluXG4gICAgICBwb3MgOj0gQS5NYXJrLm5leHQyICFwb3M7XG4gICAgICBsZXQgY3IsIGtpbmQnID0gdHJhbnNsYXRlIGN0eCByJyBpblxuICAgICAgKCBBLnNlcSBpZHMgYEZpcnN0IChBLm1hcmsgaWRzIHApIChBLnNlcSBpZHMgYEZpcnN0IGNyIChBLm1hcmsgaWRzIChBLk1hcmsubmV4dCBwKSkpXG4gICAgICAsIGtpbmQnICkpXG4gIHwgTm9fZ3JvdXAgcicgLT4gdHJhbnNsYXRlIHsgY3R4IHdpdGggaWduX2dyb3VwID0gdHJ1ZSB9IHInXG4gIHwgTmVzdCByJyAtPlxuICAgIGxldCBiID0gIXBvcyBpblxuICAgIGxldCBjciwga2luZCcgPSB0cmFuc2xhdGUgY3R4IHInIGluXG4gICAgbGV0IGUgPSBBLk1hcmsucHJldiAhcG9zIGluXG4gICAgaWYgQS5NYXJrLmNvbXBhcmUgZSBiID0gLTFcbiAgICB0aGVuIGNyLCBraW5kJ1xuICAgIGVsc2UgQS5zZXEgaWRzIGBGaXJzdCAoQS5lcmFzZSBpZHMgYiBlKSBjciwga2luZCdcbiAgfCBQbWFyayAoaSwgcicpIC0+XG4gICAgbGV0IGNyLCBraW5kJyA9IHRyYW5zbGF0ZSBjdHggcicgaW5cbiAgICBBLnNlcSBpZHMgYEZpcnN0IChBLnBtYXJrIGlkcyBpKSBjciwga2luZCdcblxuYW5kIHRyYW5zX3NlcSAoeyBpZHM7IGtpbmQ7IF8gfSBhcyBjdHgpID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBBLmVwcyBpZHNcbiAgfCBbIHIgXSAtPlxuICAgIGxldCBjcicsIGtpbmQnID0gdHJhbnNsYXRlIGN0eCByIGluXG4gICAgZW5mb3JjZV9raW5kIGlkcyBraW5kIGtpbmQnIGNyJ1xuICB8IHIgOjogcmVtIC0+XG4gICAgbGV0IGNyJywga2luZCcgPSB0cmFuc2xhdGUgY3R4IHIgaW5cbiAgICBsZXQgY3InJyA9IHRyYW5zX3NlcSBjdHggcmVtIGluXG4gICAgaWYgQS5pc19lcHMgY3InJyB0aGVuIGNyJyBlbHNlIGlmIEEuaXNfZXBzIGNyJyB0aGVuIGNyJycgZWxzZSBBLnNlcSBpZHMga2luZCcgY3InIGNyJydcbjs7XG5cbmxldCBjb21waWxlXzEgcmVnZXhwID1cbiAgbGV0IHJlZ2V4cCA9IEFzdC5oYW5kbGVfY2FzZSBmYWxzZSByZWdleHAgaW5cbiAgbGV0IGNvbG9yX21hcCA9IENvbG9yX21hcC5tYWtlICgpIGluXG4gIGxldCBuZWVkX2xubCA9IEFzdC5jb2xvcml6ZSBjb2xvcl9tYXAgcmVnZXhwIGluXG4gIGxldCBjb2xvcnMsIGNvbG9yX3JlcHIgPSBDb2xvcl9tYXAuZmxhdHRlbiBjb2xvcl9tYXAgaW5cbiAgbGV0IG5jb2xvciA9IENvbG9yX21hcC5SZXByLmxlbmd0aCBjb2xvcl9yZXByIGluXG4gIGxldCBsbmwgPSBpZiBuZWVkX2xubCB0aGVuIENzZXQub2ZfaW50IG5jb2xvciBlbHNlIENzZXQubnVsbF9jaGFyIGluXG4gIGxldCBuY29sb3IgPSBpZiBuZWVkX2xubCB0aGVuIG5jb2xvciArIDEgZWxzZSBuY29sb3IgaW5cbiAgbGV0IGN0eCA9XG4gICAgeyBpZHMgPSBBLklkcy5jcmVhdGUgKClcbiAgICA7IGtpbmQgPSBgRmlyc3RcbiAgICA7IGlnbl9ncm91cCA9IGZhbHNlXG4gICAgOyBncmVlZHkgPSBgR3JlZWR5XG4gICAgOyBwb3MgPSByZWYgQS5NYXJrLnN0YXJ0XG4gICAgOyBuYW1lcyA9IHJlZiBbXVxuICAgIDsgY2FjaGUgPSByZWYgQ3NldC5DU2V0TWFwLmVtcHR5XG4gICAgOyBjb2xvcnNcbiAgICB9XG4gIGluXG4gIGxldCByLCBraW5kID0gdHJhbnNsYXRlIGN0eCByZWdleHAgaW5cbiAgbGV0IHIgPSBlbmZvcmNlX2tpbmQgY3R4LmlkcyBgRmlyc3Qga2luZCByIGluXG4gICgqRm9ybWF0LmVwcmludGYgXCI8JWQgJWQ+QC5cIiAhaWRzIG5jb2w7KilcbiAgbWtfcmVcbiAgICB+aW5pdGlhbDpyXG4gICAgfmNvbG9yc1xuICAgIH5jb2xvcl9yZXByXG4gICAgfm5jb2xvclxuICAgIH5sbmxcbiAgICB+Z3JvdXBfbmFtZXM6KExpc3QucmV2ICEoY3R4Lm5hbWVzKSlcbiAgICB+Z3JvdXBfY291bnQ6KEEuTWFyay5ncm91cF9jb3VudCAhKGN0eC5wb3MpKVxuOztcblxubGV0IGNvbXBpbGUgciA9XG4gIGxldCBvcGVuIEFzdC5FeHBvcnQgaW5cbiAgY29tcGlsZV8xIChpZiBBc3QuYW5jaG9yZWQgciB0aGVuIGdyb3VwIHIgZWxzZSBzZXEgWyBzaG9ydGVzdCAocmVwIGFueSk7IGdyb3VwIHIgXSlcbjs7XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImR1bW15IiwiZ2xvYmFsX2RhdGEiLCJSZV9JbXBvcnQiLCJTdGRsaWJfTXV0ZXgiLCJSZV9Db2xvcl9tYXAiLCJSZV9Dc2V0IiwiU3RkbGliX0NoYXIiLCJSZV9BdXRvbWF0YSIsIlJlX0NhdGVnb3J5IiwiUmVfQXN0IiwiU3RkbGliX0xpc3RMYWJlbHMiLCJTdGRsaWIiLCJSZV9Hcm91cCIsIlJlX1NsaWNlIiwiUmVfTWFya19pbmZvcyIsIlN0ZGxpYl9PcHRpb24iLCJSZV9QbWFyayIsIlN0ZGxpYl9BcnJheSIsImJyZWFrX2lkeCIsInQiLCJnZXRfaW5mbyIsInBhcmFtIiwiZm9sbG93X3RyYW5zaXRpb24iLCJjb2xvciIsInNldF90cmFuc2l0aW9uIiwic3QiLCJ1bmtub3duIiwiaXNfdW5rbm93bl90cmFuc2l0aW9uIiwiaW5mbyIsIngiLCJwcF9yZSIsImNoIiwicmUiLCJncm91cF9jb3VudCIsImdyb3VwX25hbWVzIiwidW5zYWZlX3NldCIsImlkeCIsInBvcyIsInNldCIsImZpcnN0IiwiZW1wdHkiLCJtYWtlIiwiZ3JvdXBzIiwibGVuZ3RoIiwiY2F0ZWdvcnkiLCJ1bmtub3duX3N0YXRlIiwiZmluZF9zdGF0ZSIsImRlc2MiLCJleG4iLCJtYXRjaCIsImJyZWFrX3N0YXRlIiwic3RhdGUiLCJuY29sIiwiZGVsdGEiLCJjYXQiLCJ2YWxpZGF0ZSIsInMiLCJuZXh0IiwiY29sb3JzIiwibG9vcF9ub19tYXJrIiwibGFzdCIsInN0MCIsImZpbmFsIiwicmVzIiwiZmluZF9pbml0aWFsX3N0YXRlIiwiZ2V0X2NvbG9yIiwic2xlbiIsInNjYW5fc3RyIiwicG9zaXRpb25zIiwiaW5pdGlhbF9zdGF0ZSIsInJlYWxfYyIsImZpbmFsX2JvdW5kYXJ5X2NoZWNrIiwic3RhdGVfaW5mbyIsImZpbmFsX2NhdCIsIm1ha2VfbWF0Y2hfc3RyIiwibGVuIiwicGFydGlhbCIsImluaXRpYWxfY2F0Iiwic3RhdHVzIiwiY3JlYXRlIiwiZmVlZCIsImZpbmFsaXplIiwibm9fbWF0Y2hfc3RhcnRzX2JlZm9yZSIsInRlc3RfbWFyayIsIm1hcmsiLCJnZXQiLCJpIiwic3RvcCIsInN0YXJ0IiwibG9vcCIsImFic19wb3MiLCJ0dCIsInNsaWNlcyIsImZpcnN0X21hdGNoX3BvcyIsInBtYXJrcyIsIm1hcmtzIiwiZmlyc3RfbWF0Y2hfcG9zaXRpb24iLCJtYXRjaF9zdHJfbm9fYm91bmRzIiwiY3N0X1JlX2V4ZWNfb3V0X29mX2JvdW5kcyIsIm1hdGNoX3N0cl9wIiwibWF0Y2hfc3RyIiwiZW5mb3JjZV9raW5kIiwiaWRzIiwia2luZCIsImNyIiwidHJhbnNsYXRlIiwiY3R4IiwiYXN0IiwiY2FjaGUiLCJuYW1lcyIsImdyZWVkeSIsImlnbl9ncm91cCIsImwiLCJuIiwiciIsImIiLCJlIiwicCIsIm5hbWUiLCJqIiwicmVtIiwidiIsIm1lcmdlZF9zZXF1ZW5jZXMiLCJ0cmFuc19zZXEiLCJjb21waWxlIiwicmVnZXhwIiwiY29sb3JfbWFwIiwibmVlZF9sbmwiLCJjb2xvcl9yZXByIiwibmNvbG9yIiwibG5sIiwiaW5pdGlhbCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQUErQjtBQUFBLEdBdUw0QztBQUFBLEdBcnVCSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVENUYxRiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMzNTMyLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvc2VhcmNoLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwibGV0IGFsbCA/KHBvcyA9IDApID9sZW4gcmUgcyA6IF8gU2VxLnQgPVxuICBpZiBwb3MgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJSZS5hbGxcIjtcbiAgKCogaW5kZXggb2YgdGhlIGZpcnN0IHBvc2l0aW9uIHdlIGRvIG5vdCBjb25zaWRlci5cbiAgICAgIXBvcyA8IGxpbWl0IGlzIGFuIGludmFyaWFudCAqKVxuICBsZXQgbGltaXQgPVxuICAgIG1hdGNoIGxlbiB3aXRoXG4gICAgfCBOb25lIC0+IFN0cmluZy5sZW5ndGggc1xuICAgIHwgU29tZSBsIC0+XG4gICAgICBpZiBsIDwgMCB8fCBwb3MgKyBsID4gU3RyaW5nLmxlbmd0aCBzIHRoZW4gaW52YWxpZF9hcmcgXCJSZS5hbGxcIjtcbiAgICAgIHBvcyArIGxcbiAgaW5cbiAgKCogaXRlcmF0ZSBvbiBtYXRjaGVzLiBXaGVuIGEgbWF0Y2ggaXMgZm91bmQsIHNlYXJjaCBmb3IgdGhlIG5leHRcbiAgICAgb25lIGp1c3QgYWZ0ZXIgaXRzIGVuZCAqKVxuICBsZXQgcmVjIGF1eCBwb3Mgb25fbWF0Y2ggKCkgPVxuICAgIGlmIHBvcyA+IGxpbWl0XG4gICAgdGhlbiBTZXEuTmlsICgqIG5vIG1vcmUgbWF0Y2hlcyAqKVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2hcbiAgICAgICAgQ29tcGlsZS5tYXRjaF9zdHIgfmdyb3Vwczp0cnVlIH5wYXJ0aWFsOmZhbHNlIHJlIHMgfnBvcyB+bGVuOihsaW1pdCAtIHBvcylcbiAgICAgIHdpdGhcbiAgICAgIHwgTWF0Y2ggc3Vic3RyIC0+XG4gICAgICAgIGxldCBwMSA9IEdyb3VwLnN0YXJ0X29mZnNldCBzdWJzdHIgMCB8PiBHcm91cC5PZmZzZXQuZ2V0X25vX2NoZWNrIGluXG4gICAgICAgIGxldCBwMiA9IEdyb3VwLnN0b3Bfb2Zmc2V0IHN1YnN0ciAwIHw+IEdyb3VwLk9mZnNldC5nZXRfbm9fY2hlY2sgaW5cbiAgICAgICAgaWYgb25fbWF0Y2ggJiYgcDEgPSBwb3MgJiYgcDEgPSBwMlxuICAgICAgICB0aGVuICgqIHNraXAgZW1wdHkgbWF0Y2ggcmlnaHQgYWZ0ZXIgYSBtYXRjaCAqKVxuICAgICAgICAgIGF1eCAocG9zICsgMSkgZmFsc2UgKClcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgbGV0IHBvcyA9IGlmIHAxID0gcDIgdGhlbiBwMiArIDEgZWxzZSBwMiBpblxuICAgICAgICAgIFNlcS5Db25zIChzdWJzdHIsIGF1eCBwb3MgKHAxIDw+IHAyKSkpXG4gICAgICB8IFJ1bm5pbmcgXyB8IEZhaWxlZCAtPiBTZXEuTmlsKVxuICBpblxuICBhdXggcG9zIGZhbHNlXG47O1xuXG5sZXQgbWF0Y2hlcyA/cG9zID9sZW4gcmUgcyA6IF8gU2VxLnQgPVxuICBhbGwgP3BvcyA/bGVuIHJlIHMgfD4gU2VxLm1hcCAoZnVuIHN1YiAtPiBHcm91cC5nZXQgc3ViIDApXG47O1xuXG5sZXQgc3BsaXRfZnVsbCA/KHBvcyA9IDApID9sZW4gcmUgcyA6IF8gU2VxLnQgPVxuICBpZiBwb3MgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJSZS5zcGxpdFwiO1xuICBsZXQgbGltaXQgPVxuICAgIG1hdGNoIGxlbiB3aXRoXG4gICAgfCBOb25lIC0+IFN0cmluZy5sZW5ndGggc1xuICAgIHwgU29tZSBsIC0+XG4gICAgICBpZiBsIDwgMCB8fCBwb3MgKyBsID4gU3RyaW5nLmxlbmd0aCBzIHRoZW4gaW52YWxpZF9hcmcgXCJSZS5zcGxpdFwiO1xuICAgICAgcG9zICsgbFxuICBpblxuICAoKiBpOiBzdGFydCBvZiBkZWxpbWl0ZWQgc3RyaW5nXG4gICAgIHBvczogZmlyc3QgcG9zaXRpb24gYWZ0ZXIgbGFzdCBtYXRjaCBvZiBbcmVdXG4gICAgIGxpbWl0OiBmaXJzdCBpbmRleCB3ZSBpZ25vcmUgKCFwb3MgPCBsaW1pdCBpcyBhbiBpbnZhcmlhbnQpICopXG4gIGxldCBwb3MwID0gcG9zIGluXG4gIGxldCByZWMgYXV4IHN0YXRlIGkgcG9zICgpID1cbiAgICBtYXRjaCBzdGF0ZSB3aXRoXG4gICAgfCBgSWRsZSB3aGVuIHBvcyA+IGxpbWl0IC0+XG4gICAgICAoKiBXZSBoYWQgYW4gZW1wdHkgbWF0Y2ggYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nICopXG4gICAgICBhc3NlcnQgKGkgPSBsaW1pdCk7XG4gICAgICBTZXEuTmlsXG4gICAgfCBgSWRsZSAtPlxuICAgICAgKG1hdGNoXG4gICAgICAgICBDb21waWxlLm1hdGNoX3N0ciB+Z3JvdXBzOnRydWUgfnBhcnRpYWw6ZmFsc2UgcmUgcyB+cG9zIH5sZW46KGxpbWl0IC0gcG9zKVxuICAgICAgIHdpdGhcbiAgICAgICB8IE1hdGNoIHN1YnN0ciAtPlxuICAgICAgICAgbGV0IHAxID0gR3JvdXAuc3RhcnRfb2Zmc2V0IHN1YnN0ciAwIHw+IEdyb3VwLk9mZnNldC5nZXRfbm9fY2hlY2sgaW5cbiAgICAgICAgIGxldCBwMiA9IEdyb3VwLnN0b3Bfb2Zmc2V0IHN1YnN0ciAwIHw+IEdyb3VwLk9mZnNldC5nZXRfbm9fY2hlY2sgaW5cbiAgICAgICAgIGxldCBwb3MgPSBpZiBwMSA9IHAyIHRoZW4gcDIgKyAxIGVsc2UgcDIgaW5cbiAgICAgICAgIGxldCBvbGRfaSA9IGkgaW5cbiAgICAgICAgIGxldCBpID0gcDIgaW5cbiAgICAgICAgIGlmIG9sZF9pID0gcDEgJiYgcDEgPSBwMiAmJiBwMSA+IHBvczBcbiAgICAgICAgIHRoZW4gKCogU2tpcCBlbXB0eSBtYXRjaCByaWdodCBhZnRlciBhIGRlbGltaXRlciAqKVxuICAgICAgICAgICBhdXggc3RhdGUgaSBwb3MgKClcbiAgICAgICAgIGVsc2UgaWYgcDEgPiBwb3MwXG4gICAgICAgICB0aGVuIChcbiAgICAgICAgICAgKCogc3RyaW5nIGRvZXMgbm90IHN0YXJ0IGJ5IGEgZGVsaW1pdGVyICopXG4gICAgICAgICAgIGxldCB0ZXh0ID0gU3RyaW5nLnN1YiBzIG9sZF9pIChwMSAtIG9sZF9pKSBpblxuICAgICAgICAgICBsZXQgc3RhdGUgPSBgWWllbGQgKGBEZWxpbSBzdWJzdHIpIGluXG4gICAgICAgICAgIFNlcS5Db25zIChgVGV4dCB0ZXh0LCBhdXggc3RhdGUgaSBwb3MpKVxuICAgICAgICAgZWxzZSBTZXEuQ29ucyAoYERlbGltIHN1YnN0ciwgYXV4IHN0YXRlIGkgcG9zKVxuICAgICAgIHwgUnVubmluZyBfIC0+IFNlcS5OaWxcbiAgICAgICB8IEZhaWxlZCAtPlxuICAgICAgICAgaWYgaSA8IGxpbWl0XG4gICAgICAgICB0aGVuIChcbiAgICAgICAgICAgbGV0IHRleHQgPSBTdHJpbmcuc3ViIHMgaSAobGltaXQgLSBpKSBpblxuICAgICAgICAgICAoKiB5aWVsZCBsYXN0IHN0cmluZyAqKVxuICAgICAgICAgICBTZXEuQ29ucyAoYFRleHQgdGV4dCwgYXV4IHN0YXRlIGxpbWl0IHBvcykpXG4gICAgICAgICBlbHNlIFNlcS5OaWwpXG4gICAgfCBgWWllbGQgeCAtPiBTZXEuQ29ucyAoeCwgYXV4IGBJZGxlIGkgcG9zKVxuICBpblxuICBhdXggYElkbGUgcG9zIHBvc1xuOztcblxubGV0IHNwbGl0ID9wb3MgP2xlbiByZSBzIDogXyBTZXEudCA9XG4gIGxldCBzZXEgPSBzcGxpdF9mdWxsID9wb3MgP2xlbiByZSBzIGluXG4gIGxldCByZWMgZmlsdGVyIHNlcSAoKSA9XG4gICAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICB8IFNlcS5OaWwgLT4gU2VxLk5pbFxuICAgIHwgU2VxLkNvbnMgKGBEZWxpbSBfLCB0bCkgLT4gZmlsdGVyIHRsICgpXG4gICAgfCBTZXEuQ29ucyAoYFRleHQgcywgdGwpIC0+IFNlcS5Db25zIChzLCBmaWx0ZXIgdGwpXG4gIGluXG4gIGZpbHRlciBzZXFcbjs7XG5cbmxldCBzcGxpdF9kZWxpbSA/cG9zID9sZW4gcmUgcyA6IF8gU2VxLnQgPVxuICBsZXQgc2VxID0gc3BsaXRfZnVsbCA/cG9zID9sZW4gcmUgcyBpblxuICBsZXQgcmVjIGZpbHRlciB+ZGVsaW0gc2VxICgpID1cbiAgICBtYXRjaCBzZXEgKCkgd2l0aFxuICAgIHwgU2VxLk5pbCAtPiBpZiBkZWxpbSB0aGVuIFNlcS5Db25zIChcIlwiLCBmdW4gKCkgLT4gU2VxLk5pbCkgZWxzZSBTZXEuTmlsXG4gICAgfCBTZXEuQ29ucyAoYERlbGltIF8sIHRsKSAtPlxuICAgICAgaWYgZGVsaW1cbiAgICAgIHRoZW4gU2VxLkNvbnMgKFwiXCIsIGZ1biAoKSAtPiBmaWx0ZXIgfmRlbGltOnRydWUgdGwgKCkpXG4gICAgICBlbHNlIGZpbHRlciB+ZGVsaW06dHJ1ZSB0bCAoKVxuICAgIHwgU2VxLkNvbnMgKGBUZXh0IHMsIHRsKSAtPiBTZXEuQ29ucyAocywgZmlsdGVyIH5kZWxpbTpmYWxzZSB0bClcbiAgaW5cbiAgZmlsdGVyIH5kZWxpbTp0cnVlIHNlcVxuOztcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImdsb2JhbF9kYXRhIiwiQXNzZXJ0X2ZhaWx1cmUiLCJSZV9Db21waWxlIiwiU3RkbGliX1N0cmluZyIsIlJlX0dyb3VwIiwiU3RkbGliIiwiU3RkbGliX1NlcSIsImFsbCIsIm9wdCIsImxlbiIsInJlIiwicyIsInBvcyIsImNzdF9SZV9hbGwiLCJsIiwibGltaXQiLCJhdXgiLCJvbl9tYXRjaCIsInBhcmFtIiwibWF0Y2giLCJzdWJzdHIiLCJwMSIsInAyIiwibWF0Y2hlcyIsInN1YiIsInNwbGl0X2Z1bGwiLCJjc3RfUmVfc3BsaXQiLCJzdGF0ZSIsImkiLCJvbGRfaSIsIngiLCJ0ZXh0Iiwic3BsaXQiLCJzZXEiLCJmaWx0ZXIiLCJ2YXJpYW50IiwidGwiLCJzcGxpdF9kZWxpbSIsImRlbGltIiwiY3N0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxZQUFBQyxJQUFBQyxLQUFBQyxLQUFBQyxJQUFBQztBQUFBQSxRQUFBQyxNQ0FRLGtCQUFBQyxhREFSO0FBQUEsSUNDRSxZQUFnQjtBQUFBLElBR2hCO0FBQUE7QUFBQSxNQUFBQyxJQUFBO0FBQUEsVUFJSTtBQUFBO0FBQUEsV0FBMkM7QUFBQSxTQUFBQyxRQUMzQztBQUFBO0FBQUE7QUFBQSxTQUFBQSxRQUhRO0FBQUEsYUFBQUMsSUFBQUosT0FBQUssWUFBQUM7QUFBQUEsU0FBQU4sTUFRVixPQUFBSyxXQUFBO0FBQUE7QUFBQSxzQkFDSztBQUFBLFVBQUFFLFFBR0Q7QUFBQSxNQUEwRTtBQUFBO0FBQUEsUUFBQUMsU0FBQTtBQUFBLFlBR2pFO0FBQUEsUUFBQUMsS0FBQTtBQUFBLFlBQ0E7QUFBQSxRQUFBQyxLQUFBO0FBQUEsT0FDVDtBQUFBO0FBQUE7QUFBQSxXQUFBVixRQUVFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUlvQjtBQUFBO0FBQUEsU0FBQUEsUUFIakIsaUNBRWU7QUFBQSxLQUFrQiwrQkFBbEIsMEJBQWtCO0FBQUEsSUFDUjtBQUFBLElBRXBDLG1CRC9CRix1QkMrQkU7QUFBQSxHQUFhO0FBQUEsWUFBQVcsUUFBQVgsS0FBQUgsS0FBQUMsSUFBQUM7QUFBQUEsUUFBQSxJQUliO0FBQUEsZUFBQWEsS0FBMEMscUNBQWU7QUFBQSxZQUFDO0FBQUEsdUJBQXBDLG1CQUFvQztBQUFBO0FBQUEsV0RuQzVEO0FBQUEsWUFBQUMsV0FBQWpCLEtBQUFDLEtBQUFDLElBQUFDO0FBQUFBLFFBQUFDLE1Dc0NlLGtCQUFBYyxlRHRDZjtBQUFBLElDdUNFLFlBQWdCO0FBQUEsSUFDaEI7QUFBQTtBQUFBLE1BQUFaLElBQUE7QUFBQSxVQUlJO0FBQUE7QUFBQSxXQUEyQztBQUFBLFNBQUFDLFFBQzNDO0FBQUE7QUFBQTtBQUFBLFNBQUFBLFFBSFE7QUFBQSxhQUFBQyxJQUFBVyxTQUFBQyxHQUFBaEIsT0FBQU07QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsV0FBQVcsUUFVVixHQUFBakIsUUFBQTtBQUFBO0FBQUE7QUFBQSxRQUNhO0FBQUEsU0FFWCxvQkFDQTtBQUFBLFNBREE7QUFBQTtBQUFBO0FBQUEsU0FBQU87QUFBQUEsV0FJRztBQUFBLFFBQTBFO0FBQUEsMkJBa0I3RDtBQUFBO0FBQUEsU0FBQUMsU0FsQjZEO0FBQUEsYUFHakU7QUFBQSxTQUFBQyxLQUFBO0FBQUEsYUFDQTtBQUFBLFNBQUFDLEtBQUE7QUFBQSxTQUFBVixRQUNUO0FBQUEsUUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBa0IsSUFmTDtBQUFBLE9BaUMwQywwQkFBZix5Q0FBZTtBQUFBO0FBQUEsTUFOckMsbUJBS0s7QUFBQSxVQUFBQyxPQUhRO0FBQUEsTUFFOEI7QUFBQTtBQUFBLDBCQUFuQix1Q0FBbUI7QUFBQTtBQUFBLEtBYnRDO0FBQUEsTUFNd0M7QUFBQTtBQUFBLDBCQUFmLG9DQUFlO0FBQUE7QUFBQSxNQUFBQSxTQUhoQztBQUFBLE1BQUFKLFFBQ1g7QUFBQSxLQUNxQztBQUFBO0FBQUEseUJBQWYsa0NBQWU7QUFBQSxJQVVEO0FBQUEsSUFFN0MsbUJEdkZGLG9DQ3VGRTtBQUFBLEdBQWlCO0FBQUEsWUFBQUssTUFBQXBCLEtBQUFILEtBQUFDLElBQUFDO0FBQUFBLFFBQUFzQixNQUlQO0FBQUEsYUFBQUMsT0FBQUQsT0FBQWY7QUFBQUEsU0FBQWUsTUFFUjtBQUFBO0FBQUEsVUFBQWQsUUFBTTtBQUFBLE1BQU0sWUFDQztBQUFBLFVBQUFBLFVBREQsVUFBQWdCLFVBQUE7QUFBQTtBQUFBLFVBQUFGLFFBQUE7QUFBQSxNQUVpQjtBQUFBO0FBQUEsU0FBQUcsS0FGN0IsVUFBQXpCLElBQUE7QUFBQSxLQUdrRCwwQkFBVCx1QkFBUztBQUFBLElBQUM7QUFBQSxJQUVyRDtBQUFBLEdBQVU7QUFBQSxZQUFBMEIsWUFBQXpCLEtBQUFILEtBQUFDLElBQUFDO0FBQUFBLFFBQUFzQixNQUlBO0FBQUEsYUFBQUMsT0FBQUksU0FBQUwsT0FBQWY7QUFBQUE7QUFBQUE7QUFBQUEsVUFBQXFCLE1EdEdaO0FBQUE7QUFBQTtBQUFBLFdBQUFELFFDd0dJLFNBQUFMLE1BQUE7QUFBQTtBQUFBLFlBQUFkLFFBQU07QUFBQSxRQUFNO0FBQUEsWUFBQUEsVUFBQSxVQUFBZ0IsVUFBQTtBQUFBO0FBQUEsWUFBQUYsUUFBQTtBQUFBLFFBR1Y7QUFBQSxRQUVLO0FBQUE7QUFBQTtBQUFBLE9BSk0saUNBQUFmLE9BQXNDLFNBQU8sTUFLTTtBQUFBO0FBQUEsTUFGekQseUJBQUFBLE9BQXdCLDBCQUF3QixHQUFoRDtBQUFBO0FBQUEsU0FBQWtCLEtBSlAsVUFBQXpCLElBQUE7QUFBQSxLQU0rRCwwQkFBdEIsMEJBQXNCO0FBQUEsSUFBQztBQUFBLElBRWxFLG1CRGhIRiwwQkNnSEU7QUFBQSxHQUFzQjtBQUFBLEdEaEh4QiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjMzNzE3LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvY29yZS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqXG4gICBSRSAtIEEgcmVndWxhciBleHByZXNzaW9uIGxpYnJhcnlcblxuICAgQ29weXJpZ2h0IChDKSAyMDAxIEplcm9tZSBWb3VpbGxvblxuICAgZW1haWw6IEplcm9tZS5Wb3VpbGxvbkBwcHMuanVzc2lldS5mclxuXG4gICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoXG4gICBsaW5raW5nIGV4Y2VwdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXRcbiAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbiAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0FcbiopXG5cbm9wZW4gSW1wb3J0XG5cbmluY2x1ZGUgc3RydWN0XG4gIGxldCBjc2V0ID0gQXN0LmNzZXRcbiAgbGV0IHJnIGMgYycgPSBjc2V0IChDc2V0LmNzZXEgYyBjJylcbiAgbGV0IG5vdG5sID0gY3NldCBDc2V0Lm5vdG5sXG4gIGxldCBsb3dlciA9IGNzZXQgQ3NldC5sb3dlclxuICBsZXQgdXBwZXIgPSBjc2V0IENzZXQudXBwZXJcbiAgbGV0IGFscGhhID0gY3NldCBDc2V0LmFscGhhXG4gIGxldCBkaWdpdCA9IGNzZXQgQ3NldC5jZGlnaXRcbiAgbGV0IGFsbnVtID0gY3NldCBDc2V0LmFsbnVtXG4gIGxldCB3b3JkYyA9IGNzZXQgQ3NldC53b3JkY1xuICBsZXQgYXNjaWkgPSBjc2V0IENzZXQuYXNjaWlcbiAgbGV0IGJsYW5rID0gY3NldCBDc2V0LmJsYW5rXG4gIGxldCBjbnRybCA9IGNzZXQgQ3NldC5jbnRybFxuICBsZXQgZ3JhcGggPSBjc2V0IENzZXQuZ3JhcGhcbiAgbGV0IHByaW50ID0gY3NldCBDc2V0LnByaW50XG4gIGxldCBwdW5jdCA9IGNzZXQgQ3NldC5wdW5jdFxuICBsZXQgc3BhY2UgPSBjc2V0IENzZXQuc3BhY2VcbiAgbGV0IHhkaWdpdCA9IGNzZXQgQ3NldC54ZGlnaXRcbmVuZFxuXG5pbmNsdWRlIEFzdC5FeHBvcnRcblxubGV0IGV4ZWNfaW50ZXJuYWwgPyhwb3MgPSAwKSA/KGxlbiA9IC0xKSB+cGFydGlhbCB+Z3JvdXBzIHJlIHMgPVxuICBDb21waWxlLm1hdGNoX3N0ciB+Z3JvdXBzIH5wYXJ0aWFsIHJlIHMgfnBvcyB+bGVuXG47O1xuXG5sZXQgZXhlYyA/cG9zID9sZW4gcmUgcyA9XG4gIG1hdGNoIGV4ZWNfaW50ZXJuYWwgP3BvcyA/bGVuIH5ncm91cHM6dHJ1ZSB+cGFydGlhbDpmYWxzZSByZSBzIHdpdGhcbiAgfCBNYXRjaCBzdWJzdHIgLT4gc3Vic3RyXG4gIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbjs7XG5cbmxldCBleGVjX29wdCA/cG9zID9sZW4gcmUgcyA9XG4gIG1hdGNoIGV4ZWNfaW50ZXJuYWwgP3BvcyA/bGVuIH5ncm91cHM6dHJ1ZSB+cGFydGlhbDpmYWxzZSByZSBzIHdpdGhcbiAgfCBNYXRjaCBzdWJzdHIgLT4gU29tZSBzdWJzdHJcbiAgfCBfIC0+IE5vbmVcbjs7XG5cbmxldCBleGVjcCA/KHBvcyA9IDApID8obGVuID0gLTEpIHJlIHMgPSBDb21waWxlLm1hdGNoX3N0cl9wIH5wb3MgfmxlbiByZSBzXG5cbmxldCBleGVjX3BhcnRpYWwgP3BvcyA/bGVuIHJlIHMgPVxuICBtYXRjaCBleGVjX2ludGVybmFsIH5ncm91cHM6ZmFsc2UgfnBhcnRpYWw6dHJ1ZSA/cG9zID9sZW4gcmUgcyB3aXRoXG4gIHwgTWF0Y2ggXyAtPiBgRnVsbFxuICB8IFJ1bm5pbmcgXyAtPiBgUGFydGlhbFxuICB8IEZhaWxlZCAtPiBgTWlzbWF0Y2hcbjs7XG5cbmxldCBleGVjX3BhcnRpYWxfZGV0YWlsZWQgP3BvcyA/bGVuIHJlIHMgPVxuICBtYXRjaCBleGVjX2ludGVybmFsIH5ncm91cHM6dHJ1ZSB+cGFydGlhbDp0cnVlID9wb3MgP2xlbiByZSBzIHdpdGhcbiAgfCBNYXRjaCBncm91cCAtPiBgRnVsbCBncm91cFxuICB8IFJ1bm5pbmcgeyBub19tYXRjaF9zdGFydHNfYmVmb3JlIH0gLT4gYFBhcnRpYWwgbm9fbWF0Y2hfc3RhcnRzX2JlZm9yZVxuICB8IEZhaWxlZCAtPiBgTWlzbWF0Y2hcbjs7XG5cbm1vZHVsZSBNYXJrID0gc3RydWN0XG4gIHR5cGUgdCA9IFBtYXJrLnRcblxuICBsZXQgdGVzdCAoZyA6IEdyb3VwLnQpIHAgPSBQbWFyay5TZXQubWVtIHAgKEdyb3VwLnBtYXJrcyBnKVxuICBsZXQgYWxsIChnIDogR3JvdXAudCkgPSBHcm91cC5wbWFya3MgZ1xuXG4gIG1vZHVsZSBTZXQgPSBQbWFyay5TZXRcblxuICBsZXQgZXF1YWwgPSBQbWFyay5lcXVhbFxuICBsZXQgY29tcGFyZSA9IFBtYXJrLmNvbXBhcmVcbmVuZFxuXG50eXBlIHNwbGl0X3Rva2VuID1cbiAgWyBgVGV4dCBvZiBzdHJpbmdcbiAgfCBgRGVsaW0gb2YgR3JvdXAudFxuICBdXG5cbm1vZHVsZSBHZW4gPSBzdHJ1Y3RcbiAgdHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxuXG4gIGxldCBnZW5fb2Zfc2VxIChzIDogJ2EgU2VxLnQpIDogJ2EgZ2VuID1cbiAgICBsZXQgciA9IHJlZiBzIGluXG4gICAgZnVuICgpIC0+XG4gICAgICBtYXRjaCAhciAoKSB3aXRoXG4gICAgICB8IFNlcS5OaWwgLT4gTm9uZVxuICAgICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+XG4gICAgICAgIHIgOj0gdGw7XG4gICAgICAgIFNvbWUgeFxuICA7O1xuXG4gIGxldCBzcGxpdCA/cG9zID9sZW4gcmUgcyA6IF8gZ2VuID0gU2VhcmNoLnNwbGl0ID9wb3MgP2xlbiByZSBzIHw+IGdlbl9vZl9zZXFcbiAgbGV0IHNwbGl0X2Z1bGwgP3BvcyA/bGVuIHJlIHMgOiBfIGdlbiA9IFNlYXJjaC5zcGxpdF9mdWxsID9wb3MgP2xlbiByZSBzIHw+IGdlbl9vZl9zZXFcbiAgbGV0IGFsbCA/cG9zID9sZW4gcmUgcyA9IFNlYXJjaC5hbGwgP3BvcyA/bGVuIHJlIHMgfD4gZ2VuX29mX3NlcVxuICBsZXQgbWF0Y2hlcyA/cG9zID9sZW4gcmUgcyA9IFNlYXJjaC5tYXRjaGVzID9wb3MgP2xlbiByZSBzIHw+IGdlbl9vZl9zZXFcbmVuZFxuXG5tb2R1bGUgR3JvdXAgPSBHcm91cFxuXG4oKiogezIgRGVwcmVjYXRlZCBmdW5jdGlvbnN9ICopXG5cbmxldCBzcGxpdF9mdWxsX3NlcSA9IFNlYXJjaC5zcGxpdF9mdWxsXG5sZXQgc3BsaXRfc2VxID0gU2VhcmNoLnNwbGl0XG5sZXQgbWF0Y2hlc19zZXEgPSBTZWFyY2gubWF0Y2hlc1xubGV0IGFsbF9zZXEgPSBTZWFyY2guYWxsXG5cbnR5cGUgJ2EgZ2VuID0gJ2EgR2VuLmdlblxuXG5sZXQgYWxsX2dlbiA9IEdlbi5hbGxcbmxldCBtYXRjaGVzX2dlbiA9IEdlbi5tYXRjaGVzXG5sZXQgc3BsaXRfZ2VuID0gR2VuLnNwbGl0XG5sZXQgc3BsaXRfZnVsbF9nZW4gPSBHZW4uc3BsaXRfZnVsbFxuXG50eXBlIHN1YnN0cmluZ3MgPSBHcm91cC50XG5cbmxldCBnZXQgPSBHcm91cC5nZXRcbmxldCBnZXRfb2ZzID0gR3JvdXAub2Zmc2V0XG5sZXQgZ2V0X2FsbCA9IEdyb3VwLmFsbFxubGV0IGdldF9hbGxfb2ZzID0gR3JvdXAuYWxsX29mZnNldFxubGV0IHRlc3QgPSBHcm91cC50ZXN0XG5cbnR5cGUgbWFya2lkID0gTWFyay50XG5cbmxldCBtYXJrZWQgPSBNYXJrLnRlc3RcbmxldCBtYXJrX3NldCA9IE1hcmsuYWxsXG5cbnR5cGUgZ3JvdXBzID0gR3JvdXAudFxuXG5tb2R1bGUgTGlzdCA9IHN0cnVjdFxuICBsZXQgbGlzdF9vZl9zZXEgKHMgOiAnYSBTZXEudCkgOiAnYSBsaXN0ID1cbiAgICBTZXEuZm9sZF9sZWZ0IChmdW4gbCB4IC0+IHggOjogbCkgW10gcyB8PiBMaXN0LnJldlxuICA7O1xuXG4gIGxldCBhbGwgP3BvcyA/bGVuIHJlIHMgPSBTZWFyY2guYWxsID9wb3MgP2xlbiByZSBzIHw+IGxpc3Rfb2Zfc2VxXG4gIGxldCBtYXRjaGVzID9wb3MgP2xlbiByZSBzID0gU2VhcmNoLm1hdGNoZXMgP3BvcyA/bGVuIHJlIHMgfD4gbGlzdF9vZl9zZXFcbiAgbGV0IHNwbGl0X2Z1bGwgP3BvcyA/bGVuIHJlIHMgPSBTZWFyY2guc3BsaXRfZnVsbCA/cG9zID9sZW4gcmUgcyB8PiBsaXN0X29mX3NlcVxuICBsZXQgc3BsaXQgP3BvcyA/bGVuIHJlIHMgPSBTZWFyY2guc3BsaXQgP3BvcyA/bGVuIHJlIHMgfD4gbGlzdF9vZl9zZXFcbiAgbGV0IHNwbGl0X2RlbGltID9wb3MgP2xlbiByZSBzID0gU2VhcmNoLnNwbGl0X2RlbGltID9wb3MgP2xlbiByZSBzIHw+IGxpc3Rfb2Zfc2VxXG5lbmRcblxuaW5jbHVkZSBMaXN0XG5cbmluY2x1ZGUgc3RydWN0XG4gIG9wZW4gQ29tcGlsZVxuXG4gIHR5cGUgbm9ucmVjIHJlID0gcmVcblxuICBsZXQgY29tcGlsZSA9IGNvbXBpbGVcbiAgbGV0IHBwX3JlID0gcHBfcmVcbiAgbGV0IHByaW50X3JlID0gcHBfcmVcbiAgbGV0IGdyb3VwX25hbWVzID0gZ3JvdXBfbmFtZXNcbiAgbGV0IGdyb3VwX2NvdW50ID0gZ3JvdXBfY291bnRcbmVuZFxuXG5tb2R1bGUgU2VxID0gU2VhcmNoXG5tb2R1bGUgU3RyZWFtID0gQ29tcGlsZS5TdHJlYW1cbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiUmVfU2VhcmNoIiwiU3RkbGliX1NlcSIsIlN0ZGxpYl9MaXN0TGFiZWxzIiwiUmVfR3JvdXAiLCJSZV9QbWFyayIsIlJlX0NvbXBpbGUiLCJTdGRsaWIiLCJSZV9Dc2V0IiwiUmVfQXN0IiwiY3NldCIsInJnIiwiYyIsIm5vdG5sIiwibG93ZXIiLCJ1cHBlciIsImFscGhhIiwiZGlnaXQiLCJhbG51bSIsIndvcmRjIiwiYXNjaWkiLCJibGFuayIsImNudHJsIiwiZ3JhcGgiLCJwcmludCIsInB1bmN0Iiwic3BhY2UiLCJ4ZGlnaXQiLCJpbmNsdWRlIiwiZW1wdHkiLCJlcHNpbG9uIiwic3RyIiwibm9fY2FzZSIsImNhc2UkIiwiZGlmZiIsImNvbXBsIiwicmVwbiIsImludGVyIiwiY2hhciIsImFueSIsInNldCIsIm1hcmsiLCJuZXN0Iiwibm9fZ3JvdXAiLCJ3aG9sZV9zdHJpbmciLCJsZW9sIiwibG9uZ2VzdCIsImdyZWVkeSIsIm5vbl9ncmVlZHkiLCJzdG9wIiwibm90X2JvdW5kYXJ5IiwiZ3JvdXAiLCJ3b3JkIiwiZmlyc3QiLCJib3MiLCJib3ciLCJlb3ciLCJlb3MiLCJib2wiLCJzdGFydCIsImVvbCIsIm9wdCIsInJlcCIsInJlcDEiLCJhbHQiLCJzaG9ydGVzdCIsInNlcSIsInBwIiwid2l0bmVzcyIsImV4ZWNfaW50ZXJuYWwiLCJwYXJ0aWFsIiwiZ3JvdXBzIiwicmUiLCJzIiwicG9zIiwibGVuIiwiZXhlYyIsIm1hdGNoIiwic3Vic3RyIiwiZXhlY19vcHQiLCJleGVjcCIsImV4ZWNfcGFydGlhbCIsImV4ZWNfcGFydGlhbF9kZXRhaWxlZCIsIm5vX21hdGNoX3N0YXJ0c19iZWZvcmUiLCJtYXJrZWQiLCJnIiwicCIsIm1hcmtfc2V0IiwiZXF1YWwiLCJjb21wYXJlIiwiZ2VuX29mX3NlcSIsInIiLCJwYXJhbSIsInRsIiwieCIsInNwbGl0X2dlbiIsInNwbGl0X2Z1bGxfZ2VuIiwiYWxsX2dlbiIsIm1hdGNoZXNfZ2VuIiwic3BsaXRfZnVsbF9zZXEiLCJzcGxpdF9zZXEiLCJtYXRjaGVzX3NlcSIsImFsbF9zZXEiLCJnZXQiLCJnZXRfb2ZzIiwiZ2V0X2FsbCIsImdldF9hbGxfb2ZzIiwidGVzdCIsImxpc3Rfb2Zfc2VxIiwibCIsImFsbCIsIm1hdGNoZXMiLCJzcGxpdF9mdWxsIiwic3BsaXQiLCJzcGxpdF9kZWxpbSIsImNvbXBpbGUiLCJwcmludF9yZSIsImdyb3VwX25hbWVzIiwiZ3JvdXBfY291bnQiLCJSZV9Db3JlIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLFlBQUFDLEdBQUFDLEtBQUFBLEdDMEJxQixPQUFnQixLQUFoQiwrQkFBZ0I7QUFBQTtBQUFBLElBQUFDLFFBQ3ZCO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFFBQ0E7QUFBQSxJQUFBQyxRQUNBO0FBQUEsSUFBQUMsUUFDQTtBQUFBLElBQUFDLFNBQ0M7QUFBQSxJQUFBQyxVQUFnQjtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFFBQUE7QUFB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR6Qy9CIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzQwNjMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9wYXJzZV9idWZmZXIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCJ0eXBlIHQgPVxuICB7IHN0ciA6IHN0cmluZ1xuICA7IG11dGFibGUgcG9zIDogaW50XG4gIH1cblxuZXhjZXB0aW9uIFBhcnNlX2Vycm9yXG5cbmxldCBjcmVhdGUgc3RyID0geyBzdHI7IHBvcyA9IDAgfVxubGV0IHVuZ2V0IHQgPSB0LnBvcyA8LSB0LnBvcyAtIDFcbmxldCBqdW5rIHQgPSB0LnBvcyA8LSB0LnBvcyArIDFcbmxldCBlb3MgdCA9IHQucG9zID0gU3RyaW5nLmxlbmd0aCB0LnN0clxubGV0IHRlc3QgdCBjID0gKG5vdCAoZW9zIHQpKSAmJiB0LnN0ci5bdC5wb3NdID0gY1xuXG5sZXQgdGVzdDIgdCBjIGMnID1cbiAgdC5wb3MgKyAxIDwgU3RyaW5nLmxlbmd0aCB0LnN0ciAmJiB0LnN0ci5bdC5wb3NdID0gYyAmJiB0LnN0ci5bdC5wb3MgKyAxXSA9IGMnXG47O1xuXG5sZXQgYWNjZXB0IHQgYyA9XG4gIGxldCByID0gdGVzdCB0IGMgaW5cbiAgaWYgciB0aGVuIHQucG9zIDwtIHQucG9zICsgMTtcbiAgclxuOztcblxubGV0IGdldCB0ID1cbiAgbGV0IHIgPSB0LnN0ci5bdC5wb3NdIGluXG4gIHQucG9zIDwtIHQucG9zICsgMTtcbiAgclxuOztcblxubGV0IGFjY2VwdF9zIHQgcycgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzJyBpblxuICB0cnlcbiAgICBmb3IgaiA9IDAgdG8gbGVuIC0gMSBkb1xuICAgICAgKCogQ1Itc29tZWRheSByZ3JpbmJlcmc6IHN0b3AgcmVseWluZyBvbiBib3VuZCBjaGVja3MgKilcbiAgICAgIHRyeSBpZiBzJy5bal0gPD4gdC5zdHIuW3QucG9zICsgal0gdGhlbiByYWlzZV9ub3RyYWNlIEV4aXQgd2l0aFxuICAgICAgfCBfIC0+IHJhaXNlX25vdHJhY2UgRXhpdFxuICAgIGRvbmU7XG4gICAgdC5wb3MgPC0gdC5wb3MgKyBsZW47XG4gICAgdHJ1ZVxuICB3aXRoXG4gIHwgRXhpdCAtPiBmYWxzZVxuOztcblxubGV0IHJlYyBpbnRlZ2VyJyB0IGkgPVxuICBpZiBlb3MgdFxuICB0aGVuIFNvbWUgaVxuICBlbHNlIChcbiAgICBtYXRjaCBnZXQgdCB3aXRoXG4gICAgfCAnMCcgLi4gJzknIGFzIGQgLT5cbiAgICAgIGxldCBpJyA9ICgxMCAqIGkpICsgKENoYXIuY29kZSBkIC0gQ2hhci5jb2RlICcwJykgaW5cbiAgICAgIGlmIGknIDwgaSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgaW50ZWdlcicgdCBpJ1xuICAgIHwgXyAtPlxuICAgICAgdW5nZXQgdDtcbiAgICAgIFNvbWUgaSlcbjs7XG5cbmxldCBpbnRlZ2VyIHQgPVxuICBpZiBlb3MgdFxuICB0aGVuIE5vbmVcbiAgZWxzZSAoXG4gICAgbWF0Y2ggZ2V0IHQgd2l0aFxuICAgIHwgJzAnIC4uICc5JyBhcyBkIC0+IGludGVnZXInIHQgKENoYXIuY29kZSBkIC0gQ2hhci5jb2RlICcwJylcbiAgICB8IF8gLT5cbiAgICAgIHVuZ2V0IHQ7XG4gICAgICBOb25lKVxuOztcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsIlN0ZGxpYiIsIlBhcnNlX2Vycm9yIiwiY3JlYXRlIiwic3RyIiwidW5nZXQiLCJ0IiwianVuayIsImVvcyIsInRlc3QiLCJjIiwidGVzdDIiLCJhY2NlcHQiLCJyIiwiZ2V0IiwiYWNjZXB0X3MiLCJzIiwibGVuIiwiaiIsImV4biIsImludGVnZXIiLCJkIiwiaSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQztBQUFBQSxNQUFBO0FBQUEsWUFBQUMsT0FBQUMsS0NPaUIsbUJBQWdCO0FBQUEsWUFBQUMsTUFBQUMsR0FDbkIsOEJBQWtCO0FBQUEsWUFBQUMsS0FBQUQsR0FDbkIsOEJBQWtCO0FBQUEsWUFBQUUsSUFBQUYsR0FDbkIsb0RBQTJCO0FBQUEsWUFBQUcsS0FBQUgsR0FBQUk7QUFBQUEsUUFBQSxJQUNuQixnQkFBTyxJQUFLO0FBQUEsSUFBTDtBQUFBLEdBQXNCO0FBQUEsWUFBQUMsTUFBQUwsR0FBQUksS0FBQUE7QUFBQUEsUUFBQSxJQUcvQztBQUFBO0FBQUE7QUFBQSxVQUFtQztBQUFBLFVBQWEsSUFBUTtBQUFBO0FBQUEsYUFBeEQ7QUFBQTtBQUFBLEdBQThFO0FBQUEsWUFBQUUsT0FBQU4sR0FBQUk7QUFBQUEsUUFBQUcsSUFJdEU7QUFBQSxJQUNSLE1BQVU7QUFBQSxJQUNWO0FBQUEsR0FBQztBQUFBLFlBQUFDLElBQUFSO0FBQUFBLFFBQUFPLElBSU87QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLEdBQUM7QUFBQSxZQUFBRSxTQUFBVCxHQUFBVTtBQUFBQSxRQUFBQyxNQUlEO0FBQUEsSUFDQTtBQUFBO0FBQUE7QUFBQSxVQUFBQyxJQUFBO0FBQUE7QUFBQSxPQUdJO0FBQUEsZ0JBQWlCO0FBQUEsUUFBVixnQ0FBaUM7QUFBQTtBQUFBLGFBQUFDLEtEbEM5QztBQUFBLGVDa0NNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUdGO0FBQUE7QUFBQTtBQUFBLFVBQUFBO0FBQUFBLFNBQUFBLE1EckNKO0FBQUEsMkJDd0NZO0FBQUEsS0R4Q1o7QUFBQTtBQUFBLEdDd0NpQjtBQUFBLFlBQUFDLFFBQUFkO0FBQUFBLElBa0JaLFdBQ0U7QUFBQSxRQUFBZSxNQUVHO0FBQUEsSUFBSyx1QkFHVCxVQUFPO0FBQUEsUUFBQUMsTUFGWSxjQUFBQSxJQUFBO0FBQUE7QUFBQSxLQWxCcEIsV0FDRTtBQUFBLFNBQUFELElBRUc7QUFBQSxLQUFLLHFCQU1ULFVBQU87QUFBQSxTQUFBQyxNQUpQO0FBQUEsS0FDQSxZQUFlO0FBQUEsS0FBZjtBQUFBO0FBQUEsR0FlSztBQUFBLEdEakVYIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzQxNjQsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9yZXBsYWNlLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwibGV0IHJlcGxhY2UgPyhwb3MgPSAwKSA/bGVuID8oYWxsID0gdHJ1ZSkgcmUgfmYgcyA9XG4gIGlmIHBvcyA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlJlLnJlcGxhY2VcIjtcbiAgbGV0IGxpbWl0ID1cbiAgICBtYXRjaCBsZW4gd2l0aFxuICAgIHwgTm9uZSAtPiBTdHJpbmcubGVuZ3RoIHNcbiAgICB8IFNvbWUgbCAtPlxuICAgICAgaWYgbCA8IDAgfHwgcG9zICsgbCA+IFN0cmluZy5sZW5ndGggcyB0aGVuIGludmFsaWRfYXJnIFwiUmUucmVwbGFjZVwiO1xuICAgICAgcG9zICsgbFxuICBpblxuICAoKiBidWZmZXIgaW50byB3aGljaCB3ZSB3cml0ZSB0aGUgcmVzdWx0ICopXG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICgqIGl0ZXJhdGUgb24gbWF0Y2hlZCBzdWJzdHJpbmdzLiAqKVxuICBsZXQgcmVjIGl0ZXIgcG9zIG9uX21hdGNoID1cbiAgICBpZiBwb3MgPD0gbGltaXRcbiAgICB0aGVuIChcbiAgICAgIG1hdGNoXG4gICAgICAgIENvbXBpbGUubWF0Y2hfc3RyIH5ncm91cHM6dHJ1ZSB+cGFydGlhbDpmYWxzZSByZSBzIH5wb3MgfmxlbjoobGltaXQgLSBwb3MpXG4gICAgICB3aXRoXG4gICAgICB8IE1hdGNoIHN1YnN0ciAtPlxuICAgICAgICBsZXQgcDEgPSBHcm91cC5zdGFydF9vZmZzZXQgc3Vic3RyIDAgfD4gR3JvdXAuT2Zmc2V0LmdldF9ub19jaGVjayBpblxuICAgICAgICBsZXQgcDIgPSBHcm91cC5zdG9wX29mZnNldCBzdWJzdHIgMCB8PiBHcm91cC5PZmZzZXQuZ2V0X25vX2NoZWNrIGluXG4gICAgICAgIGlmIHBvcyA9IHAxICYmIHAxID0gcDIgJiYgb25fbWF0Y2hcbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgKCogaWYgd2UgbWF0Y2hlZCBhbiBlbXB0eSBzdHJpbmcgcmlnaHQgYWZ0ZXIgYSBtYXRjaCxcbiAgICAgICAgICAgICB3ZSBtdXN0IG1hbnVhbGx5IGFkdmFuY2UgYnkgMSAqKVxuICAgICAgICAgIGlmIHAyIDwgbGltaXQgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuW3AyXTtcbiAgICAgICAgICBpdGVyIChwMiArIDEpIGZhbHNlKVxuICAgICAgICBlbHNlIChcbiAgICAgICAgICAoKiBhZGQgc3RyaW5nIGJldHdlZW4gcHJldmlvdXMgbWF0Y2ggYW5kIGN1cnJlbnQgbWF0Y2ggKilcbiAgICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBidWYgcyBwb3MgKHAxIC0gcG9zKTtcbiAgICAgICAgICAoKiB3aGF0IHNob3VsZCB3ZSByZXBsYWNlIHRoZSBtYXRjaGVkIGdyb3VwIHdpdGg/ICopXG4gICAgICAgICAgbGV0IHJlcGxhY2luZyA9IGYgc3Vic3RyIGluXG4gICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHJlcGxhY2luZztcbiAgICAgICAgICBpZiBhbGxcbiAgICAgICAgICB0aGVuXG4gICAgICAgICAgICAoKiBpZiB3ZSBtYXRjaGVkIGFuIGVtcHR5IHN0cmluZywgd2UgbXVzdCBtYW51YWxseSBhZHZhbmNlIGJ5IDEgKilcbiAgICAgICAgICAgIGl0ZXJcbiAgICAgICAgICAgICAgKGlmIHAxID0gcDJcbiAgICAgICAgICAgICAgIHRoZW4gKFxuICAgICAgICAgICAgICAgICAoKiBhIG5vbiBjaGFyIGNvdWxkIGJlIHBhc3QgdGhlIGVuZCBvZiBzdHJpbmcuIGUuZy4gJCAqKVxuICAgICAgICAgICAgICAgICBpZiBwMiA8IGxpbWl0IHRoZW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBzLltwMl07XG4gICAgICAgICAgICAgICAgIHAyICsgMSlcbiAgICAgICAgICAgICAgIGVsc2UgcDIpXG4gICAgICAgICAgICAgIChwMSA8PiBwMilcbiAgICAgICAgICBlbHNlIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGJ1ZiBzIHAyIChsaW1pdCAtIHAyKSlcbiAgICAgIHwgUnVubmluZyBfIC0+ICgpXG4gICAgICB8IEZhaWxlZCAtPiBCdWZmZXIuYWRkX3N1YnN0cmluZyBidWYgcyBwb3MgKGxpbWl0IC0gcG9zKSlcbiAgaW5cbiAgaXRlciBwb3MgZmFsc2U7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcbjs7XG5cbmxldCByZXBsYWNlX3N0cmluZyA/cG9zID9sZW4gP2FsbCByZSB+YnkgcyA9IHJlcGxhY2UgP3BvcyA/bGVuID9hbGwgcmUgcyB+ZjooZnVuIF8gLT4gYnkpXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJnbG9iYWxfZGF0YSIsIlJlX0NvbXBpbGUiLCJTdGRsaWJfQnVmZmVyIiwiUmVfR3JvdXAiLCJTdGRsaWIiLCJyZXBsYWNlIiwibGVuIiwib3B0IiwicmUiLCJzIiwicG9zIiwiYWxsIiwiY3N0X1JlX3JlcGxhY2UiLCJsIiwibGltaXQiLCJidWYiLCJvbl9tYXRjaCIsIm1hdGNoIiwic3Vic3RyIiwicDEiLCJwMiIsInJlcGxhY2luZyIsInJlcGxhY2Vfc3RyaW5nIiwiYnkiLCJwYXJhbSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsUUFBQSxHQUFBQyxLQUFBQyxLQUFBQyxJQUFBVixHQUFBVztBQUFBQTtBQUFBQSxLQUFBQyxNQ0FZO0FBQUEsS0FBQUMsTUFBQTtBQUFBLEtBQUFDLGlCREFaO0FBQUEsSUNDRSxZQUFnQjtBQUFBLElBQ2hCO0FBQUE7QUFBQSxNQUFBQyxJQUFBO0FBQUEsVUFJSTtBQUFBO0FBQUEsV0FBMkM7QUFBQSxTQUFBQyxRQUMzQztBQUFBO0FBQUE7QUFBQSxTQUFBQSxRQUhRO0FBQUE7QUFBQSxLQUFBQyxNQU1GLDRCQUFWO0FBQUEsS0FBQUwsUUFzQ0E7QUFBQSxLQUFBTSxXQUFBO0FBQUE7QUFBQSxLQW5DRTtBQUFBO0FBQUEsT0FBQUMsUUFHSTtBQUFBLE1BQTBFO0FBQUEsT0E4QmhFO0FBQUE7QUFBQTtBQUFBLFFBQUFDLFNBOUJnRTtBQUFBLFlBR2pFO0FBQUEsUUFBQUMsS0FBQTtBQUFBLFlBQ0E7QUFBQSxRQUFBQyxLQUFBO0FBQUEsT0FDVDtBQUFBLFFBQ0s7QUFBQSxpQkFHb0M7QUFBQSxTQUFwQjtBQUFBO0FBQUEsWUFBQVYsUUFDbkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BR0E7QUFBQSxXQUFBVyxZQUVnQjtBQUFBLE9BQ2hCO0FBQUEsT0FBK0I7QUFBQSxZQUFBTCxhQUk3QjtBQUFBO0FBQUEsUUFFUTtBQUFBLGlCQUVvQztBQUFBLFNBQXBCO0FBQUE7QUFBQSxRQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BR0Y7QUFBQTtBQUFBO0FBQUEsS0FJQyx1Q0FDSztBQUFBO0FBQUE7QUFBQSxZQUFBTSxlQUFBWixLQUFBSixLQUFBSyxLQUFBSCxJQUFBZSxJQUFBZDtBQUFBQSxJQUd3QiwyQ0FBQWUsT0FBeUMsVUFBRSxLQUFDO0FBQUE7QUFBQSxHRHBEekYiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNDI1NiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJyZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL3JlL3Bvc2l4X2NsYXNzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwibW9kdWxlIFJlID0gQ29yZVxuXG5sZXQgb2ZfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgXCJhbHBoYVwiIC0+IFJlLmFscGhhXG4gIHwgXCJhbG51bVwiIC0+IFJlLmFsbnVtXG4gIHwgXCJhc2NpaVwiIC0+IFJlLmFzY2lpXG4gIHwgXCJibGFua1wiIC0+IFJlLmJsYW5rXG4gIHwgXCJjbnRybFwiIC0+IFJlLmNudHJsXG4gIHwgXCJkaWdpdFwiIC0+IFJlLmRpZ2l0XG4gIHwgXCJsb3dlclwiIC0+IFJlLmxvd2VyXG4gIHwgXCJwcmludFwiIC0+IFJlLnByaW50XG4gIHwgXCJzcGFjZVwiIC0+IFJlLnNwYWNlXG4gIHwgXCJ1cHBlclwiIC0+IFJlLnVwcGVyXG4gIHwgXCJ3b3JkXCIgLT4gUmUud29yZGNcbiAgfCBcInB1bmN0XCIgLT4gUmUucHVuY3RcbiAgfCBcImdyYXBoXCIgLT4gUmUuZ3JhcGhcbiAgfCBcInhkaWdpdFwiIC0+IFJlLnhkaWdpdFxuICB8IGNsYXNzXyAtPiBpbnZhbGlkX2FyZyAoXCJJbnZhbGlkIHBjcmUgY2xhc3M6IFwiIF4gY2xhc3NfKVxuOztcblxubGV0IG5hbWVzID1cbiAgWyBcImFscGhhXCJcbiAgOyBcImFsbnVtXCJcbiAgOyBcImFzY2lpXCJcbiAgOyBcImJsYW5rXCJcbiAgOyBcImNudHJsXCJcbiAgOyBcImRpZ2l0XCJcbiAgOyBcImxvd2VyXCJcbiAgOyBcInByaW50XCJcbiAgOyBcInNwYWNlXCJcbiAgOyBcInVwcGVyXCJcbiAgOyBcIndvcmRcIlxuICA7IFwicHVuY3RcIlxuICA7IFwiZ3JhcGhcIlxuICA7IFwieGRpZ2l0XCJcbiAgXVxuOztcblxubGV0IHBhcnNlIGJ1ZiA9XG4gIGxldCBhY2NlcHQgPSBQYXJzZV9idWZmZXIuYWNjZXB0IGJ1ZiBpblxuICBsZXQgYWNjZXB0X3MgPSBQYXJzZV9idWZmZXIuYWNjZXB0X3MgYnVmIGluXG4gIG1hdGNoIGFjY2VwdCAnOicgd2l0aFxuICB8IGZhbHNlIC0+IE5vbmVcbiAgfCB0cnVlIC0+XG4gICAgbGV0IGNvbXBsID0gYWNjZXB0ICdeJyBpblxuICAgIGxldCBjbHMgPVxuICAgICAgdHJ5IExpc3QuZmluZCBhY2NlcHRfcyBuYW1lcyB3aXRoXG4gICAgICB8IE5vdF9mb3VuZCAtPiByYWlzZSBQYXJzZV9idWZmZXIuUGFyc2VfZXJyb3JcbiAgICBpblxuICAgIGlmIG5vdCAoYWNjZXB0X3MgXCI6XVwiKSB0aGVuIHJhaXNlIFBhcnNlX2J1ZmZlci5QYXJzZV9lcnJvcjtcbiAgICBsZXQgcG9zaXhfY2xhc3MgPSBvZl9uYW1lIGNscyBpblxuICAgIFNvbWUgKGlmIGNvbXBsIHRoZW4gUmUuY29tcGwgWyBwb3NpeF9jbGFzcyBdIGVsc2UgcG9zaXhfY2xhc3MpXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2xpc3Rfb2ZfanNfYXJyYXkiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImdsb2JhbF9kYXRhIiwiY3N0X2FsbnVtIiwiY3N0X2FscGhhIiwiY3N0X2FzY2lpIiwiY3N0X2JsYW5rIiwiY3N0X2NudHJsIiwiY3N0X2RpZ2l0IiwiY3N0X2dyYXBoIiwiY3N0X2xvd2VyIiwiY3N0X3ByaW50IiwiY3N0X3B1bmN0IiwiY3N0X3NwYWNlIiwiY3N0X3VwcGVyIiwiY3N0X3dvcmQiLCJjc3RfeGRpZ2l0IiwibmFtZXMiLCJSZV9QYXJzZV9idWZmZXIiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYiIsIlJlX0NvcmUiLCJvZl9uYW1lIiwiY2xhc3MkIiwic3dpdGNoJCIsInBhcnNlIiwiYnVmIiwiYWNjZXB0X3MiLCJjb21wbCIsImNscyIsImV4biIsInBvc2l4X2NsYXNzIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxZQUFBQyxRQUFBQztBQUFBQSxRQUFBQyxVQ0VjO0FBQUE7QUFBQSxzQkFPQztBQUFBLEtBUEQseUJBUUM7QUFBQSxLQVJELHlCQVlDO0FBQUEsS0FaRCx5QkFTQztBQUFBLEtBVEQseUJBVUM7QUFBQSxLQVZELHdCQVdBO0FBQUEsS0FYQSwwQkFjRTtBQUFBO0FBQUE7QUFBQSxLQWRGLHlCQUVDO0FBQUEsS0FGRCx5QkFDQztBQUFBLEtBREQseUJBR0M7QUFBQSxLQUhELHlCQUlDO0FBQUEsS0FKRCx5QkFLQztBQUFBLEtBTEQseUJBTUM7QUFBQSxLQU5ELHlCQWFDO0FBQUE7QUFBQSxZQUVXO0FBQUEsSUFBaUM7QUFBQTtBQUFBLFlBQUFDLE1BQUFDO0FBQUFBLFFBQUEsSUFzQnpELHdCQUNBO0FBQUEsYUFBQUMsU0FBQSxHQUFlO0FBQUEsSUFERixpQkFHRjtBQUFBLFFBQUFDLFFBSEU7QUFBQSxJQU1YLFFBQUFDLE1BQ007QUFBQSxVQUFBQztBQUFBQSxTQUFBQSxNRDlDVjtBQUFBO0FBQUEsTUMrQ3FCO0FBQUEsS0QvQ3JCO0FBQUE7QUFBQSxJQ3dDaUI7QUFBQSxLQVNlO0FBQUE7QUFBQSxLQUFBQyxjQUNWO0FBQUEsU0FDbEIsUUFBb0I7QUFBQSxJQUFwQjtBQUFBLEdBQThEO0FBQUEsR0RuRGxFIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzQzNTUsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9yZS9wZXJsLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCpcbiAgIFJFIC0gQSByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeVxuXG4gICBDb3B5cmlnaHQgKEMpIDIwMDEgSmVyb21lIFZvdWlsbG9uXG4gICBlbWFpbDogSmVyb21lLlZvdWlsbG9uQHBwcy5qdXNzaWV1LmZyXG5cbiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGhcbiAgIGxpbmtpbmcgZXhjZXB0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdFxuICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQVxuKilcblxubW9kdWxlIFJlID0gQ29yZVxuXG5leGNlcHRpb24gUGFyc2VfZXJyb3IgPSBQYXJzZV9idWZmZXIuUGFyc2VfZXJyb3JcbmV4Y2VwdGlvbiBOb3Rfc3VwcG9ydGVkXG5cbmxldCBhY2NfZGlnaXRzID1cbiAgbGV0IHJlYyBsb29wIGJhc2UgZGlnaXRzIGFjYyBpID1cbiAgICBtYXRjaCBkaWdpdHMgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCBkIDo6IGRpZ2l0cyAtPlxuICAgICAgbGV0IGFjYyA9IGFjYyArIChkICogaSkgaW5cbiAgICAgIGxldCBpID0gaSAqIGkgaW5cbiAgICAgIGxvb3AgYmFzZSBkaWdpdHMgYWNjIGlcbiAgaW5cbiAgZnVuIH5iYXNlIH5kaWdpdHMgLT4gbG9vcCBiYXNlIGRpZ2l0cyAwIDFcbjs7XG5cbmxldCBjaGFyX29mX2ludCB4ID1cbiAgbWF0Y2ggY2hhcl9vZl9pbnQgeCB3aXRoXG4gIHwgeCAtPiB4XG4gIHwgZXhjZXB0aW9uIF8gLT4gcmFpc2UgUGFyc2VfZXJyb3Jcbjs7XG5cbnR5cGUgZWxlbSA9XG4gIHwgQ2hhciBvZiBjaGFyXG4gIHwgU2V0IG9mIEFzdC50XG5cbmxldCBjaGFyX2IgPSBDaGFyICdcXDAwOCdcbmxldCBjaGFyX25ld2xpbmUgPSBDaGFyICdcXG4nXG5sZXQgY2hhcl9jciA9IENoYXIgJ1xccidcbmxldCBjaGFyX3RhYiA9IENoYXIgJ1xcdCdcbmxldCB3b3JkX2NoYXIgPSBbIFJlLmFsbnVtOyBSZS5jaGFyICdfJyBdXG5sZXQgd29yZCA9IFNldCAoUmUuYWx0IHdvcmRfY2hhcilcbmxldCBub3Rfd29yZCA9IFNldCAoUmUuYWx0IHdvcmRfY2hhcilcbmxldCBzcGFjZSA9IFNldCBSZS5zcGFjZVxubGV0IG5vdF9zcGFjZSA9IFNldCAoUmUuY29tcGwgWyBSZS5zcGFjZSBdKVxubGV0IGRpZ2l0ID0gU2V0IFJlLmRpZ2l0XG5sZXQgbm90X2RpZ2l0ID0gU2V0IChSZS5jb21wbCBbIFJlLmRpZ2l0IF0pXG5cbmxldCBwYXJzZSB+bXVsdGlsaW5lIH5kb2xsYXJfZW5kb25seSB+ZG90YWxsIH51bmdyZWVkeSBzID1cbiAgbGV0IGJ1ZiA9IFBhcnNlX2J1ZmZlci5jcmVhdGUgcyBpblxuICBsZXQgYWNjZXB0ID0gUGFyc2VfYnVmZmVyLmFjY2VwdCBidWYgaW5cbiAgbGV0IGVvcyAoKSA9IFBhcnNlX2J1ZmZlci5lb3MgYnVmIGluXG4gIGxldCB0ZXN0IGMgPSBQYXJzZV9idWZmZXIudGVzdCBidWYgYyBpblxuICBsZXQgdW5nZXQgKCkgPSBQYXJzZV9idWZmZXIudW5nZXQgYnVmIGluXG4gIGxldCBnZXQgKCkgPSBQYXJzZV9idWZmZXIuZ2V0IGJ1ZiBpblxuICBsZXQgZ3JlZWR5X21vZCByID1cbiAgICBsZXQgZ3IgPSBhY2NlcHQgJz8nIGluXG4gICAgbGV0IGdyID0gaWYgdW5ncmVlZHkgdGhlbiBub3QgZ3IgZWxzZSBnciBpblxuICAgIGlmIGdyIHRoZW4gUmUubm9uX2dyZWVkeSByIGVsc2UgUmUuZ3JlZWR5IHJcbiAgaW5cbiAgbGV0IHJlYyByZWdleHAgKCkgPSByZWdleHAnIFsgYnJhbmNoICgpIF1cbiAgYW5kIHJlZ2V4cCcgbGVmdCA9XG4gICAgaWYgYWNjZXB0ICd8JyB0aGVuIHJlZ2V4cCcgKGJyYW5jaCAoKSA6OiBsZWZ0KSBlbHNlIFJlLmFsdCAoTGlzdC5yZXYgbGVmdClcbiAgYW5kIGJyYW5jaCAoKSA9IGJyYW5jaCcgW11cbiAgYW5kIGJyYW5jaCcgbGVmdCA9XG4gICAgaWYgZW9zICgpIHx8IHRlc3QgJ3wnIHx8IHRlc3QgJyknXG4gICAgdGhlbiBSZS5zZXEgKExpc3QucmV2IGxlZnQpXG4gICAgZWxzZSBicmFuY2gnIChwaWVjZSAoKSA6OiBsZWZ0KVxuICBhbmQgaW5fYnJhY2UgfmYgfmluaXQgPVxuICAgIG1hdGNoIGFjY2VwdCAneycgd2l0aFxuICAgIHwgZmFsc2UgLT4gTm9uZVxuICAgIHwgdHJ1ZSAtPlxuICAgICAgbGV0IHJlYyBsb29wIGFjYyA9XG4gICAgICAgIGlmIGFjY2VwdCAnfSdcbiAgICAgICAgdGhlbiBhY2NcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgbGV0IGFjYyA9IGYgYWNjIGluXG4gICAgICAgICAgbG9vcCBhY2MpXG4gICAgICBpblxuICAgICAgU29tZSAobG9vcCBpbml0KVxuICBhbmQgcGllY2UgKCkgPVxuICAgIGxldCByID0gYXRvbSAoKSBpblxuICAgIGlmIGFjY2VwdCAnKidcbiAgICB0aGVuIGdyZWVkeV9tb2QgKFJlLnJlcCByKVxuICAgIGVsc2UgaWYgYWNjZXB0ICcrJ1xuICAgIHRoZW4gZ3JlZWR5X21vZCAoUmUucmVwMSByKVxuICAgIGVsc2UgaWYgYWNjZXB0ICc/J1xuICAgIHRoZW4gZ3JlZWR5X21vZCAoUmUub3B0IHIpXG4gICAgZWxzZSBpZiBhY2NlcHQgJ3snXG4gICAgdGhlbiAoXG4gICAgICBtYXRjaCBQYXJzZV9idWZmZXIuaW50ZWdlciBidWYgd2l0aFxuICAgICAgfCBTb21lIGkgLT5cbiAgICAgICAgbGV0IGogPSBpZiBhY2NlcHQgJywnIHRoZW4gUGFyc2VfYnVmZmVyLmludGVnZXIgYnVmIGVsc2UgU29tZSBpIGluXG4gICAgICAgIGlmIG5vdCAoYWNjZXB0ICd9JykgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgICAgKG1hdGNoIGogd2l0aFxuICAgICAgICAgfCBTb21lIGogd2hlbiBqIDwgaSAtPiByYWlzZSBQYXJzZV9lcnJvclxuICAgICAgICAgfCBfIC0+ICgpKTtcbiAgICAgICAgZ3JlZWR5X21vZCAoUmUucmVwbiByIGkgailcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICB1bmdldCAoKTtcbiAgICAgICAgcilcbiAgICBlbHNlIHJcbiAgYW5kIGF0b20gKCkgPVxuICAgIGlmIGFjY2VwdCAnLidcbiAgICB0aGVuIGlmIGRvdGFsbCB0aGVuIFJlLmFueSBlbHNlIFJlLm5vdG5sXG4gICAgZWxzZSBpZiBhY2NlcHQgJygnXG4gICAgdGhlblxuICAgICAgaWYgYWNjZXB0ICc/J1xuICAgICAgdGhlblxuICAgICAgICBpZiBhY2NlcHQgJzonXG4gICAgICAgIHRoZW4gKFxuICAgICAgICAgIGxldCByID0gcmVnZXhwICgpIGluXG4gICAgICAgICAgaWYgbm90IChhY2NlcHQgJyknKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgICAgIHIpXG4gICAgICAgIGVsc2UgaWYgYWNjZXB0ICcjJ1xuICAgICAgICB0aGVuIGNvbW1lbnQgKClcbiAgICAgICAgZWxzZSBpZiBhY2NlcHQgJzwnXG4gICAgICAgIHRoZW4gKFxuICAgICAgICAgIGxldCBuYW1lID0gbmFtZSAoKSBpblxuICAgICAgICAgIGxldCByID0gcmVnZXhwICgpIGluXG4gICAgICAgICAgaWYgbm90IChhY2NlcHQgJyknKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgICAgIFJlLmdyb3VwIH5uYW1lIHIpXG4gICAgICAgIGVsc2UgcmFpc2UgUGFyc2VfZXJyb3JcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgciA9IHJlZ2V4cCAoKSBpblxuICAgICAgICBpZiBub3QgKGFjY2VwdCAnKScpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICAgIFJlLmdyb3VwIHIpXG4gICAgZWxzZSBpZiBhY2NlcHQgJ14nXG4gICAgdGhlbiBpZiBtdWx0aWxpbmUgdGhlbiBSZS5ib2wgZWxzZSBSZS5ib3NcbiAgICBlbHNlIGlmIGFjY2VwdCAnJCdcbiAgICB0aGVuIGlmIG11bHRpbGluZSB0aGVuIFJlLmVvbCBlbHNlIGlmIGRvbGxhcl9lbmRvbmx5IHRoZW4gUmUubGVvbCBlbHNlIFJlLmVvc1xuICAgIGVsc2UgaWYgYWNjZXB0ICdbJ1xuICAgIHRoZW4gaWYgYWNjZXB0ICdeJyB0aGVuIFJlLmNvbXBsIChicmFja2V0IFtdKSBlbHNlIFJlLmFsdCAoYnJhY2tldCBbXSlcbiAgICBlbHNlIGlmIGFjY2VwdCAnXFxcXCdcbiAgICB0aGVuIChcbiAgICAgICgqIFhYWFxuICAgICAgICAgLSBCYWNrLXJlZmVyZW5jZXNcbiAgICAgICAgIC0gXFxjeCAoY29udHJvbC14KSwgXFxkZGRcbiAgICAgICopXG4gICAgICBpZiBlb3MgKCkgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgIG1hdGNoIGdldCAoKSB3aXRoXG4gICAgICB8ICd3JyAtPiBSZS5hbHQgWyBSZS5hbG51bTsgUmUuY2hhciAnXycgXVxuICAgICAgfCAnVycgLT4gUmUuY29tcGwgWyBSZS5hbG51bTsgUmUuY2hhciAnXycgXVxuICAgICAgfCAncycgLT4gUmUuc3BhY2VcbiAgICAgIHwgJ1MnIC0+IFJlLmNvbXBsIFsgUmUuc3BhY2UgXVxuICAgICAgfCAnZCcgLT4gUmUuZGlnaXRcbiAgICAgIHwgJ0QnIC0+IFJlLmNvbXBsIFsgUmUuZGlnaXQgXVxuICAgICAgfCAnYicgLT4gUmUuYWx0IFsgUmUuYm93OyBSZS5lb3cgXVxuICAgICAgfCAnQicgLT4gUmUubm90X2JvdW5kYXJ5XG4gICAgICB8ICdBJyAtPiBSZS5ib3NcbiAgICAgIHwgJ1onIC0+IFJlLmxlb2xcbiAgICAgIHwgJ3onIC0+IFJlLmVvc1xuICAgICAgfCAnRycgLT4gUmUuc3RhcnRcbiAgICAgIHwgJ2UnIC0+IFJlLmNoYXIgJ1xceDFiJ1xuICAgICAgfCAnZicgLT4gUmUuY2hhciAnXFx4MGMnXG4gICAgICB8ICduJyAtPiBSZS5jaGFyICdcXG4nXG4gICAgICB8ICdyJyAtPiBSZS5jaGFyICdcXHInXG4gICAgICB8ICd0JyAtPiBSZS5jaGFyICdcXHQnXG4gICAgICB8ICdRJyAtPiBxdW90ZSAoQnVmZmVyLmNyZWF0ZSAxMilcbiAgICAgIHwgJ0UnIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICB8ICd4JyAtPlxuICAgICAgICBsZXQgYzEsIGMyID1cbiAgICAgICAgICBtYXRjaCBpbl9icmFjZSB+aW5pdDpbXSB+ZjooZnVuIGFjYyAtPiBoZXhkaWdpdCAoKSA6OiBhY2MpIHdpdGhcbiAgICAgICAgICB8IFNvbWUgWyBjMTsgYzIgXSAtPiBjMSwgYzJcbiAgICAgICAgICB8IFNvbWUgWyBjMiBdIC0+IDAsIGMyXG4gICAgICAgICAgfCBTb21lIF8gLT4gcmFpc2UgUGFyc2VfZXJyb3JcbiAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgIGxldCBjMSA9IGhleGRpZ2l0ICgpIGluXG4gICAgICAgICAgICBsZXQgYzIgPSBoZXhkaWdpdCAoKSBpblxuICAgICAgICAgICAgYzEsIGMyXG4gICAgICAgIGluXG4gICAgICAgIGxldCBjb2RlID0gKGMxICogMTYpICsgYzIgaW5cbiAgICAgICAgUmUuY2hhciAoY2hhcl9vZl9pbnQgY29kZSlcbiAgICAgIHwgJ28nIC0+XG4gICAgICAgIChtYXRjaFxuICAgICAgICAgICBpbl9icmFjZSB+aW5pdDpbXSB+ZjooZnVuIGFjYyAtPlxuICAgICAgICAgICAgIG1hdGNoIG1heWJlX29jdGFsZGlnaXQgKCkgd2l0aFxuICAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBQYXJzZV9lcnJvclxuICAgICAgICAgICAgIHwgU29tZSBwIC0+IHAgOjogYWNjKVxuICAgICAgICAgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICAgICB8IFNvbWUgZGlnaXRzIC0+IFJlLmNoYXIgKGNoYXJfb2ZfaW50IChhY2NfZGlnaXRzIH5iYXNlOjggfmRpZ2l0cykpKVxuICAgICAgfCAnYScgLi4gJ3onIHwgJ0EnIC4uICdaJyAtPiByYWlzZSBQYXJzZV9lcnJvclxuICAgICAgfCAnMCcgLi4gJzcnIGFzIG4xIC0+XG4gICAgICAgIGxldCBuMiA9IG1heWJlX29jdGFsZGlnaXQgKCkgaW5cbiAgICAgICAgbGV0IG4zID0gbWF5YmVfb2N0YWxkaWdpdCAoKSBpblxuICAgICAgICAobWF0Y2ggbjIsIG4zIHdpdGhcbiAgICAgICAgIHwgU29tZSBuMiwgU29tZSBuMyAtPlxuICAgICAgICAgICBsZXQgbjEgPSBDaGFyLmNvZGUgbjEgLSBDaGFyLmNvZGUgJzAnIGluXG4gICAgICAgICAgIFJlLmNoYXIgKGNoYXJfb2ZfaW50ICgobjEgKiAoOCAqIDgpKSArIChuMiAqIDgpICsgbjMpKVxuICAgICAgICAgfCBfLCBfIC0+IHJhaXNlIE5vdF9zdXBwb3J0ZWQpXG4gICAgICB8ICc4JyAuLiAnOScgLT4gcmFpc2UgTm90X3N1cHBvcnRlZFxuICAgICAgfCBjIC0+IFJlLmNoYXIgYylcbiAgICBlbHNlIChcbiAgICAgIGlmIGVvcyAoKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgbWF0Y2ggZ2V0ICgpIHdpdGhcbiAgICAgIHwgJyonIHwgJysnIHwgJz8nIHwgJ3snIHwgJ1xcXFwnIC0+IHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgICB8IGMgLT4gUmUuY2hhciBjKVxuICBhbmQgcXVvdGUgYnVmID1cbiAgICBpZiBhY2NlcHQgJ1xcXFwnXG4gICAgdGhlbiAoXG4gICAgICBpZiBlb3MgKCkgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICAgIG1hdGNoIGdldCAoKSB3aXRoXG4gICAgICB8ICdFJyAtPiBSZS5zdHIgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgICB8IGMgLT5cbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxcXCc7XG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgYztcbiAgICAgICAgcXVvdGUgYnVmKVxuICAgIGVsc2UgKFxuICAgICAgaWYgZW9zICgpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIChnZXQgKCkpO1xuICAgICAgcXVvdGUgYnVmKVxuICBhbmQgaGV4ZGlnaXQgKCkgPVxuICAgIGlmIGVvcyAoKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgIG1hdGNoIGdldCAoKSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIGFzIGQgLT4gQ2hhci5jb2RlIGQgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnYScgLi4gJ2YnIGFzIGQgLT4gQ2hhci5jb2RlIGQgLSBDaGFyLmNvZGUgJ2EnICsgMTBcbiAgICB8ICdBJyAuLiAnRicgYXMgZCAtPiBDaGFyLmNvZGUgZCAtIENoYXIuY29kZSAnQScgKyAxMFxuICAgIHwgXyAtPiByYWlzZSBQYXJzZV9lcnJvclxuICBhbmQgbWF5YmVfb2N0YWxkaWdpdCAoKSA9XG4gICAgaWYgZW9zICgpXG4gICAgdGhlbiBOb25lXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaCBnZXQgKCkgd2l0aFxuICAgICAgfCAnMCcgLi4gJzcnIGFzIGQgLT4gU29tZSAoQ2hhci5jb2RlIGQgLSBDaGFyLmNvZGUgJzAnKVxuICAgICAgfCBfIC0+IE5vbmUpXG4gIGFuZCBuYW1lICgpID1cbiAgICBpZiBlb3MgKClcbiAgICB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaCBnZXQgKCkgd2l0aFxuICAgICAgfCAoJ18nIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicpIGFzIGMgLT5cbiAgICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBiIGM7XG4gICAgICAgIG5hbWUnIGJcbiAgICAgIHwgXyAtPiByYWlzZSBQYXJzZV9lcnJvcilcbiAgYW5kIG5hbWUnIGIgPVxuICAgIGlmIGVvcyAoKVxuICAgIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3JcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGdldCAoKSB3aXRoXG4gICAgICB8ICgnXycgfCAnYScgLi4gJ3onIHwgJ0EnIC4uICdaJyB8ICcwJyAuLiAnOScpIGFzIGMgLT5cbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgYztcbiAgICAgICAgbmFtZScgYlxuICAgICAgfCAnPicgLT4gQnVmZmVyLmNvbnRlbnRzIGJcbiAgICAgIHwgXyAtPiByYWlzZSBQYXJzZV9lcnJvcilcbiAgYW5kIGJyYWNrZXQgcyA9XG4gICAgaWYgcyA8PiBbXSAmJiBhY2NlcHQgJ10nXG4gICAgdGhlbiBzXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaCBjaGFyICgpIHdpdGhcbiAgICAgIHwgU2V0IHN0IC0+IGJyYWNrZXQgKHN0IDo6IHMpXG4gICAgICB8IENoYXIgYyAtPlxuICAgICAgICBpZiBhY2NlcHQgJy0nXG4gICAgICAgIHRoZW5cbiAgICAgICAgICBpZiBhY2NlcHQgJ10nXG4gICAgICAgICAgdGhlbiBSZS5jaGFyIGMgOjogUmUuY2hhciAnLScgOjogc1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJyYWNrZXRcbiAgICAgICAgICAgICAgKG1hdGNoIGNoYXIgKCkgd2l0aFxuICAgICAgICAgICAgICAgfCBDaGFyIGMnIC0+IFJlLnJnIGMgYycgOjogc1xuICAgICAgICAgICAgICAgfCBTZXQgc3QnIC0+IFJlLmNoYXIgYyA6OiBSZS5jaGFyICctJyA6OiBzdCcgOjogcylcbiAgICAgICAgZWxzZSBicmFja2V0IChSZS5jaGFyIGMgOjogcykpXG4gIGFuZCBjaGFyICgpID1cbiAgICBpZiBlb3MgKCkgdGhlbiByYWlzZSBQYXJzZV9lcnJvcjtcbiAgICBsZXQgYyA9IGdldCAoKSBpblxuICAgIGlmIGMgPSAnWydcbiAgICB0aGVuIChcbiAgICAgIGlmIGFjY2VwdCAnPScgdGhlbiByYWlzZSBOb3Rfc3VwcG9ydGVkO1xuICAgICAgbWF0Y2ggUG9zaXhfY2xhc3MucGFyc2UgYnVmIHdpdGhcbiAgICAgIHwgU29tZSBzZXQgLT4gU2V0IHNldFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgIGlmIGFjY2VwdCAnLidcbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgaWYgZW9zICgpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICAgICAgbGV0IGMgPSBnZXQgKCkgaW5cbiAgICAgICAgICBpZiBub3QgKGFjY2VwdCAnLicpIHRoZW4gcmFpc2UgTm90X3N1cHBvcnRlZDtcbiAgICAgICAgICBpZiBub3QgKGFjY2VwdCAnXScpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gICAgICAgICAgQ2hhciBjKVxuICAgICAgICBlbHNlIENoYXIgYylcbiAgICBlbHNlIGlmIGMgPSAnXFxcXCdcbiAgICB0aGVuIChcbiAgICAgIGlmIGVvcyAoKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgICAgbGV0IGMgPSBnZXQgKCkgaW5cbiAgICAgICgqIFhYWFxuICAgICAgICAgXFwxMjcsIC4uLlxuICAgICAgKilcbiAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgfCAnYicgLT4gY2hhcl9iXG4gICAgICB8ICduJyAtPiBjaGFyX25ld2xpbmUgKCpYWFgqKVxuICAgICAgfCAncicgLT4gY2hhcl9jciAoKlhYWCopXG4gICAgICB8ICd0JyAtPiBjaGFyX3RhYiAoKlhYWCopXG4gICAgICB8ICd3JyAtPiB3b3JkXG4gICAgICB8ICdXJyAtPiBub3Rfd29yZFxuICAgICAgfCAncycgLT4gc3BhY2VcbiAgICAgIHwgJ1MnIC0+IG5vdF9zcGFjZVxuICAgICAgfCAnZCcgLT4gZGlnaXRcbiAgICAgIHwgJ0QnIC0+IG5vdF9kaWdpdFxuICAgICAgfCAnYScgLi4gJ3onIHwgJ0EnIC4uICdaJyAtPiByYWlzZSBQYXJzZV9lcnJvclxuICAgICAgfCAnMCcgLi4gJzknIC0+IHJhaXNlIE5vdF9zdXBwb3J0ZWRcbiAgICAgIHwgXyAtPiBDaGFyIGMpXG4gICAgZWxzZSBDaGFyIGNcbiAgYW5kIGNvbW1lbnQgKCkgPVxuICAgIGlmIGVvcyAoKSB0aGVuIHJhaXNlIFBhcnNlX2Vycm9yO1xuICAgIGlmIGFjY2VwdCAnKSdcbiAgICB0aGVuIFJlLmVwc2lsb25cbiAgICBlbHNlIChcbiAgICAgIFBhcnNlX2J1ZmZlci5qdW5rIGJ1ZjtcbiAgICAgIGNvbW1lbnQgKCkpXG4gIGluXG4gIGxldCByZXMgPSByZWdleHAgKCkgaW5cbiAgaWYgbm90IChlb3MgKCkpIHRoZW4gcmFpc2UgUGFyc2VfZXJyb3I7XG4gIHJlc1xuOztcblxudHlwZSBvcHQgPVxuICBbIGBVbmdyZWVkeVxuICB8IGBEb3RhbGxcbiAgfCBgRG9sbGFyX2VuZG9ubHlcbiAgfCBgTXVsdGlsaW5lXG4gIHwgYEFuY2hvcmVkXG4gIHwgYENhc2VsZXNzXG4gIF1cblxubGV0IHJlID8ob3B0cyA9IFtdKSBzID1cbiAgbGV0IHIgPVxuICAgIHBhcnNlXG4gICAgICB+bXVsdGlsaW5lOihMaXN0Lm1lbXEgYE11bHRpbGluZSBvcHRzKVxuICAgICAgfmRvbGxhcl9lbmRvbmx5OihMaXN0Lm1lbXEgYERvbGxhcl9lbmRvbmx5IG9wdHMpXG4gICAgICB+ZG90YWxsOihMaXN0Lm1lbXEgYERvdGFsbCBvcHRzKVxuICAgICAgfnVuZ3JlZWR5OihMaXN0Lm1lbXEgYFVuZ3JlZWR5IG9wdHMpXG4gICAgICBzXG4gIGluXG4gIGxldCByID0gaWYgTGlzdC5tZW1xIGBBbmNob3JlZCBvcHRzIHRoZW4gUmUuc2VxIFsgUmUuc3RhcnQ7IHIgXSBlbHNlIHIgaW5cbiAgbGV0IHIgPSBpZiBMaXN0Lm1lbXEgYENhc2VsZXNzIG9wdHMgdGhlbiBSZS5ub19jYXNlIHIgZWxzZSByIGluXG4gIHJcbjs7XG5cbmxldCBjb21waWxlID0gUmUuY29tcGlsZVxubGV0IGNvbXBpbGVfcGF0ID8ob3B0cyA9IFtdKSBzID0gY29tcGlsZSAocmUgfm9wdHMgcylcblxubGV0IHJlX3Jlc3VsdCA/b3B0cyBzID1cbiAgbWF0Y2ggcmUgP29wdHMgcyB3aXRoXG4gIHwgcyAtPiBPayBzXG4gIHwgZXhjZXB0aW9uIE5vdF9zdXBwb3J0ZWQgLT4gRXJyb3IgYE5vdF9zdXBwb3J0ZWRcbiAgfCBleGNlcHRpb24gUGFyc2VfZXJyb3IgLT4gRXJyb3IgYFBhcnNlX2Vycm9yXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX211bCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfTGlzdCIsIlJlX0NvcmUiLCJSZV9QYXJzZV9idWZmZXIiLCJTdGRsaWJfQnVmZmVyIiwiUmVfUG9zaXhfY2xhc3MiLCJTdGRsaWIiLCJQYXJzZV9lcnJvciIsIk5vdF9zdXBwb3J0ZWQiLCJjaGFyX29mX2ludCIsIngiLCJleG4iLCJ3b3JkX2NoYXIiLCJ3b3JkIiwibm90X3dvcmQiLCJzcGFjZSIsIm5vdF9zcGFjZSIsImRpZ2l0Iiwibm90X2RpZ2l0IiwiY2hhcl9iIiwiY2hhcl9uZXdsaW5lIiwiY2hhcl9jciIsImNoYXJfdGFiIiwicmUiLCJvcHQiLCJzIiwib3B0cyIsInVuZ3JlZWR5IiwiZG90YWxsIiwiZG9sbGFyX2VuZG9ubHkiLCJtdWx0aWxpbmUiLCJidWYiLCJlb3MiLCJwYXJhbSIsInRlc3QiLCJjIiwiZ2V0IiwiZ3JlZWR5X21vZCIsInIiLCJnciIsInJlZ2V4cCIsImxlZnQiLCJicmFuY2giLCJtYXRjaCIsImkiLCJqIiwiYXRvbSIsIm4xIiwic3dpdGNoZXIiLCJhY2MiLCJwIiwiZGlnaXRzIiwiZCIsImMxIiwiYzIiLCJjb2RlIiwibjIiLCJuMyIsImIiLCJuYW1lIiwiaGV4ZGlnaXQiLCJtYXliZV9vY3RhbGRpZ2l0IiwiYnJhY2tldCIsInN0IiwiY2hhciIsInNldCIsInJlcyIsImNvbXBpbGUiLCJjb21waWxlX3BhdCIsInJlX3Jlc3VsdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQztBQUFBQSxNQUFBO0FBQUEsWUFBQUMsWUFBQUM7QUFBQUEsSUN3Q0UsUUFBQUEsTUFBTSwwQkFDQztBQUFBLFVBQUFDLEtEekNUO0FBQUEsR0MwQ29DO0FBQUE7QUFBQSxRQVdSO0FBQUEsSUFBQUMsWUFBVztBQUFBLElBQUFDLE9BQ3hCO0FBQUEsSUFBQUMsV0FDSTtBQUFBLElBQUFDLFFBQWtCO0FBQUEsSUFBQUMs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O0FBQUE7QUFBQSxVQVFBO0FBQUE7QUFBQSxVQVBBO0FBQUE7QUFBQSxVQUNBO0FBQUE7QUFBQSxVQUlBO0FBQUE7QUFBQSxVQUhBO0FBQUE7QUFBQSxVQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxrQkFNb0I7QUFBQTtBQUFBO0FBQUEsd0JBQ2I7QUFBQSxLQUNUO0FBQUEsSUFDRTtBQUFBLFFBQUErQixNQVNIO0FBQUEsSUFDSCxlQUFjO0FBQUE7QUFBQSxLQUFBNUI7QUFBQUEsT0FzQlY7QUFBQSxVQUE4QjtBQUFBO0FBQUEsS0FBQUE7QUFBQUEsT0FDOUI7QUFBQSxVQUE4QjtBQUFBO0FBQUEsSUFDekM7QUFBQSxHQUFDO0FBQUEsT0FBQTZCLFVBalN3QztBQUFBLFlBQUFDLFlBQUE1QyxLQUFBQztBQUFBQSxRQUFBQyxPQXFTM0I7QUFBQSxJQUF5QixPQUFZLFFBQVosaUJBQVk7QUFBQTtBQUFBLFdBclNWO0FBQUEsWUFBQTJDLFVBQUEzQyxNQUFBRDtBQUFBQSxJQXdTekMsUUFBQUEsTUFBTTtBQUFBLFVBQUFkO0FBQUFBLFNBQUFBLE1EbldSO0FBQUEsK0JDcVcrQjtBQUFBLEtEclcvQix3QkNzVzZCO0FBQUEsS0R0VzdCO0FBQUE7QUFBQSxJQ29XUztBQUFBLEdBRXNDO0FBQUEsR0EzU0o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEM0QzQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM0ODU5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InJlLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvcmUvcGNyZS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIm1vZHVsZSBSZSA9IENvcmVcblxuZXhjZXB0aW9uIFBhcnNlX2Vycm9yID0gUGVybC5QYXJzZV9lcnJvclxuZXhjZXB0aW9uIE5vdF9zdXBwb3J0ZWQgPSBQZXJsLk5vdF9zdXBwb3J0ZWRcblxudHlwZSByZWdleHAgPSBSZS5yZVxuXG50eXBlIGZsYWcgPVxuICBbIGBDQVNFTEVTU1xuICB8IGBNVUxUSUxJTkVcbiAgfCBgQU5DSE9SRURcbiAgfCBgRE9UQUxMXG4gIF1cblxudHlwZSBzcGxpdF9yZXN1bHQgPVxuICB8IFRleHQgb2Ygc3RyaW5nXG4gIHwgRGVsaW0gb2Ygc3RyaW5nXG4gIHwgR3JvdXAgb2YgaW50ICogc3RyaW5nXG4gIHwgTm9Hcm91cFxuXG50eXBlIGdyb3VwcyA9IENvcmUuR3JvdXAudFxuXG5sZXQgcmUgPyhmbGFncyA9IFtdKSBwYXQgPVxuICBsZXQgb3B0cyA9XG4gICAgTGlzdC5tYXBcbiAgICAgIChmdW5jdGlvblxuICAgICAgICB8IGBDQVNFTEVTUyAtPiBgQ2FzZWxlc3NcbiAgICAgICAgfCBgTVVMVElMSU5FIC0+IGBNdWx0aWxpbmVcbiAgICAgICAgfCBgQU5DSE9SRUQgLT4gYEFuY2hvcmVkXG4gICAgICAgIHwgYERPVEFMTCAtPiBgRG90YWxsKVxuICAgICAgZmxhZ3NcbiAgaW5cbiAgUGVybC5yZSB+b3B0cyBwYXRcbjs7XG5cbmxldCByZV9yZXN1bHQgP2ZsYWdzIHMgPVxuICBtYXRjaCByZSA/ZmxhZ3MgcyB3aXRoXG4gIHwgcyAtPiBPayBzXG4gIHwgZXhjZXB0aW9uIE5vdF9zdXBwb3J0ZWQgLT4gRXJyb3IgYE5vdF9zdXBwb3J0ZWRcbiAgfCBleGNlcHRpb24gUGFyc2VfZXJyb3IgLT4gRXJyb3IgYFBhcnNlX2Vycm9yXG47O1xuXG5sZXQgcmVnZXhwID9mbGFncyBwYXQgPSBSZS5jb21waWxlIChyZSA/ZmxhZ3MgcGF0KVxubGV0IGV4dHJhY3QgfnJleCBzID0gUmUuR3JvdXAuYWxsIChSZS5leGVjIHJleCBzKVxubGV0IGV4ZWMgfnJleCA/cG9zIHMgPSBSZS5leGVjIHJleCA/cG9zIHNcbmxldCBuYW1lcyByZXggPSBSZS5ncm91cF9uYW1lcyByZXggfD4gTGlzdC5tYXAgZnN0IHw+IEFycmF5Lm9mX2xpc3RcblxubGV0IGdldF9uYW1lZF9zdWJzdHJpbmdfb3B0IHJleCBuYW1lIHMgPVxuICBsZXQgcmVjIGxvb3AgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgKG4sIGkpIDo6IHJlbSB3aGVuIG4gPSBuYW1lIC0+XG4gICAgICAobWF0Y2ggUmUuR3JvdXAuZ2V0X29wdCBzIGkgd2l0aFxuICAgICAgIHwgTm9uZSAtPiBsb29wIHJlbVxuICAgICAgIHwgU29tZSBfIGFzIHMgLT4gcylcbiAgICB8IF8gOjogcmVtIC0+IGxvb3AgcmVtXG4gIGluXG4gIGxvb3AgKFJlLmdyb3VwX25hbWVzIHJleClcbjs7XG5cbmxldCBnZXRfc3Vic3RyaW5nX29mcyBzIGkgPSBSZS5Hcm91cC5vZmZzZXQgcyBpXG5sZXQgcG1hdGNoIH5yZXggcyA9IFJlLmV4ZWNwIHJleCBzXG5cbmxldCBzdWJzdGl0dXRlIH5yZXggfnN1YnN0IHN0ciA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAxMDI0IGluXG4gIGxldCByZWMgbG9vcCBwb3Mgb25fbWF0Y2ggPVxuICAgIGlmIFJlLmV4ZWNwIH5wb3MgcmV4IHN0clxuICAgIHRoZW4gKFxuICAgICAgbGV0IHNzID0gUmUuZXhlYyB+cG9zIHJleCBzdHIgaW5cbiAgICAgIGxldCBzdGFydCwgZmluID0gUmUuR3JvdXAub2Zmc2V0IHNzIDAgaW5cbiAgICAgIGlmIG9uX21hdGNoICYmIHN0YXJ0ID0gcG9zICYmIHN0YXJ0ID0gZmluXG4gICAgICB0aGVuIChcbiAgICAgICAgaWYgKCogRW1wdHkgbWF0Y2ggZm9sbG93aW5nIGEgbWF0Y2ggKilcbiAgICAgICAgICAgcG9zIDwgU3RyaW5nLmxlbmd0aCBzdHJcbiAgICAgICAgdGhlbiAoXG4gICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgc3RyLltwb3NdO1xuICAgICAgICAgIGxvb3AgKHBvcyArIDEpIGZhbHNlKSlcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgcGF0ID0gUmUuR3JvdXAuZ2V0IHNzIDAgaW5cbiAgICAgICAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzdHIgcG9zIChzdGFydCAtIHBvcyk7XG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGIgKHN1YnN0IHBhdCk7XG4gICAgICAgIGlmIHN0YXJ0ID0gZmluXG4gICAgICAgIHRoZW4gKFxuICAgICAgICAgIGlmICgqIE1hbnVhbGx5IGFkdmFuY2UgYnkgb25lIGFmdGVyIGFuIGVtcHR5IG1hdGNoICopXG4gICAgICAgICAgICAgZmluIDwgU3RyaW5nLmxlbmd0aCBzdHJcbiAgICAgICAgICB0aGVuIChcbiAgICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciBiIHN0ci5bZmluXTtcbiAgICAgICAgICAgIGxvb3AgKGZpbiArIDEpIGZhbHNlKSlcbiAgICAgICAgZWxzZSBsb29wIGZpbiB0cnVlKSlcbiAgICBlbHNlIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgc3RyIHBvcyAoU3RyaW5nLmxlbmd0aCBzdHIgLSBwb3MpXG4gIGluXG4gIGxvb3AgMCBmYWxzZTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcbjs7XG5cbmxldCBzcGxpdCB+cmV4IHMgPVxuICBsZXQgcmVjIHNwbGl0IGFjY3Ugc3RhcnQgPVxuICAgIGlmIHN0YXJ0ID0gU3RyaW5nLmxlbmd0aCBzXG4gICAgdGhlbiBhY2N1XG4gICAgZWxzZSAoXG4gICAgICBtYXRjaFxuICAgICAgICBsZXQgZyA9IFJlLmV4ZWMgcmV4IHMgfnBvczpzdGFydCBpblxuICAgICAgICBpZiBHcm91cC5zdG9wIGcgMCA9IHN0YXJ0IHRoZW4gUmUuZXhlYyByZXggcyB+cG9zOihzdGFydCArIDEpIGVsc2UgZ1xuICAgICAgd2l0aFxuICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IFN0cmluZy5zdWIgcyBzdGFydCAoU3RyaW5nLmxlbmd0aCBzIC0gc3RhcnQpIDo6IGFjY3VcbiAgICAgIHwgZyAtPlxuICAgICAgICBsZXQgbmV4dCA9IEdyb3VwLnN0b3AgZyAwIGluXG4gICAgICAgIHNwbGl0IChTdHJpbmcuc3ViIHMgc3RhcnQgKEdyb3VwLnN0YXJ0IGcgMCAtIHN0YXJ0KSA6OiBhY2N1KSBuZXh0KVxuICBpblxuICBtYXRjaCBSZS5leGVjIHJleCBzIH5wb3M6MCB3aXRoXG4gIHwgZyAtPlxuICAgIExpc3QucmV2XG4gICAgICAoaWYgR3JvdXAuc3RhcnQgZyAwID0gMFxuICAgICAgIHRoZW4gc3BsaXQgW10gKEdyb3VwLnN0b3AgZyAwKVxuICAgICAgIGVsc2Ugc3BsaXQgWyBTdHJpbmcuc3ViIHMgMCAoR3JvdXAuc3RhcnQgZyAwKSBdIChHcm91cC5zdG9wIGcgMCkpXG4gIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBpZiBzID0gXCJcIiB0aGVuIFtdIGVsc2UgWyBzIF1cbjs7XG5cbigqIEZyb20gUENSRSAqKVxubGV0IHN0cmluZ191bnNhZmVfc3ViIHMgb2ZzIGxlbiA9XG4gIGxldCByID0gQnl0ZXMuY3JlYXRlIGxlbiBpblxuICBCeXRlcy51bnNhZmVfYmxpdCBzIG9mcyByIDAgbGVuO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJcbjs7XG5cbmxldCBxdW90ZSBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIChsZW4gbHNsIDEpIGluXG4gIGxldCBwb3MgPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgfCAoJ1xcXFwnIHwgJ14nIHwgJyQnIHwgJy4nIHwgJ1snIHwgJ3wnIHwgJygnIHwgJyknIHwgJz8nIHwgJyonIHwgJysnIHwgJ3snKSBhcyBjIC0+XG4gICAgICBCeXRlcy51bnNhZmVfc2V0IGJ1ZiAhcG9zICdcXFxcJztcbiAgICAgIGluY3IgcG9zO1xuICAgICAgQnl0ZXMudW5zYWZlX3NldCBidWYgIXBvcyBjO1xuICAgICAgaW5jciBwb3NcbiAgICB8IGMgLT5cbiAgICAgIEJ5dGVzLnVuc2FmZV9zZXQgYnVmICFwb3MgYztcbiAgICAgIGluY3IgcG9zXG4gIGRvbmU7XG4gIHN0cmluZ191bnNhZmVfc3ViIGJ1ZiAwICFwb3Ncbjs7XG5cbmxldCBmdWxsX3NwbGl0ID8obWF4ID0gMCkgfnJleCBzID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBzID0gMFxuICB0aGVuIFtdXG4gIGVsc2UgaWYgbWF4ID0gMVxuICB0aGVuIFsgVGV4dCBzIF1cbiAgZWxzZSAoXG4gICAgbGV0IHJlc3VsdHMgPSBSZS5zcGxpdF9mdWxsIHJleCBzIGluXG4gICAgbGV0IG1hdGNoZXMgPVxuICAgICAgTGlzdC5tYXBcbiAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgfCBgVGV4dCBzIC0+IFsgVGV4dCBzIF1cbiAgICAgICAgICB8IGBEZWxpbSBkIC0+XG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IFJlLkdyb3VwLmFsbF9vZmZzZXQgZCBpblxuICAgICAgICAgICAgbGV0IGRlbGltID0gUmUuR3JvdXAuZ2V0IGQgMCBpblxuICAgICAgICAgICAgRGVsaW0gZGVsaW1cbiAgICAgICAgICAgIDo6XG4gICAgICAgICAgICAobGV0IGwgPSByZWYgW10gaW5cbiAgICAgICAgICAgICBmb3IgaSA9IDEgdG8gQXJyYXkubGVuZ3RoIG1hdGNoZXMgLSAxIGRvXG4gICAgICAgICAgICAgICBsXG4gICAgICAgICAgICAgICA6PSAoaWYgbWF0Y2hlcy4oaSkgPSAoLTEsIC0xKSB0aGVuIE5vR3JvdXAgZWxzZSBHcm91cCAoaSwgUmUuR3JvdXAuZ2V0IGQgaSkpXG4gICAgICAgICAgICAgICAgICA6OiAhbFxuICAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICAgTGlzdC5yZXYgIWwpKVxuICAgICAgICByZXN1bHRzXG4gICAgaW5cbiAgICBMaXN0LmNvbmNhdCBtYXRjaGVzKVxuOztcblxudHlwZSBzdWJzdHJpbmdzID0gR3JvdXAudFxuXG5sZXQgZ2V0X3N1YnN0cmluZyBzIGkgPSBSZS5Hcm91cC5nZXQgcyBpXG5cbmxldCBnZXRfbmFtZWRfc3Vic3RyaW5nIHJleCBuYW1lIHMgPVxuICBtYXRjaCBnZXRfbmFtZWRfc3Vic3RyaW5nX29wdCByZXggbmFtZSBzIHdpdGhcbiAgfCBOb25lIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IFNvbWUgcyAtPiBzXG47O1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWIiLCJSZV9Db3JlIiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfQnl0ZXMiLCJSZV9Hcm91cCIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX0FycmF5IiwiUmVfUGVybCIsIlBhcnNlX2Vycm9yIiwiTm90X3N1cHBvcnRlZCIsInJlIiwib3B0IiwicGF0IiwiZmxhZ3MiLCJvcHRzIiwicGFyYW0iLCJyZV9yZXN1bHQiLCJzIiwiZXhuIiwicmVnZXhwIiwiZXh0cmFjdCIsInJleCIsImV4ZWMiLCJwb3MiLCJuYW1lcyIsImdldF9uYW1lZF9zdWJzdHJpbmdfb3B0IiwibmFtZSIsIm1hdGNoIiwicmVtIiwiaSIsIm4iLCJnZXRfc3Vic3RyaW5nX29mcyIsInBtYXRjaCIsInN1YnN0aXR1dGUiLCJzdWJzdCIsInN0ciIsImIiLCJvbl9tYXRjaCIsInNzIiwiZmluIiwic3RhcnQiLCJzcGxpdCIsImFjY3UiLCJnIiwicXVvdGUiLCJsZW4iLCJidWYiLCJjIiwiciIsImZ1bGxfc3BsaXQiLCJtYXgiLCJyZXN1bHRzIiwibWF0Y2hlcyIsInZhcmlhbnQiLCJkIiwiZGVsaW0iLCJsIiwiZ2V0X3N1YnN0cmluZyIsImdl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SDtBQUFBO0FBQUEsV0QzSTlCO0FBQUEsWUFBQUMsV0FBQXRDLEtBQUFVLEtBQUFKO0FBQUFBLFFBQUFpQyxNQzhJZTtBQUFBLElBQ2IsbUNBQ0s7QUFBQSxJQUNBLGNBQ0E7QUFBQTtBQUFBLEtBQUFDLFVBRVc7QUFBQSxLQUFBQztBQUFBQSxPQUVaO0FBQUE7QUFBQSxrQkFBQXJDO0FBQUFBLGNBQUFzQyxVQUNFO0FBQUEsdUNBQUFwQyxJQUFBLFVBQ2U7QUFBQTtBQUFBLFdBQUFxQyxNQURmO0FBQUEsV0FBQUYsVUFHa0I7QUFBQSxXQUFBRyxRQUNGO0FBQUEsZUFJWDtBQUFBLGVBSjJCO0FBQUEsVUFJM0I7QUFBQSxlQUFBQyxNQUFBO0FBQUE7QUFBQSxlQUFBQSxJQUFBLEdBQUEzQixJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFFUztBQUFBO0FBQUE7QUFBQSx5QkFBbUQ7QUFBQSxpQkFBN0I7QUFBQTtBQUFBLDRCQUFBMkIsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFHL0IsdURBQVc7QUFBQSxTQUFFO0FBQUE7QUFBQSxJQUd0QiwwQ0FBb0I7QUFBQTtBQUFBLFlBQUFDLGNBQUF4QyxHQUFBWSxHQUtBLHNDQUFnQjtBQUFBLFlBQUE2QixvQkFBQXJDLEtBQUFLLE1BQUFUO0FBQUFBLFFBQUFVLFFBR2hDO0FBQUEsSUFBa0MsWUFDOUI7QUFBQSxRQUFBVixNQUQ4QjtBQUFBLElBRTVCO0FBQUEsR0FBQztBQUFBLEdEakxmIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzUxNTcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSJdLCJuYW1lcyI6WyJydW50aW1lIiwiZ2xvYmFsX2RhdGEiLCJSZV9Db3JlIiwiUmVfUmVwbGFjZSIsIkdyb3VwIiwiY29tcGlsZSIsImdyb3VwX2NvdW50IiwiZ3JvdXBfbmFtZXMiLCJleGVjIiwiZXhlY19vcHQiLCJleGVjcCIsImV4ZWNfcGFydGlhbCIsImV4ZWNfcGFydGlhbF9kZXRhaWxlZCIsIk1hcmsiLCJhbGwiLCJhbGxfZ2VuIiwiYWxsX3NlcSIsIm1hdGNoZXMiLCJtYXRjaGVzX2dlbiIsIm1hdGNoZXNfc2VxIiwic3BsaXQiLCJzcGxpdF9kZWxpbSIsInNwbGl0X2dlbiIsInNwbGl0X3NlcSIsInNwbGl0X2Z1bGwiLCJzcGxpdF9mdWxsX2dlbiIsInNwbGl0X2Z1bGxfc2VxIiwiU2VxIiwic3RyIiwiY2hhciIsImFsdCIsInNlcSIsImVtcHR5IiwiZXBzaWxvbiIsInJlcCIsInJlcDEiLCJyZXBuIiwib3B0IiwiYm9sIiwiZW9sIiwiYm93IiwiZW93IiwiYm9zIiwiZW9zIiwibGVvbCIsInN0YXJ0Iiwic3RvcCIsIndvcmQiLCJub3RfYm91bmRhcnkiLCJ3aG9sZV9zdHJpbmciLCJsb25nZXN0Iiwic2hvcnRlc3QiLCJmaXJzdCIsImdyZWVkeSIsIm5vbl9ncmVlZHkiLCJncm91cCIsIm5vX2dyb3VwIiwibmVzdCIsIm1hcmsiLCJzZXQiLCJyZyIsImludGVyIiwiZGlmZiIsImNvbXBsIiwiYW55Iiwibm90bmwiLCJhbG51bSIsIndvcmRjIiwiYWxwaGEiLCJhc2NpaSIsImJsYW5rIiwiY250cmwiLCJkaWdpdCIsImdyYXBoIiwibG93ZXIiLCJwcmludCIsInB1bmN0Iiwic3BhY2UiLCJ1cHBlciIsInhkaWdpdCIsImNhc2UkIiwibm9fY2FzZSIsInBwIiwicHBfcmUiLCJwcmludF9yZSIsIndpdG5lc3MiLCJnZXQiLCJnZXRfb2ZzIiwiZ2V0X2FsbCIsImdldF9hbGxfb2ZzIiwidGVzdCIsIm1hcmtlZCIsIm1hcmtfc2V0IiwiU3RyZWFtIiwicmVwbGFjZSIsInJlcGxhY2Vfc3RyaW5nIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsS0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLEtBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxpQkFBQSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM1MzU5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InVuaXguY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9iYV9kaW1fMSIsImNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3lzX2V4aXQiLCJjYW1sX3VuaXhfY2xvc2UiLCJjYW1sX3VuaXhfZ2V0cHduYW0iLCJjYW1sX3VuaXhfaW5jaGFubmVsX29mX2ZpbGVkZXMiLCJjYW1sX3VuaXhfaW5ldF9hZGRyX29mX3N0cmluZyIsImNhbWxfdW5peF9vdXRjaGFubmVsX29mX2ZpbGVkZSIsImNhbWxfdW5peF93cml0ZV9iaWdhcnJheSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJ1bml4X2Vycm9yX21lc3NhZ2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWIiLCJTdGRsaWJfSGFzaHRibCIsIlN0ZGxpYl9NdXRleCIsIlN0ZGxpYl9MaXN0IiwiU3RkbGliX0Z1biIsIlN0ZGxpYl9JbnQiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0NhbGxiYWNrIiwiU3RkbGliX1ByaW50ZXhjIiwiY3N0X1VuaXhfVW5peF9lcnJvciIsIlVuaXhfZXJyb3IiLCJjc3QiLCJwYXJhbSIsInMiLCJlIiwibXNnIiwieCIsImhhbmRsZV91bml4X2Vycm9yIiwiYXJnIiwiZXhuIiwiZnVuX25hbWUiLCJlcnIiLCJyZWFkIiwiZmQiLCJidWYiLCJvZnMiLCJsZW4iLCJyZWFkX2JpZ2FycmF5Iiwid3JpdGUiLCJ3cml0ZV9iaWdhcnJheSIsInNpbmdsZV93cml0ZSIsInNpbmdsZV93cml0ZV9iaWdhcnJheSIsIndyaXRlX3N1YnN0cmluZyIsInNpbmdsZV93cml0ZV9zdWJzdHJpbmciLCJtYXBfZmlsZSIsIm9wdCIsImtpbmQiLCJsYXlvdXQiLCJzaGFyZWQiLCJkaW1zIiwicG9zIiwicGF1c2UiLCJzaWdzIiwic2xlZXAiLCJkdXJhdGlvbiIsImlzX2luZXQ2X2FkZHIiLCJjc3RfMF8wXzBfMCIsImluZXRfYWRkcl9hbnkiLCJjc3RfMTI3XzBfMF8xIiwiaW5ldF9hZGRyX2xvb3BiYWNrIiwiaW5ldDZfYWRkcl9hbnkiLCJpbmV0Nl9hZGRyX2xvb3BiYWNrIiwiZG9tYWluX29mX3NvY2thZGRyIiwiYSIsInJlY3YiLCJmbGFncyIsInJlY3Zmcm9tIiwic2VuZCIsInNlbmR0byIsImFkZHIiLCJzZW5kX3N1YnN0cmluZyIsInNlbmR0b19zdWJzdHJpbmciLCJnZXRzb2Nrb3B0Iiwic2V0c29ja29wdCIsInYiLCJnZXRzb2Nrb3B0X2ludCIsInNldHNvY2tvcHRfaW50IiwiZ2V0c29ja29wdF9vcHRpbnQiLCJzZXRzb2Nrb3B0X29wdGludCIsImdldHNvY2tvcHRfZmxvYXQiLCJzZXRzb2Nrb3B0X2Zsb2F0IiwiZ2V0c29ja29wdF9lcnJvciIsImNzdF90Y3AiLCJjc3RfdWRwIiwiZ2V0YWRkcmluZm8iLCJub2RlIiwic2VydmljZSIsIm9wdHMiLCJvcHRfc29ja3R5cGUiLCJvcHRfcHJvdG9jb2wiLCJwIiwiZ2V0X3BvcnQiLCJ0eSIsIm1hdGNoIiwicG9ydHMiLCJhZGRyZXNzZXMiLCJwb3J0IiwibmFtZSIsImdldG5hbWVpbmZvIiwiaG9zdG5hbWUiLCJ3YWl0cGlkX25vbl9pbnRyIiwicGlkIiwiY3JlYXRlX3Byb2Nlc3NfZ2VuIiwiY21kIiwiYXJncyIsIm9wdGVudiIsIm5ld19zdGRpbiIsIm5ld19zdGRvdXQiLCJuZXdfc3RkZXJyIiwidG9jbG9zZSIsImNsb3NlX2FmdGVyIiwiZmlsZV9kZXNjcl9ub3Rfc3RhbmRhcmQiLCJyZWRpcmVjdGlvbnMiLCJjcmVhdGVfcHJvY2VzcyIsImNyZWF0ZV9wcm9jZXNzX2VudiIsImVudiIsImNzdF9jIiwiY3N0X2Jpbl9zaCIsInNoZWxsIiwic3lzdGVtIiwicG9wZW5fcHJvY2Vzc2VzIiwicG9wZW5fbXV0ZXgiLCJvcGVuX3Byb2MiLCJwcm9nIiwiZW52b3B0IiwicHJvYyIsImlucHV0Iiwib3V0cHV0IiwiZXJyb3IiLCJzdGRpbiIsInN0ZGVyciIsIm9wZW5fcHJvY2Vzc19hcmdzX2luIiwiaW5fd3JpdGUiLCJpbl9yZWFkIiwiaW5jaGFuIiwic3Rkb3V0Iiwib3Blbl9wcm9jZXNzX2FyZ3Nfb3V0Iiwib3V0X3dyaXRlIiwib3V0X3JlYWQiLCJvdXRjaGFuIiwib3Blbl9wcm9jZXNzX2FyZ3MiLCJvcGVuX3Byb2Nlc3NfYXJnc19mdWxsIiwiZXJyX3dyaXRlIiwiZXJyX3JlYWQiLCJlcnJjaGFuIiwib3Blbl9wcm9jZXNzX3NoZWxsIiwiZm4iLCJvcGVuX3Byb2Nlc3NfaW4iLCJvcGVuX3Byb2Nlc3Nfb3V0Iiwib3Blbl9wcm9jZXNzIiwib3Blbl9wcm9jZXNzX2Z1bGwiLCJmaW5kX3Byb2NfaWQiLCJyZW1vdmVfcHJvY19pZCIsInByb2Nlc3NfaW5fcGlkIiwicHJvY2Vzc19vdXRfcGlkIiwicHJvY2Vzc19waWQiLCJwcm9jZXNzX2Z1bGxfcGlkIiwiY2xvc2VfcHJvY2Vzc19pbiIsImNsb3NlX3Byb2Nlc3Nfb3V0IiwiY2xvc2VfcHJvY2VzcyIsImNsb3NlX3Byb2Nlc3NfZnVsbCIsIm9wZW5fY29ubmVjdGlvbiIsInNvY2thZGRyIiwic29jayIsInNodXRkb3duX2Nvbm5lY3Rpb24iLCJlc3RhYmxpc2hfc2VydmVyIiwic2VydmVyX2Z1biIsImlkIiwiVW5peCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLDBCQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxpQ0FBQTtBQUFBLElBQUFDLGdDQUFBO0FBQUEsSUFBQUMsaUNBQUE7QUFBQSxJQUFBQywyQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsR0FBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQSxRQUFBO0FBQUE7QUFBQSxNQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUE7QUFBQTtBQUFBLGNBQUFDO0FBQUFBLE1BQUEsNEJBQUE7QUFBQSxVQUFBQyxJQUFBLFVBQUFBLE1BQUEsVUFBQUMsSUFBQTtBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQUFDLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQTtBQUFBLGVBQUFBLE1BQUE7QUFBQSx1QkFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FBQUEsZUFBQUEsTUFBQTtBQUFBO0FB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Z0UsUUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBQXRFLElBQUEsWUFBQWdKLEtBQUE7QUFBQSxLQUFBO0FBQUEsTUFBQSxvQ0FBQTtBQUFBLE1BQUE7QUFBQTtBQUFBLE9BQUFqQyxTQUFBO0FBQUEsT0FBQUssVUFBQTtBQUFBLE1BQUE7QUFBQSxNQUFBO0FBQUE7QUFBQSxVQUFBLG9CQUFBO0FBQUE7QUFBQSxHQUFBO0FBQUE7QUFBQSxJQUFBNkI7QUFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFBO0FBQUE7QUFBQSxFQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzYzOTAsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5peC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJVbml4IiwiVW5peF9lcnJvciIsImVycm9yX21lc3NhZ2UiLCJoYW5kbGVfdW5peF9lcnJvciIsImVudmlyb25tZW50IiwidW5zYWZlX2Vudmlyb25tZW50IiwiZ2V0ZW52IiwidW5zYWZlX2dldGVudiIsInB1dGVudiIsImV4ZWN2IiwiZXhlY3ZlIiwiZXhlY3ZwIiwiZXhlY3ZwZSIsImZvcmsiLCJ3YWl0Iiwid2FpdHBpZCIsInN5c3RlbSIsImV4aXQiLCJnZXRwaWQiLCJnZXRwcGlkIiwibmljZSIsInN0ZGluIiwic3Rkb3V0Iiwic3RkZXJyIiwib3BlbmZpbGUiLCJjbG9zZSIsImZzeW5jIiwicmVhZCIsInJlYWRfYmlnYXJyYXkiLCJ3cml0ZSIsIndyaXRlX2JpZ2FycmF5Iiwic2luZ2xlX3dyaXRlIiwid3JpdGVfc3Vic3RyaW5nIiwic2luZ2xlX3dyaXRlX3N1YnN0cmluZyIsInNpbmdsZV93cml0ZV9iaWdhcnJheSIsImluX2NoYW5uZWxfb2ZfZGVzY3IiLCJvdXRfY2hhbm5lbF9vZl9kZXNjciIsImRlc2NyX29mX2luX2NoYW5uZWwiLCJkZXNjcl9vZl9vdXRfY2hhbm5lbCIsImxzZWVrIiwidHJ1bmNhdGUiLCJmdHJ1bmNhdGUiLCJzdGF0IiwibHN0YXQiLCJmc3RhdCIsImlzYXR0eSIsIkxhcmdlRmlsZSIsIm1hcF9maWxlIiwidW5saW5rIiwicmVuYW1lIiwibGluayIsInJlYWxwYXRoIiwiY2htb2QiLCJmY2htb2QiLCJjaG93biIsImZjaG93biIsInVtYXNrIiwiYWNjZXNzIiwiZHVwIiwiZHVwMiIsInNldF9ub25ibG9jayIsImNsZWFyX25vbmJsb2NrIiwic2V0X2Nsb3NlX29uX2V4ZWMiLCJjbGVhcl9jbG9zZV9vbl9leGVjIiwibWtkaXIiLCJybWRpciIsImNoZGlyIiwiZ2V0Y3dkIiwiY2hyb290Iiwib3BlbmRpciIsInJlYWRkaXIiLCJyZXdpbmRkaXIiLCJjbG9zZWRpciIsInBpcGUiLCJta2ZpZm8iLCJjcmVhdGVfcHJvY2VzcyIsImNyZWF0ZV9wcm9jZXNzX2VudiIsIm9wZW5fcHJvY2Vzc19pbiIsIm9wZW5fcHJvY2Vzc19vdXQiLCJvcGVuX3Byb2Nlc3MiLCJvcGVuX3Byb2Nlc3NfZnVsbCIsIm9wZW5fcHJvY2Vzc19hcmdzIiwib3Blbl9wcm9jZXNzX2FyZ3NfaW4iLCJvcGVuX3Byb2Nlc3NfYXJnc19vdXQiLCJvcGVuX3Byb2Nlc3NfYXJnc19mdWxsIiwicHJvY2Vzc19pbl9waWQiLCJwcm9jZXNzX291dF9waWQiLCJwcm9jZXNzX3BpZCIsInByb2Nlc3NfZnVsbF9waWQiLCJjbG9zZV9wcm9jZXNzX2luIiwiY2xvc2VfcHJvY2Vzc19vdXQiLCJjbG9zZV9wcm9jZXNzIiwiY2xvc2VfcHJvY2Vzc19mdWxsIiwic3ltbGluayIsImhhc19zeW1saW5rIiwicmVhZGxpbmsiLCJzZWxlY3QiLCJsb2NrZiIsImtpbGwiLCJzaWdwcm9jbWFzayIsInNpZ3BlbmRpbmciLCJzaWdzdXNwZW5kIiwicGF1c2UiLCJ0aW1lIiwiZ2V0dGltZW9mZGF5IiwiZ210aW1lIiwibG9jYWx0aW1lIiwibWt0aW1lIiwiYWxhcm0iLCJzbGVlcCIsInNsZWVwZiIsInRpbWVzIiwidXRpbWVzIiwiZ2V0aXRpbWVyIiwic2V0aXRpbWVyIiwiZ2V0dWlkIiwiZ2V0ZXVpZCIsInNldHVpZCIsImdldGdpZCIsImdldGVnaWQiLCJzZXRnaWQiLCJnZXRncm91cHMiLCJzZXRncm91cHMiLCJpbml0Z3JvdXBzIiwiZ2V0bG9naW4iLCJnZXRwd25hbSIsImdldGdybmFtIiwiZ2V0cHd1aWQiLCJnZXRncmdpZCIsImluZXRfYWRkcl9vZl9zdHJpbmciLCJzdHJpbmdfb2ZfaW5ldF9hZGRyIiwiaW5ldF9hZGRyX2FueSIsImluZXRfYWRkcl9sb29wYmFjayIsImluZXQ2X2FkZHJfYW55IiwiaW5ldDZfYWRkcl9sb29wYmFjayIsImlzX2luZXQ2X2FkZHIiLCJzb2NrZXQiLCJkb21haW5fb2Zfc29ja2FkZHIiLCJzb2NrZXRwYWlyIiwiYWNjZXB0IiwiYmluZCIsImNvbm5lY3QiLCJsaXN0ZW4iLCJzaHV0ZG93biIsImdldHNvY2tuYW1lIiwiZ2V0cGVlcm5hbWUiLCJyZWN2IiwicmVjdmZyb20iLCJzZW5kIiwic2VuZF9zdWJzdHJpbmciLCJzZW5kdG8iLCJzZW5kdG9fc3Vic3RyaW5nIiwiZ2V0c29ja29wdCIsInNldHNvY2tvcHQiLCJnZXRzb2Nrb3B0X2ludCIsInNldHNvY2tvcHRfaW50IiwiZ2V0c29ja29wdF9vcHRpbnQiLCJzZXRzb2Nrb3B0X29wdGludCIsImdldHNvY2tvcHRfZmxvYXQiLCJzZXRzb2Nrb3B0X2Zsb2F0IiwiZ2V0c29ja29wdF9lcnJvciIsIm9wZW5fY29ubmVjdGlvbiIsInNodXRkb3duX2Nvbm5lY3Rpb24iLCJlc3RhYmxpc2hfc2VydmVyIiwiZ2V0aG9zdG5hbWUiLCJnZXRob3N0YnluYW1lIiwiZ2V0aG9zdGJ5YWRkciIsImdldHByb3RvYnluYW1lIiwiZ2V0cHJvdG9ieW51bWJlciIsImdldHNlcnZieW5hbWUiLCJnZXRzZXJ2Ynlwb3J0IiwiZ2V0YWRkcmluZm8iLCJnZXRuYW1laW5mbyIsInRjZ2V0YXR0ciIsInRjc2V0YXR0ciIsInRjc2VuZGJyZWFrIiwidGNkcmFpbiIsInRjZmx1c2giLCJ0Y2Zsb3ciLCJzZXRzaWQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMs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QUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsU0FBQSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM2NzY0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF90eXBlcy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBDb3JlIHR5cGVzIGZvciB0aGUgU1ggbGFuZ3VhZ2UuXG5cbiAgICBUaGUgW3ZhbHVlXSBzdW0gdHlwZSByZXByZXNlbnRzIGV2ZXJ5IHBvc3NpYmxlIFNYIHJ1bnRpbWUgdmFsdWUuXG4gICAgT0NhbWwncyBhbGdlYnJhaWMgdHlwZXMgbWFrZSB0aGUgQ0VLIG1hY2hpbmUncyBmcmFtZSBkaXNwYXRjaCBhXG4gICAgcGF0dGVybiBtYXRjaCDigJQgZXhhY3RseSB3aGF0IHRoZSBzcGVjIGRlc2NyaWJlcy4gKilcblxuKCoqIHsxIFN5bWJvbCBpbnRlcm5pbmd9ICopXG5cbigqKiBNYXAgc3ltYm9sIG5hbWVzIHRvIHNtYWxsIGludGVnZXJzIGZvciBPKDEpIGVudiBsb29rdXBzLlxuICAgIFRoZSBpbnRlcm4gdGFibGUgaXMgcG9wdWxhdGVkIG9uY2UgcGVyIHVuaXF1ZSBzeW1ib2wgbmFtZTtcbiAgICBhbGwgc3Vic2VxdWVudCBlbnYgb3BlcmF0aW9ucyB1c2UgdGhlIGludGVnZXIga2V5LiAqKVxuXG5sZXQgc3ltX3RvX2lkIDogKHN0cmluZywgaW50KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA1MTJcbmxldCBpZF90b19zeW0gOiAoaW50LCBzdHJpbmcpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDUxMlxubGV0IHN5bV9uZXh0ICA9IHJlZiAwXG5cbmxldCBpbnRlcm4gcyA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgc3ltX3RvX2lkIHMgd2l0aFxuICB8IFNvbWUgaWQgLT4gaWRcbiAgfCBOb25lIC0+XG4gICAgbGV0IGlkID0gIXN5bV9uZXh0IGluXG4gICAgaW5jciBzeW1fbmV4dDtcbiAgICBIYXNodGJsLnJlcGxhY2Ugc3ltX3RvX2lkIHMgaWQ7XG4gICAgSGFzaHRibC5yZXBsYWNlIGlkX3RvX3N5bSBpZCBzO1xuICAgIGlkXG5cbmxldCB1bmludGVybiBpZCA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgaWRfdG9fc3ltIGlkIHdpdGhcbiAgfCBTb21lIHMgLT4gc1xuICB8IE5vbmUgLT4gXCI8c3ltOlwiIF4gc3RyaW5nX29mX2ludCBpZCBeIFwiPlwiXG5cblxuKCoqIHsxIEVudmlyb25tZW50fSAqKVxuXG4oKiogTGV4aWNhbCBzY29wZSBjaGFpbi4gIEVhY2ggZnJhbWUgaG9sZHMgYSBtdXRhYmxlIGJpbmRpbmcgdGFibGVcbiAgICBrZXllZCBieSBpbnRlcm5lZCBzeW1ib2wgSURzIGZvciBmYXN0IGxvb2t1cC4gKilcbnR5cGUgZW52ID0ge1xuICBiaW5kaW5ncyA6IChpbnQsIHZhbHVlKSBIYXNodGJsLnQ7XG4gIHBhcmVudCAgIDogZW52IG9wdGlvbjtcbn1cblxuKCoqIHsxIFZhbHVlc30gKilcblxuYW5kIHZhbHVlID1cbiAgfCBOaWxcbiAgfCBCb29sICAgIG9mIGJvb2xcbiAgfCBJbnRlZ2VyIG9mIGludCAgICAoKiogRXhhY3QgaW50ZWdlciDigJQgZGlzdGluY3QgZnJvbSBpbmV4YWN0IGZsb2F0LiAqKVxuICB8IE51bWJlciAgb2YgZmxvYXQgICgqKiBJbmV4YWN0IGZsb2F0LiAqKVxuICB8IFN0cmluZyAgb2Ygc3RyaW5nXG4gIHwgU3ltYm9sIG9mIHN0cmluZ1xuICB8IEtleXdvcmQgb2Ygc3RyaW5nXG4gIHwgTGlzdCAgIG9mIHZhbHVlIGxpc3RcbiAgfCBEaWN0ICAgb2YgZGljdFxuICB8IExhbWJkYSBvZiBsYW1iZGFcbiAgfCBDb21wb25lbnQgb2YgY29tcG9uZW50XG4gIHwgSXNsYW5kIG9mIGlzbGFuZFxuICB8IE1hY3JvICBvZiBtYWNyb1xuICB8IFRodW5rICBvZiB2YWx1ZSAqIGVudlxuICB8IENvbnRpbnVhdGlvbiBvZiAodmFsdWUgLT4gdmFsdWUpICogZGljdCBvcHRpb25cbiAgfCBDYWxsY2NDb250aW51YXRpb24gb2YgdmFsdWUgbGlzdCAqIGludCAgKCoqIFVuZGVsaW1pdGVkIGNvbnRpbnVhdGlvbiDigJQgY2FwdHVyZWQga29udCBmcmFtZXMgKyB3aW5kZXJzIGRlcHRoIGF0IGNhcHR1cmUgKilcbiAgfCBOYXRpdmVGbiBvZiBzdHJpbmcgKiAodmFsdWUgbGlzdCAtPiB2YWx1ZSlcbiAgfCBTaWduYWwgb2Ygc2lnbmFsXG4gIHwgUmF3SFRNTCBvZiBzdHJpbmdcbiAgfCBTcHJlYWQgb2YgKHN0cmluZyAqIHZhbHVlKSBsaXN0XG4gIHwgU3hFeHByIG9mIHN0cmluZyAgKCoqIE9wYXF1ZSBTWCB3aXJlLWZvcm1hdCBzdHJpbmcg4oCUIGFzZXIgb3V0cHV0LiAqKVxuICB8IEVudiBvZiBlbnYgICgqKiBGaXJzdC1jbGFzcyBlbnZpcm9ubWVudCDigJQgdXNlZCBieSBDRUsgbWFjaGluZSBzdGF0ZSBkaWN0cy4gKilcbiAgfCBMaXN0UmVmIG9mIHZhbHVlIGxpc3QgcmVmICAoKiogTXV0YWJsZSBsaXN0IOKAlCBKUy1zdHlsZSBhcnJheSBmb3IgYXBwZW5kISAqKVxuICB8IENla1N0YXRlIG9mIGNla19zdGF0ZSAgKCoqIE9wdGltaXplZCBDRUsgbWFjaGluZSBzdGF0ZSDigJQgYXZvaWRzIERpY3QgYWxsb2NhdGlvbi4gKilcbiAgfCBDZWtGcmFtZSBvZiBjZWtfZnJhbWUgICgqKiBPcHRpbWl6ZWQgQ0VLIGNvbnRpbnVhdGlvbiBmcmFtZS4gKilcbiAgfCBWbUNsb3N1cmUgb2Ygdm1fY2xvc3VyZSAgKCoqIFZNLWNvbXBpbGVkIGNsb3N1cmUg4oCUIGNhbGxhYmxlIHdpdGhpbiB0aGUgVk0gd2l0aG91dCBhbGxvY2F0aW5nIGEgbmV3IFZNLiAqKVxuICB8IFZtRnJhbWUgb2Ygdm1fZnJhbWUgICgqKiBWTSBjYWxsIGZyYW1lIOKAlCBvbmUgcGVyIGZ1bmN0aW9uIGludm9jYXRpb24uICopXG4gIHwgVm1NYWNoaW5lIG9mIHZtX21hY2hpbmUgICgqKiBWTSBzdGF0ZSDigJQgc3RhY2ssIGZyYW1lcywgZ2xvYmFscy4gKilcbiAgfCBSZWNvcmQgb2YgcmVjb3JkICAoKiogUjdSUyByZWNvcmQg4oCUIG9wYXF1ZSwgZ2VuZXJhdGl2ZSwgZmllbGQtaW5kZXhlZC4gKilcbiAgfCBQYXJhbWV0ZXIgb2YgcGFyYW1ldGVyICAoKiogUjdSUyBwYXJhbWV0ZXIg4oCUIGR5bmFtaWMgYmluZGluZyB2aWEga29udC1zdGFjayBwcm92aWRlIGZyYW1lcy4gKilcbiAgfCBWZWN0b3Igb2YgdmFsdWUgYXJyYXkgICgqKiBSN1JTIHZlY3RvciDigJQgbXV0YWJsZSBmaXhlZC1zaXplIGFycmF5LiAqKVxuICB8IFN0cmluZ0J1ZmZlciBvZiBCdWZmZXIudCAgKCoqIE11dGFibGUgc3RyaW5nIGJ1ZmZlciDigJQgTygxKSBhbW9ydGl6ZWQgYXBwZW5kLiAqKVxuICB8IEhhc2hUYWJsZSBvZiAodmFsdWUsIHZhbHVlKSBIYXNodGJsLnQgICgqKiBNdXRhYmxlIGhhc2ggdGFibGUgd2l0aCBhcmJpdHJhcnkga2V5cy4gKilcbiAgfCBDaGFyIG9mIGludCAgKCoqIFVuaWNvZGUgY29kZXBvaW50IOKAlCBSN1JTIGNoYXIgdHlwZS4gKilcbiAgfCBFb2YgICAgICAgICAgICAoKiogRU9GIHNlbnRpbmVsIOKAlCByZXR1cm5lZCBieSByZWFkLWNoYXIgZXRjLiBhdCBlbmQgb2YgaW5wdXQuICopXG4gIHwgUG9ydCBvZiBzeF9wb3J0ICAoKiogU3RyaW5nIHBvcnQg4oCUIGlucHV0IChzdHJpbmcgY3Vyc29yKSBvciBvdXRwdXQgKGJ1ZmZlcikuICopXG4gIHwgUmF0aW9uYWwgb2YgaW50ICogaW50ICAoKiogRXhhY3QgcmF0aW9uYWw6IG51bWVyYXRvciwgZGVub21pbmF0b3IgKHJlZHVjZWQsIGRlbm9tPjApLiAqKVxuICB8IFN4U2V0IG9mIChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQgICgqKiBNdXRhYmxlIHNldCBrZXllZCBieSBpbnNwZWN0KHZhbHVlKS4gKilcbiAgfCBTeFJlZ2V4cCBvZiBzdHJpbmcgKiBzdHJpbmcgKiBSZS5yZSAgKCoqIFJlZ2V4cDogc291cmNlLCBmbGFncywgY29tcGlsZWQuICopXG4gIHwgU3hCeXRldmVjdG9yIG9mIGJ5dGVzICAoKiogTXV0YWJsZSBieXRldmVjdG9yIOKAlCBSN1JTIGJ5dGV2ZWN0b3IgdHlwZS4gKilcblxuKCoqIFN0cmluZyBpbnB1dCBwb3J0OiBzb3VyY2Ugc3RyaW5nICsgbXV0YWJsZSBjdXJzb3IgcG9zaXRpb24uICopXG5hbmQgc3hfcG9ydF9raW5kID1cbiAgfCBQb3J0SW5wdXQgb2Ygc3RyaW5nICogaW50IHJlZlxuICB8IFBvcnRPdXRwdXQgb2YgQnVmZmVyLnRcblxuYW5kIHN4X3BvcnQgPSB7XG4gIG11dGFibGUgc3BfY2xvc2VkIDogYm9vbDtcbiAgc3Bfa2luZCA6IHN4X3BvcnRfa2luZDtcbn1cblxuKCoqIENFSyBtYWNoaW5lIHN0YXRlIOKAlCByZWNvcmQgaW5zdGVhZCBvZiBEaWN0IGZvciBwZXJmb3JtYW5jZS5cbiAgICA1IGZpZWxkcyDDlyA1NUsgc3RlcHMvc2VjID0gMjc1SyBIYXNodGJsIGFsbG9jYXRpb25zL3NlYyBlbGltaW5hdGVkLiAqKVxuYW5kIGNla19zdGF0ZSA9IHtcbiAgY3NfY29udHJvbCA6IHZhbHVlO1xuICBjc19lbnYgICAgIDogdmFsdWU7XG4gIGNzX2tvbnQgICAgOiB2YWx1ZTtcbiAgY3NfcGhhc2UgICA6IHN0cmluZztcbiAgY3NfdmFsdWUgICA6IHZhbHVlO1xufVxuXG4oKiogQ0VLIGNvbnRpbnVhdGlvbiBmcmFtZSDigJQgdGFnZ2VkIHJlY29yZCBjb3ZlcmluZyBhbGwgMjkgZnJhbWUgdHlwZXMuXG4gICAgRmllbGRzIGFyZSBuYW1lZCBnZW5lcmljYWxseTsgbm90IGFsbCBhcmUgdXNlZCBieSBldmVyeSBmcmFtZSB0eXBlLlxuICAgIEVsaW1pbmF0ZXMgfjEwMEsgSGFzaHRibCBhbGxvY2F0aW9ucyBwZXIgcGFnZSByZW5kZXIuICopXG5hbmQgY2VrX2ZyYW1lID0ge1xuICBjZl90eXBlICAgICAgOiBzdHJpbmc7ICAgICAgICAoKiBmcmFtZSB0eXBlIHRhZzogXCJpZlwiLCBcImxldFwiLCBcImNhbGxcIiwgZXRjLiAqKVxuICBjZl9lbnYgICAgICAgOiB2YWx1ZTsgICAgICAgICAoKiBlbnZpcm9ubWVudCDigJQgZXZlcnkgZnJhbWUgaGFzIHRoaXMgKilcbiAgY2ZfbmFtZSAgICAgIDogdmFsdWU7ICAgICAgICAgKCogbGV0L2RlZmluZS9zZXQvc2NvcGU6IGJpbmRpbmcgbmFtZSAqKVxuICBjZl9ib2R5ICAgICAgOiB2YWx1ZTsgICAgICAgICAoKiB3aGVuL2xldDogYm9keSBleHByICopXG4gIG11dGFibGUgY2ZfcmVtYWluaW5nIDogdmFsdWU7ICAoKiBiZWdpbi9jb25kL21hcC9ldGM6IHJlbWFpbmluZyBleHBycyAqKVxuICBjZl9mICAgICAgICAgOiB2YWx1ZTsgICAgICAgICAoKiBjYWxsL21hcC9maWx0ZXIvZXRjOiBmdW5jdGlvbiAqKVxuICBjZl9hcmdzICAgICAgOiB2YWx1ZTsgICAgICAgICAoKiBjYWxsOiByYXcgYXJnczsgYXJnOiBldmFsZWQgYXJncyAqKVxuICBtdXRhYmxlIGNmX3Jlc3VsdHMgICA6IHZhbHVlOyAoKiBtYXAvZmlsdGVyL2RpY3Q6IGFjY3VtdWxhdGVkIHJlc3VsdHM7IHByb3ZpZGU6IHN1YnNjcmliZXJzICopXG4gIG11dGFibGUgY2ZfZXh0cmEgOiB2YWx1ZTsgICAgICgqIGV4dHJhIGZpZWxkOiBzY2hlbWUsIGluZGV4ZWQsIHZhbHVlLCBwaGFzZSwgZXRjLiAqKVxuICBtdXRhYmxlIGNmX2V4dHJhMiAgICA6IHZhbHVlOyAoKiBzZWNvbmQgZXh0cmE6IGVtaXR0ZWQsIGV0Yy4gKilcbn1cblxuKCoqIE11dGFibGUgc3RyaW5nLWtleWVkIHRhYmxlIChTWCBkaWN0cyBzdXBwb3J0IFtkaWN0LXNldCFdKS4gKilcbmFuZCBkaWN0ID0gKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudFxuXG5hbmQgbGFtYmRhID0ge1xuICBsX3BhcmFtcyAgOiBzdHJpbmcgbGlzdDtcbiAgbF9ib2R5ICAgIDogdmFsdWU7XG4gIGxfY2xvc3VyZSA6IGVudjtcbiAgbXV0YWJsZSBsX25hbWUgOiBzdHJpbmcgb3B0aW9uO1xuICBtdXRhYmxlIGxfY29tcGlsZWQgOiB2bV9jbG9zdXJlIG9wdGlvbjsgICgqKiBMYXp5IEpJVCBjYWNoZSAqKVxuICBtdXRhYmxlIGxfY2FsbF9jb3VudCA6IGludDsgICAgICAgICAgICAgICgqKiBUaWVyZWQtY29tcGlsYXRpb24gY291bnRlciDigJQgSklUIGFmdGVyIHRocmVzaG9sZCBjYWxscyAqKVxuICBsX3VpZCA6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKiBVbmlxdWUgaWRlbnRpdHkgZm9yIExSVSBjYWNoZSB0cmFja2luZyAqKVxufVxuXG5hbmQgY29tcG9uZW50ID0ge1xuICBjX25hbWUgICAgICAgICA6IHN0cmluZztcbiAgY19wYXJhbXMgICAgICAgOiBzdHJpbmcgbGlzdDtcbiAgY19oYXNfY2hpbGRyZW4gOiBib29sO1xuICBjX2JvZHkgICAgICAgICA6IHZhbHVlO1xuICBjX2Nsb3N1cmUgICAgICA6IGVudjtcbiAgY19hZmZpbml0eSAgICAgOiBzdHJpbmc7ICAoKiogXCJhdXRvXCIgfCBcImNsaWVudFwiIHwgXCJzZXJ2ZXJcIiAqKVxuICBtdXRhYmxlIGNfZmlsZSA6IHN0cmluZyBvcHRpb247ICAoKiogU291cmNlIGZpbGUgcGF0aCAqKVxuICBtdXRhYmxlIGNfY29tcGlsZWQgOiB2bV9jbG9zdXJlIG9wdGlvbjsgICgqKiBMYXp5IEpJVCBjYWNoZSAqKVxufVxuXG5hbmQgaXNsYW5kID0ge1xuICBpX25hbWUgICAgICAgICA6IHN0cmluZztcbiAgaV9wYXJhbXMgICAgICAgOiBzdHJpbmcgbGlzdDtcbiAgaV9oYXNfY2hpbGRyZW4gOiBib29sO1xuICBpX2JvZHkgICAgICAgICA6IHZhbHVlO1xuICBpX2Nsb3N1cmUgICAgICA6IGVudjtcbiAgbXV0YWJsZSBpX2ZpbGUgOiBzdHJpbmcgb3B0aW9uOyAgKCoqIFNvdXJjZSBmaWxlIHBhdGggKilcbiAgbXV0YWJsZSBpX2NvbXBpbGVkIDogdm1fY2xvc3VyZSBvcHRpb247ICAoKiogTGF6eSBKSVQgY2FjaGUgKilcbn1cblxuYW5kIG1hY3JvID0ge1xuICBtX3BhcmFtcyAgICAgOiBzdHJpbmcgbGlzdDtcbiAgbV9yZXN0X3BhcmFtIDogc3RyaW5nIG9wdGlvbjtcbiAgbV9ib2R5ICAgICAgIDogdmFsdWU7XG4gIG1fY2xvc3VyZSAgICA6IGVudjtcbiAgbV9uYW1lICAgICAgIDogc3RyaW5nIG9wdGlvbjtcbn1cblxuYW5kIHNpZ25hbCA9IHtcbiAgbXV0YWJsZSBzX3ZhbHVlICAgICAgIDogdmFsdWU7XG4gIG11dGFibGUgc19zdWJzY3JpYmVycyA6ICh1bml0IC0+IHVuaXQpIGxpc3Q7XG4gIG11dGFibGUgc19kZXBzICAgICAgICA6IHNpZ25hbCBsaXN0O1xufVxuXG4oKiogUjdSUyByZWNvcmQgdHlwZSBkZXNjcmlwdG9yIOKAlCBvbmUgcGVyIFtkZWZpbmUtcmVjb3JkLXR5cGVdIGNhbGwuXG4gICAgU3RvcmVkIGluIFtydGRfdGFibGVdOyBjbG9zdXJlcyBjYXB0dXJlIG9ubHkgdGhlIGludGVnZXIgdWlkLiAqKVxuYW5kIHJlY29yZF90eXBlID0ge1xuICBydF9uYW1lICAgICA6IHN0cmluZzsgICAgICAgKCoqIGUuZy4sIFwicG9pbnRcIiAqKVxuICBydF91aWQgICAgICA6IGludDsgICAgICAgICAgKCoqIHVuaXF1ZSBpZGVudGl0eSDigJQgZ2VuZXJhdGl2ZSAqKVxuICBydF9maWVsZHMgICA6IHN0cmluZyBhcnJheTsgKCoqIGZpZWxkIG5hbWVzIGluIGRlY2xhcmF0aW9uIG9yZGVyICopXG4gIHJ0X2N0b3JfbWFwIDogaW50IGFycmF5OyAgICAoKiogY3Rvcl9tYXBbaV0gPSBmaWVsZCBpbmRleCBmb3IgY3RvciBwYXJhbSBpICopXG59XG5cbigqKiBSN1JTIHJlY29yZCBpbnN0YW5jZSDigJQgb3BhcXVlLCBhY2Nlc3NlZCBvbmx5IHRocm91Z2ggZ2VuZXJhdGVkIGZ1bmN0aW9ucy4gKilcbmFuZCByZWNvcmQgPSB7XG4gIHJfdHlwZSAgIDogcmVjb3JkX3R5cGU7XG4gIHJfZmllbGRzIDogdmFsdWUgYXJyYXk7ICAgICAoKiogbXV0YWJsZSB2aWEgQXJyYXkuc2V0IGZvciByZWNvcmQtc2V0ISAqKVxufVxuXG4oKiogUjdSUyBwYXJhbWV0ZXIg4oCUIGR5bmFtaWMgYmluZGluZyB2aWEgcHJvdmlkZSBmcmFtZXMgb24gdGhlIGtvbnQgc3RhY2suXG4gICAgQ2FsbGluZyBbKHBhcmFtKV0gc2VhcmNoZXMga29udCBmb3IgdGhlIG5lYXJlc3QgcHJvdmlkZSBmcmFtZSBrZXllZFxuICAgIGJ5IFtwbV91aWRdOyBpZiBub3QgZm91bmQgcmV0dXJucyBbcG1fZGVmYXVsdF0uICopXG5hbmQgcGFyYW1ldGVyID0ge1xuICBwbV91aWQgICAgICAgOiBzdHJpbmc7ICAgICAgKCoqIHVuaXF1ZSBJRCDigJQgdXNlZCBhcyBwcm92aWRlIGZyYW1lIGtleSAqKVxuICBwbV9kZWZhdWx0ICAgOiB2YWx1ZTsgICAgICAgKCoqIGluaXRpYWwvZGVmYXVsdCB2YWx1ZSAqKVxuICBwbV9jb252ZXJ0ZXIgOiB2YWx1ZSBvcHRpb247ICgqKiBvcHRpb25hbCBjb252ZXJ0ZXIgZnVuY3Rpb24gKilcbn1cblxuKCoqIHsxIEJ5dGVjb2RlIFZNIHR5cGVzfVxuXG4gICAgRGVmaW5lZCBoZXJlIChub3QgaW4gc3hfdm0ubWwpIGJlY2F1c2UgW3ZtX2NvZGUuY29uc3RhbnRzXSByZWZlcmVuY2VzXG4gICAgW3ZhbHVlXSBhbmQgW2xhbWJkYS5sX2NvbXBpbGVkXSByZWZlcmVuY2VzIFt2bV9jbG9zdXJlXSDigJQgbXV0dWFsXG4gICAgcmVjdXJzaW9uIHJlcXVpcmVzIGFsbCB0eXBlcyBpbiBvbmUgW2FuZF0gY2hhaW4uICopXG5cbigqKiBDb21waWxlZCBmdW5jdGlvbiBib2R5IOKAlCBieXRlY29kZSArIGNvbnN0YW50IHBvb2wuICopXG5hbmQgdm1fY29kZSA9IHtcbiAgdmNfYXJpdHkgICAgIDogaW50O1xuICB2Y19yZXN0X2FyaXR5IDogaW50OyAgKCoqIC0xID0gbm8gJnJlc3Q7ID49IDAgPSBudW1iZXIgb2YgcG9zaXRpb25hbCBwYXJhbXMgYmVmb3JlICZyZXN0ICopXG4gIHZjX2xvY2FscyAgICA6IGludDtcbiAgdmNfYnl0ZWNvZGUgIDogaW50IGFycmF5O1xuICB2Y19jb25zdGFudHMgOiB2YWx1ZSBhcnJheTtcbiAgbXV0YWJsZSB2Y19ieXRlY29kZV9saXN0ICA6IHZhbHVlIGxpc3Qgb3B0aW9uOyAgKCoqIExhenkgY2FjaGUgZm9yIHRyYW5zcGlsZWQgVk0gKilcbiAgbXV0YWJsZSB2Y19jb25zdGFudHNfbGlzdCA6IHZhbHVlIGxpc3Qgb3B0aW9uOyAgKCoqIExhenkgY2FjaGUgZm9yIHRyYW5zcGlsZWQgVk0gKilcbn1cblxuKCoqIFVwdmFsdWUgY2VsbCDigJQgc2hhcmVkIG11dGFibGUgcmVmZXJlbmNlIHRvIGEgY2FwdHVyZWQgdmFyaWFibGUuICopXG5hbmQgdm1fdXB2YWx1ZV9jZWxsID0ge1xuICBtdXRhYmxlIHV2X3ZhbHVlIDogdmFsdWU7XG59XG5cbigqKiBDbG9zdXJlIOKAlCBjb21waWxlZCBjb2RlICsgY2FwdHVyZWQgdXB2YWx1ZXMgKyBsaXZlIGVudiByZWZlcmVuY2UuICopXG5hbmQgdm1fY2xvc3VyZSA9IHtcbiAgdm1fY29kZSAgICAgOiB2bV9jb2RlO1xuICB2bV91cHZhbHVlcyA6IHZtX3VwdmFsdWVfY2VsbCBhcnJheTtcbiAgdm1fbmFtZSAgICAgOiBzdHJpbmcgb3B0aW9uO1xuICB2bV9lbnZfcmVmICA6IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQ7XG4gIHZtX2Nsb3N1cmVfZW52IDogZW52IG9wdGlvbjsgICgqKiBPcmlnaW5hbCBjbG9zdXJlIGVudiBmb3IgaW5uZXIgZnVuY3Rpb25zICopXG59XG5cbigqKiBWTSBjYWxsIGZyYW1lIOKAlCBvbmUgcGVyIGZ1bmN0aW9uIGludm9jYXRpb24uXG4gICAgRGVmaW5lZCBoZXJlIChub3QgaW4gc3hfdm0ubWwpIHNvIGl0IGNhbiBiZSBhIFt2YWx1ZV0gdmFyaWFudC4gKilcbmFuZCB2bV9mcmFtZSA9IHtcbiAgdmZfY2xvc3VyZSAgICA6IHZtX2Nsb3N1cmU7XG4gIG11dGFibGUgdmZfaXAgOiBpbnQ7XG4gIHZmX2Jhc2UgICAgICAgOiBpbnQ7XG4gIHZmX2xvY2FsX2NlbGxzIDogKGludCwgdm1fdXB2YWx1ZV9jZWxsKSBIYXNodGJsLnQ7XG59XG5cbigqKiBWTSBzdGF0ZSDigJQgc3RhY2sgbWFjaGluZSB3aXRoIGZyYW1lIGxpc3QuXG4gICAgRGVmaW5lZCBoZXJlIGZvciB0aGUgc2FtZSBtdXR1YWwtcmVjdXJzaW9uIHJlYXNvbi4gKilcbmFuZCB2bV9tYWNoaW5lID0ge1xuICBtdXRhYmxlIHZtX3N0YWNrICAgOiB2YWx1ZSBhcnJheTtcbiAgbXV0YWJsZSB2bV9zcCAgICAgIDogaW50O1xuICBtdXRhYmxlIHZtX2ZyYW1lcyAgOiB2bV9mcmFtZSBsaXN0O1xuICB2bV9nbG9iYWxzICAgICAgICAgOiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50O1xuICBtdXRhYmxlIHZtX3BlbmRpbmdfY2VrIDogdmFsdWUgb3B0aW9uO1xufVxuXG5cbigqKiB7MSBGb3J3YXJkIHJlZiBmb3IgY2FsbGluZyBWTSBjbG9zdXJlcyBmcm9tIG91dHNpZGUgdGhlIFZNfSAqKVxuXG5sZXQgX3ZtX2NhbGxfY2xvc3VyZV9yZWYgOiAodm1fY2xvc3VyZSAtPiB2YWx1ZSBsaXN0IC0+IHZhbHVlKSByZWYgPVxuICByZWYgKGZ1biBfIF8gLT4gcmFpc2UgKEZhaWx1cmUgXCJWTSBjYWxsX2Nsb3N1cmUgbm90IGluaXRpYWxpemVkXCIpKVxuXG4oKiogRm9yd2FyZCByZWYgZm9yIGNhbGxpbmcgQ0VLIGV2YWx1YXRvciBmcm9tIHByaW1pdGl2ZXMgKGF2b2lkcyBkZXBlbmRlbmN5IGN5Y2xlKS4gKilcbmxldCBfY2VrX2NhbGxfcmVmIDogKHZhbHVlIC0+IHZhbHVlIC0+IHZhbHVlKSByZWYgPVxuICByZWYgKGZ1biBfIF8gLT4gcmFpc2UgKEZhaWx1cmUgXCJDRUsgY2FsbCBub3QgaW5pdGlhbGl6ZWRcIikpXG5cbigqKiBGb3J3YXJkIHJlZjogZXZhbHVhdGUgYSBMYW1iZGEgdmlhIENFSyAoc3VwcG9ydHMgcGVyZm9ybS9zdXNwZW5zaW9uKS5cbiAgICBTZXQgYnkgc3hfdm0ubWwgdG8gYnJlYWsgdGhlIHN4X3J1bnRpbWUg4oaSIHN4X3JlZiBkZXBlbmRlbmN5IGN5Y2xlLiAqKVxubGV0IF9jZWtfZXZhbF9sYW1iZGFfcmVmIDogKHZhbHVlIC0+IHZhbHVlIGxpc3QgLT4gdmFsdWUpIHJlZiA9XG4gIHJlZiAoZnVuIF8gXyAtPiByYWlzZSAoRmFpbHVyZSBcIkNFSyBldmFsIGxhbWJkYSBub3QgaW5pdGlhbGl6ZWRcIikpXG5cblxuKCoqIHsxIEVycm9yc30gKilcblxuZXhjZXB0aW9uIEV2YWxfZXJyb3Igb2Ygc3RyaW5nXG5leGNlcHRpb24gUGFyc2VfZXJyb3Igb2Ygc3RyaW5nXG5cbigqKiBSYWlzZWQgd2hlbiBhIFZtQ2xvc3VyZSBoaXRzIE9QX1BFUkZPUk0gaW5zaWRlIGEgQ0VLIGV2YWx1YXRpb24uXG4gICAgVGhlIENFSyBzdGVwIGxvb3AgY2F0Y2hlcyB0aGlzIGFuZCBjcmVhdGVzIGEgcHJvcGVyIGlvLXN1c3BlbmRlZCBzdGF0ZVxuICAgIHdpdGggdGhlIGNvbnRpbnVhdGlvbiBwcmVzZXJ2ZWQgZm9yIHJlc3VtZS4gRGVmaW5lZCBoZXJlIChub3QgaW4gc3hfdm0pXG4gICAgdG8gYXZvaWQgYSBkZXBlbmRlbmN5IGN5Y2xlIGJldHdlZW4gc3hfcnVudGltZSBhbmQgc3hfdm0uICopXG5leGNlcHRpb24gQ2VrUGVyZm9ybVJlcXVlc3Qgb2YgdmFsdWVcblxuKCoqIEhvb2s6IHJlc29sdmUgSU8gc3VzcGVuc2lvbiBpbmxpbmUgaW4gY2VrX3J1bi5cbiAgICBXaGVuIHNldCwgY2VrX3J1biBjYWxscyB0aGlzIGluc3RlYWQgb2YgcmFpc2luZyBcIklPIHN1c3BlbnNpb24gaW4gbm9uLUlPIGNvbnRleHRcIi5cbiAgICBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgdGhlIHN1c3BlbmRlZCBzdGF0ZSBhbmQgcmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgVXNlZCBieSB0aGUgSFRUUCBzZXJ2ZXIgdG8gaGFuZGxlIHBlcmZvcm0gKHRleHQtbWVhc3VyZSkgZHVyaW5nIGFzZXIuICopXG5sZXQgX2Nla19pb19yZXNvbHZlciA6ICh2YWx1ZSAtPiB2YWx1ZSAtPiB2YWx1ZSkgb3B0aW9uIHJlZiA9IHJlZiBOb25lXG5cbigqKiBIb29rOiBoYW5kbGUgQ0VLIElPIHN1c3BlbnNpb24gaW4gZXZhbF9leHByIChjZWtfcnVuX2l0ZXJhdGl2ZSkuXG4gICAgV2hlbiBzZXQsIGNhbGxlZCB3aXRoIHRoZSBzdXNwZW5kZWQgQ0VLIHN0YXRlIGluc3RlYWQgb2YgcmFpc2luZ1xuICAgIFwiSU8gc3VzcGVuc2lvbiBpbiBub24tSU8gY29udGV4dFwiLiBVc2VkIGJ5IHRoZSBicm93c2VyIFdBU00ga2VybmVsXG4gICAgdG8gY29udmVydCBDRUsgc3VzcGVuc2lvbnMgdG8gVm1TdXNwZW5kZWQgZm9yIF9kcml2ZUFzeW5jIGhhbmRsaW5nLiAqKVxubGV0IF9jZWtfaW9fc3VzcGVuZF9ob29rIDogKHZhbHVlIC0+IHZhbHVlKSBvcHRpb24gcmVmID0gcmVmIE5vbmVcblxuKCoqIERlZmF1bHQgVk0gZ2xvYmFscyBmb3Igc3R1YiBWTXMgY3JlYXRlZCBkdXJpbmcgSU8gc3VzcGVuc2lvbi5cbiAgICBTZXQgYnkgc3hfYnJvd3Nlci5tbCB0byBfdm1fZ2xvYmFscyBzbyBDRUsgcmVzdW1lIGNhbiBhY2Nlc3MgcGxhdGZvcm0gZnVuY3Rpb25zLiAqKVxubGV0IF9kZWZhdWx0X3ZtX2dsb2JhbHMgOiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50IHJlZiA9IHJlZiAoSGFzaHRibC5jcmVhdGUgMClcblxuKCoqIEhvb2s6IGNvbnZlcnQgVk0gc3VzcGVuc2lvbiBleGNlcHRpb25zIHRvIENla1BlcmZvcm1SZXF1ZXN0LlxuICAgIFNldCBieSBzeF92bSBhZnRlciBpdCBkZWZpbmVzIFZtU3VzcGVuZGVkLiBDYWxsZWQgYnkgc3hfcnVudGltZS5zeF9hcHBseV9jZWsuICopXG5sZXQgX2NvbnZlcnRfdm1fc3VzcGVuc2lvbiA6IChleG4gLT4gdW5pdCkgcmVmID0gcmVmIChmdW4gXyAtPiAoKSlcblxuKCoqIEhvb2s6IGNvbnZlcnQgVk0gc3VzcGVuc2lvbiB0byBhIF9fdm1fc3VzcGVuZGVkIG1hcmtlciBkaWN0LlxuICAgIFJldHVybnMgU29tZShkaWN0KSBmb3IgVm1TdXNwZW5kZWQsIE5vbmUgb3RoZXJ3aXNlLlxuICAgIFRoZSBkaWN0IGhhcyBrZXlzOiBfX3ZtX3N1c3BlbmRlZCwgcmVxdWVzdCwgcmVzdW1lLlxuICAgIFVzZWQgYnkgc3hfYXBwbHlfY2VrIHNvIGNvbnRpbnVlX3dpdGhfY2FsbCBjYW4gYnVpbGQgYSBwcm9wZXJcbiAgICBzdXNwZW5kZWQgQ0VLIHN0YXRlIHdpdGggdm0tcmVzdW1lLWZyYW1lIG9uIHRoZSBrb250LiAqKVxubGV0IF92bV9zdXNwZW5zaW9uX3RvX2RpY3QgOiAoZXhuIC0+IHZhbHVlIG9wdGlvbikgcmVmID0gcmVmIChmdW4gXyAtPiBOb25lKVxuXG5cbigqKiB7MSBSZWNvcmQgdHlwZSBkZXNjcmlwdG9yIHRhYmxlfSAqKVxuXG5sZXQgcnRkX3RhYmxlIDogKGludCwgcmVjb3JkX3R5cGUpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDE2XG5sZXQgcnRkX2NvdW50ZXIgPSByZWYgMFxuXG4oKiogezEgUGFyYW1ldGVyIFVJRCBjb3VudGVyfSAqKVxuXG5sZXQgcGFyYW1fY291bnRlciA9IHJlZiAwXG5cblxuKCoqIHsxIEVudmlyb25tZW50IG9wZXJhdGlvbnN9ICopXG5cbmxldCBtYWtlX2VudiAoKSA9XG4gIHsgYmluZGluZ3MgPSBIYXNodGJsLmNyZWF0ZSAxNjsgcGFyZW50ID0gTm9uZSB9XG5cbmxldCBlbnZfZXh0ZW5kIHBhcmVudCA9XG4gIHsgYmluZGluZ3MgPSBIYXNodGJsLmNyZWF0ZSAxNjsgcGFyZW50ID0gU29tZSBwYXJlbnQgfVxuXG4oKiBPcHRpb25hbCBob29rOiBjYWxsZWQgYWZ0ZXIgZXZlcnkgZW52X2JpbmQgd2l0aCAoZW52LCBuYW1lLCB2YWx1ZSkuXG4gICBVc2VkIGJ5IGJyb3dzZXIga2VybmVsIHRvIHN5bmMgVk0gZ2xvYmFscyB0YWJsZS4gKilcbmxldCBfZW52X2JpbmRfaG9vayA6IChlbnYgLT4gc3RyaW5nIC0+IHZhbHVlIC0+IHVuaXQpIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG4oKiBPcHRpb25hbCBob29rOiBjYWxsZWQgYWZ0ZXIgVk0gR0xPQkFMX1NFVCB3cml0ZXMgdG8gdm0uZ2xvYmFscy5cbiAgIFVzZWQgYnkgYnJvd3NlciBrZXJuZWwgdG8gc3luYyBtdXRhdGlvbnMgYmFjayB0byBnbG9iYWxfZW52LiAqKVxubGV0IF92bV9nbG9iYWxfc2V0X2hvb2sgOiAoc3RyaW5nIC0+IHZhbHVlIC0+IHVuaXQpIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG4oKiBPcHRpb25hbCBob29rOiBjYWxsZWQgYnkgY2VrX3J1biBvbiBpbXBvcnQgc3VzcGVuc2lvbi5cbiAgIElmIHNldCwgdGhlIGhvb2sgbG9hZHMgdGhlIGxpYnJhcnkgYW5kIHJldHVybnMgdHJ1ZTsgY2VrX3J1biB0aGVuIHJlc3VtZXMuICopXG5sZXQgX2ltcG9ydF9ob29rIDogKHZhbHVlIC0+IGJvb2wpIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG4oKiBPcHRpb25hbCBob29rOiBjYWxsZWQgYnkgdm1fZ2xvYmFsX2dldCB3aGVuIGEgc3ltYm9sIGlzbid0IGZvdW5kLlxuICAgUmVjZWl2ZXMgdGhlIHN5bWJvbCBuYW1lLiBJZiB0aGUgaG9vayBjYW4gcmVzb2x2ZSBpdCAoZS5nLiBieSBsb2FkaW5nIGFcbiAgIGxpYnJhcnkgdGhhdCBleHBvcnRzIGl0KSwgaXQgcmV0dXJucyBTb21lIHZhbHVlLiBPdGhlcndpc2UgTm9uZS5cbiAgIFRoaXMgZW5hYmxlcyB0cmFuc3BhcmVudCBsYXp5IG1vZHVsZSBsb2FkaW5nIOKAlCBqdXN0IHVzZSBhIHN5bWJvbCBhbmRcbiAgIHRoZSBWTSBsb2FkcyB3aGF0ZXZlciBtb2R1bGUgcHJvdmlkZXMgaXQuICopXG5sZXQgX3N5bWJvbF9yZXNvbHZlX2hvb2sgOiAoc3RyaW5nIC0+IHZhbHVlIG9wdGlvbikgb3B0aW9uIHJlZiA9IHJlZiBOb25lXG5cbmxldCBlbnZfYmluZCBlbnYgbmFtZSB2ID1cbiAgSGFzaHRibC5yZXBsYWNlIGVudi5iaW5kaW5ncyAoaW50ZXJuIG5hbWUpIHY7XG4gIChtYXRjaCAhX2Vudl9iaW5kX2hvb2sgd2l0aCBTb21lIGYgLT4gZiBlbnYgbmFtZSB2IHwgTm9uZSAtPiAoKSk7XG4gIE5pbFxuXG4oKiBJbnRlcm5hbDogc2NvcGUtY2hhaW4gbG9va3VwIHdpdGggcHJlLWludGVybmVkIElEICopXG5sZXQgcmVjIGVudl9oYXNfaWQgZW52IGlkID1cbiAgSGFzaHRibC5tZW0gZW52LmJpbmRpbmdzIGlkIHx8XG4gIG1hdGNoIGVudi5wYXJlbnQgd2l0aCBTb21lIHAgLT4gZW52X2hhc19pZCBwIGlkIHwgTm9uZSAtPiBmYWxzZVxuXG5sZXQgZW52X2hhcyBlbnYgbmFtZSA9IGVudl9oYXNfaWQgZW52IChpbnRlcm4gbmFtZSlcblxubGV0IHJlYyBlbnZfZ2V0X2lkIGVudiBpZCBuYW1lID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBlbnYuYmluZGluZ3MgaWQgd2l0aFxuICB8IFNvbWUgdiAtPiB2XG4gIHwgTm9uZSAtPlxuICAgIG1hdGNoIGVudi5wYXJlbnQgd2l0aFxuICAgIHwgU29tZSBwIC0+IGVudl9nZXRfaWQgcCBpZCBuYW1lXG4gICAgfCBOb25lIC0+XG4gICAgICAoKiBTeW1ib2wgbm90IGluIGFueSBzY29wZSDigJQgdHJ5IHRoZSByZXNvbHZlIGhvb2sgKHRyYW5zcGFyZW50IGxhenkgbG9hZGluZykuXG4gICAgICAgICBUaGUgaG9vayBsb2FkcyB0aGUgbW9kdWxlIHRoYXQgZXhwb3J0cyB0aGlzIHN5bWJvbCwgbWFraW5nIGl0IGF2YWlsYWJsZS4gKilcbiAgICAgIG1hdGNoICFfc3ltYm9sX3Jlc29sdmVfaG9vayB3aXRoXG4gICAgICB8IFNvbWUgaG9vayAtPlxuICAgICAgICAobWF0Y2ggaG9vayBuYW1lIHdpdGhcbiAgICAgICAgIHwgU29tZSB2IC0+XG4gICAgICAgICAgICgqIENhY2hlIGluIHRoZSByb290IGVudiBzbyBzdWJzZXF1ZW50IGxvb2t1cHMgYXJlIGluc3RhbnQgKilcbiAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGVudi5iaW5kaW5ncyBpZCB2OyB2XG4gICAgICAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVW5kZWZpbmVkIHN5bWJvbDogXCIgXiBuYW1lKSkpXG4gICAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVW5kZWZpbmVkIHN5bWJvbDogXCIgXiBuYW1lKSlcblxubGV0IGVudl9nZXQgZW52IG5hbWUgPSBlbnZfZ2V0X2lkIGVudiAoaW50ZXJuIG5hbWUpIG5hbWVcblxubGV0IHJlYyBlbnZfc2V0X2lkIGVudiBpZCB2ID1cbiAgaWYgSGFzaHRibC5tZW0gZW52LmJpbmRpbmdzIGlkIHRoZW4gYmVnaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZW52LmJpbmRpbmdzIGlkIHY7XG4gICAgKG1hdGNoICFfZW52X2JpbmRfaG9vayB3aXRoIFNvbWUgZiAtPiBmIGVudiAodW5pbnRlcm4gaWQpIHYgfCBOb25lIC0+ICgpKTtcbiAgICBOaWxcbiAgZW5kIGVsc2VcbiAgICBtYXRjaCBlbnYucGFyZW50IHdpdGhcbiAgICB8IFNvbWUgcCAtPiBlbnZfc2V0X2lkIHAgaWQgdlxuICAgIHwgTm9uZSAtPiBIYXNodGJsLnJlcGxhY2UgZW52LmJpbmRpbmdzIGlkIHY7IE5pbFxuXG5sZXQgZW52X3NldCBlbnYgbmFtZSB2ID0gZW52X3NldF9pZCBlbnYgKGludGVybiBuYW1lKSB2XG5cbmxldCBlbnZfbWVyZ2UgYmFzZSBvdmVybGF5ID1cbiAgaWYgYmFzZSA9PSBvdmVybGF5IHRoZW5cbiAgICB7IGJpbmRpbmdzID0gSGFzaHRibC5jcmVhdGUgMTY7IHBhcmVudCA9IFNvbWUgYmFzZSB9XG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgcmVjIGlzX2Rlc2NlbmRhbnQgZSBkZXB0aCA9XG4gICAgICBpZiBkZXB0aCA+IDEwMCB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIGUgPT0gYmFzZSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gaXNfZGVzY2VuZGFudCBwIChkZXB0aCArIDEpIHwgTm9uZSAtPiBmYWxzZVxuICAgIGluXG4gICAgaWYgaXNfZGVzY2VuZGFudCBvdmVybGF5IDAgdGhlblxuICAgICAgeyBiaW5kaW5ncyA9IEhhc2h0YmwuY3JlYXRlIDE2OyBwYXJlbnQgPSBTb21lIGJhc2UgfVxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCBlID0geyBiaW5kaW5ncyA9IEhhc2h0YmwuY3JlYXRlIDE2OyBwYXJlbnQgPSBTb21lIGJhc2UgfSBpblxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gaWQgdiAtPlxuICAgICAgICBpZiBub3QgKGVudl9oYXNfaWQgYmFzZSBpZCkgdGhlbiBIYXNodGJsLnJlcGxhY2UgZS5iaW5kaW5ncyBpZCB2XG4gICAgICApIG92ZXJsYXkuYmluZGluZ3M7XG4gICAgICBlXG4gICAgZW5kXG4gIGVuZFxuXG5cbigqKiB7MSBWYWx1ZSBleHRyYWN0aW9uIGhlbHBlcnN9ICopXG5cbigqKiBGb3JtYXQgYSBmbG9hdCBzYWZlbHkg4oCUIGRlZnVzZSBbaW50X29mX2Zsb2F0XSBvdmVyZmxvdyBvbiBodWdlXG4gICAgaW50ZWdlci12YWx1ZWQgZmxvYXRzLCBrZWVwIFslZ10gZm9yIGZyYWN0aW9ucyAodW5jaGFuZ2VkKS4gKilcbmxldCBmb3JtYXRfbnVtYmVyIG4gPVxuICBpZiBGbG9hdC5pc19uYW4gbiB0aGVuIFwibmFuXCJcbiAgZWxzZSBpZiBuID0gRmxvYXQuaW5maW5pdHkgdGhlbiBcImluZlwiXG4gIGVsc2UgaWYgbiA9IEZsb2F0Lm5lZ19pbmZpbml0eSB0aGVuIFwiLWluZlwiXG4gIGVsc2UgaWYgRmxvYXQuaXNfaW50ZWdlciBuICYmIEZsb2F0LmFicyBuIDwgMWUxNiB0aGVuXG4gICAgc3RyaW5nX29mX2ludCAoaW50X29mX2Zsb2F0IG4pXG4gIGVsc2UgaWYgRmxvYXQuaXNfaW50ZWdlciBuIHRoZW5cbiAgICBQcmludGYuc3ByaW50ZiBcIiUuMTdnXCIgblxuICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJWdcIiBuXG5cbmxldCB2YWx1ZV90b19zdHJpbmcgPSBmdW5jdGlvblxuICB8IFN0cmluZyBzIC0+IHMgfCBTeW1ib2wgcyAtPiBzIHwgS2V5d29yZCBrIC0+IGtcbiAgfCBJbnRlZ2VyIG4gLT4gc3RyaW5nX29mX2ludCBuXG4gIHwgTnVtYmVyIG4gLT4gZm9ybWF0X251bWJlciBuXG4gIHwgQm9vbCB0cnVlIC0+IFwidHJ1ZVwiIHwgQm9vbCBmYWxzZSAtPiBcImZhbHNlXCJcbiAgfCBOaWwgLT4gXCJcIiB8IF8gLT4gXCI8dmFsdWU+XCJcblxubGV0IHZhbHVlX3RvX3N0cmluZ19saXN0ID0gZnVuY3Rpb25cbiAgfCBMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSAtPiBMaXN0Lm1hcCB2YWx1ZV90b19zdHJpbmcgaXRlbXNcbiAgfCBfIC0+IFtdXG5cbmxldCB2YWx1ZV90b19ib29sID0gZnVuY3Rpb25cbiAgfCBCb29sIGIgLT4gYiB8IE5pbCAtPiBmYWxzZSB8IF8gLT4gdHJ1ZVxuXG5sZXQgdmFsdWVfdG9fc3RyaW5nX29wdCA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nIHMgLT4gU29tZSBzIHwgU3ltYm9sIHMgLT4gU29tZSBzIHwgTmlsIC0+IE5vbmUgfCBfIC0+IE5vbmVcblxuXG4oKiogezEgQ29uc3RydWN0b3JzIOKAlCBhY2NlcHQgW3ZhbHVlXSBhcmdzIGZyb20gdHJhbnNwaWxlZCBjb2RlfSAqKVxuXG5sZXQgdW53cmFwX2Vudl92YWwgPSBmdW5jdGlvblxuICB8IEVudiBlIC0+IGVcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZV9sYW1iZGE6IGV4cGVjdGVkIGVudiBmb3IgY2xvc3VyZVwiKVxuXG4oKiBMYW1iZGEgVUlEIOKAlCBtaW50ZWQgb24gY29uc3RydWN0aW9uLCB1c2VkIGFzIExSVSBjYWNoZSBrZXkgKFBoYXNlIDIpLiAqKVxubGV0IGxhbWJkYV91aWRfY291bnRlciA9IHJlZiAwXG5sZXQgbmV4dF9sYW1iZGFfdWlkICgpID0gaW5jciBsYW1iZGFfdWlkX2NvdW50ZXI7ICFsYW1iZGFfdWlkX2NvdW50ZXJcblxubGV0IG1ha2VfbGFtYmRhIHBhcmFtcyBib2R5IGNsb3N1cmUgPVxuICBsZXQgcHMgPSBtYXRjaCBwYXJhbXMgd2l0aFxuICAgIHwgTGlzdCBpdGVtcyAtPiBMaXN0Lm1hcCB2YWx1ZV90b19zdHJpbmcgaXRlbXNcbiAgICB8IF8gLT4gdmFsdWVfdG9fc3RyaW5nX2xpc3QgcGFyYW1zXG4gIGluXG4gIExhbWJkYSB7IGxfcGFyYW1zID0gcHM7IGxfYm9keSA9IGJvZHk7IGxfY2xvc3VyZSA9IHVud3JhcF9lbnZfdmFsIGNsb3N1cmU7IGxfbmFtZSA9IE5vbmU7IGxfY29tcGlsZWQgPSBOb25lOyBsX2NhbGxfY291bnQgPSAwOyBsX3VpZCA9IG5leHRfbGFtYmRhX3VpZCAoKSB9XG5cbigqKiB7MSBKSVQgY2FjaGUgY29udHJvbH1cblxuICAgIFRpZXJlZCBjb21waWxhdGlvbjogb25seSBKSVQgYSBsYW1iZGEgYWZ0ZXIgaXQncyBiZWVuIGNhbGxlZCBbaml0X3RocmVzaG9sZF1cbiAgICB0aW1lcy4gVGhpcyBmaWx0ZXJzIG91dCBvbmUtc2hvdCBsYW1iZGFzICh0ZXN0IGhhcm5lc3MsIGR5bmFtaWMgZXZhbCwgUkVQTHMpXG4gICAgc28gdGhleSBuZXZlciBlbnRlciB0aGUgSklUIGNhY2hlLiBDb3VudGVycyBhcmUgZXhwb3NlZCB0byBTWCBhcyBbKGppdC1zdGF0cyldLlxuXG4gICAgVGhlc2UgbGl2ZSBoZXJlIChpbiBzeF90eXBlcykgcmF0aGVyIHRoYW4gc3hfdm0gc28gW3N4X3ByaW1pdGl2ZXNdIGNhbiByZWFkXG4gICAgdGhlbSB3aXRob3V0IGNyZWF0aW5nIGEgc3hfcHJpbWl0aXZlcyDihpIgc3hfdm0gZGVwZW5kZW5jeSBjeWNsZS4gKilcbmxldCBqaXRfdGhyZXNob2xkID0gcmVmIDRcbmxldCBqaXRfY29tcGlsZWRfY291bnQgPSByZWYgMFxubGV0IGppdF9za2lwcGVkX2NvdW50ID0gcmVmIDBcbmxldCBqaXRfdGhyZXNob2xkX3NraXBwZWRfY291bnQgPSByZWYgMFxuXG4oKiogezIgSklUIGNhY2hlIExSVSBldmljdGlvbiDigJQgUGhhc2UgMn1cblxuICAgIE9uY2UgYSBsYW1iZGEgY3Jvc3NlcyB0aGUgdGhyZXNob2xkLCBpdHMgW2xfY29tcGlsZWRdIHNsb3QgaXMgZmlsbGVkLlxuICAgIFRvIGJvdW5kIG1lbW9yeSB1bmRlciB1bmJvdW5kZWQgY29tcGlsYXRpb24gcHJlc3N1cmUsIHRyYWNrIGFsbCBsaXZlXG4gICAgY29tcGlsZWQgbGFtYmRhcyBpbiBGSUZPIG9yZGVyLCBhbmQgZXZpY3QgZnJvbSB0aGUgaGVhZCB3aGVuIHRoZSBjb3VudFxuICAgIGV4Y2VlZHMgW2ppdF9idWRnZXRdLlxuXG4gICAgW2xhbWJkYV91aWRfY291bnRlcl0gbWludHMgdW5pcXVlIGlkZW50aXRpZXMgb24gbGFtYmRhIGNyZWF0aW9uOyB0aGVcbiAgICBMUlUgcXVldWUgaG9sZHMgdGhlc2UgSURzIHBhaXJlZCB3aXRoIGEgYmFjay1yZWZlcmVuY2UgdG8gdGhlIGxhbWJkYVxuICAgIHNvIHdlIGNhbiBjbGVhciBpdHMgW2xfY29tcGlsZWRdIHNsb3Qgb24gZXZpY3Rpb24uXG5cbiAgICBCdWRnZXQgb2YgMCA9IG5vIGNhY2hlIChkaXNhYmxlIEpJVCBlbnRpcmVseSkuXG4gICAgQnVkZ2V0IG9mIFttYXhfaW50XSA9IHVuYm91bmRlZCAobGVnYWN5IGJlaGF2aW91cikuIERlZmF1bHQgNTAwMCBpc1xuICAgIGEgZ2VuZXJvdXMgY2VpbGluZyBmb3IgYW55IHJlYWxpc3RpYyBwYWdlOyB0aGUgdGVzdCBoYXJuZXNzIGNvbXBpbGVzXG4gICAgfjMwMDAgZGlzdGluY3Qgb25lLXNob3QgbGFtYmRhcyBpbiBhIGZ1bGwgcnVuIGJ1dCB0aWVyZWQgY29tcGlsYXRpb25cbiAgICAoUGhhc2UgMSkgbWVhbnMgbW9zdCBuZXZlciBlbnRlciB0aGUgY2FjaGUsIHNvIHN0ZWFkeS1zdGF0ZSBjb3VudFxuICAgIHN0YXlzIHNtYWxsLlxuXG4gICAgW2xhbWJkYV91aWRfY291bnRlcl0gYW5kIFtuZXh0X2xhbWJkYV91aWRdIGFyZSBkZWZpbmVkIGFib3ZlXG4gICAgW21ha2VfbGFtYmRhXSAod2hpY2ggdXNlcyB0aGVtIG9uIGNvbnN0cnVjdGlvbikuICopXG5sZXQgaml0X2J1ZGdldCA9IHJlZiA1MDAwXG5sZXQgaml0X2V2aWN0ZWRfY291bnQgPSByZWYgMFxuXG4oKiogTGl2ZSBjb21waWxlZCBsYW1iZGFzIGluIEZJRk8gb3JkZXIg4oCUIGZyb250IGlzIG9sZGVzdCwgYmFjayBpcyBuZXdlc3QuXG4gICAgRWFjaCBlbnRyeSBpcyAodWlkLCBsYW1iZGEpOyBvbiBldmljdGlvbiB3ZSBjbGVhciBsYW1iZGEubF9jb21waWxlZCBhbmRcbiAgICBkcm9wIGZyb20gdGhlIHF1ZXVlLiBVc2luZyBhIG11dGFibGUgUXVldWUgcmF0aGVyIHRoYW4gYSBoYW5kLXJvbGxlZFxuICAgIGxpbmtlZCBsaXN0IGJlY2F1c2UgZXZpY3Rpb24gaXMgYW1vcnRpc2VkIE8oMSkgYXQgdGhlIGhlYWQgYW5kIGluc2VydHNcbiAgICBhcmUgTygxKSBhdCB0aGUgdGFpbC4gKilcbmxldCBqaXRfY2FjaGVfcXVldWUgOiAoaW50ICogdmFsdWUpIFF1ZXVlLnQgPSBRdWV1ZS5jcmVhdGUgKClcbmxldCBqaXRfY2FjaGVfc2l6ZSAoKSA9IFF1ZXVlLmxlbmd0aCBqaXRfY2FjaGVfcXVldWVcblxubGV0IG1ha2VfY29tcG9uZW50IG5hbWUgcGFyYW1zIGhhc19jaGlsZHJlbiBib2R5IGNsb3N1cmUgYWZmaW5pdHkgPVxuICBsZXQgbiA9IHZhbHVlX3RvX3N0cmluZyBuYW1lIGluXG4gIGxldCBwcyA9IHZhbHVlX3RvX3N0cmluZ19saXN0IHBhcmFtcyBpblxuICBsZXQgaGMgPSB2YWx1ZV90b19ib29sIGhhc19jaGlsZHJlbiBpblxuICBsZXQgYWZmID0gbWF0Y2ggYWZmaW5pdHkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcImF1dG9cIiBpblxuICBDb21wb25lbnQge1xuICAgIGNfbmFtZSA9IG47IGNfcGFyYW1zID0gcHM7IGNfaGFzX2NoaWxkcmVuID0gaGM7XG4gICAgY19ib2R5ID0gYm9keTsgY19jbG9zdXJlID0gdW53cmFwX2Vudl92YWwgY2xvc3VyZTsgY19hZmZpbml0eSA9IGFmZjtcbiAgICBjX2ZpbGUgPSBOb25lOyBjX2NvbXBpbGVkID0gTm9uZTtcbiAgfVxuXG5sZXQgbWFrZV9pc2xhbmQgbmFtZSBwYXJhbXMgaGFzX2NoaWxkcmVuIGJvZHkgY2xvc3VyZSA9XG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nIG5hbWUgaW5cbiAgbGV0IHBzID0gdmFsdWVfdG9fc3RyaW5nX2xpc3QgcGFyYW1zIGluXG4gIGxldCBoYyA9IHZhbHVlX3RvX2Jvb2wgaGFzX2NoaWxkcmVuIGluXG4gIElzbGFuZCB7XG4gICAgaV9uYW1lID0gbjsgaV9wYXJhbXMgPSBwczsgaV9oYXNfY2hpbGRyZW4gPSBoYztcbiAgICBpX2JvZHkgPSBib2R5OyBpX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlO1xuICAgIGlfZmlsZSA9IE5vbmU7IGlfY29tcGlsZWQgPSBOb25lO1xuICB9XG5cbmxldCBtYWtlX21hY3JvIHBhcmFtcyByZXN0X3BhcmFtIGJvZHkgY2xvc3VyZSBuYW1lID1cbiAgbGV0IHBzID0gdmFsdWVfdG9fc3RyaW5nX2xpc3QgcGFyYW1zIGluXG4gIGxldCBycCA9IHZhbHVlX3RvX3N0cmluZ19vcHQgcmVzdF9wYXJhbSBpblxuICBsZXQgbiA9IHZhbHVlX3RvX3N0cmluZ19vcHQgbmFtZSBpblxuICBNYWNybyB7XG4gICAgbV9wYXJhbXMgPSBwczsgbV9yZXN0X3BhcmFtID0gcnA7XG4gICAgbV9ib2R5ID0gYm9keTsgbV9jbG9zdXJlID0gdW53cmFwX2Vudl92YWwgY2xvc3VyZTsgbV9uYW1lID0gbjtcbiAgfVxuXG5sZXQgbWFrZV90aHVuayBleHByIGVudiA9IFRodW5rIChleHByLCB1bndyYXBfZW52X3ZhbCBlbnYpXG5cbmxldCBtYWtlX3N5bWJvbCBuYW1lID0gU3ltYm9sICh2YWx1ZV90b19zdHJpbmcgbmFtZSlcbmxldCBtYWtlX2tleXdvcmQgbmFtZSA9IEtleXdvcmQgKHZhbHVlX3RvX3N0cmluZyBuYW1lKVxuXG5cbigqKiB7MSBUeXBlIGluc3BlY3Rpb259ICopXG5cbmxldCB0eXBlX29mID0gZnVuY3Rpb25cbiAgfCBOaWwgICAgICAgICAgICAtPiBcIm5pbFwiXG4gIHwgQm9vbCBfICAgICAgICAgLT4gXCJib29sZWFuXCJcbiAgfCBJbnRlZ2VyIF8gICAgICAtPiBcIm51bWJlclwiXG4gIHwgTnVtYmVyIF8gICAgICAgLT4gXCJudW1iZXJcIlxuICB8IFN0cmluZyBfICAgICAgIC0+IFwic3RyaW5nXCJcbiAgfCBTeW1ib2wgXyAgICAgICAtPiBcInN5bWJvbFwiXG4gIHwgS2V5d29yZCBfICAgICAgLT4gXCJrZXl3b3JkXCJcbiAgfCBMaXN0IF8gfCBMaXN0UmVmIF8gLT4gXCJsaXN0XCJcbiAgfCBEaWN0IF8gICAgICAgICAtPiBcImRpY3RcIlxuICB8IExhbWJkYSBfICAgICAgIC0+IFwibGFtYmRhXCJcbiAgfCBDb21wb25lbnQgXyAgICAtPiBcImNvbXBvbmVudFwiXG4gIHwgSXNsYW5kIF8gICAgICAgLT4gXCJpc2xhbmRcIlxuICB8IE1hY3JvIF8gICAgICAgIC0+IFwibWFjcm9cIlxuICB8IFRodW5rIF8gICAgICAgIC0+IFwidGh1bmtcIlxuICB8IENvbnRpbnVhdGlvbiAoXywgXykgLT4gXCJjb250aW51YXRpb25cIlxuICB8IENhbGxjY0NvbnRpbnVhdGlvbiAoXywgXykgLT4gXCJjb250aW51YXRpb25cIlxuICB8IE5hdGl2ZUZuIF8gICAgIC0+IFwiZnVuY3Rpb25cIlxuICB8IFNpZ25hbCBfICAgICAgIC0+IFwic2lnbmFsXCJcbiAgfCBSYXdIVE1MIF8gICAgICAtPiBcInJhdy1odG1sXCJcbiAgfCBTcHJlYWQgXyAgICAgICAtPiBcInNwcmVhZFwiXG4gIHwgU3hFeHByIF8gICAgICAgLT4gXCJzeC1leHByXCJcbiAgfCBFbnYgXyAgICAgICAgICAtPiBcImVudlwiXG4gIHwgQ2VrU3RhdGUgXyAgICAgLT4gXCJkaWN0XCIgICgqIENFSyBzdGF0ZSBiZWhhdmVzIGFzIGEgZGljdCBmb3IgdHlwZSBjaGVja3MgKilcbiAgfCBDZWtGcmFtZSBfICAgICAtPiBcImRpY3RcIlxuICB8IFZtQ2xvc3VyZSBfICAgIC0+IFwiZnVuY3Rpb25cIlxuICB8IFZtRnJhbWUgXyAgICAgIC0+IFwidm0tZnJhbWVcIlxuICB8IFZtTWFjaGluZSBfICAgIC0+IFwidm0tbWFjaGluZVwiXG4gIHwgUmVjb3JkIHIgICAgICAgLT4gci5yX3R5cGUucnRfbmFtZVxuICB8IFBhcmFtZXRlciBfICAgIC0+IFwicGFyYW1ldGVyXCJcbiAgfCBWZWN0b3IgXyAgICAgICAtPiBcInZlY3RvclwiXG4gIHwgU3RyaW5nQnVmZmVyIF8gLT4gXCJzdHJpbmctYnVmZmVyXCJcbiAgfCBIYXNoVGFibGUgXyAgICAtPiBcImhhc2gtdGFibGVcIlxuICB8IENoYXIgXyAgICAgICAgIC0+IFwiY2hhclwiXG4gIHwgRW9mICAgICAgICAgICAgLT4gXCJlb2Ytb2JqZWN0XCJcbiAgfCBQb3J0IHsgc3Bfa2luZCA9IFBvcnRJbnB1dCBfOyBfIH0gIC0+IFwiaW5wdXQtcG9ydFwiXG4gIHwgUG9ydCB7IHNwX2tpbmQgPSBQb3J0T3V0cHV0IF87IF8gfSAtPiBcIm91dHB1dC1wb3J0XCJcbiAgfCBSYXRpb25hbCBfICAtPiBcInJhdGlvbmFsXCJcbiAgfCBTeFNldCBfICAgICAgICAgIC0+IFwic2V0XCJcbiAgfCBTeFJlZ2V4cCBfICAgICAgIC0+IFwicmVnZXhwXCJcbiAgfCBTeEJ5dGV2ZWN0b3IgXyAgIC0+IFwiYnl0ZXZlY3RvclwiXG5cbmxldCBpc19uaWwgPSBmdW5jdGlvbiBOaWwgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcbmxldCBpc19sYW1iZGEgPSBmdW5jdGlvbiBMYW1iZGEgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX2NvbXBvbmVudCA9IGZ1bmN0aW9uIENvbXBvbmVudCBfIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfaXNsYW5kID0gZnVuY3Rpb24gSXNsYW5kIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcbmxldCBpc19tYWNybyA9IGZ1bmN0aW9uIE1hY3JvIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcbmxldCBpc190aHVuayA9IGZ1bmN0aW9uIFRodW5rIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcbmxldCBpc19zaWduYWwgPSBmdW5jdGlvblxuICB8IFNpZ25hbCBfIC0+IHRydWVcbiAgfCBEaWN0IGQgLT4gSGFzaHRibC5tZW0gZCBcIl9fc2lnbmFsXCJcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBpc19yZWNvcmQgPSBmdW5jdGlvbiBSZWNvcmQgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZVxuXG5sZXQgaXNfY2FsbGFibGUgPSBmdW5jdGlvblxuICB8IExhbWJkYSBfIHwgTmF0aXZlRm4gXyB8IENvbnRpbnVhdGlvbiAoXywgXykgfCBDYWxsY2NDb250aW51YXRpb24gKF8sIF8pIHwgVm1DbG9zdXJlIF8gLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuXG4oKiogezEgVHJ1dGhpbmVzc30gKilcblxuKCoqIFNYIHRydXRoaW5lc3M6IGV2ZXJ5dGhpbmcgaXMgdHJ1dGh5IGV4Y2VwdCBbTmlsXSBhbmQgW0Jvb2wgZmFsc2VdLiAqKVxubGV0IHN4X3RydXRoeSA9IGZ1bmN0aW9uXG4gIHwgTmlsIHwgQm9vbCBmYWxzZSAtPiBmYWxzZVxuICB8IF8gLT4gdHJ1ZVxuXG5cbigqKiB7MSBBY2Nlc3NvcnN9ICopXG5cbmxldCBzeW1ib2xfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgU3ltYm9sIHMgLT4gU3RyaW5nIHNcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIHN5bWJvbCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGtleXdvcmRfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgS2V5d29yZCBrIC0+IFN0cmluZyBrXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBrZXl3b3JkLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbGFtYmRhX3BhcmFtcyA9IGZ1bmN0aW9uXG4gIHwgTGFtYmRhIGwgLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBsLmxfcGFyYW1zKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGFtYmRhLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbGFtYmRhX2JvZHkgPSBmdW5jdGlvblxuICB8IExhbWJkYSBsIC0+IGwubF9ib2R5XG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsYW1iZGEsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBsYW1iZGFfY2xvc3VyZSA9IGZ1bmN0aW9uXG4gIHwgTGFtYmRhIGwgLT4gRW52IGwubF9jbG9zdXJlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsYW1iZGEsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBsYW1iZGFfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgTGFtYmRhIGwgLT4gKG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IFN0cmluZyBuIHwgTm9uZSAtPiBOaWwpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsYW1iZGEsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBzZXRfbGFtYmRhX25hbWUgbCBuID0gbWF0Y2ggbCB3aXRoXG4gIHwgTGFtYmRhIGwgLT4gbC5sX25hbWUgPC0gU29tZSBuOyBOaWxcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LWxhbWJkYS1uYW1lITogbm90IGEgbGFtYmRhXCIpXG5cbmxldCBjb21wb25lbnRfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gU3RyaW5nIGMuY19uYW1lXG4gIHwgSXNsYW5kIGkgLT4gU3RyaW5nIGkuaV9uYW1lXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfZmlsZSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gKG1hdGNoIGMuY19maWxlIHdpdGggU29tZSBmIC0+IFN0cmluZyBmIHwgTm9uZSAtPiBOaWwpXG4gIHwgSXNsYW5kIGkgLT4gKG1hdGNoIGkuaV9maWxlIHdpdGggU29tZSBmIC0+IFN0cmluZyBmIHwgTm9uZSAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcblxubGV0IGNvbXBvbmVudF9zZXRfZmlsZSB2IGYgPVxuICAobWF0Y2ggdiwgZiB3aXRoXG4gIHwgQ29tcG9uZW50IGMsIFN0cmluZyBzIC0+IGMuY19maWxlIDwtIFNvbWUgc1xuICB8IElzbGFuZCBpLCBTdHJpbmcgcyAtPiBpLmlfZmlsZSA8LSBTb21lIHNcbiAgfCBfIC0+ICgpKTsgTmlsXG5cbmxldCBjb21wb25lbnRfc2V0X2ZpbGVfYiA9IGNvbXBvbmVudF9zZXRfZmlsZVxuXG5sZXQgY29tcG9uZW50X3BhcmFtcyA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBjLmNfcGFyYW1zKVxuICB8IElzbGFuZCBpIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgaS5pX3BhcmFtcylcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGNvbXBvbmVudCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGNvbXBvbmVudF9ib2R5ID0gZnVuY3Rpb25cbiAgfCBDb21wb25lbnQgYyAtPiBjLmNfYm9keVxuICB8IElzbGFuZCBpIC0+IGkuaV9ib2R5XG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfY2xvc3VyZSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gRW52IGMuY19jbG9zdXJlXG4gIHwgSXNsYW5kIGkgLT4gRW52IGkuaV9jbG9zdXJlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfaGFzX2NoaWxkcmVuID0gZnVuY3Rpb25cbiAgfCBDb21wb25lbnQgYyAtPiBCb29sIGMuY19oYXNfY2hpbGRyZW5cbiAgfCBJc2xhbmQgaSAtPiBCb29sIGkuaV9oYXNfY2hpbGRyZW5cbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGNvbXBvbmVudCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGNvbXBvbmVudF9hZmZpbml0eSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gU3RyaW5nIGMuY19hZmZpbml0eVxuICB8IElzbGFuZCBfIC0+IFN0cmluZyBcImNsaWVudFwiXG4gIHwgXyAtPiBTdHJpbmcgXCJhdXRvXCJcblxubGV0IG1hY3JvX3BhcmFtcyA9IGZ1bmN0aW9uXG4gIHwgTWFjcm8gbSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIG0ubV9wYXJhbXMpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBtYWNybywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IG1hY3JvX3Jlc3RfcGFyYW0gPSBmdW5jdGlvblxuICB8IE1hY3JvIG0gLT4gKG1hdGNoIG0ubV9yZXN0X3BhcmFtIHdpdGggU29tZSBzIC0+IFN0cmluZyBzIHwgTm9uZSAtPiBOaWwpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBtYWNybywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IG1hY3JvX2JvZHkgPSBmdW5jdGlvblxuICB8IE1hY3JvIG0gLT4gbS5tX2JvZHlcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIG1hY3JvLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbWFjcm9fY2xvc3VyZSA9IGZ1bmN0aW9uXG4gIHwgTWFjcm8gbSAtPiBFbnYgbS5tX2Nsb3N1cmVcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIG1hY3JvLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgdGh1bmtfZXhwciA9IGZ1bmN0aW9uXG4gIHwgVGh1bmsgKGUsIF8pIC0+IGVcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIHRodW5rLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgdGh1bmtfZW52ID0gZnVuY3Rpb25cbiAgfCBUaHVuayAoXywgZSkgLT4gRW52IGVcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIHRodW5rLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5cbigqKiB7MSBSZWNvcmQgb3BlcmF0aW9uc30gKilcblxubGV0IHZhbF90b19pbnQgPSBmdW5jdGlvblxuICB8IEludGVnZXIgbiAtPiBuXG4gIHwgTnVtYmVyIG4gLT4gaW50X29mX2Zsb2F0IG5cbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIG51bWJlciwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxuKCoqIFttYWtlX3J0ZCBuYW1lIGZpZWxkcyBjdG9yX3BhcmFtc10g4oCUIGNyZWF0ZSBhIHJlY29yZCB0eXBlIGRlc2NyaXB0b3IuXG4gICAgQ2FsbGVkIGFzIFttYWtlLXJ0ZF0gZnJvbSB0cmFuc3BpbGVkIGV2YWx1YXRvci4gVGFrZXMgMyBzZXBhcmF0ZSBhcmdzLiAqKVxubGV0IG1ha2VfcnRkIG5hbWUgZmllbGRzIGN0b3JfcGFyYW1zID1cbiAgbGV0IHVpZCA9ICFydGRfY291bnRlciBpblxuICBpbmNyIHJ0ZF9jb3VudGVyO1xuICBsZXQgZmllbGRfbmFtZXMgPSBMaXN0Lm1hcCB2YWx1ZV90b19zdHJpbmcgKG1hdGNoIGZpZWxkcyB3aXRoIExpc3QgbCAtPiBsIHwgXyAtPiBbXSkgaW5cbiAgbGV0IGN0b3JfbmFtZXMgPSBMaXN0Lm1hcCB2YWx1ZV90b19zdHJpbmcgKG1hdGNoIGN0b3JfcGFyYW1zIHdpdGggTGlzdCBsIC0+IGwgfCBfIC0+IFtdKSBpblxuICBsZXQgZmllbGRfYXJyID0gQXJyYXkub2ZfbGlzdCBmaWVsZF9uYW1lcyBpblxuICBsZXQgY3Rvcl9tYXAgPSBBcnJheS5vZl9saXN0IChMaXN0Lm1hcCAoZnVuIGNwIC0+XG4gICAgbGV0IHJlYyBmaW5kIGogPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJtYWtlLXJ0ZDogY3RvciBwYXJhbSAlcyBub3QgaW4gZmllbGRzXCIgY3ApKVxuICAgICAgfCBmIDo6IF8gd2hlbiBmID0gY3AgLT4galxuICAgICAgfCBfIDo6IHJlc3QgLT4gZmluZCAoaiArIDEpIHJlc3RcbiAgICBpbiBmaW5kIDAgZmllbGRfbmFtZXNcbiAgKSBjdG9yX25hbWVzKSBpblxuICBsZXQgcnQgPSB7IHJ0X25hbWUgPSB2YWx1ZV90b19zdHJpbmcgbmFtZTsgcnRfdWlkID0gdWlkOyBydF9maWVsZHMgPSBmaWVsZF9hcnI7IHJ0X2N0b3JfbWFwID0gY3Rvcl9tYXAgfSBpblxuICBIYXNodGJsLmFkZCBydGRfdGFibGUgdWlkIHJ0O1xuICBOdW1iZXIgKGZsb2F0X29mX2ludCB1aWQpXG5cbigqKiBbbWFrZV9yZWNvcmQgdWlkX3ZhbCBhcmdzX2xpc3RdIOKAlCBjcmVhdGUgYSByZWNvcmQgZnJvbSB1aWQgKyBhcmdzIGxpc3QuXG4gICAgMi1hcmcgZGlyZWN0IGNhbGw6IChtYWtlLXJlY29yZCBydGQtdWlkIGN0b3ItYXJncy1saXN0KS4gKilcbmxldCBtYWtlX3JlY29yZCB1aWRfdmFsIGFyZ3NfbGlzdCA9XG4gIGxldCB1aWQgPSB2YWxfdG9faW50IHVpZF92YWwgaW5cbiAgbGV0IGN0b3JfYXJncyA9IG1hdGNoIGFyZ3NfbGlzdCB3aXRoIExpc3QgbCAtPiBsIHwgXyAtPiBbXSBpblxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHJ0ZF90YWJsZSB1aWQgd2l0aFxuICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXJlY29yZDogdW5rbm93biBydGRcIilcbiAgfCBTb21lIHJ0IC0+XG4gICAgbGV0IG5fY3RvciA9IEFycmF5Lmxlbmd0aCBydC5ydF9jdG9yX21hcCBpblxuICAgIGxldCBuX2FyZ3MgPSBMaXN0Lmxlbmd0aCBjdG9yX2FyZ3MgaW5cbiAgICBpZiBuX2FyZ3MgPD4gbl9jdG9yIHRoZW5cbiAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIiVzOiBleHBlY3RlZCAlZCBhcmdzLCBnb3QgJWRcIlxuICAgICAgICBydC5ydF9uYW1lIG5fY3RvciBuX2FyZ3MpKTtcbiAgICBsZXQgZmllbGRzID0gQXJyYXkubWFrZSAoQXJyYXkubGVuZ3RoIHJ0LnJ0X2ZpZWxkcykgTmlsIGluXG4gICAgTGlzdC5pdGVyaSAoZnVuIGkgYXJnIC0+XG4gICAgICBmaWVsZHMuKHJ0LnJ0X2N0b3JfbWFwLihpKSkgPC0gYXJnXG4gICAgKSBjdG9yX2FyZ3M7XG4gICAgUmVjb3JkIHsgcl90eXBlID0gcnQ7IHJfZmllbGRzID0gZmllbGRzIH1cblxuKCoqIFtyZWNvcmRfcmVmIHYgaWR4XSDigJQgYWNjZXNzIGZpZWxkIGJ5IGluZGV4LiAyLWFyZyBkaXJlY3QgY2FsbC4gKilcbmxldCByZWNvcmRfcmVmIHYgaWR4ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgUmVjb3JkIHIgLT5cbiAgICBsZXQgaSA9IHZhbF90b19pbnQgaWR4IGluXG4gICAgaWYgaSA8IDAgfHwgaSA+PSBBcnJheS5sZW5ndGggci5yX2ZpZWxkcyB0aGVuXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJyZWNvcmQtcmVmOiBpbmRleCAlZCBvdXQgb2YgYm91bmRzIGZvciAlc1wiIGkgci5yX3R5cGUucnRfbmFtZSkpO1xuICAgIHIucl9maWVsZHMuKGkpXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJyZWNvcmQtcmVmOiBub3QgYSByZWNvcmQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbigqKiBbcmVjb3JkX3NldF9iIHYgaWR4IG5ld192YWxdIOKAlCBtdXRhdGUgZmllbGQgYnkgaW5kZXguIDMtYXJnIGRpcmVjdCBjYWxsLlxuICAgIE5hbWVkIHJlY29yZF9zZXRfYiBiZWNhdXNlIHRyYW5zcGlsZXIgbWFuZ2xlcyByZWNvcmQtc2V0ISB0byByZWNvcmRfc2V0X2IuICopXG5sZXQgcmVjb3JkX3NldF9iIHYgaWR4IG5ld192YWwgPVxuICBtYXRjaCB2IHdpdGhcbiAgfCBSZWNvcmQgciAtPlxuICAgIGxldCBpID0gdmFsX3RvX2ludCBpZHggaW5cbiAgICBpZiBpIDwgMCB8fCBpID49IEFycmF5Lmxlbmd0aCByLnJfZmllbGRzIHRoZW5cbiAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcInJlY29yZC1zZXQhOiBpbmRleCAlZCBvdXQgb2YgYm91bmRzIGZvciAlc1wiIGkgci5yX3R5cGUucnRfbmFtZSkpO1xuICAgIHIucl9maWVsZHMuKGkpIDwtIG5ld192YWw7IE5pbFxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwicmVjb3JkLXNldCE6IG5vdCBhIHJlY29yZCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxuKCoqIFtyZWNvcmRfdHlwZV9wIHYgdWlkX3ZhbF0g4oCUIHR5cGUgcHJlZGljYXRlLiAyLWFyZyBkaXJlY3QgY2FsbC5cbiAgICBOYW1lZCByZWNvcmRfdHlwZV9wIGJlY2F1c2UgdHJhbnNwaWxlciBtYW5nbGVzIHJlY29yZC10eXBlPyB0byByZWNvcmRfdHlwZV9wLiAqKVxubGV0IHJlY29yZF90eXBlX3AgdiB1aWRfdmFsID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgUmVjb3JkIHIgLT4gQm9vbCAoci5yX3R5cGUucnRfdWlkID0gdmFsX3RvX2ludCB1aWRfdmFsKVxuICB8IF8gLT4gQm9vbCBmYWxzZVxuXG4oKiogW3JlY29yZF9wIHZdIOKAlCBnZW5lcmljIHJlY29yZCBwcmVkaWNhdGUuXG4gICAgTmFtZWQgcmVjb3JkX3AgYmVjYXVzZSB0cmFuc3BpbGVyIG1hbmdsZXMgcmVjb3JkPyB0byByZWNvcmRfcC4gKilcbmxldCByZWNvcmRfcCB2ID0gQm9vbCAoaXNfcmVjb3JkIHYpXG5cbigqKiBbbWFrZV9yZWNvcmRfY29uc3RydWN0b3IgcnRkX3VpZF0g4oCUIHJldHVybnMgYSBOYXRpdmVGbiB0aGF0IGNvbnN0cnVjdHMgcmVjb3Jkcy5cbiAgICBDYWxsZWQgZnJvbSB0cmFuc3BpbGVkIHNmLWRlZmluZS1yZWNvcmQtdHlwZS4gKilcbmxldCBtYWtlX3JlY29yZF9jb25zdHJ1Y3RvciB1aWRfdmFsID1cbiAgbGV0IHVpZCA9IHZhbF90b19pbnQgdWlkX3ZhbCBpblxuICBsZXQgcnQgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHJ0ZF90YWJsZSB1aWQgd2l0aFxuICAgIHwgU29tZSBydCAtPiBydCB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXJlY29yZC1jb25zdHJ1Y3RvcjogdW5rbm93biBydGRcIikgaW5cbiAgTmF0aXZlRm4gKHJ0LnJ0X25hbWUsIGZ1biBhcmdzIC0+XG4gICAgbGV0IG5fY3RvciA9IEFycmF5Lmxlbmd0aCBydC5ydF9jdG9yX21hcCBpblxuICAgIGxldCBuX2FyZ3MgPSBMaXN0Lmxlbmd0aCBhcmdzIGluXG4gICAgaWYgbl9hcmdzIDw+IG5fY3RvciB0aGVuXG4gICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCIlczogZXhwZWN0ZWQgJWQgYXJncywgZ290ICVkXCIgcnQucnRfbmFtZSBuX2N0b3Igbl9hcmdzKSk7XG4gICAgbGV0IGZpZWxkcyA9IEFycmF5Lm1ha2UgKEFycmF5Lmxlbmd0aCBydC5ydF9maWVsZHMpIE5pbCBpblxuICAgIExpc3QuaXRlcmkgKGZ1biBpIGFyZyAtPiBmaWVsZHMuKHJ0LnJ0X2N0b3JfbWFwLihpKSkgPC0gYXJnKSBhcmdzO1xuICAgIFJlY29yZCB7IHJfdHlwZSA9IHJ0OyByX2ZpZWxkcyA9IGZpZWxkcyB9KVxuXG4oKiogW21ha2VfcmVjb3JkX3ByZWRpY2F0ZSBydGRfdWlkXSDigJQgcmV0dXJucyBhIE5hdGl2ZUZuIHRoYXQgdGVzdHMgcmVjb3JkIHR5cGUuICopXG5sZXQgbWFrZV9yZWNvcmRfcHJlZGljYXRlIHVpZF92YWwgPVxuICBsZXQgdWlkID0gdmFsX3RvX2ludCB1aWRfdmFsIGluXG4gIE5hdGl2ZUZuIChcIj9cIiwgZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtSZWNvcmQgcl0gLT4gQm9vbCAoci5yX3R5cGUucnRfdWlkID0gdWlkKVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWNvcmQgcHJlZGljYXRlOiBleHBlY3RlZCAxIGFyZ1wiKSlcblxuKCoqIFttYWtlX3JlY29yZF9hY2Nlc3NvciBmaWVsZF9pZHhdIOKAlCByZXR1cm5zIGEgTmF0aXZlRm4gdGhhdCByZWFkcyBhIGZpZWxkLiAqKVxubGV0IG1ha2VfcmVjb3JkX2FjY2Vzc29yIGlkeF92YWwgPVxuICBsZXQgaWR4ID0gdmFsX3RvX2ludCBpZHhfdmFsIGluXG4gIE5hdGl2ZUZuIChcInJlZlwiLCBmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1JlY29yZCByXSAtPlxuICAgICAgaWYgaWR4IDwgMCB8fCBpZHggPj0gQXJyYXkubGVuZ3RoIHIucl9maWVsZHMgdGhlblxuICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJyZWNvcmQgYWNjZXNzb3I6IGluZGV4ICVkIG91dCBvZiBib3VuZHNcIiBpZHgpKTtcbiAgICAgIHIucl9maWVsZHMuKGlkeClcbiAgICB8IFt2XSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJyZWNvcmQgYWNjZXNzb3I6IG5vdCBhIHJlY29yZCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWNvcmQgYWNjZXNzb3I6IGV4cGVjdGVkIDEgYXJnXCIpKVxuXG4oKiogW21ha2VfcmVjb3JkX211dGF0b3IgZmllbGRfaWR4XSDigJQgcmV0dXJucyBhIE5hdGl2ZUZuIHRoYXQgc2V0cyBhIGZpZWxkLiAqKVxubGV0IG1ha2VfcmVjb3JkX211dGF0b3IgaWR4X3ZhbCA9XG4gIGxldCBpZHggPSB2YWxfdG9faW50IGlkeF92YWwgaW5cbiAgTmF0aXZlRm4gKFwic2V0IVwiLCBmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1JlY29yZCByOyBuZXdfdmFsXSAtPlxuICAgICAgaWYgaWR4IDwgMCB8fCBpZHggPj0gQXJyYXkubGVuZ3RoIHIucl9maWVsZHMgdGhlblxuICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJyZWNvcmQgbXV0YXRvcjogaW5kZXggJWQgb3V0IG9mIGJvdW5kc1wiIGlkeCkpO1xuICAgICAgci5yX2ZpZWxkcy4oaWR4KSA8LSBuZXdfdmFsOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWNvcmQgbXV0YXRvcjogZXhwZWN0ZWQgKHJlY29yZCB2YWx1ZSlcIikpXG5cblxuKCoqIHsxIFI3UlMgcGFyYW1ldGVyIGFjY2Vzc29ycyDigJQgY2FsbGVkIGZyb20gdHJhbnNwaWxlZCBldmFsdWF0b3J9ICopXG5cbmxldCBwYXJhbWV0ZXJfcCB2ID0gbWF0Y2ggdiB3aXRoIFBhcmFtZXRlciBfIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZVxubGV0IHBhcmFtZXRlcl91aWQgdiA9IG1hdGNoIHYgd2l0aFxuICB8IFBhcmFtZXRlciBwIC0+IFN0cmluZyBwLnBtX3VpZFxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJhbWV0ZXItdWlkOiBub3QgYSBwYXJhbWV0ZXJcIilcbmxldCBwYXJhbWV0ZXJfZGVmYXVsdCB2ID0gbWF0Y2ggdiB3aXRoXG4gIHwgUGFyYW1ldGVyIHAgLT4gcC5wbV9kZWZhdWx0XG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBhcmFtZXRlci1kZWZhdWx0OiBub3QgYSBwYXJhbWV0ZXJcIilcbmxldCBwYXJhbWV0ZXJfY29udmVydGVyIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBQYXJhbWV0ZXIgcCAtPiAobWF0Y2ggcC5wbV9jb252ZXJ0ZXIgd2l0aCBTb21lIGMgLT4gYyB8IE5vbmUgLT4gTmlsKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJhbWV0ZXItY29udmVydGVyOiBub3QgYSBwYXJhbWV0ZXJcIilcblxuXG4oKiogezEgRGljdCBvcGVyYXRpb25zfSAqKVxuXG5sZXQgbWFrZV9kaWN0ICgpIDogZGljdCA9IEhhc2h0YmwuY3JlYXRlIDhcblxubGV0IGRpY3RfZ2V0IChkIDogZGljdCkga2V5ID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIGtleSB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBOaWxcblxubGV0IGRpY3RfaGFzIChkIDogZGljdCkga2V5ID0gSGFzaHRibC5tZW0gZCBrZXlcblxubGV0IGRpY3Rfc2V0IChkIDogZGljdCkga2V5IHYgPSBIYXNodGJsLnJlcGxhY2UgZCBrZXkgdlxuXG5sZXQgZGljdF9kZWxldGUgKGQgOiBkaWN0KSBrZXkgPSBIYXNodGJsLnJlbW92ZSBkIGtleVxuXG5sZXQgZGljdF9rZXlzIChkIDogZGljdCkgPVxuICBIYXNodGJsLmZvbGQgKGZ1biBrIF8gYWNjIC0+IFN0cmluZyBrIDo6IGFjYykgZCBbXVxuXG5sZXQgZGljdF92YWxzIChkIDogZGljdCkgPVxuICBIYXNodGJsLmZvbGQgKGZ1biBfIHYgYWNjIC0+IHYgOjogYWNjKSBkIFtdXG5cblxuKCoqIHsxIFZhbHVlIGRpc3BsYXl9ICopXG5cbmxldCByZWMgaW5zcGVjdCA9IGZ1bmN0aW9uXG4gIHwgTmlsIC0+IFwibmlsXCJcbiAgfCBCb29sIHRydWUgLT4gXCJ0cnVlXCJcbiAgfCBCb29sIGZhbHNlIC0+IFwiZmFsc2VcIlxuICB8IEludGVnZXIgbiAtPiBzdHJpbmdfb2ZfaW50IG5cbiAgfCBOdW1iZXIgbiAtPiBmb3JtYXRfbnVtYmVyIG5cbiAgfCBTdHJpbmcgcyAtPlxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAyKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgICBTdHJpbmcuaXRlciAoZnVuY3Rpb25cbiAgICAgIHwgJ1wiJyAgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxuJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcblwiXG4gICAgICB8ICdcXHInIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXHRcIlxuICAgICAgfCBjICAgIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIic7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICB8IFN5bWJvbCBzIC0+IHNcbiAgfCBLZXl3b3JkIGsgLT4gXCI6XCIgXiBrXG4gIHwgTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT5cbiAgICBcIihcIiBeIFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QubWFwIGluc3BlY3QgaXRlbXMpIF4gXCIpXCJcbiAgfCBEaWN0IGQgLT5cbiAgICBsZXQgcGFpcnMgPSBIYXNodGJsLmZvbGQgKGZ1biBrIHYgYWNjIC0+XG4gICAgICAoUHJpbnRmLnNwcmludGYgXCI6JXMgJXNcIiBrIChpbnNwZWN0IHYpKSA6OiBhY2MpIGQgW10gaW5cbiAgICBcIntcIiBeIFN0cmluZy5jb25jYXQgXCIgXCIgcGFpcnMgXiBcIn1cIlxuICB8IExhbWJkYSBsIC0+XG4gICAgbGV0IHRhZyA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwibGFtYmRhXCIgaW5cbiAgICBQcmludGYuc3ByaW50ZiBcIjwlcyglcyk+XCIgdGFnIChTdHJpbmcuY29uY2F0IFwiLCBcIiBsLmxfcGFyYW1zKVxuICB8IENvbXBvbmVudCBjIC0+XG4gICAgUHJpbnRmLnNwcmludGYgXCI8Q29tcG9uZW50IH4lcyglcyk+XCIgYy5jX25hbWUgKFN0cmluZy5jb25jYXQgXCIsIFwiIGMuY19wYXJhbXMpXG4gIHwgSXNsYW5kIGkgLT5cbiAgICBQcmludGYuc3ByaW50ZiBcIjxJc2xhbmQgfiVzKCVzKT5cIiBpLmlfbmFtZSAoU3RyaW5nLmNvbmNhdCBcIiwgXCIgaS5pX3BhcmFtcylcbiAgfCBNYWNybyBtIC0+XG4gICAgbGV0IHRhZyA9IG1hdGNoIG0ubV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwibWFjcm9cIiBpblxuICAgIFByaW50Zi5zcHJpbnRmIFwiPCVzKCVzKT5cIiB0YWcgKFN0cmluZy5jb25jYXQgXCIsIFwiIG0ubV9wYXJhbXMpXG4gIHwgVGh1bmsgXyAtPiBcIjx0aHVuaz5cIlxuICB8IENvbnRpbnVhdGlvbiAoXywgXykgLT4gXCI8Y29udGludWF0aW9uPlwiXG4gIHwgQ2FsbGNjQ29udGludWF0aW9uIChfLCBfKSAtPiBcIjxjYWxsY2MtY29udGludWF0aW9uPlwiXG4gIHwgTmF0aXZlRm4gKG5hbWUsIF8pIC0+IFByaW50Zi5zcHJpbnRmIFwiPG5hdGl2ZTolcz5cIiBuYW1lXG4gIHwgU2lnbmFsIF8gLT4gXCI8c2lnbmFsPlwiXG4gIHwgUmF3SFRNTCBzIC0+IFByaW50Zi5zcHJpbnRmIFwiXFxcIjxyYXctaHRtbDolZD5cXFwiXCIgKFN0cmluZy5sZW5ndGggcylcbiAgfCBTcHJlYWQgXyAtPiBcIjxzcHJlYWQ+XCJcbiAgfCBTeEV4cHIgcyAtPiBQcmludGYuc3ByaW50ZiBcIlxcXCI8c3gtZXhwcjolZD5cXFwiXCIgKFN0cmluZy5sZW5ndGggcylcbiAgfCBFbnYgXyAtPiBcIjxlbnY+XCJcbiAgfCBDZWtTdGF0ZSBfIC0+IFwiPGNlay1zdGF0ZT5cIlxuICB8IENla0ZyYW1lIGYgLT4gUHJpbnRmLnNwcmludGYgXCI8ZnJhbWU6JXM+XCIgZi5jZl90eXBlXG4gIHwgVm1DbG9zdXJlIGNsIC0+IFByaW50Zi5zcHJpbnRmIFwiPHZtOiVzPlwiIChtYXRjaCBjbC52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiYW5vblwiKVxuICB8IFJlY29yZCByIC0+XG4gICAgbGV0IGZpZWxkcyA9IEFycmF5LnRvX2xpc3QgKEFycmF5Lm1hcGkgKGZ1biBpIHYgLT5cbiAgICAgIFByaW50Zi5zcHJpbnRmIFwiJXM9JXNcIiByLnJfdHlwZS5ydF9maWVsZHMuKGkpIChpbnNwZWN0IHYpXG4gICAgKSByLnJfZmllbGRzKSBpblxuICAgIFByaW50Zi5zcHJpbnRmIFwiPHJlY29yZDolcyAlcz5cIiByLnJfdHlwZS5ydF9uYW1lIChTdHJpbmcuY29uY2F0IFwiIFwiIGZpZWxkcylcbiAgfCBQYXJhbWV0ZXIgcCAtPiBQcmludGYuc3ByaW50ZiBcIjxwYXJhbWV0ZXI6JXM+XCIgcC5wbV91aWRcbiAgfCBWZWN0b3IgYXJyIC0+XG4gICAgbGV0IGVsdHMgPSBBcnJheS50b19saXN0IChBcnJheS5tYXAgaW5zcGVjdCBhcnIpIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCIjKCVzKVwiIChTdHJpbmcuY29uY2F0IFwiIFwiIGVsdHMpXG4gIHwgVm1GcmFtZSBmIC0+IFByaW50Zi5zcHJpbnRmIFwiPHZtLWZyYW1lOmlwPSVkIGJhc2U9JWQ+XCIgZi52Zl9pcCBmLnZmX2Jhc2VcbiAgfCBWbU1hY2hpbmUgbSAtPiBQcmludGYuc3ByaW50ZiBcIjx2bS1tYWNoaW5lOnNwPSVkIGZyYW1lcz0lZD5cIiBtLnZtX3NwIChMaXN0Lmxlbmd0aCBtLnZtX2ZyYW1lcylcbiAgfCBTdHJpbmdCdWZmZXIgYnVmIC0+IFByaW50Zi5zcHJpbnRmIFwiPHN0cmluZy1idWZmZXI6JWQ+XCIgKEJ1ZmZlci5sZW5ndGggYnVmKVxuICB8IEhhc2hUYWJsZSBodCAtPiBQcmludGYuc3ByaW50ZiBcIjxoYXNoLXRhYmxlOiVkPlwiIChIYXNodGJsLmxlbmd0aCBodClcbiAgfCBDaGFyIG4gLT5cbiAgICBsZXQgbmFtZSA9IG1hdGNoIG4gd2l0aFxuICAgICAgfCAzMiAtPiBcInNwYWNlXCIgfCAxMCAtPiBcIm5ld2xpbmVcIiB8IDkgLT4gXCJ0YWJcIlxuICAgICAgfCAxMyAtPiBcInJldHVyblwiIHwgMCAtPiBcIm51bFwiIHwgMjcgLT4gXCJlc2NhcGVcIlxuICAgICAgfCAxMjcgLT4gXCJkZWxldGVcIiB8IDggLT4gXCJiYWNrc3BhY2VcIlxuICAgICAgfCBfIC0+IGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEgaW5cbiAgICAgICAgICAgICBCdWZmZXIuYWRkX3V0Zl84X3VjaGFyIGJ1ZiAoVWNoYXIub2ZfaW50IG4pO1xuICAgICAgICAgICAgIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgICBpbiBcIiNcXFxcXCIgXiBuYW1lXG4gIHwgRW9mIC0+IFwiIyFlb2ZcIlxuICB8IFBvcnQgeyBzcF9raW5kID0gUG9ydElucHV0IChfLCBwb3MpOyBzcF9jbG9zZWQgfSAtPlxuICAgIFByaW50Zi5zcHJpbnRmIFwiPGlucHV0LXBvcnQ6cG9zPSVkJXM+XCIgIXBvcyAoaWYgc3BfY2xvc2VkIHRoZW4gXCI6Y2xvc2VkXCIgZWxzZSBcIlwiKVxuICB8IFBvcnQgeyBzcF9raW5kID0gUG9ydE91dHB1dCBidWY7IHNwX2Nsb3NlZCB9IC0+XG4gICAgUHJpbnRmLnNwcmludGYgXCI8b3V0cHV0LXBvcnQ6bGVuPSVkJXM+XCIgKEJ1ZmZlci5sZW5ndGggYnVmKSAoaWYgc3BfY2xvc2VkIHRoZW4gXCI6Y2xvc2VkXCIgZWxzZSBcIlwiKVxuICB8IFJhdGlvbmFsIChuLCBkKSAtPiBQcmludGYuc3ByaW50ZiBcIiVkLyVkXCIgbiBkXG4gIHwgU3hTZXQgaHQgLT4gUHJpbnRmLnNwcmludGYgXCI8c2V0OiVkPlwiIChIYXNodGJsLmxlbmd0aCBodClcbiAgfCBTeFJlZ2V4cCAoc3JjLCBmbGFncywgXykgLT4gUHJpbnRmLnNwcmludGYgXCIjLyVzLyVzXCIgc3JjIGZsYWdzXG4gIHwgU3hCeXRldmVjdG9yIGIgLT4gUHJpbnRmLnNwcmludGYgXCIjdTgoJXMpXCIgKFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QuaW5pdCAoQnl0ZXMubGVuZ3RoIGIpIChmdW4gaSAtPiBzdHJpbmdfb2ZfaW50IChDaGFyLmNvZGUgKEJ5dGVzLmdldCBiIGkpKSkpKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0hhc2h0YmwiLCJTdGRsaWIiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9VY2hhciIsIlN0ZGxpYl9RdWV1ZSIsIlN0ZGxpYl9GbG9hdCIsInN5bV90b19pZCIsImlkX3RvX3N5bSIsInN5bV9uZXh0IiwiaW50ZXJuIiwicyIsIm1hdGNoIiwiaWQiLCJ1bmludGVybiIsInZtX2NhbGxfY2xvc3VyZV9yZWYiLCJwYXJhbSIsImNla19jYWxsX3JlZiIsImNla19ldmFsX2xhbWJkYV9yZWYiLCJFdmFsX2Vycm9yIiwiUGFyc2VfZXJyb3IiLCJDZWtQZXJmb3JtUmVxdWVzdCIsImRlZmF1bHRfdm1fZ2xvYmFscyIsImNvbnZlcnRfdm1fc3VzcGVuc2lvbiIsInZtX3N1c3BlbnNpb25fdG9fZGljdCIsInJ0ZF90YWJsZSIsIm1ha2VfZW52IiwiZW52X2V4dGVuZCIsInBhcmVudCIsImVudl9iaW5kX2hvb2siLCJlbnZfYmluZCIsImVudiIsIm5hbWUiLCJ2IiwiZW52X2hhc19pZCIsImVudl9oYXMiLCJzeW1ib2xfcmVzb2x2ZV9ob29rIiwiZW52X2dldF9pZCIsImNzdF9VbmRlZmluZWRfc3ltYm9sIiwiaG9vayIsImVudl9nZXQiLCJlbnZfc2V0X2lkIiwiZW52X3NldCIsImVudl9tZXJnZSIsImJhc2UiLCJvdmVybGF5IiwiZSIsImRlcHRoIiwicCIsImZvcm1hdF9udW1iZXIiLCJuIiwiY3N0IiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJ2YWx1ZV90b19zdHJpbmciLCJ2YWx1ZV90b19zdHJpbmdfbGlzdCIsIml0ZW1zIiwidmFsdWVfdG9fYm9vbCIsImIiLCJ2YWx1ZV90b19zdHJpbmdfb3B0IiwidW53cmFwX2Vudl92YWwiLCJsYW1iZGFfdWlkX2NvdW50ZXIiLCJuZXh0X2xhbWJkYV91aWQiLCJtYWtlX2xhbWJkYSIsInBhcmFtcyIsImJvZHkiLCJjbG9zdXJlIiwicHMiLCJqaXRfY2FjaGVfcXVldWUiLCJqaXRfY2FjaGVfc2l6ZSIsImNzdF9hdXRvIiwibWFrZV9jb21wb25lbnQiLCJoYXNfY2hpbGRyZW4iLCJhZmZpbml0eSIsImhjIiwiYWZmIiwibWFrZV9pc2xhbmQiLCJtYWtlX21hY3JvIiwicmVzdF9wYXJhbSIsInJwIiwibWFrZV90aHVuayIsImV4cHIiLCJtYWtlX3N5bWJvbCIsIm1ha2Vfa2V5d29yZCIsImNzdF9sYW1iZGEiLCJjc3RfbWFjcm8iLCJjc3RfbmlsIiwidHlwZV9vZiIsImNzdF9jb250aW51YXRpb24iLCJjc3RfZGljdCIsImNzdF9mdW5jdGlvbiIsImNzdF9udW1iZXIiLCJyIiwiaXNfbmlsIiwiaXNfbGFtYmRhIiwiaXNfY29tcG9uZW50IiwiaXNfaXNsYW5kIiwiaXNfbWFjcm8iLCJpc190aHVuayIsImlzX3NpZ25hbCIsImQiLCJpc19yZWNvcmQiLCJpc19jYWxsYWJsZSIsInN4X3RydXRoeSIsInN5bWJvbF9uYW1lIiwia2V5d29yZF9uYW1lIiwiayIsImNzdF9FeHBlY3RlZF9sYW1iZGFfZ290IiwibGFtYmRhX3BhcmFtcyIsImwiLCJsYW1iZGFfYm9keSIsImxhbWJkYV9jbG9zdXJlIiwibGFtYmRhX25hbWUiLCJzZXRfbGFtYmRhX25hbWUiLCJjc3RfRXhwZWN0ZWRfY29tcG9uZW50X2dvdCIsImNvbXBvbmVudF9uYW1lIiwiYyIsImNvbXBvbmVudF9maWxlIiwiaSIsImNvbXBvbmVudF9zZXRfZmlsZSIsImNvbXBvbmVudF9wYXJhbXMiLCJjb21wb25lbnRfYm9keSIsImNvbXBvbmVudF9jbG9zdXJlIiwiY29tcG9uZW50X2hhc19jaGlsZHJlbiIsImNvbXBvbmVudF9hZmZpbml0eSIsImNzdF9FeHBlY3RlZF9tYWNyb19nb3QiLCJtYWNyb19wYXJhbXMiLCJtIiwibWFjcm9fcmVzdF9wYXJhbSIsIm1hY3JvX2JvZHkiLCJtYWNyb19jbG9zdXJlIiwiY3N0X0V4cGVjdGVkX3RodW5rX2dvdCIsInRodW5rX2V4cHIiLCJ0aHVua19lbnYiLCJ2YWxfdG9faW50IiwicnRkX2NvdW50ZXIiLCJtYWtlX3J0ZCIsImZpZWxkcyIsImN0b3JfcGFyYW1zIiwidWlkIiwiZmllbGRfbmFtZXMiLCJjdG9yX25hbWVzIiwiZmllbGRfYXJyIiwiY3AiLCJqIiwicmVzdCIsImN0b3JfbWFwIiwicnQiLCJjc3RfYXJnc19nb3QiLCJjc3Rfc19leHBlY3RlZF9kX2FyZ3NfZ290X2QiLCJjc3RfZXhwZWN0ZWQiLCJtYWtlX3JlY29yZCIsInVpZF92YWwiLCJhcmdzX2xpc3QiLCJjdG9yX2FyZ3MiLCJuX2N0b3IiLCJuX2FyZ3MiLCJhcmciLCJjc3Rfb3V0X29mX2JvdW5kc19mb3IiLCJyZWNvcmRfcmVmIiwiaWR4IiwicmVjb3JkX3NldF9iIiwibmV3X3ZhbCIsInJlY29yZF90eXBlX3AiLCJyZWNvcmRfcCIsIm1ha2VfcmVjb3JkX2NvbnN0cnVjdG9yIiwiYXJncyIsIm1ha2VfcmVjb3JkX3ByZWRpY2F0ZSIsImNzdF9vdXRfb2ZfYm91bmRzIiwibWFrZV9yZWNvcmRfYWNjZXNzb3IiLCJpZHhfdmFsIiwibWFrZV9yZWNvcmRfbXV0YXRvciIsInBhcmFtZXRlcl9wIiwicGFyYW1ldGVyX3VpZCIsInBhcmFtZXRlcl9kZWZhdWx0IiwicGFyYW1ldGVyX2NvbnZlcnRlciIsIm1ha2VfZGljdCIsImRpY3RfZ2V0Iiwia2V5IiwiZGljdF9oYXMiLCJkaWN0X3NldCIsImRpY3RfZGVsZXRlIiwiZGljdF9rZXlzIiwiYWNjIiwiZGljdF92YWxzIiwiY3N0X3NfcyIsImluc3BlY3QiLCJidWYiLCJwYWlycyIsInRhZyIsImNsIiwiYXJyIiwiZWx0cyIsImh0Iiwic3BfY2xvc2VkIiwiY3N0X2Nsb3NlZCIsInBvcyIsImZsYWdzIiwic3JjIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFlDWTBDO0FBQUEsSUFBQUMsWUFDQTtBQUFBLElBQUFDLFdBQWtCO0FBQUEsWUFBQUMsT0FBQUM7QUFBQUEsUUFBQUMsUUFJcEQ7QUFBQSxJQUE0QixjQUFB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRDFlN0QiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozODIwMCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfY3N0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIENvbmNyZXRlIFN5bnRheCBUcmVlIGZvciBTWCDigJQgbG9zc2xlc3Mgc291cmNlIHJlcHJlc2VudGF0aW9uLlxuXG4gICAgRXZlcnkgcGllY2Ugb2Ygc291cmNlIHRleHQgaXMgcHJlc2VydmVkOiB3aGl0ZXNwYWNlLCBjb21tZW50cyxcbiAgICBkZWxpbWl0ZXJzLCByYXcgdG9rZW4gdGV4dC4gIFRoZSBDU1Qgc3VwcG9ydHMgdHdvIHByb2plY3Rpb25zOlxuICAgIC0gW2NzdF90b19zb3VyY2VdOiByZWNvbnN0cnVjdCB0aGUgZXhhY3Qgb3JpZ2luYWwgc291cmNlXG4gICAgLSBbY3N0X3RvX2FzdF06IHN0cmlwIHRyaXZpYSwgcHJvZHVjZSBbU3hfdHlwZXMudmFsdWVdIGZvciBldmFsdWF0aW9uXG5cbiAgICBUcml2aWEgYXR0YWNoZXMgdG8gbm9kZXMgKGxlYWRpbmcgb24gZXZlcnkgbm9kZSwgdHJhaWxpbmcgb25cbiAgICBjb250YWluZXJzIGJlZm9yZSB0aGUgY2xvc2UgZGVsaW1pdGVyKS4gIE5vIHNlcGFyYXRlIGNvbW1lbnQgbWFwLiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbigqKiB7MSBUeXBlc30gKilcblxudHlwZSB0cml2aWEgPVxuICB8IFdoaXRlc3BhY2Ugb2Ygc3RyaW5nICAgICAgKCoqIFJ1bnMgb2Ygc3BhY2VzLCB0YWJzLCBuZXdsaW5lcyAqKVxuICB8IExpbmVDb21tZW50IG9mIHN0cmluZyAgICAgKCoqIFwiOztcIiB0aHJvdWdoIGVuZCBvZiBsaW5lLCBpbmNsdWRpbmcgdGhlIFwiO1wiIGNoYXJzICopXG5cbnR5cGUgc3BhbiA9IHtcbiAgc3RhcnRfb2Zmc2V0IDogaW50O1xuICBlbmRfb2Zmc2V0ICAgOiBpbnQ7XG59XG5cbnR5cGUgY3N0X25vZGUgPVxuICB8IENzdEF0b20gb2Yge1xuICAgICAgbGVhZGluZ190cml2aWEgOiB0cml2aWEgbGlzdDtcbiAgICAgIHRva2VuIDogc3RyaW5nOyAgICAgICAgICAgICAgKCoqIFJhdyBzb3VyY2UgdGV4dCBvZiB0aGUgdG9rZW4gKilcbiAgICAgIHZhbHVlIDogdmFsdWU7ICAgICAgICAgICAgICAgKCoqIFBhcnNlZCBzZW1hbnRpYyB2YWx1ZSAqKVxuICAgICAgc3BhbiAgOiBzcGFuO1xuICAgIH1cbiAgfCBDc3RMaXN0IG9mIHtcbiAgICAgIGxlYWRpbmdfdHJpdmlhIDogdHJpdmlhIGxpc3Q7XG4gICAgICBvcGVuX2RlbGltICA6IGNoYXI7ICAgICAgICAgICgqKiAnKCcgb3IgJ1snICopXG4gICAgICBjaGlsZHJlbiAgICA6IGNzdF9ub2RlIGxpc3Q7XG4gICAgICBjbG9zZV9kZWxpbSA6IGNoYXI7ICAgICAgICAgICgqKiAnKScgb3IgJ10nICopXG4gICAgICB0cmFpbGluZ190cml2aWEgOiB0cml2aWEgbGlzdDsgICgqKiBUcml2aWEgYmV0d2VlbiBsYXN0IGNoaWxkIGFuZCBjbG9zZSBkZWxpbSAqKVxuICAgICAgc3BhbiA6IHNwYW47XG4gICAgfVxuICB8IENzdERpY3Qgb2Yge1xuICAgICAgbGVhZGluZ190cml2aWEgOiB0cml2aWEgbGlzdDtcbiAgICAgIGNoaWxkcmVuIDogY3N0X25vZGUgbGlzdDsgICAgKCoqIEFsdGVybmF0aW5nIGtleS92YWx1ZSBhdG9tcyAqKVxuICAgICAgdHJhaWxpbmdfdHJpdmlhIDogdHJpdmlhIGxpc3Q7XG4gICAgICBzcGFuIDogc3BhbjtcbiAgICB9XG5cblxuKCoqIHsxIENTVCDihpIgU291cmNlIChsb3NzbGVzcyByZWNvbnN0cnVjdGlvbil9ICopXG5cbmxldCB0cml2aWFfdG9fc3RyaW5nIHRzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgTGlzdC5pdGVyIChmdW5jdGlvblxuICAgIHwgV2hpdGVzcGFjZSBzIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gICAgfCBMaW5lQ29tbWVudCBzIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gICkgdHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHJlYyBjc3RfdG9fc291cmNlIG5vZGUgPVxuICBtYXRjaCBub2RlIHdpdGhcbiAgfCBDc3RBdG9tIHsgbGVhZGluZ190cml2aWE7IHRva2VuOyBfIH0gLT5cbiAgICB0cml2aWFfdG9fc3RyaW5nIGxlYWRpbmdfdHJpdmlhIF4gdG9rZW5cbiAgfCBDc3RMaXN0IHsgbGVhZGluZ190cml2aWE7IG9wZW5fZGVsaW07IGNoaWxkcmVuOyBjbG9zZV9kZWxpbTsgdHJhaWxpbmdfdHJpdmlhOyBfIH0gLT5cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHRyaXZpYV90b19zdHJpbmcgbGVhZGluZ190cml2aWEpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgb3Blbl9kZWxpbTtcbiAgICBMaXN0Lml0ZXIgKGZ1biBjIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoY3N0X3RvX3NvdXJjZSBjKSkgY2hpbGRyZW47XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmICh0cml2aWFfdG9fc3RyaW5nIHRyYWlsaW5nX3RyaXZpYSk7XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjbG9zZV9kZWxpbTtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG4gIHwgQ3N0RGljdCB7IGxlYWRpbmdfdHJpdmlhOyBjaGlsZHJlbjsgdHJhaWxpbmdfdHJpdmlhOyBfIH0gLT5cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHRyaXZpYV90b19zdHJpbmcgbGVhZGluZ190cml2aWEpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ3snO1xuICAgIExpc3QuaXRlciAoZnVuIGMgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChjc3RfdG9fc291cmNlIGMpKSBjaGlsZHJlbjtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHRyaXZpYV90b19zdHJpbmcgdHJhaWxpbmdfdHJpdmlhKTtcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICd9JztcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjc3RfdG9fc291cmNlX2ZpbGUgbm9kZXMgPVxuICBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIGNzdF90b19zb3VyY2Ugbm9kZXMpXG5cbigqKiBSZWNvbnN0cnVjdCBzb3VyY2UgZnJvbSBhIHBhcnNlZCBmaWxlIChub2RlcyArIHRyYWlsaW5nIHRyaXZpYSkuICopXG5sZXQgY3N0X2ZpbGVfdG9fc291cmNlIG5vZGVzIHRyYWlsaW5nID1cbiAgY3N0X3RvX3NvdXJjZV9maWxlIG5vZGVzIF4gdHJpdmlhX3RvX3N0cmluZyB0cmFpbGluZ1xuXG5cbigqKiB7MSBDU1Qg4oaSIEFTVCAoc3RyaXAgdHJpdmlhIGZvciBldmFsdWF0aW9uKX0gKilcblxubGV0IHJlYyBjc3RfdG9fYXN0ID0gZnVuY3Rpb25cbiAgfCBDc3RBdG9tIHsgdmFsdWU7IF8gfSAtPiB2YWx1ZVxuICB8IENzdExpc3QgeyBjaGlsZHJlbjsgXyB9IC0+XG4gICAgTGlzdCAoTGlzdC5tYXAgY3N0X3RvX2FzdCBjaGlsZHJlbilcbiAgfCBDc3REaWN0IHsgY2hpbGRyZW47IF8gfSAtPlxuICAgIGxldCBkID0gbWFrZV9kaWN0ICgpIGluXG4gICAgbGV0IHJlYyBwYWlycyA9IGZ1bmN0aW9uXG4gICAgICB8IGsgOjogdiA6OiByZXN0IC0+XG4gICAgICAgIGxldCBrZXlfc3RyID0gbWF0Y2ggY3N0X3RvX2FzdCBrIHdpdGhcbiAgICAgICAgICB8IEtleXdvcmQgayAtPiBrIHwgU3RyaW5nIGsgLT4gayB8IFN5bWJvbCBrIC0+IGsgfCBfIC0+IFwiXCJcbiAgICAgICAgaW5cbiAgICAgICAgZGljdF9zZXQgZCBrZXlfc3RyIChjc3RfdG9fYXN0IHYpO1xuICAgICAgICBwYWlycyByZXN0XG4gICAgICB8IF8gLT4gKClcbiAgICBpblxuICAgIHBhaXJzIGNoaWxkcmVuO1xuICAgIERpY3QgZFxuXG5cbigqKiBDb252ZXJ0IGNoYXJhY3RlciBvZmZzZXQgdG8gbGluZS9jb2wgKDEtYmFzZWQgbGluZXMsIDAtYmFzZWQgY29scykgKilcbmxldCBvZmZzZXRfdG9fbG9jIHNyYyBvZmZzZXQgPVxuICBsZXQgbGluZSA9IHJlZiAxIGFuZCBjb2wgPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gbWluIChvZmZzZXQgLSAxKSAoU3RyaW5nLmxlbmd0aCBzcmMgLSAxKSBkb1xuICAgIGlmIHNyYy5baV0gPSAnXFxuJyB0aGVuIChpbmNyIGxpbmU7IGNvbCA6PSAwKVxuICAgIGVsc2UgY29sIDo9ICFjb2wgKyAxXG4gIGRvbmU7XG4gICghbGluZSwgIWNvbClcblxuKCoqIENTVCDihpIgQVNUIHdpdGggc291cmNlIGxvY2F0aW9uIGRpY3RzICh7OmZvcm0gdmFsdWUgOmxpbmUgTiA6Y29sIE59KSAqKVxubGV0IGNzdF90b19hc3RfbG9jIHNyYyBub2RlcyA9XG4gIExpc3QubWFwIChmdW4gbm9kZSAtPlxuICAgIGxldCBzcGFuID0gbWF0Y2ggbm9kZSB3aXRoXG4gICAgICB8IENzdEF0b20geyBzcGFuOyBfIH0gLT4gc3BhblxuICAgICAgfCBDc3RMaXN0IHsgc3BhbjsgXyB9IC0+IHNwYW5cbiAgICAgIHwgQ3N0RGljdCB7IHNwYW47IF8gfSAtPiBzcGFuXG4gICAgaW5cbiAgICBsZXQgdmFsdWUgPSBjc3RfdG9fYXN0IG5vZGUgaW5cbiAgICBsZXQgKGxpbmUsIGNvbCkgPSBvZmZzZXRfdG9fbG9jIHNyYyBzcGFuLnN0YXJ0X29mZnNldCBpblxuICAgIGxldCBkID0gbWFrZV9kaWN0ICgpIGluXG4gICAgZGljdF9zZXQgZCBcImZvcm1cIiB2YWx1ZTtcbiAgICBkaWN0X3NldCBkIFwibGluZVwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBsaW5lKSk7XG4gICAgZGljdF9zZXQgZCBcImNvbFwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjb2wpKTtcbiAgICBEaWN0IGRcbiAgKSBub2Rlc1xuXG5cbigqKiB7MSBDU1QgZWRpdGluZyDigJQgYXBwbHkgQVNULWxldmVsIGVkaXRzIGJhY2sgdG8gdGhlIENTVH0gKilcblxuKCoqIFJlcGxhY2UgdGhlIENTVCBub2RlIGF0IFtwYXRoXSB3aXRoIFtuZXdfc291cmNlXSwgcHJlc2VydmluZyB0aGVcbiAgICBvcmlnaW5hbCBub2RlJ3MgbGVhZGluZyB0cml2aWEuICBbbmV3X3NvdXJjZV0gaXMgcGFyc2VkIGFzIENTVCBzb1xuICAgIGFueSBjb21tZW50cyBpbiBpdCBhcmUgcHJlc2VydmVkLiAqKVxubGV0IGFwcGx5X2VkaXQgcGF0aCBuZXdfY3N0X25vZGVzIG9yaWdpbmFsX2NzdF9ub2RlcyA9XG4gIGxldCByZWMgZ28gbm9kZXMgaWR4X3BhdGggPVxuICAgIG1hdGNoIGlkeF9wYXRoIHdpdGhcbiAgICB8IFtdIC0+IG5vZGVzICAoKiBzaG91bGRuJ3QgaGFwcGVuICopXG4gICAgfCBbdGFyZ2V0XSAtPlxuICAgICAgTGlzdC5tYXBpIChmdW4gaSBub2RlIC0+XG4gICAgICAgIGlmIGkgPSB0YXJnZXQgdGhlblxuICAgICAgICAgIG1hdGNoIG5ld19jc3Rfbm9kZXMgd2l0aFxuICAgICAgICAgIHwgW3JlcGxhY2VtZW50XSAtPlxuICAgICAgICAgICAgKCogUHJlc2VydmUgb3JpZ2luYWwgbGVhZGluZyB0cml2aWEgKilcbiAgICAgICAgICAgIGxldCBvcmlnX3RyaXZpYSA9IG1hdGNoIG5vZGUgd2l0aFxuICAgICAgICAgICAgICB8IENzdEF0b20geyBsZWFkaW5nX3RyaXZpYTsgXyB9IC0+IGxlYWRpbmdfdHJpdmlhXG4gICAgICAgICAgICAgIHwgQ3N0TGlzdCB7IGxlYWRpbmdfdHJpdmlhOyBfIH0gLT4gbGVhZGluZ190cml2aWFcbiAgICAgICAgICAgICAgfCBDc3REaWN0IHsgbGVhZGluZ190cml2aWE7IF8gfSAtPiBsZWFkaW5nX3RyaXZpYVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIChtYXRjaCByZXBsYWNlbWVudCB3aXRoXG4gICAgICAgICAgICAgfCBDc3RBdG9tIHIgLT4gQ3N0QXRvbSB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IG9yaWdfdHJpdmlhIH1cbiAgICAgICAgICAgICB8IENzdExpc3QgciAtPiBDc3RMaXN0IHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gb3JpZ190cml2aWEgfVxuICAgICAgICAgICAgIHwgQ3N0RGljdCByIC0+IENzdERpY3QgeyByIHdpdGggbGVhZGluZ190cml2aWEgPSBvcmlnX3RyaXZpYSB9KVxuICAgICAgICAgIHwgXyAtPiBub2RlICAoKiBtdWx0aS1ub2RlIHJlcGxhY2VtZW50OiB1c2UgYXMtaXMgKilcbiAgICAgICAgZWxzZSBub2RlXG4gICAgICApIG5vZGVzXG4gICAgfCB0YXJnZXQgOjogcmVzdCAtPlxuICAgICAgTGlzdC5tYXBpIChmdW4gaSBub2RlIC0+XG4gICAgICAgIGlmIGkgPSB0YXJnZXQgdGhlblxuICAgICAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgICAgIHwgQ3N0TGlzdCByIC0+XG4gICAgICAgICAgICBDc3RMaXN0IHsgciB3aXRoIGNoaWxkcmVuID0gZ28gci5jaGlsZHJlbiByZXN0IH1cbiAgICAgICAgICB8IENzdERpY3QgciAtPlxuICAgICAgICAgICAgQ3N0RGljdCB7IHIgd2l0aCBjaGlsZHJlbiA9IGdvIHIuY2hpbGRyZW4gcmVzdCB9XG4gICAgICAgICAgfCBfIC0+IG5vZGVcbiAgICAgICAgZWxzZSBub2RlXG4gICAgICApIG5vZGVzXG4gIGluXG4gIGdvIG9yaWdpbmFsX2NzdF9ub2RlcyBwYXRoXG4iXSwibmFtZXMiOlsicnVudGltZSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYiIsIlN0ZGxpYl9MaXN0IiwiU3hfdHlwZXMiLCJTdGRsaWJfU3RyaW5nIiwidHJpdmlhX3RvX3N0cmluZyIsInRzIiwiYnVmIiwicGFyYW0iLCJzIiwiY3N0X3RvX3NvdXJjZSIsIm5vZGUiLCJ0b2tlbiIsImxlYWRpbmdfdHJpdmlhIiwidHJhaWxpbmdfdHJpdmlhIiwiY2xvc2VfZGVsaW0iLCJjaGlsZHJlbiIsIm9wZW5fZGVsaW0iLCJjIiwiY3N0IiwiY3N0X3RvX3NvdXJjZV9maWxlIiwibm9kZXMiLCJjc3RfZmlsZV90b19zb3VyY2UiLCJ0cmFpbGluZyIsImNzdF90b19hc3QiLCJ2YWx1ZSIsImQiLCJtYXRjaCIsInJlc3QiLCJ2IiwiayIsImtleV9zdHIiLCJvZmZzZXRfdG9fbG9jIiwic3JjIiwib2Zmc2V0IiwiY29sIiwibGluZSIsImkiLCJjc3RfdG9fYXN0X2xvYyIsInNwYW4iLCJhcHBseV9lZGl0IiwicGF0aCIsIm5ld19jc3Rfbm9kZXMiLCJvcmlnaW5hbF9jc3Rfbm9kZXMiLCJnbyIsImlkeF9wYXRoIiwidGFyZ2V0IiwicmVwbGFjZW1lbnQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxZQUFBQyxpQkFBQUM7QUFBQUEsUUFBQUMsTUNpRFk7QUFBQSxJQUNWO0FBQUE7QUFBQSxlQUFBQztBQUFBQSxPQUFVO0FBQUEs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LGNBQTRDO0FBQUEsYUFDdEM7QUFBQSxtQkFDRDtBQUFBO0FBQUEsWUFBQWMsV0FBQUMsTUFBQUMsZUFBQUM7QUFBQUEsYUFBQUMsR0FBQXZCLE9BQUF3QjtBQUFBQSxLQVVMLGVBQ1E7QUFBQSxTQUFBQyxTQURSO0FBQUE7QUFBQSxNQUdFO0FBQUE7QUFBQSx3QkFBQVQsR0FBQTFCO0FBQUFBLGdCQUNFLGlCQWNLO0FBQUEsZ0JBYkg7QUFBQSxxQkFBQW9DLGNBQUEsa0JBQUFsQyxpQkFHRTtBQUFBLGlCQUtBO0FBQUE7QUFBQSxvQkFDZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQ1g7QUFBQSxlQUNBO0FBQUEscUJBWUo7QUFBQSxTQUFBZSxPQTlCVDtBQUFBLEtBcUJFO0FBQUE7QUFBQSx1QkFBQVMsR0FBQTFCO0FBQUFBLGVBQ0U7QUFBQSxnQkFDRTtBQUFBO0FBQUEsbUJBS087QUFBQTtBQUFBO0FBQUEsd0JBSHVCO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQWtCO0FBQUE7QUFBQSwyQkFFbEI7QUFBQSxtQkFBa0I7QUFBQTtBQUFBLGVBRTdDO0FBQUEsY0FBSTtBQUFBLG9CQUNKO0FBQUE7QUFBQSxJQUVYLG1DQUEwQjtBQUFBO0FBQUEsR0Q1SzVCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6Mzg0NDgsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3BhcnNlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBTLWV4cHJlc3Npb24gcGFyc2VyLlxuXG4gICAgUmVjdXJzaXZlIGRlc2NlbnQgb3ZlciBhIHN0cmluZywgcHJvZHVjaW5nIFtTeF90eXBlcy52YWx1ZSBsaXN0XS5cbiAgICBTdXBwb3J0czogbGlzdHMsIGRpY3RzLCBzeW1ib2xzLCBrZXl3b3Jkcywgc3RyaW5ncyAod2l0aCBlc2NhcGVzKSxcbiAgICBudW1iZXJzLCBib29sZWFucywgbmlsLCBjb21tZW50cywgcXVvdGUvcXVhc2lxdW90ZS91bnF1b3RlIHN1Z2FyLiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbnR5cGUgc3RhdGUgPSB7XG4gIHNyYyA6IHN0cmluZztcbiAgbGVuIDogaW50O1xuICBtdXRhYmxlIHBvcyA6IGludDtcbn1cblxubGV0IG1ha2Vfc3RhdGUgc3JjID0geyBzcmM7IGxlbiA9IFN0cmluZy5sZW5ndGggc3JjOyBwb3MgPSAwIH1cblxubGV0IHBlZWsgcyA9IGlmIHMucG9zIDwgcy5sZW4gdGhlbiBTb21lIHMuc3JjLltzLnBvc10gZWxzZSBOb25lXG5sZXQgYWR2YW5jZSBzID0gcy5wb3MgPC0gcy5wb3MgKyAxXG5sZXQgYXRfZW5kIHMgPSBzLnBvcyA+PSBzLmxlblxuXG5sZXQgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzID1cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgaWYgYXRfZW5kIHMgdGhlbiAoKVxuICAgIGVsc2UgbWF0Y2ggcy5zcmMuW3MucG9zXSB3aXRoXG4gICAgfCAnICcgfCAnXFx0JyB8ICdcXG4nIHwgJ1xccicgLT4gYWR2YW5jZSBzOyBnbyAoKVxuICAgIHwgJzsnIC0+XG4gICAgICB3aGlsZSBzLnBvcyA8IHMubGVuICYmIHMuc3JjLltzLnBvc10gPD4gJ1xcbicgZG8gYWR2YW5jZSBzIGRvbmU7XG4gICAgICBpZiBzLnBvcyA8IHMubGVuIHRoZW4gYWR2YW5jZSBzO1xuICAgICAgZ28gKClcbiAgICB8IF8gLT4gKClcbiAgaW4gZ28gKClcblxuKCogQ2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uIOKAlCBtYXRjaGVzIHNwZWMvcGFyc2VyLnN4IGlkZW50LXN0YXJ0L2lkZW50LWNoYXIuXG4gICBpZGVudC1zdGFydDogYS16IEEtWiBfIH4gKiArIC0gPiA8ID0gLyAhID8gJlxuICAgaWRlbnQtY2hhcjogIGlkZW50LXN0YXJ0IHBsdXMgMC05IC4gOiAvICMgLCAqKVxubGV0IGlzX2lkZW50X3N0YXJ0ID0gZnVuY3Rpb25cbiAgfCAnYScuLid6JyB8ICdBJy4uJ1onIHwgJ18nIHwgJ34nIHwgJyonIHwgJysnIHwgJy0nXG4gIHwgJz4nIHwgJzwnIHwgJz0nIHwgJy8nIHwgJyEnIHwgJz8nIHwgJyYnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBpc19pZGVudF9jaGFyID0gZnVuY3Rpb25cbiAgfCBjIHdoZW4gaXNfaWRlbnRfc3RhcnQgYyAtPiB0cnVlXG4gIHwgJzAnLi4nOScgfCAnLicgfCAnOicgfCAnIycgfCAnLCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuKCogU3ltYm9sIHJlYWRpbmcgdXNlcyBpZGVudF9jaGFyOyBmaXJzdCBjaGFyIG11c3QgYmUgaWRlbnRfc3RhcnQgb3IgZGlnaXQvY29sb24gKilcbmxldCBpc19zeW1ib2xfY2hhciA9IGlzX2lkZW50X2NoYXJcblxubGV0IHJlYWRfc3RyaW5nIHMgPVxuICAoKiBzLnBvcyBpcyBvbiB0aGUgb3BlbmluZyBxdW90ZSAqKVxuICBhZHZhbmNlIHM7XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCByZWMgZ28gKCkgPVxuICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHN0cmluZ1wiKTtcbiAgICBsZXQgYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICBhZHZhbmNlIHM7XG4gICAgaWYgYyA9ICdcIicgdGhlbiBCdWZmZXIuY29udGVudHMgYnVmXG4gICAgZWxzZSBpZiBjID0gJ1xcXFwnIHRoZW4gYmVnaW5cbiAgICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHN0cmluZyBlc2NhcGVcIik7XG4gICAgICBsZXQgZXNjID0gcy5zcmMuW3MucG9zXSBpblxuICAgICAgYWR2YW5jZSBzO1xuICAgICAgKG1hdGNoIGVzYyB3aXRoXG4gICAgICAgfCAnbicgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJ1xuICAgICAgIHwgJ3QnIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcdCdcbiAgICAgICB8ICdyJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXHInXG4gICAgICAgfCAnXCInIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuICAgICAgIHwgJ1xcXFwnIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcXFwnXG4gICAgICAgfCAnLycgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnLydcbiAgICAgICB8ICd1JyAtPlxuICAgICAgICAgKCogXFx1WFhYWCDigJQgcmVhZCA0IGhleCBkaWdpdHMsIGVuY29kZSBhcyBVVEYtOCAqKVxuICAgICAgICAgaWYgcy5wb3MgKyA0ID4gcy5sZW4gdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJJbmNvbXBsZXRlIFxcXFx1IGVzY2FwZVwiKTtcbiAgICAgICAgIGxldCBoZXggPSBTdHJpbmcuc3ViIHMuc3JjIHMucG9zIDQgaW5cbiAgICAgICAgIHMucG9zIDwtIHMucG9zICsgNDtcbiAgICAgICAgIGxldCBjb2RlID0gaW50X29mX3N0cmluZyAoXCIweFwiIF4gaGV4KSBpblxuICAgICAgICAgbGV0IHVidWYgPSBCdWZmZXIuY3JlYXRlIDQgaW5cbiAgICAgICAgIEJ1ZmZlci5hZGRfdXRmXzhfdWNoYXIgdWJ1ZiAoVWNoYXIub2ZfaW50IGNvZGUpO1xuICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChCdWZmZXIuY29udGVudHMgdWJ1ZilcbiAgICAgICB8ICdgJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdgJ1xuICAgICAgIHwgXyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXFxcJzsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBlc2MpO1xuICAgICAgZ28gKClcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjO1xuICAgICAgZ28gKClcbiAgICBlbmRcbiAgaW4gZ28gKClcblxubGV0IHJlYWRfc3ltYm9sIHMgPVxuICBsZXQgc3RhcnQgPSBzLnBvcyBpblxuICB3aGlsZSBzLnBvcyA8IHMubGVuICYmIGlzX3N5bWJvbF9jaGFyIHMuc3JjLltzLnBvc10gZG8gYWR2YW5jZSBzIGRvbmU7XG4gIFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKHMucG9zIC0gc3RhcnQpXG5cbmxldCBnY2QgYSBiID1cbiAgbGV0IHJlYyBnIGEgYiA9IGlmIGIgPSAwIHRoZW4gYSBlbHNlIGcgYiAoYSBtb2QgYikgaW4gZyAoYWJzIGEpIChhYnMgYilcblxubGV0IG1ha2VfcmF0IG4gZCA9XG4gIGlmIGQgPSAwIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwicmF0aW9uYWw6IGRpdmlzaW9uIGJ5IHplcm9cIik7XG4gIGxldCBzaWduID0gaWYgZCA8IDAgdGhlbiAtMSBlbHNlIDEgaW5cbiAgbGV0IGcgPSBnY2QgKGFicyBuKSAoYWJzIGQpIGluXG4gIGxldCBybiA9IHNpZ24gKiBuIC8gZyBhbmQgcmQgPSBzaWduICogZCAvIGcgaW5cbiAgaWYgcmQgPSAxIHRoZW4gSW50ZWdlciBybiBlbHNlIFJhdGlvbmFsIChybiwgcmQpXG5cbmxldCB0cnlfbnVtYmVyIHN0ciA9XG4gICgqIEludGVnZXJzIChubyAnLicgb3IgJ2UnLydFJykg4oaSIGV4YWN0IEludGVnZXI7IHJhdGlvbmFscyBOL0Q7IGZsb2F0cyDihpIgaW5leGFjdCBOdW1iZXIgKilcbiAgbGV0IGhhc19kZWMgPSBTdHJpbmcuY29udGFpbnMgc3RyICcuJyBpblxuICBsZXQgaGFzX2V4cCA9IFN0cmluZy5jb250YWlucyBzdHIgJ2UnIHx8IFN0cmluZy5jb250YWlucyBzdHIgJ0UnIGluXG4gIGlmIGhhc19kZWMgfHwgaGFzX2V4cCB0aGVuXG4gICAgbWF0Y2ggZmxvYXRfb2Zfc3RyaW5nX29wdCBzdHIgd2l0aFxuICAgIHwgU29tZSBuIC0+IFNvbWUgKE51bWJlciBuKVxuICAgIHwgTm9uZSAtPiBOb25lXG4gIGVsc2VcbiAgICBtYXRjaCBTdHJpbmcuc3BsaXRfb25fY2hhciAnLycgc3RyIHdpdGhcbiAgICB8IFtudW1fczsgZGVuX3NdIHdoZW4gbnVtX3MgPD4gXCJcIiAmJiBkZW5fcyA8PiBcIlwiIC0+XG4gICAgICAobWF0Y2ggaW50X29mX3N0cmluZ19vcHQgbnVtX3MsIGludF9vZl9zdHJpbmdfb3B0IGRlbl9zIHdpdGhcbiAgICAgICB8IFNvbWUgbiwgU29tZSBkIC0+ICh0cnkgU29tZSAobWFrZV9yYXQgbiBkKSB3aXRoIF8gLT4gTm9uZSlcbiAgICAgICB8IF8gLT4gTm9uZSlcbiAgICB8IF8gLT5cbiAgICAgIG1hdGNoIGludF9vZl9zdHJpbmdfb3B0IHN0ciB3aXRoXG4gICAgICB8IFNvbWUgbiAtPiBTb21lIChJbnRlZ2VyIG4pXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgKCogaGFuZGxlcyBcIm5hblwiLCBcImluZlwiLCBcIi1pbmZcIiAqKVxuICAgICAgICBtYXRjaCBmbG9hdF9vZl9zdHJpbmdfb3B0IHN0ciB3aXRoXG4gICAgICAgIHwgU29tZSBuIC0+IFNvbWUgKE51bWJlciBuKVxuICAgICAgICB8IE5vbmUgLT4gTm9uZVxuXG5sZXQgcmVjIHJlYWRfdmFsdWUgcyA6IHZhbHVlID1cbiAgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzO1xuICBpZiBhdF9lbmQgcyB0aGVuIGJlZ2luXG4gICAgbGV0IGxpbmUgPSByZWYgMSBpblxuICAgIFN0cmluZy5pdGVyIChmdW4gYyAtPiBpZiBjID0gJ1xcbicgdGhlbiBpbmNyIGxpbmUpIHMuc3JjO1xuICAgIHJhaXNlIChQYXJzZV9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBhdCBsaW5lICVkIChwb3MgJWQpXCIgIWxpbmUgcy5wb3MpKVxuICBlbmQ7XG4gIG1hdGNoIHMuc3JjLltzLnBvc10gd2l0aFxuICB8ICcoJyAtPiByZWFkX2xpc3QgcyAnKSdcbiAgfCAnWycgLT4gcmVhZF9saXN0IHMgJ10nXG4gIHwgJ3snIC0+IHJlYWRfZGljdCBzXG4gIHwgJ1wiJyAtPiBTdHJpbmcgKHJlYWRfc3RyaW5nIHMpXG4gIHwgJ1xcJycgLT4gYWR2YW5jZSBzOyBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgJ2AnIC0+IGFkdmFuY2UgczsgTGlzdCBbU3ltYm9sIFwicXVhc2lxdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnXFxcXCcgLT5cbiAgICAoKiBDaGFyYWN0ZXIgbGl0ZXJhbDogI1xcYSwgI1xcc3BhY2UsICNcXG5ld2xpbmUsIGV0Yy4gKilcbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGFmdGVyICNcXFxcXCIpO1xuICAgIGxldCBjaGFyX3N0YXJ0ID0gcy5wb3MgaW5cbiAgICAoKiBSZWFkIGEgbmFtZSBpZiBzdGFydHMgd2l0aCBpZGVudCBjaGFyLCBlbHNlIHNpbmdsZSBjaGFyICopXG4gICAgaWYgaXNfaWRlbnRfc3RhcnQgcy5zcmMuW3MucG9zXSB0aGVuIGJlZ2luXG4gICAgICB3aGlsZSBzLnBvcyA8IHMubGVuICYmIGlzX2lkZW50X2NoYXIgcy5zcmMuW3MucG9zXSBkbyBhZHZhbmNlIHMgZG9uZTtcbiAgICAgIGxldCBuYW1lID0gU3RyaW5nLnN1YiBzLnNyYyBjaGFyX3N0YXJ0IChzLnBvcyAtIGNoYXJfc3RhcnQpIGluXG4gICAgICBsZXQgY3AgPSBtYXRjaCBuYW1lIHdpdGhcbiAgICAgICAgfCBcInNwYWNlXCIgLT4gMzIgfCBcIm5ld2xpbmVcIiAtPiAxMCB8IFwidGFiXCIgLT4gOVxuICAgICAgICB8IFwicmV0dXJuXCIgLT4gMTMgfCBcIm51bFwiIC0+IDAgfCBcIm51bGxcIiAtPiAwXG4gICAgICAgIHwgXCJlc2NhcGVcIiAtPiAyNyB8IFwiZGVsZXRlXCIgLT4gMTI3IHwgXCJiYWNrc3BhY2VcIiAtPiA4XG4gICAgICAgIHwgXCJhbHRtb2RlXCIgLT4gMjcgfCBcInJ1Ym91dFwiIC0+IDEyN1xuICAgICAgICB8IF8gLT4gQ2hhci5jb2RlIG5hbWUuWzBdICAoKiBzaW5nbGUgbGV0dGVyIGxpa2UgI1xcYSAqKVxuICAgICAgaW4gQ2hhciBjcFxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBsZXQgYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIENoYXIgKENoYXIuY29kZSBjKVxuICAgIGVuZFxuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmXG4gICAgICAgICAgICAgKHMuc3JjLltzLnBvcyArIDFdID0gJ3QnIHx8IHMuc3JjLltzLnBvcyArIDFdID0gJ2YnKSAmJlxuICAgICAgICAgICAgIChzLnBvcyArIDIgPj0gcy5sZW4gfHwgbm90IChpc19pZGVudF9jaGFyIHMuc3JjLltzLnBvcyArIDJdKSkgLT5cbiAgICAoKiAjdCAvICNmIOKAlCBib29sZWFuIGxpdGVyYWxzIChSN1JTIHNob3J0aGFuZCkgKilcbiAgICBsZXQgYiA9IHMuc3JjLltzLnBvcyArIDFdID0gJ3QnIGluXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgQm9vbCBiXG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnOycgLT5cbiAgICAoKiBEYXR1bSBjb21tZW50OiAjOyBkaXNjYXJkcyBuZXh0IGV4cHJlc3Npb24gKilcbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBpZ25vcmUgKHJlYWRfdmFsdWUgcyk7XG4gICAgcmVhZF92YWx1ZSBzXG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnXFwnJyAtPlxuICAgICgqIFF1b3RlIHNob3J0aGFuZDogIydleHByIC0+IChxdW90ZSBleHByKSAqKVxuICAgIGFkdmFuY2UgczsgYWR2YW5jZSBzO1xuICAgIExpc3QgW1N5bWJvbCBcInF1b3RlXCI7IHJlYWRfdmFsdWUgc11cbiAgfCAnIycgd2hlbiBzLnBvcyArIDEgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3MgKyAxXSA9ICd8JyAtPlxuICAgICgqIFJhdyBzdHJpbmc6ICN8Li4ufCAg4oCUIGVuZHMgYXQgbmV4dCB8ICopXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBsZXQgcmVjIGdvICgpID1cbiAgICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHJhdyBzdHJpbmdcIik7XG4gICAgICBsZXQgYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIGlmIGMgPSAnfCcgdGhlblxuICAgICAgICBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgYztcbiAgICAgICAgZ28gKClcbiAgICAgIGVuZFxuICAgIGluIGdvICgpXG4gIHwgJywnIC0+XG4gICAgKCogVW5xdW90ZSAvIHNwbGljZS11bnF1b3RlIOKAlCBtYXRjaGVzIHNwZWM6ICwgYWx3YXlzIHRyaWdnZXJzIHVucXVvdGUgKilcbiAgICBhZHZhbmNlIHM7XG4gICAgaWYgcy5wb3MgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3NdID0gJ0AnIHRoZW4gYmVnaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIExpc3QgW1N5bWJvbCBcInNwbGljZS11bnF1b3RlXCI7IHJlYWRfdmFsdWUgc11cbiAgICBlbmQgZWxzZVxuICAgICAgTGlzdCBbU3ltYm9sIFwidW5xdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgXyAtPlxuICAgIGJlZ2luXG4gICAgICAoKiBTeW1ib2wsIGtleXdvcmQsIG51bWJlciwgb3IgYm9vbGVhbiAqKVxuICAgICAgbGV0IHRva2VuID0gcmVhZF9zeW1ib2wgcyBpblxuICAgICAgaWYgdG9rZW4gPSBcIlwiIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxpbmUgPSByZWYgMSBhbmQgY29sID0gcmVmIDEgaW5cbiAgICAgICAgZm9yIGkgPSAwIHRvIHMucG9zIC0gMSBkb1xuICAgICAgICAgIGlmIHMuc3JjLltpXSA9ICdcXG4nIHRoZW4gKGluY3IgbGluZTsgY29sIDo9IDEpIGVsc2UgaW5jciBjb2xcbiAgICAgICAgZG9uZTtcbiAgICAgICAgcmFpc2UgKFBhcnNlX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIlVuZXhwZWN0ZWQgY2hhcjogJWMgYXQgbGluZSAlZCBjb2wgJWQgKHBvcyAlZClcIlxuICAgICAgICAgIHMuc3JjLltzLnBvc10gIWxpbmUgIWNvbCBzLnBvcykpXG4gICAgICBlbmQ7XG4gICAgICBtYXRjaCB0b2tlbiB3aXRoXG4gICAgICB8IFwidHJ1ZVwiIC0+IEJvb2wgdHJ1ZVxuICAgICAgfCBcImZhbHNlXCIgLT4gQm9vbCBmYWxzZVxuICAgICAgfCBcIm5pbFwiIC0+IE5pbFxuICAgICAgfCBfIHdoZW4gdG9rZW4uWzBdID0gJzonIC0+XG4gICAgICAgIEtleXdvcmQgKFN0cmluZy5zdWIgdG9rZW4gMSAoU3RyaW5nLmxlbmd0aCB0b2tlbiAtIDEpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIG1hdGNoIHRyeV9udW1iZXIgdG9rZW4gd2l0aFxuICAgICAgICB8IFNvbWUgbiAtPiBuXG4gICAgICAgIHwgTm9uZSAtPiBTeW1ib2wgdG9rZW5cbiAgICBlbmRcblxuYW5kIHJlYWRfbGlzdCBzIGNsb3NlX2NoYXIgPVxuICBhZHZhbmNlIHM7ICgqIHNraXAgb3BlbmluZyBwYXJlbi9icmFja2V0ICopXG4gIGxldCBpdGVtcyA9IHJlZiBbXSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBza2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIHM7XG4gICAgaWYgYXRfZW5kIHMgdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbnRlcm1pbmF0ZWQgbGlzdFwiKTtcbiAgICBpZiBzLnNyYy5bcy5wb3NdID0gY2xvc2VfY2hhciB0aGVuIGJlZ2luXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBMaXN0IChMaXN0LnJldiAhaXRlbXMpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIGl0ZW1zIDo9IHJlYWRfdmFsdWUgcyA6OiAhaXRlbXM7XG4gICAgICBnbyAoKVxuICAgIGVuZFxuICBpbiBnbyAoKVxuXG5hbmQgcmVhZF9kaWN0IHMgPVxuICBhZHZhbmNlIHM7ICgqIHNraXAgeyAqKVxuICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBza2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIHM7XG4gICAgaWYgYXRfZW5kIHMgdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbnRlcm1pbmF0ZWQgZGljdFwiKTtcbiAgICBpZiBzLnNyYy5bcy5wb3NdID0gJ30nIHRoZW4gYmVnaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIERpY3QgZFxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBsZXQga2V5ID0gcmVhZF92YWx1ZSBzIGluXG4gICAgICBsZXQga2V5X3N0ciA9IG1hdGNoIGtleSB3aXRoXG4gICAgICAgIHwgS2V5d29yZCBrIC0+IGtcbiAgICAgICAgfCBTdHJpbmcgayAtPiBrXG4gICAgICAgIHwgU3ltYm9sIGsgLT4ga1xuICAgICAgICB8IF8gLT4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiRGljdCBrZXkgbXVzdCBiZSBrZXl3b3JkLCBzdHJpbmcsIG9yIHN5bWJvbFwiKVxuICAgICAgaW5cbiAgICAgIGxldCB2ID0gcmVhZF92YWx1ZSBzIGluXG4gICAgICBkaWN0X3NldCBkIGtleV9zdHIgdjtcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluIGdvICgpXG5cblxuKCoqIFBhcnNlIGEgc3RyaW5nIGludG8gYSBsaXN0IG9mIFNYIHZhbHVlcyAoQVNUIOKAlCBjb21tZW50cyBzdHJpcHBlZCkuICopXG5sZXQgcGFyc2VfYWxsIHNyYyA9XG4gIGxldCBzID0gbWFrZV9zdGF0ZSBzcmMgaW5cbiAgbGV0IHJlc3VsdHMgPSByZWYgW10gaW5cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzO1xuICAgIGlmIGF0X2VuZCBzIHRoZW4gTGlzdC5yZXYgIXJlc3VsdHNcbiAgICBlbHNlIGJlZ2luXG4gICAgICByZXN1bHRzIDo9IHJlYWRfdmFsdWUgcyA6OiAhcmVzdWx0cztcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluIGdvICgpXG5cbigqKiBQYXJzZSBhIGZpbGUgaW50byBhIGxpc3Qgb2YgU1ggdmFsdWVzIChBU1Qg4oCUIGNvbW1lbnRzIHN0cmlwcGVkKS4gKilcbmxldCBwYXJzZV9maWxlIHBhdGggPVxuICBsZXQgaWMgPSBvcGVuX2luIHBhdGggaW5cbiAgbGV0IG4gPSBpbl9jaGFubmVsX2xlbmd0aCBpYyBpblxuICBsZXQgc3JjID0gcmVhbGx5X2lucHV0X3N0cmluZyBpYyBuIGluXG4gIGNsb3NlX2luIGljO1xuICBwYXJzZV9hbGwgc3JjXG5cblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBDU1QgcGFyc2VyIOKAlCBsb3NzbGVzcyBjb25jcmV0ZSBzeW50YXggdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbm9wZW4gU3hfY3N0XG5cbigqKiBDb2xsZWN0IGxlYWRpbmcgdHJpdmlhICh3aGl0ZXNwYWNlICsgY29tbWVudHMpIGZyb20gY3VycmVudCBwb3NpdGlvbi4gKilcbmxldCBjb2xsZWN0X3RyaXZpYSBzID1cbiAgbGV0IGl0ZW1zID0gcmVmIFtdIGluXG4gIGxldCByZWMgZ28gKCkgPVxuICAgIGlmIGF0X2VuZCBzIHRoZW4gKClcbiAgICBlbHNlIG1hdGNoIHMuc3JjLltzLnBvc10gd2l0aFxuICAgIHwgJyAnIHwgJ1xcdCcgfCAnXFxuJyB8ICdcXHInIC0+XG4gICAgICBsZXQgc3RhcnQgPSBzLnBvcyBpblxuICAgICAgd2hpbGUgcy5wb3MgPCBzLmxlbiAmJiAobGV0IGMgPSBzLnNyYy5bcy5wb3NdIGluIGMgPSAnICcgfHwgYyA9ICdcXHQnIHx8IGMgPSAnXFxuJyB8fCBjID0gJ1xccicpIGRvXG4gICAgICAgIGFkdmFuY2Ugc1xuICAgICAgZG9uZTtcbiAgICAgIGl0ZW1zIDo9IFdoaXRlc3BhY2UgKFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKHMucG9zIC0gc3RhcnQpKSA6OiAhaXRlbXM7XG4gICAgICBnbyAoKVxuICAgIHwgJzsnIC0+XG4gICAgICBsZXQgc3RhcnQgPSBzLnBvcyBpblxuICAgICAgd2hpbGUgcy5wb3MgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3NdIDw+ICdcXG4nIGRvIGFkdmFuY2UgcyBkb25lO1xuICAgICAgbGV0IHRleHQgPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChzLnBvcyAtIHN0YXJ0KSBpblxuICAgICAgaWYgcy5wb3MgPCBzLmxlbiB0aGVuIGFkdmFuY2UgcztcbiAgICAgICgqIEluY2x1ZGUgdGhlIG5ld2xpbmUgaW4gdGhlIGNvbW1lbnQgdHJpdmlhICopXG4gICAgICBsZXQgdGV4dCA9IGlmIHMucG9zID4gMCAmJiBzLnBvcyA8PSBzLmxlbiAmJiBzLnNyYy5bcy5wb3MgLSAxXSA9ICdcXG4nXG4gICAgICAgIHRoZW4gdGV4dCBeIFwiXFxuXCIgZWxzZSB0ZXh0IGluXG4gICAgICBpdGVtcyA6PSBMaW5lQ29tbWVudCB0ZXh0IDo6ICFpdGVtcztcbiAgICAgIGdvICgpXG4gICAgfCBfIC0+ICgpXG4gIGluXG4gIGdvICgpO1xuICBMaXN0LnJldiAhaXRlbXNcblxuKCoqIFJlYWQgYSBzaW5nbGUgQ1NUIHZhbHVlIOKAlCBkaXNwYXRjaGVzIG9uIGZpcnN0IG5vbi10cml2aWEgY2hhci4gKilcbmxldCByZWMgcmVhZF9jc3QgcyA6IGNzdF9ub2RlID1cbiAgbGV0IHRyaXZpYSA9IGNvbGxlY3RfdHJpdmlhIHMgaW5cbiAgaWYgYXRfZW5kIHMgdGhlblxuICAgIHJhaXNlIChQYXJzZV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIpO1xuICBsZXQgc3RhcnQgPSBzLnBvcyBpblxuICBtYXRjaCBzLnNyYy5bcy5wb3NdIHdpdGhcbiAgfCAnKCcgLT4gcmVhZF9jc3RfbGlzdCBzIHRyaXZpYSBzdGFydCAnKCcgJyknXG4gIHwgJ1snIC0+IHJlYWRfY3N0X2xpc3QgcyB0cml2aWEgc3RhcnQgJ1snICddJ1xuICB8ICd7JyAtPiByZWFkX2NzdF9kaWN0IHMgdHJpdmlhIHN0YXJ0XG4gIHwgJ1xcJycgLT5cbiAgICAoKiBRdW90ZSBzdWdhcjogJ3gg4oaSIChxdW90ZSB4KSDigJQgZW1pdCBhcyByYXcgdG9rZW4gKilcbiAgICBhZHZhbmNlIHM7XG4gICAgbGV0IGlubmVyID0gcmVhZF9jc3QgcyBpblxuICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICBsZXQgdG9rZW4gPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChlbmRfcG9zIC0gc3RhcnQpIGluXG4gICAgbGV0IHZhbHVlID0gTGlzdCBbU3ltYm9sIFwicXVvdGVcIjsgY3N0X3RvX2FzdCBpbm5lcl0gaW5cbiAgICBDc3RBdG9tIHsgbGVhZGluZ190cml2aWEgPSB0cml2aWE7IHRva2VuOyB2YWx1ZTsgc3BhbiA9IHsgc3RhcnRfb2Zmc2V0ID0gc3RhcnQ7IGVuZF9vZmZzZXQgPSBlbmRfcG9zIH0gfVxuICB8ICdgJyAtPlxuICAgIGFkdmFuY2UgcztcbiAgICBsZXQgaW5uZXIgPSByZWFkX2NzdCBzIGluXG4gICAgbGV0IGVuZF9wb3MgPSBzLnBvcyBpblxuICAgIGxldCB0b2tlbiA9IFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKGVuZF9wb3MgLSBzdGFydCkgaW5cbiAgICBsZXQgdmFsdWUgPSBMaXN0IFtTeW1ib2wgXCJxdWFzaXF1b3RlXCI7IGNzdF90b19hc3QgaW5uZXJdIGluXG4gICAgQ3N0QXRvbSB7IGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhOyB0b2tlbjsgdmFsdWU7IHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cbiAgfCAnLCcgLT5cbiAgICBhZHZhbmNlIHM7XG4gICAgbGV0IHNwbGljZSA9IHMucG9zIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zXSA9ICdAJyBpblxuICAgIGlmIHNwbGljZSB0aGVuIGFkdmFuY2UgcztcbiAgICBsZXQgaW5uZXIgPSByZWFkX2NzdCBzIGluXG4gICAgbGV0IGVuZF9wb3MgPSBzLnBvcyBpblxuICAgIGxldCB0b2tlbiA9IFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKGVuZF9wb3MgLSBzdGFydCkgaW5cbiAgICBsZXQgc3ltID0gaWYgc3BsaWNlIHRoZW4gXCJzcGxpY2UtdW5xdW90ZVwiIGVsc2UgXCJ1bnF1b3RlXCIgaW5cbiAgICBsZXQgdmFsdWUgPSBMaXN0IFtTeW1ib2wgc3ltOyBjc3RfdG9fYXN0IGlubmVyXSBpblxuICAgIENzdEF0b20geyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgdG9rZW47IHZhbHVlOyBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnOycgLT5cbiAgICAoKiBEYXR1bSBjb21tZW50OiAjOyBkaXNjYXJkcyBuZXh0IGV4cHJlc3Npb24gKilcbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBsZXQgX2Rpc2NhcmRlZCA9IHJlYWRfY3N0IHMgaW5cbiAgICAoKiBSZWFkIHRoZSByZWFsIHZhbHVlIGFmdGVyIHRoZSBkYXR1bSBjb21tZW50IOKAlCBhdHRhY2ggdHJpdmlhIGZyb20gIzsgKilcbiAgICBsZXQgbmV4dCA9IHJlYWRfY3N0IHMgaW5cbiAgICBsZXQgY29tYmluZWRfdHJpdmlhID0gdHJpdmlhIEAgKG1hdGNoIG5leHQgd2l0aFxuICAgICAgfCBDc3RBdG9tIHIgLT4gci5sZWFkaW5nX3RyaXZpYVxuICAgICAgfCBDc3RMaXN0IHIgLT4gci5sZWFkaW5nX3RyaXZpYVxuICAgICAgfCBDc3REaWN0IHIgLT4gci5sZWFkaW5nX3RyaXZpYSkgaW5cbiAgICAobWF0Y2ggbmV4dCB3aXRoXG4gICAgIHwgQ3N0QXRvbSByIC0+IENzdEF0b20geyByIHdpdGggbGVhZGluZ190cml2aWEgPSBjb21iaW5lZF90cml2aWEgfVxuICAgICB8IENzdExpc3QgciAtPiBDc3RMaXN0IHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gY29tYmluZWRfdHJpdmlhIH1cbiAgICAgfCBDc3REaWN0IHIgLT4gQ3N0RGljdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IGNvbWJpbmVkX3RyaXZpYSB9KVxuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmIHMuc3JjLltzLnBvcyArIDFdID0gJ1xcJycgLT5cbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBsZXQgaW5uZXIgPSByZWFkX2NzdCBzIGluXG4gICAgbGV0IGVuZF9wb3MgPSBzLnBvcyBpblxuICAgIGxldCB0b2tlbiA9IFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKGVuZF9wb3MgLSBzdGFydCkgaW5cbiAgICBsZXQgdmFsdWUgPSBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyBjc3RfdG9fYXN0IGlubmVyXSBpblxuICAgIENzdEF0b20geyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgdG9rZW47IHZhbHVlOyBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnfCcgLT5cbiAgICAoKiBSYXcgc3RyaW5nOiAjfC4uLnwgICopXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBsZXQgcmVjIGdvICgpID1cbiAgICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHJhdyBzdHJpbmdcIik7XG4gICAgICBsZXQgYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIGlmIGMgPSAnfCcgdGhlbiAoKVxuICAgICAgZWxzZSBiZWdpbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7IGdvICgpIGVuZFxuICAgIGluXG4gICAgZ28gKCk7XG4gICAgbGV0IGVuZF9wb3MgPSBzLnBvcyBpblxuICAgIGxldCB0b2tlbiA9IFN0cmluZy5zdWIgcy5zcmMgc3RhcnQgKGVuZF9wb3MgLSBzdGFydCkgaW5cbiAgICBDc3RBdG9tIHsgbGVhZGluZ190cml2aWEgPSB0cml2aWE7IHRva2VuOyB2YWx1ZSA9IFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1Zik7XG4gICAgICAgICAgICAgIHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cbiAgfCAnXCInIC0+XG4gICAgbGV0IHZhbHVlID0gU3RyaW5nIChyZWFkX3N0cmluZyBzKSBpblxuICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICBsZXQgdG9rZW4gPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChlbmRfcG9zIC0gc3RhcnQpIGluXG4gICAgQ3N0QXRvbSB7IGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhOyB0b2tlbjsgdmFsdWU7XG4gICAgICAgICAgICAgIHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cbiAgfCBfIC0+XG4gICAgbGV0IHN5bSA9IHJlYWRfc3ltYm9sIHMgaW5cbiAgICBpZiBzeW0gPSBcIlwiIHRoZW4gYmVnaW5cbiAgICAgIGxldCBsaW5lID0gcmVmIDEgYW5kIGNvbCA9IHJlZiAxIGluXG4gICAgICBmb3IgaSA9IDAgdG8gcy5wb3MgLSAxIGRvXG4gICAgICAgIGlmIHMuc3JjLltpXSA9ICdcXG4nIHRoZW4gKGluY3IgbGluZTsgY29sIDo9IDEpIGVsc2UgaW5jciBjb2xcbiAgICAgIGRvbmU7XG4gICAgICByYWlzZSAoUGFyc2VfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiVW5leHBlY3RlZCBjaGFyOiAlYyBhdCBsaW5lICVkIGNvbCAlZCAocG9zICVkKVwiXG4gICAgICAgIHMuc3JjLltzLnBvc10gIWxpbmUgIWNvbCBzLnBvcykpXG4gICAgZW5kO1xuICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICBsZXQgdG9rZW4gPSBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChlbmRfcG9zIC0gc3RhcnQpIGluXG4gICAgbGV0IHZhbHVlID0gbWF0Y2ggc3ltIHdpdGhcbiAgICAgIHwgXCJ0cnVlXCIgLT4gQm9vbCB0cnVlXG4gICAgICB8IFwiZmFsc2VcIiAtPiBCb29sIGZhbHNlXG4gICAgICB8IFwibmlsXCIgLT4gTmlsXG4gICAgICB8IF8gd2hlbiBzeW0uWzBdID0gJzonIC0+IEtleXdvcmQgKFN0cmluZy5zdWIgc3ltIDEgKFN0cmluZy5sZW5ndGggc3ltIC0gMSkpXG4gICAgICB8IF8gLT4gbWF0Y2ggdHJ5X251bWJlciBzeW0gd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gU3ltYm9sIHN5bVxuICAgIGluXG4gICAgQ3N0QXRvbSB7IGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhOyB0b2tlbjsgdmFsdWU7XG4gICAgICAgICAgICAgIHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cblxuYW5kIHJlYWRfY3N0X2xpc3QgcyB0cml2aWEgc3RhcnQgb3Blbl9jIGNsb3NlX2MgPVxuICBhZHZhbmNlIHM7ICgqIHNraXAgb3BlbiBkZWxpbSAqKVxuICBsZXQgY2hpbGRyZW4gPSByZWYgW10gaW5cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgbGV0IGNoaWxkX3RyaXZpYSA9IGNvbGxlY3RfdHJpdmlhIHMgaW5cbiAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVudGVybWluYXRlZCBsaXN0XCIpO1xuICAgIGlmIHMuc3JjLltzLnBvc10gPSBjbG9zZV9jIHRoZW4gYmVnaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICAgIENzdExpc3QgeyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgb3Blbl9kZWxpbSA9IG9wZW5fYztcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IExpc3QucmV2ICFjaGlsZHJlbjsgY2xvc2VfZGVsaW0gPSBjbG9zZV9jO1xuICAgICAgICAgICAgICAgIHRyYWlsaW5nX3RyaXZpYSA9IGNoaWxkX3RyaXZpYTtcbiAgICAgICAgICAgICAgICBzcGFuID0geyBzdGFydF9vZmZzZXQgPSBzdGFydDsgZW5kX29mZnNldCA9IGVuZF9wb3MgfSB9XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICgqIFB1c2ggY29sbGVjdGVkIHRyaXZpYSBvbnRvIHRoZSBuZXh0IGNoaWxkICopXG4gICAgICBsZXQgY2hpbGRfc3RhcnQgPSBzLnBvcyBpblxuICAgICAgbGV0IGNoaWxkID0gcmVhZF9jc3RfaW5uZXIgcyBpblxuICAgICAgbGV0IGNoaWxkX3dpdGhfdHJpdmlhID0gbWF0Y2ggY2hpbGQgd2l0aFxuICAgICAgICB8IENzdEF0b20gciAtPiBDc3RBdG9tIHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gY2hpbGRfdHJpdmlhIEAgci5sZWFkaW5nX3RyaXZpYSB9XG4gICAgICAgIHwgQ3N0TGlzdCByIC0+IENzdExpc3QgeyByIHdpdGggbGVhZGluZ190cml2aWEgPSBjaGlsZF90cml2aWEgQCByLmxlYWRpbmdfdHJpdmlhIH1cbiAgICAgICAgfCBDc3REaWN0IHIgLT4gQ3N0RGljdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IGNoaWxkX3RyaXZpYSBAIHIubGVhZGluZ190cml2aWEgfVxuICAgICAgaW5cbiAgICAgIGlnbm9yZSBjaGlsZF9zdGFydDtcbiAgICAgIGNoaWxkcmVuIDo9IGNoaWxkX3dpdGhfdHJpdmlhIDo6ICFjaGlsZHJlbjtcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluXG4gIGdvICgpXG5cbmFuZCByZWFkX2NzdF9kaWN0IHMgdHJpdmlhIHN0YXJ0ID1cbiAgYWR2YW5jZSBzOyAoKiBza2lwIHsgKilcbiAgbGV0IGNoaWxkcmVuID0gcmVmIFtdIGluXG4gIGxldCByZWMgZ28gKCkgPVxuICAgIGxldCBjaGlsZF90cml2aWEgPSBjb2xsZWN0X3RyaXZpYSBzIGluXG4gICAgaWYgYXRfZW5kIHMgdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbnRlcm1pbmF0ZWQgZGljdFwiKTtcbiAgICBpZiBzLnNyYy5bcy5wb3NdID0gJ30nIHRoZW4gYmVnaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIGxldCBlbmRfcG9zID0gcy5wb3MgaW5cbiAgICAgIENzdERpY3QgeyBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYTsgY2hpbGRyZW4gPSBMaXN0LnJldiAhY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgdHJhaWxpbmdfdHJpdmlhID0gY2hpbGRfdHJpdmlhO1xuICAgICAgICAgICAgICAgIHNwYW4gPSB7IHN0YXJ0X29mZnNldCA9IHN0YXJ0OyBlbmRfb2Zmc2V0ID0gZW5kX3BvcyB9IH1cbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgbGV0IGNoaWxkID0gcmVhZF9jc3RfaW5uZXIgcyBpblxuICAgICAgbGV0IGNoaWxkX3dpdGhfdHJpdmlhID0gbWF0Y2ggY2hpbGQgd2l0aFxuICAgICAgICB8IENzdEF0b20gciAtPiBDc3RBdG9tIHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gY2hpbGRfdHJpdmlhIEAgci5sZWFkaW5nX3RyaXZpYSB9XG4gICAgICAgIHwgQ3N0TGlzdCByIC0+IENzdExpc3QgeyByIHdpdGggbGVhZGluZ190cml2aWEgPSBjaGlsZF90cml2aWEgQCByLmxlYWRpbmdfdHJpdmlhIH1cbiAgICAgICAgfCBDc3REaWN0IHIgLT4gQ3N0RGljdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IGNoaWxkX3RyaXZpYSBAIHIubGVhZGluZ190cml2aWEgfVxuICAgICAgaW5cbiAgICAgIGNoaWxkcmVuIDo9IGNoaWxkX3dpdGhfdHJpdmlhIDo6ICFjaGlsZHJlbjtcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluXG4gIGdvICgpXG5cbigqKiBJbm5lciByZWFkIOKAlCBubyB0cml2aWEgY29sbGVjdGlvbiAoY2FsbGVyIGhhbmRsZXMgaXQpLiAqKVxuYW5kIHJlYWRfY3N0X2lubmVyIHMgOiBjc3Rfbm9kZSA9XG4gIHJlYWRfY3N0IHNcblxuKCoqIFBhcnNlIHJlc3VsdDogbGlzdCBvZiBDU1Qgbm9kZXMgKyBhbnkgdHJhaWxpbmcgdHJpdmlhIGFmdGVyIHRoZSBsYXN0IG5vZGUuICopXG50eXBlIGNzdF9maWxlID0ge1xuICBub2RlcyA6IGNzdF9ub2RlIGxpc3Q7XG4gIHRyYWlsaW5nX3RyaXZpYSA6IHRyaXZpYSBsaXN0O1xufVxuXG4oKiogUGFyc2UgYSBzdHJpbmcgaW50byBhIGxpc3Qgb2YgQ1NUIG5vZGVzLiAqKVxubGV0IHBhcnNlX2FsbF9jc3Qgc3JjID1cbiAgbGV0IHMgPSBtYWtlX3N0YXRlIHNyYyBpblxuICBsZXQgcmVzdWx0cyA9IHJlZiBbXSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBsZXQgdHJpdmlhID0gY29sbGVjdF90cml2aWEgcyBpblxuICAgIGlmIGF0X2VuZCBzIHRoZW5cbiAgICAgIHsgbm9kZXMgPSBMaXN0LnJldiAhcmVzdWx0czsgdHJhaWxpbmdfdHJpdmlhID0gdHJpdmlhIH1cbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgbm9kZSA9IHJlYWRfY3N0X2lubmVyIHMgaW5cbiAgICAgICgqIFByZXBlbmQgY29sbGVjdGVkIHRyaXZpYSB0byB0aGlzIG5vZGUgKilcbiAgICAgIGxldCBub2RlX3dpdGhfdHJpdmlhID0gbWF0Y2ggbm9kZSB3aXRoXG4gICAgICAgIHwgQ3N0QXRvbSByIC0+IENzdEF0b20geyByIHdpdGggbGVhZGluZ190cml2aWEgPSB0cml2aWEgQCByLmxlYWRpbmdfdHJpdmlhIH1cbiAgICAgICAgfCBDc3RMaXN0IHIgLT4gQ3N0TGlzdCB7IHIgd2l0aCBsZWFkaW5nX3RyaXZpYSA9IHRyaXZpYSBAIHIubGVhZGluZ190cml2aWEgfVxuICAgICAgICB8IENzdERpY3QgciAtPiBDc3REaWN0IHsgciB3aXRoIGxlYWRpbmdfdHJpdmlhID0gdHJpdmlhIEAgci5sZWFkaW5nX3RyaXZpYSB9XG4gICAgICBpblxuICAgICAgcmVzdWx0cyA6PSBub2RlX3dpdGhfdHJpdmlhIDo6ICFyZXN1bHRzO1xuICAgICAgZ28gKClcbiAgICBlbmRcbiAgaW5cbiAgZ28gKClcblxuKCoqIFBhcnNlIGEgZmlsZSBpbnRvIGEgbGlzdCBvZiBDU1Qgbm9kZXMuICopXG5sZXQgcGFyc2VfZmlsZV9jc3QgcGF0aCA9XG4gIGxldCBpYyA9IG9wZW5faW4gcGF0aCBpblxuICBsZXQgbiA9IGluX2NoYW5uZWxfbGVuZ3RoIGljIGluXG4gIGxldCBzcmMgPSByZWFsbHlfaW5wdXRfc3RyaW5nIGljIG4gaW5cbiAgY2xvc2VfaW4gaWM7XG4gIHBhcnNlX2FsbF9jc3Qgc3JjXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZGl2IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9tdWwiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX2NhbGwyIiwiZiIsImEwIiwiYTEiLCJjYW1sX2NhbGw0IiwiYTIiLCJhMyIsImdsb2JhbF9kYXRhIiwiU3hfdHlwZXMiLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfTGlzdCIsIlN4X2NzdCIsIlN0ZGxpYiIsIlN0ZGxpYl9VY2hhciIsIm1ha2Vfc3RhdGUiLCJzcmMiLCJwZWVrIiwicyIsImFkdmFuY2UiLCJhdF9lbmQiLCJza2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIiwibWF0Y2giLCJpc19pZGVudF9zdGFydCIsInBhcmFtIiwiaXNfaWRlbnRfY2hhciIsImMiLCJyZWFkX3N0cmluZyIsImJ1ZiIsImVzYyIsImhleCIsImNvZGUiLCJ1YnVmIiwicmVhZF9zeW1ib2wiLCJzdGFydCIsImdjZCIsImEiLCJiIiwibWFrZV9yYXQiLCJuIiwiZCIsInNpZ24iLCJnIiwicm4iLCJyZCIsImNzdCIsInRyeV9udW1iZXIiLCJzdHIiLCJoYXNfZGVjIiwiaGFzX2V4cCIsImRlbl9zIiwibnVtX3MiLCJleG4iLCJjc3RfcG9zIiwiY3N0X2F0X2xpbmUiLCJjc3RfY29sIiwiY3N0X1VuZXhwZWN0ZWRfY2hhciIsImNzdF9VbmV4cGVjdGVkX2NoYXJfY19hdF9saW5lXyIsImNzdF9VbnRlcm1pbmF0ZWRfcmF3X3N0cmluZyIsImNzdF9mYWxzZSIsImNzdF9uaWwiLCJjc3RfcXVhc2lxdW90ZSIsImNzdF9xdW90ZSIsImNzdF9zcGxpY2VfdW5xdW90ZSIsImNzdF90cnVlIiwiY3N0X3VucXVvdGUiLCJyZWFkX3ZhbHVlIiwiY2hhcl9zdGFydCIsIm5hbWUiLCJzd2l0Y2gkIiwiY3AiLCJ0b2tlbiIsImNvbCIsImxpbmUiLCJpIiwiY3N0X1VudGVybWluYXRlZF9saXN0IiwicmVhZF9saXN0IiwiY2xvc2VfY2hhciIsIml0ZW1zIiwiY3N0X1VudGVybWluYXRlZF9kaWN0IiwicmVhZF9kaWN0Iiwia2V5Iiwia2V5X3N0ciIsInYiLCJwYXJzZV9hbGwiLCJyZXN1bHRzIiwicGFyc2VfZmlsZSIsInBhdGgiLCJpYyIsImNvbGxlY3RfdHJpdmlhIiwidGV4dCIsInJlYWRfY3N0IiwidHJpdmlhIiwiaW5uZXIiLCJlbmRfcG9zIiwidmFsdWUiLCJuZXh0IiwiY29tYmluZWRfdHJpdmlhIiwic3BsaWNlIiwic3ltIiwicmVhZF9jc3RfbGlzdCIsIm9wZW5fYyIsImNsb3NlX2MiLCJjaGlsZHJlbiIsImNoaWxkX3RyaXZpYSIsImNoaWxkIiwiY2hpbGRfd2l0aF90cml2aWEiLCJyZWFkX2NzdF9kaWN0IiwicmVhZF9jc3RfaW5uZXIiLCJwYXJzZV9hbGxfY3N0Iiwibm9kZSIsIm5vZGVfd2l0aF90cml2aWEiLCJwYXJzZV9maWxlX2NzdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSCxHQUFBQyxJQUFBQyxJQUFBRSxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxZQUFBQyxXQUFBQyxLQ2NxQiwrQ0FBeUM7QUFBQSxZQUFBQyxLQUFBQztBQUFBQSxJQUVqRCx5QkFBMkIsZ0NBQXVCO0FBQUE7QUFBQSxZQUFBQyxRQUFBRCxHQUMvQyw4QkFBa0I7QUFBQSxZQUFBRSxPQUFBRixHQUNuQiw0QkFBYztBQUFBLFlBQUFHLDZCQUFBSDtB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OnsibGluZSI6Mzk0MDAsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3ByaW1pdGl2ZXMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogQnVpbHQtaW4gcHJpbWl0aXZlIGZ1bmN0aW9ucyAofjgwIHB1cmUgZnVuY3Rpb25zKS5cblxuICAgIFJlZ2lzdGVyZWQgaW4gYSBnbG9iYWwgdGFibGU7IHRoZSBldmFsdWF0b3IgY2hlY2tzIHRoaXMgdGFibGVcbiAgICB3aGVuIGEgc3ltYm9sIGlzbid0IGZvdW5kIGluIHRoZSBsZXhpY2FsIGVudmlyb25tZW50LiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbmxldCBwcmltaXRpdmVzIDogKHN0cmluZywgdmFsdWUgbGlzdCAtPiB2YWx1ZSkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgMTI4XG5cbigqKiBGb3J3YXJkIHJlZnMgZm9yIGNhbGxpbmcgU1ggZnVuY3Rpb25zIGZyb20gcHJpbWl0aXZlcyAoYnJlYWtzIGN5Y2xlKS4gKilcbmxldCBfc3hfY2FsbF9mbiA6ICh2YWx1ZSAtPiB2YWx1ZSBsaXN0IC0+IHZhbHVlKSByZWYgPVxuICByZWYgKGZ1biBfIF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzeF9jYWxsIG5vdCBpbml0aWFsaXplZFwiKSlcbmxldCBfc3hfdHJhbXBvbGluZV9mbiA6ICh2YWx1ZSAtPiB2YWx1ZSkgcmVmID1cbiAgcmVmIChmdW4gdiAtPiB2KVxubGV0IF9pc19jbGllbnQgOiBib29sIHJlZiA9IHJlZiBmYWxzZVxuXG4oKiogU2NvcGUgc3RhY2tzIOKAlCBkeW5hbWljIHNjb3BlIGZvciByZW5kZXItdGltZSBlZmZlY3RzLlxuICAgIEVhY2gga2V5IG1hcHMgdG8gYSBzdGFjayBvZiB2YWx1ZXMuIFVzZWQgYnkgYXNlciBmb3JcbiAgICBzcHJlYWQvcHJvdmlkZS9lbWl0IHBhdHRlcm5zLCBDU1NYIGNvbGxlY3QvZmx1c2gsIGV0Yy5cbiAgICBNaWdyYXRlZCBmcm9tIHN4X3Njb3BlLm1sLiAqKVxubGV0IF9zY29wZV9zdGFja3MgOiAoc3RyaW5nLCB2YWx1ZSBsaXN0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA4XG5cbigqKiBEZWJ1ZyB0cmFjZSBmb3Igc2NvcGUgb3BlcmF0aW9ucyAqKVxubGV0IF9zY29wZV90cmFjZSA9IHJlZiBmYWxzZVxubGV0IF9zY29wZV9sb2cgOiBzdHJpbmcgbGlzdCByZWYgPSByZWYgW11cbmxldCBzY29wZV90cmFjZV9lbmFibGUgKCkgPSBfc2NvcGVfdHJhY2UgOj0gdHJ1ZTsgX3Njb3BlX2xvZyA6PSBbXVxubGV0IHNjb3BlX3RyYWNlX2Rpc2FibGUgKCkgPSBfc2NvcGVfdHJhY2UgOj0gZmFsc2VcbmxldCBzY29wZV90cmFjZV9kcmFpbiAoKSA9XG4gIGxldCBsb2cgPSBMaXN0LnJldiAhX3Njb3BlX2xvZyBpblxuICBfc2NvcGVfbG9nIDo9IFtdO1xuICBsb2dcblxuKCoqIFJlcXVlc3QgY29va2llcyDigJQgc2V0IGJ5IHRoZSBQeXRob24gYnJpZGdlIGJlZm9yZSBlYWNoIHJlbmRlci5cbiAgICBnZXQtY29va2llIHJlYWRzIGZyb20gaGVyZTsgc2V0LWNvb2tpZSBpcyBhIG5vLW9wIG9uIHRoZSBzZXJ2ZXIuICopXG5sZXQgX3JlcXVlc3RfY29va2llcyA6IChzdHJpbmcsIHN0cmluZykgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgOFxuXG4oKiogQ2xlYXIgYWxsIHNjb3BlIHN0YWNrcy4gQ2FsbGVkIGJldHdlZW4gcmVxdWVzdHMgaWYgbmVlZGVkLiAqKVxubGV0IHNjb3BlX2NsZWFyX2FsbCAoKSA9IEhhc2h0YmwuY2xlYXIgX3Njb3BlX3N0YWNrc1xuXG5sZXQgcmVnaXN0ZXIgbmFtZSBmbiA9IEhhc2h0YmwucmVwbGFjZSBwcmltaXRpdmVzIG5hbWUgZm5cblxubGV0IGlzX3ByaW1pdGl2ZSBuYW1lID0gSGFzaHRibC5tZW0gcHJpbWl0aXZlcyBuYW1lXG5cbmxldCBnZXRfcHJpbWl0aXZlIG5hbWUgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gIHwgU29tZSBmbiAtPiBOYXRpdmVGbiAobmFtZSwgZm4pXG4gIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJVbmtub3duIHByaW1pdGl2ZTogXCIgXiBuYW1lKSlcblxuKCogLS0tIEhlbHBlcnMgLS0tICopXG5cbigqIFRyYW1wb2xpbmUgaG9vayDigJQgc2V0IGJ5IHN4X3JlZiBhZnRlciBpbml0aWFsaXphdGlvbiB0byBicmVhayBjaXJjdWxhciBkZXAgKilcbmxldCB0cmFtcG9saW5lX2hvb2sgOiAodmFsdWUgLT4gdmFsdWUpIHJlZiA9IHJlZiAoZnVuIHYgLT4gdilcblxubGV0IGFzX2ludCA9IGZ1bmN0aW9uXG4gIHwgSW50ZWdlciBuIC0+IG5cbiAgfCBOdW1iZXIgbiAtPiBpbnRfb2ZfZmxvYXQgblxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbnVtYmVyLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgYWxsX2ludHMgPSBMaXN0LmZvcl9hbGwgKGZ1bmN0aW9uIEludGVnZXIgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZSlcblxubGV0IHJlYyBhc19udW1iZXIgPSBmdW5jdGlvblxuICB8IEludGVnZXIgbiAtPiBmbG9hdF9vZl9pbnQgblxuICB8IE51bWJlciBuIC0+IG5cbiAgfCBSYXRpb25hbChuLCBkKSAtPiBmbG9hdF9vZl9pbnQgbiAvLiBmbG9hdF9vZl9pbnQgZFxuICB8IEJvb2wgdHJ1ZSAtPiAxLjBcbiAgfCBCb29sIGZhbHNlIC0+IDAuMFxuICB8IE5pbCAtPiAwLjBcbiAgfCBTdHJpbmcgcyAtPiAobWF0Y2ggZmxvYXRfb2Zfc3RyaW5nX29wdCBzIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IEZsb2F0Lm5hbilcbiAgfCBUaHVuayBfIGFzIHQgLT5cbiAgICAoKiBUcmFtcG9saW5lIHRodW5rcyDigJQgdGhleSBzaG91bGRuJ3QgbGVhayBidXQgc29tZXRpbWVzIGRvICopXG4gICAgYXNfbnVtYmVyICghdHJhbXBvbGluZV9ob29rIHQpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBudW1iZXIsIGdvdCBcIiBeIHR5cGVfb2YgdiBeIFwiOiBcIiBeIChtYXRjaCB2IHdpdGggRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfX3NpZ25hbFwiIHdpdGggU29tZSBfIC0+IFwic2lnbmFse3ZhbHVlPVwiIF4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInZhbHVlXCIgd2l0aCBTb21lIHYnIC0+IHZhbHVlX3RvX3N0cmluZyB2JyB8IE5vbmUgLT4gXCI/XCIpIF4gXCJ9XCIgfCBOb25lIC0+IFwiZGljdFwiKSB8IF8gLT4gXCJcIikpKVxuXG5sZXQgYXNfc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBzdHJpbmcsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCByZWMgYXNfbGlzdCA9IGZ1bmN0aW9uXG4gIHwgTGlzdCBsIC0+IGxcbiAgfCBMaXN0UmVmIHIgLT4gIXJcbiAgfCBOaWwgLT4gW11cbiAgfCBUaHVuayBfIGFzIHQgLT4gYXNfbGlzdCAoIV9zeF90cmFtcG9saW5lX2ZuIHQpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsaXN0LCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgYXNfYm9vbCA9IGZ1bmN0aW9uXG4gIHwgQm9vbCBiIC0+IGJcbiAgfCB2IC0+IHN4X3RydXRoeSB2XG5cbmxldCByZWMgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgSW50ZWdlciBuIC0+IHN0cmluZ19vZl9pbnQgblxuICB8IE51bWJlciBuIC0+IFN4X3R5cGVzLmZvcm1hdF9udW1iZXIgblxuICB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIlxuICB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gIHwgTmlsIC0+IFwiXCJcbiAgfCBTeW1ib2wgcyAtPiBzXG4gIHwgS2V5d29yZCBrIC0+IGtcbiAgfCBUaHVuayBfIGFzIHQgLT4gdG9fc3RyaW5nICghdHJhbXBvbGluZV9ob29rIHQpXG4gIHwgU3hFeHByIHMgLT4gc1xuICB8IFJhd0hUTUwgcyAtPiBzXG4gIHwgdiAtPiBpbnNwZWN0IHZcblxubGV0IGdlbnN5bV9jb3VudGVyID0gcmVmIDBcblxubGV0IHJhdF9nY2QgYSBiID1cbiAgbGV0IHJlYyBnIGEgYiA9IGlmIGIgPSAwIHRoZW4gYSBlbHNlIGcgYiAoYSBtb2QgYikgaW4gZyAoYWJzIGEpIChhYnMgYilcblxubGV0IG1ha2VfcmF0IG4gZCA9XG4gIGlmIGQgPSAwIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyYXRpb25hbDogZGl2aXNpb24gYnkgemVyb1wiKTtcbiAgbGV0IHNpZ24gPSBpZiBkIDwgMCB0aGVuIC0xIGVsc2UgMSBpblxuICBsZXQgZyA9IHJhdF9nY2QgKGFicyBuKSAoYWJzIGQpIGluXG4gIGxldCBybiA9IHNpZ24gKiBuIC8gZyBhbmQgcmQgPSBzaWduICogZCAvIGcgaW5cbiAgaWYgcmQgPSAxIHRoZW4gSW50ZWdlciBybiBlbHNlIFJhdGlvbmFsIChybiwgcmQpXG5cbmxldCByYXRfb2ZfdmFsID0gZnVuY3Rpb25cbiAgfCBJbnRlZ2VyIG4gICAgIC0+IChuLCAxKVxuICB8IFJhdGlvbmFsKG4sZCkgLT4gKG4sIGQpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJleHBlY3RlZCBpbnRlZ2VyIG9yIHJhdGlvbmFsLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgaGFzX3JhdGlvbmFsIGFyZ3MgPSBMaXN0LmV4aXN0cyAoZnVuY3Rpb24gUmF0aW9uYWwgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgYXJnc1xubGV0IGhhc19mbG9hdCAgICBhcmdzID0gTGlzdC5leGlzdHMgKGZ1bmN0aW9uIE51bWJlciAgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgYXJnc1xuXG5sZXQgcmF0X2FkZCAoYW4sIGFkKSAoYm4sIGJkKSA9IG1ha2VfcmF0IChhbiAqIGJkICsgYm4gKiBhZCkgKGFkICogYmQpXG5sZXQgcmF0X3N1YiAoYW4sIGFkKSAoYm4sIGJkKSA9IG1ha2VfcmF0IChhbiAqIGJkIC0gYm4gKiBhZCkgKGFkICogYmQpXG5sZXQgcmF0X211bCAoYW4sIGFkKSAoYm4sIGJkKSA9IG1ha2VfcmF0IChhbiAqIGJuKSAoYWQgKiBiZClcbmxldCByYXRfZGl2IChhbiwgYWQpIChibiwgYmQpID1cbiAgaWYgYm4gPSAwIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyYXRpb25hbDogZGl2aXNpb24gYnkgemVyb1wiKTtcbiAgbWFrZV9yYXQgKGFuICogYmQpIChhZCAqIGJuKVxuXG4oKiB3cml0ZS9kaXNwbGF5IHNlcmlhbGl6ZXJzICopXG5sZXQgcmVjIHN4X3dyaXRlX3ZhbCA9IGZ1bmN0aW9uXG4gIHwgTmlsIC0+IFwiKClcIlxuICB8IEVvZiAtPiBcIiMhZW9mXCJcbiAgfCBCb29sIHRydWUgLT4gXCIjdFwiXG4gIHwgQm9vbCBmYWxzZSAtPiBcIiNmXCJcbiAgfCBJbnRlZ2VyIG4gLT4gc3RyaW5nX29mX2ludCBuXG4gIHwgTnVtYmVyIG4gLT5cbiAgICBsZXQgcyA9IFByaW50Zi5zcHJpbnRmIFwiJWdcIiBuIGluXG4gICAgKCogRW5zdXJlIGZsb2F0LWxpa2UgaWYgbm8gZGVjaW1hbCBwb2ludCAqKVxuICAgIGlmIFN0cmluZy5jb250YWlucyBzICcuJyB8fCBTdHJpbmcuY29udGFpbnMgcyAnZScgdGhlbiBzIGVsc2Ugc1xuICB8IFJhdGlvbmFsKG4sIGQpIC0+IFByaW50Zi5zcHJpbnRmIFwiJWQvJWRcIiBuIGRcbiAgfCBTdHJpbmcgcyAtPlxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAyKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgICBTdHJpbmcuaXRlciAoZnVuY3Rpb25cbiAgICAgIHwgJ1wiJyAgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxuJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcblwiXG4gICAgICB8ICdcXHInIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXHRcIlxuICAgICAgfCBjICAgIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIic7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICB8IENoYXIgbiAtPlxuICAgIGlmIG4gPSAzMiB0aGVuIFwiI1xcXFxzcGFjZVwiXG4gICAgZWxzZSBpZiBuID0gMTAgdGhlbiBcIiNcXFxcbmV3bGluZVwiXG4gICAgZWxzZSBpZiBuID0gOSB0aGVuIFwiI1xcXFx0YWJcIlxuICAgIGVsc2UgUHJpbnRmLnNwcmludGYgXCIjXFxcXCVjXCIgKENoYXIuY2hyIChuIGxhbmQgMHhGRikpXG4gIHwgU3ltYm9sIHMgLT4gc1xuICB8IEtleXdvcmQgayAtPiBcIjpcIiBeIGtcbiAgfCBMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSAtPlxuICAgIFwiKFwiIF4gU3RyaW5nLmNvbmNhdCBcIiBcIiAoTGlzdC5tYXAgc3hfd3JpdGVfdmFsIGl0ZW1zKSBeIFwiKVwiXG4gIHwgdiAtPiBpbnNwZWN0IHZcblxuYW5kIHN4X2Rpc3BsYXlfdmFsID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgQ2hhciBuIC0+IFN0cmluZy5tYWtlIDEgKENoYXIuY2hyIChuIGxhbmQgMHhGRikpXG4gIHwgdiAtPiBzeF93cml0ZV92YWwgdlxuXG5sZXQgKCkgPVxuICAoKiA9PT0gQXJpdGhtZXRpYyA9PT0gKilcbiAgcmVnaXN0ZXIgXCIrXCIgKGZ1biBhcmdzIC0+XG4gICAgaWYgYWxsX2ludHMgYXJncyB0aGVuXG4gICAgICBJbnRlZ2VyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IG1hdGNoIGEgd2l0aCBJbnRlZ2VyIG4gLT4gYWNjICsgbiB8IF8gLT4gYWNjKSAwIGFyZ3MpXG4gICAgZWxzZSBpZiBoYXNfcmF0aW9uYWwgYXJncyAmJiBub3QgKGhhc19mbG9hdCBhcmdzKSB0aGVuXG4gICAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+XG4gICAgICAgIG1hdGNoIGFjYywgYSB3aXRoXG4gICAgICAgIHwgSW50ZWdlciBhbiwgXyAtPiByYXRfYWRkIChhbiwgMSkgKHJhdF9vZl92YWwgYSlcbiAgICAgICAgfCBSYXRpb25hbChhbixhZCksIF8gLT4gcmF0X2FkZCAoYW4sIGFkKSAocmF0X29mX3ZhbCBhKVxuICAgICAgICB8IF8gLT4gYWNjXG4gICAgICApIChJbnRlZ2VyIDApIGFyZ3NcbiAgICBlbHNlXG4gICAgICBOdW1iZXIgKExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIGEgLT4gYWNjICsuIGFzX251bWJlciBhKSAwLjAgYXJncykpO1xuICByZWdpc3RlciBcIi1cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IEludGVnZXIgMFxuICAgIHwgW0ludGVnZXIgbl0gLT4gSW50ZWdlciAoLW4pXG4gICAgfCBbUmF0aW9uYWwobixkKV0gLT4gbWFrZV9yYXQgKC1uKSBkXG4gICAgfCBbYV0gLT4gTnVtYmVyICgtLiAoYXNfbnVtYmVyIGEpKVxuICAgIHwgXyB3aGVuIGFsbF9pbnRzIGFyZ3MgLT5cbiAgICAgIChtYXRjaCBhcmdzIHdpdGhcbiAgICAgICB8IEludGVnZXIgaCA6OiB0bCAtPlxuICAgICAgICAgSW50ZWdlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBtYXRjaCBhIHdpdGggSW50ZWdlciBuIC0+IGFjYyAtIG4gfCBfIC0+IGFjYykgaCB0bClcbiAgICAgICB8IF8gLT4gTnVtYmVyIDAuMClcbiAgICB8IF8gd2hlbiBoYXNfcmF0aW9uYWwgYXJncyAmJiBub3QgKGhhc19mbG9hdCBhcmdzKSAtPlxuICAgICAgKG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgIHwgaCA6OiB0bCAtPlxuICAgICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPlxuICAgICAgICAgICBtYXRjaCBhY2Mgd2l0aFxuICAgICAgICAgICB8IEludGVnZXIgYW4gLT4gcmF0X3N1YiAoYW4sIDEpIChyYXRfb2ZfdmFsIGEpXG4gICAgICAgICAgIHwgUmF0aW9uYWwoYW4sYWQpIC0+IHJhdF9zdWIgKGFuLCBhZCkgKHJhdF9vZl92YWwgYSlcbiAgICAgICAgICAgfCBfIC0+IGFjY1xuICAgICAgICAgKSBoIHRsXG4gICAgICAgfCBfIC0+IEludGVnZXIgMClcbiAgICB8IGEgOjogcmVzdCAtPlxuICAgICAgTnVtYmVyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IGFjYyAtLiBhc19udW1iZXIgeCkgKGFzX251bWJlciBhKSByZXN0KSk7XG4gIHJlZ2lzdGVyIFwiKlwiIChmdW4gYXJncyAtPlxuICAgIGlmIGFsbF9pbnRzIGFyZ3MgdGhlblxuICAgICAgSW50ZWdlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBtYXRjaCBhIHdpdGggSW50ZWdlciBuIC0+IGFjYyAqIG4gfCBfIC0+IGFjYykgMSBhcmdzKVxuICAgIGVsc2UgaWYgaGFzX3JhdGlvbmFsIGFyZ3MgJiYgbm90IChoYXNfZmxvYXQgYXJncykgdGhlblxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPlxuICAgICAgICBtYXRjaCBhY2Mgd2l0aFxuICAgICAgICB8IEludGVnZXIgYW4gLT4gcmF0X211bCAoYW4sIDEpIChyYXRfb2ZfdmFsIGEpXG4gICAgICAgIHwgUmF0aW9uYWwoYW4sYWQpIC0+IHJhdF9tdWwgKGFuLCBhZCkgKHJhdF9vZl92YWwgYSlcbiAgICAgICAgfCBfIC0+IGFjY1xuICAgICAgKSAoSW50ZWdlciAxKSBhcmdzXG4gICAgZWxzZVxuICAgICAgTnVtYmVyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IGFjYyAqLiBhc19udW1iZXIgYSkgMS4wIGFyZ3MpKTtcbiAgcmVnaXN0ZXIgXCIvXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIC0+IG1ha2VfcmF0IGEgYlxuICAgIHwgW1JhdGlvbmFsKGFuLGFkKTsgSW50ZWdlciBiXSAtPiBtYWtlX3JhdCBhbiAoYWQgKiBiKVxuICAgIHwgW0ludGVnZXIgYTsgUmF0aW9uYWwoYm4sYmQpXSAtPiBtYWtlX3JhdCAoYSAqIGJkKSBiblxuICAgIHwgW1JhdGlvbmFsKGFuLGFkKTsgUmF0aW9uYWwoYm4sYmQpXSAtPiByYXRfZGl2IChhbiwgYWQpIChibiwgYmQpXG4gICAgfCBbYTsgYl0gLT4gTnVtYmVyIChhc19udW1iZXIgYSAvLiBhc19udW1iZXIgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCIvOiBleHBlY3RlZCAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIm1vZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYTsgSW50ZWdlciBiXSAtPiBJbnRlZ2VyIChhIG1vZCBiKVxuICAgIHwgW2E7IGJdIC0+IE51bWJlciAoRmxvYXQucmVtIChhc19udW1iZXIgYSkgKGFzX251bWJlciBiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtb2Q6IGV4cGVjdGVkIDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW5jXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBJbnRlZ2VyIChuICsgMSlcbiAgICB8IFthXSAtPiBOdW1iZXIgKGFzX251bWJlciBhICsuIDEuMClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbmM6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJkZWNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgKG4gLSAxKVxuICAgIHwgW2FdIC0+IE51bWJlciAoYXNfbnVtYmVyIGEgLS4gMS4wKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRlYzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImFic1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gSW50ZWdlciAoYWJzIG4pXG4gICAgfCBbYV0gLT4gTnVtYmVyIChGbG9hdC5hYnMgKGFzX251bWJlciBhKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhYnM6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJmbG9vclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gSW50ZWdlciBuXG4gICAgfCBbYV0gLT4gSW50ZWdlciAoaW50X29mX2Zsb2F0IChmbG9vciAoYXNfbnVtYmVyIGEpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmbG9vcjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImNlaWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgblxuICAgIHwgW2FdIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCAoY2VpbCAoYXNfbnVtYmVyIGEpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWlsOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwicm91bmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgblxuICAgIHwgW2FdIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCAoRmxvYXQucm91bmQgKGFzX251bWJlciBhKSkpXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCBuID0gYXNfbnVtYmVyIGEgYW5kIHBsYWNlcyA9IGFzX2ludCBiIGluXG4gICAgICBsZXQgZmFjdG9yID0gMTAuMCAqKiBmbG9hdF9vZl9pbnQgcGxhY2VzIGluXG4gICAgICBOdW1iZXIgKEZsb2F0LnJvdW5kIChuICouIGZhY3RvcikgLy4gZmFjdG9yKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJvdW5kOiAxLTIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwibWluXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1pbjogYXQgbGVhc3QgMSBhcmdcIilcbiAgICB8IF8gd2hlbiBhbGxfaW50cyBhcmdzIC0+XG4gICAgICBJbnRlZ2VyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IG1hdGNoIGEgd2l0aCBJbnRlZ2VyIG4gLT4gbWluIGFjYyBuIHwgXyAtPiBhY2MpIG1heF9pbnQgYXJncylcbiAgICB8IF8gLT4gTnVtYmVyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IEZsb2F0Lm1pbiBhY2MgKGFzX251bWJlciBhKSkgRmxvYXQuaW5maW5pdHkgYXJncykpO1xuICByZWdpc3RlciBcIm1heFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYXg6IGF0IGxlYXN0IDEgYXJnXCIpXG4gICAgfCBfIHdoZW4gYWxsX2ludHMgYXJncyAtPlxuICAgICAgSW50ZWdlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBtYXRjaCBhIHdpdGggSW50ZWdlciBuIC0+IG1heCBhY2MgbiB8IF8gLT4gYWNjKSBtaW5faW50IGFyZ3MpXG4gICAgfCBfIC0+IE51bWJlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBGbG9hdC5tYXggYWNjIChhc19udW1iZXIgYSkpIEZsb2F0Lm5lZ19pbmZpbml0eSBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwic3FydFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5zcXJ0IChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNxcnQ6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJwb3dcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IE51bWJlciAoYXNfbnVtYmVyIGEgKiogYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicG93OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImNicnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuY2JydCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjYnJ0OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXhwXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmV4cCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleHA6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJleHBtMVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5leHBtMSAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleHBtMTogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImxvZ1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5sb2cgKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibG9nOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibG9nMlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5sb2cgKGFzX251bWJlciBhKSAvLiBGbG9hdC5sb2cgMi4wKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsb2cyOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibG9nMTBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQubG9nMTAgKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibG9nMTA6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJsb2cxcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5sb2cxcCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsb2cxcDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInNpblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5zaW4gKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2luOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiY29zXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmNvcyAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjb3M6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ0YW5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQudGFuIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRhbjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImFzaW5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuYXNpbiAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc2luOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiYWNvc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5hY29zIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFjb3M6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJhdGFuXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYV0gLT4gTnVtYmVyIChGbG9hdC5hdGFuIChhc19udW1iZXIgYSkpXG4gICAgfCBbeTsgeF0gLT4gTnVtYmVyIChGbG9hdC5hdGFuMiAoYXNfbnVtYmVyIHkpIChhc19udW1iZXIgeCkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXRhbjogMS0yIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImF0YW4yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthOyBiXSAtPiBOdW1iZXIgKEZsb2F0LmF0YW4yIChhc19udW1iZXIgYSkgKGFzX251bWJlciBiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhdGFuMjogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzaW5oXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LnNpbmggKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2luaDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImNvc2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuY29zaCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjb3NoOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwidGFuaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC50YW5oIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRhbmg6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJhc2luaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5hc2luaCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc2luaDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImFjb3NoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmFjb3NoIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFjb3NoOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiYXRhbmhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuYXRhbmggKGFzX251bWJlciBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXRhbmg6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJoeXBvdFwiIChmdW4gYXJncyAtPlxuICAgIGxldCBzcXVhcmUgeCA9IHggKi4geCBpblxuICAgIGxldCBzdW0gPSBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IGFjYyArLiBzcXVhcmUgKGFzX251bWJlciBhKSkgMC4wIGFyZ3MgaW5cbiAgICBOdW1iZXIgKEZsb2F0LnNxcnQgc3VtKSk7XG4gIHJlZ2lzdGVyIFwic2lnblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gSW50ZWdlciAoaWYgbiA+IDAgdGhlbiAxIGVsc2UgaWYgbiA8IDAgdGhlbiAtMSBlbHNlIDApXG4gICAgfCBbYV0gLT5cbiAgICAgIGxldCBuID0gYXNfbnVtYmVyIGEgaW5cbiAgICAgIE51bWJlciAoaWYgRmxvYXQuaXNfbmFuIG4gdGhlbiBGbG9hdC5uYW5cbiAgICAgICAgICAgICAgZWxzZSBpZiBuID4gMC4wIHRoZW4gMS4wXG4gICAgICAgICAgICAgIGVsc2UgaWYgbiA8IDAuMCB0aGVuIC0xLjBcbiAgICAgICAgICAgICAgZWxzZSBuKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNpZ246IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJmcm91bmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoSW50MzIuZmxvYXRfb2ZfYml0cyAoSW50MzIuYml0c19vZl9mbG9hdCAoYXNfbnVtYmVyIGEpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmcm91bmQ6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJjbHozMlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2FdIC0+XG4gICAgICBsZXQgbiA9IGFzX251bWJlciBhIGluXG4gICAgICBsZXQgaSA9IGlmIEZsb2F0LmlzX25hbiBuIHx8IEZsb2F0LmlzX2luZmluaXRlIG4gdGhlbiAwbFxuICAgICAgICAgICAgICBlbHNlIEludDMyLm9mX2Zsb2F0IChGbG9hdC5yZW0gbiA0Mjk0OTY3Mjk2LjApIGluXG4gICAgICBpZiBpID0gMGwgdGhlbiBOdW1iZXIgMzIuMFxuICAgICAgZWxzZVxuICAgICAgICBsZXQgaGlnaF9iaXQgPSBJbnQzMi5zaGlmdF9sZWZ0IDFsIDMxIGluXG4gICAgICAgIGxldCBjb3VudCA9IHJlZiAwIGluXG4gICAgICAgIGxldCB4ID0gcmVmIGkgaW5cbiAgICAgICAgd2hpbGUgSW50MzIubG9nYW5kICF4IGhpZ2hfYml0ID0gMGwgZG9cbiAgICAgICAgICBpbmNyIGNvdW50O1xuICAgICAgICAgIHggOj0gSW50MzIuc2hpZnRfbGVmdCAheCAxXG4gICAgICAgIGRvbmU7XG4gICAgICAgIE51bWJlciAoZmxvYXRfb2ZfaW50ICFjb3VudClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjbHozMjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImltdWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPlxuICAgICAgbGV0IHRvdTMyIGYgPVxuICAgICAgICBpZiBGbG9hdC5pc19uYW4gZiB8fCBGbG9hdC5pc19pbmZpbml0ZSBmIHRoZW4gMGxcbiAgICAgICAgZWxzZSBJbnQzMi5vZl9mbG9hdCAoRmxvYXQucmVtIGYgNDI5NDk2NzI5Ni4wKSBpblxuICAgICAgbGV0IGFpID0gdG91MzIgKGFzX251bWJlciBhKSBhbmQgYmkgPSB0b3UzMiAoYXNfbnVtYmVyIGIpIGluXG4gICAgICBsZXQgciA9IEludDMyLm11bCBhaSBiaSBpblxuICAgICAgTnVtYmVyIChJbnQzMi50b19mbG9hdCByKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImltdWw6IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2xhbXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt4OyBsbzsgaGldIC0+XG4gICAgICBsZXQgeCA9IGFzX251bWJlciB4IGFuZCBsbyA9IGFzX251bWJlciBsbyBhbmQgaGkgPSBhc19udW1iZXIgaGkgaW5cbiAgICAgIE51bWJlciAoRmxvYXQubWF4IGxvIChGbG9hdC5taW4gaGkgeCkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2xhbXA6IDMgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwidHJ1bmNhdGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IEludGVnZXIgblxuICAgIHwgW2FdIC0+IGxldCBuID0gYXNfbnVtYmVyIGEgaW4gSW50ZWdlciAoaW50X29mX2Zsb2F0IChpZiBuID49IDAuMCB0aGVuIGZsb29yIG4gZWxzZSBjZWlsIG4pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRydW5jYXRlOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVtYWluZGVyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhOyBJbnRlZ2VyIGJdIC0+IEludGVnZXIgKGEgbW9kIGIpXG4gICAgfCBbYTsgYl0gLT4gTnVtYmVyIChGbG9hdC5yZW0gKGFzX251bWJlciBhKSAoYXNfbnVtYmVyIGIpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlbWFpbmRlcjogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJtb2R1bG9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT5cbiAgICAgIGxldCByID0gYSBtb2QgYiBpblxuICAgICAgSW50ZWdlciAoaWYgciA9IDAgfHwgKHIgPiAwKSA9IChiID4gMCkgdGhlbiByIGVsc2UgciArIGIpXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCBhID0gYXNfbnVtYmVyIGEgYW5kIGIgPSBhc19udW1iZXIgYiBpblxuICAgICAgbGV0IHIgPSBGbG9hdC5yZW0gYSBiIGluXG4gICAgICBOdW1iZXIgKGlmIHIgPSAwLjAgfHwgKHIgPiAwLjApID0gKGIgPiAwLjApIHRoZW4gciBlbHNlIHIgKy4gYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtb2R1bG86IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXhhY3Q/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtOdW1iZXIgX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJleGFjdD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbmV4YWN0P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW051bWJlciBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtJbnRlZ2VyIF9dIC0+IEJvb2wgZmFsc2VcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW5leGFjdD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJleGFjdC0+aW5leGFjdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgbilcbiAgICB8IFtOdW1iZXIgbl0gLT4gTnVtYmVyIG5cbiAgICB8IFtSYXRpb25hbChuLGQpXSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBuIC8uIGZsb2F0X29mX2ludCBkKVxuICAgIHwgW2FdIC0+IE51bWJlciAoYXNfbnVtYmVyIGEpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXhhY3QtPmluZXhhY3Q6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbmV4YWN0LT5leGFjdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gSW50ZWdlciBuXG4gICAgfCBbTnVtYmVyIG5dIC0+IEludGVnZXIgKGludF9vZl9mbG9hdCAoRmxvYXQucm91bmQgbikpXG4gICAgfCBbYV0gLT4gSW50ZWdlciAoaW50X29mX2Zsb2F0IChGbG9hdC5yb3VuZCAoYXNfbnVtYmVyIGEpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbmV4YWN0LT5leGFjdDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImV4cHRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gd2hlbiBiID49IDAgLT5cbiAgICAgIGxldCByZWMgaXBvdyBiYXNlIGUgYWNjID0gaWYgZSA9IDAgdGhlbiBhY2MgZWxzZSBpcG93IGJhc2UgKGUgLSAxKSAoYWNjICogYmFzZSkgaW5cbiAgICAgIEludGVnZXIgKGlwb3cgYSBiIDEpXG4gICAgfCBbYTsgYl0gLT4gTnVtYmVyIChGbG9hdC5wb3cgKGFzX251bWJlciBhKSAoYXNfbnVtYmVyIGIpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV4cHQ6IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwicXVvdGllbnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT4gSW50ZWdlciAoSW50LmRpdiBhIGIpXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCBuID0gYXNfbnVtYmVyIGEgLy4gYXNfbnVtYmVyIGIgaW5cbiAgICAgIEludGVnZXIgKGludF9vZl9mbG9hdCAoaWYgbiA+PSAwLjAgdGhlbiBmbG9vciBuIGVsc2UgY2VpbCBuKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJxdW90aWVudDogMiBhcmdzXCIpKTtcbiAgbGV0IHJlYyBpZ2NkIGEgYiA9IGlmIGIgPSAwIHRoZW4gYSBlbHNlIGlnY2QgYiAoYSBtb2QgYikgaW5cbiAgcmVnaXN0ZXIgXCJnY2RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT4gSW50ZWdlciAoaWdjZCAoYWJzIGEpIChhYnMgYikpXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCByZWMgZmdjZCBhIGIgPSBpZiBiID0gMC4wIHRoZW4gYSBlbHNlIGZnY2QgYiAoRmxvYXQucmVtIGEgYikgaW5cbiAgICAgIE51bWJlciAoZmdjZCAoYWJzX2Zsb2F0IChhc19udW1iZXIgYSkpIChhYnNfZmxvYXQgKGFzX251bWJlciBiKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZ2NkOiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImxjbVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYTsgSW50ZWdlciBiXSAtPlxuICAgICAgbGV0IGcgPSBpZ2NkIChhYnMgYSkgKGFicyBiKSBpblxuICAgICAgaWYgZyA9IDAgdGhlbiBJbnRlZ2VyIDAgZWxzZSBJbnRlZ2VyIChhYnMgYSAvIGcgKiBhYnMgYilcbiAgICB8IFthOyBiXSAtPlxuICAgICAgbGV0IGEgPSBhYnNfZmxvYXQgKGFzX251bWJlciBhKSBhbmQgYiA9IGFic19mbG9hdCAoYXNfbnVtYmVyIGIpIGluXG4gICAgICBsZXQgcmVjIGZnY2QgYSBiID0gaWYgYiA9IDAuMCB0aGVuIGEgZWxzZSBmZ2NkIGIgKEZsb2F0LnJlbSBhIGIpIGluXG4gICAgICBsZXQgZyA9IGZnY2QgYSBiIGluXG4gICAgICBpZiBnID0gMC4wIHRoZW4gTnVtYmVyIDAuMCBlbHNlIE51bWJlciAoYSAvLiBnICouIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibGNtOiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIm51bWJlci0+c3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGRpZ2l0cyA9IFwiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCIgaW5cbiAgICBsZXQgaW50X3RvX3JhZGl4IG4gciA9XG4gICAgICBpZiBuID0gMCB0aGVuIFwiMFwiXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBuZWcgPSBuIDwgMCBpblxuICAgICAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICAgICAgICBsZXQgcmVjIGdvIG4gPSBpZiBuID4gMCB0aGVuIGJlZ2luIGdvIChuIC8gcik7IEJ1ZmZlci5hZGRfY2hhciBidWYgZGlnaXRzLltuIG1vZCByXSBlbmQgaW5cbiAgICAgICAgZ28gKGFicyBuKTtcbiAgICAgICAgKGlmIG5lZyB0aGVuIFwiLVwiIGVsc2UgXCJcIikgXiBCdWZmZXIuY29udGVudHMgYnVmXG4gICAgICBlbmRcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gU3RyaW5nIChzdHJpbmdfb2ZfaW50IG4pXG4gICAgfCBbTnVtYmVyIGZdIC0+IFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlZ1wiIGYpXG4gICAgfCBbUmF0aW9uYWwobixkKV0gLT4gU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIiVkLyVkXCIgbiBkKVxuICAgIHwgW0ludGVnZXIgbjsgSW50ZWdlciByXSAtPlxuICAgICAgaWYgciA8IDIgfHwgciA+IDM2IHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJudW1iZXItPnN0cmluZzogcmFkaXggb3V0IG9mIHJhbmdlXCIpO1xuICAgICAgU3RyaW5nIChpbnRfdG9fcmFkaXggbiByKVxuICAgIHwgW051bWJlciBmOyBJbnRlZ2VyIHJdIC0+XG4gICAgICBpZiByIDwgMiB8fCByID4gMzYgdGhlbiByYWlzZSAoRXZhbF9lcnJvciBcIm51bWJlci0+c3RyaW5nOiByYWRpeCBvdXQgb2YgcmFuZ2VcIik7XG4gICAgICBTdHJpbmcgKGludF90b19yYWRpeCAoaW50X29mX2Zsb2F0IGYpIHIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibnVtYmVyLT5zdHJpbmc6IDEtMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctPm51bWJlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPlxuICAgICAgKHRyeSBJbnRlZ2VyIChpbnRfb2Zfc3RyaW5nIHMpXG4gICAgICAgd2l0aCBfIC0+IHRyeSBOdW1iZXIgKGZsb2F0X29mX3N0cmluZyBzKVxuICAgICAgIHdpdGggXyAtPiBOaWwpXG4gICAgfCBbU3RyaW5nIHM7IEludGVnZXIgcl0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IG5lZyA9IFN0cmluZy5sZW5ndGggcyA+IDAgJiYgcy5bMF0gPSAnLScgaW5cbiAgICAgICAgbGV0IHN0YXJ0ID0gaWYgbmVnIHRoZW4gMSBlbHNlIDAgaW5cbiAgICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgICBmb3IgaSA9IHN0YXJ0IHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgICBsZXQgYyA9IENoYXIuY29kZSBzLltpXSBpblxuICAgICAgICAgIGxldCBkID0gaWYgYyA+PSA0OCAmJiBjIDw9IDU3IHRoZW4gYyAtIDQ4XG4gICAgICAgICAgICAgICAgICBlbHNlIGlmIGMgPj0gOTcgJiYgYyA8PSAxMjIgdGhlbiBjIC0gODdcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgYyA+PSA2NSAmJiBjIDw9IDkwICB0aGVuIGMgLSA1NVxuICAgICAgICAgICAgICAgICAgZWxzZSByYWlzZSBFeGl0XG4gICAgICAgICAgaW5cbiAgICAgICAgICBpZiBkID49IHIgdGhlbiByYWlzZSBFeGl0O1xuICAgICAgICAgIG4gOj0gIW4gKiByICsgZFxuICAgICAgICBkb25lO1xuICAgICAgICBJbnRlZ2VyIChpZiBuZWcgdGhlbiAtICFuIGVsc2UgIW4pXG4gICAgICAgd2l0aCBfIC0+IE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctPm51bWJlcjogMS0yIGFyZ3NcIikpO1xuICBsZXQgbWFrZV9yYXRpb25hbF92YWwgbiBkID1cbiAgICBpZiBkID0gMCB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yYXRpb25hbDogZGVub21pbmF0b3IgY2Fubm90IGJlIHplcm9cIik7XG4gICAgbGV0IHJlYyBnY2QgYSBiID0gaWYgYiA9IDAgdGhlbiBhIGVsc2UgZ2NkIGIgKGEgbW9kIGIpIGluXG4gICAgbGV0IHNpZ24gPSBpZiBkIDwgMCB0aGVuIC0xIGVsc2UgMSBpblxuICAgIGxldCBnID0gZ2NkIChhYnMgbikgKGFicyBkKSBpblxuICAgIGxldCBybiA9IHNpZ24gKiBuIC8gZyBhbmQgcmQgPSBzaWduICogZCAvIGcgaW5cbiAgICBpZiByZCA9IDEgdGhlbiBJbnRlZ2VyIHJuIGVsc2UgUmF0aW9uYWwgKHJuLCByZClcbiAgaW5cbiAgcmVnaXN0ZXIgXCJtYWtlLXJhdGlvbmFsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuOyBJbnRlZ2VyIGRdIC0+IG1ha2VfcmF0aW9uYWxfdmFsIG4gZFxuICAgIHwgW051bWJlciBmOyBJbnRlZ2VyIGRdICAtPiBtYWtlX3JhdGlvbmFsX3ZhbCAoaW50X29mX2Zsb2F0IGYpIGRcbiAgICB8IFtJbnRlZ2VyIG47IE51bWJlciBmXSAgLT4gbWFrZV9yYXRpb25hbF92YWwgbiAoaW50X29mX2Zsb2F0IGYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1yYXRpb25hbDogZXhwZWN0ZWQgMiBpbnRlZ2Vyc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmF0aW9uYWw/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUmF0aW9uYWwgX10gLT4gQm9vbCB0cnVlXG4gICAgfCBbX10gICAgICAgICAgLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJhdGlvbmFsPzogZXhwZWN0ZWQgMSBhcmdcIikpO1xuICByZWdpc3RlciBcIm51bWVyYXRvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1JhdGlvbmFsIChuLCBfKV0gLT4gSW50ZWdlciBuXG4gICAgfCBbSW50ZWdlciBuXSAgICAgICAtPiBJbnRlZ2VyIG5cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJudW1lcmF0b3I6IGV4cGVjdGVkIHJhdGlvbmFsIG9yIGludGVnZXJcIikpO1xuICByZWdpc3RlciBcImRlbm9taW5hdG9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUmF0aW9uYWwgKF8sIGQpXSAtPiBJbnRlZ2VyIGRcbiAgICB8IFtJbnRlZ2VyIF9dICAgICAgIC0+IEludGVnZXIgMVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRlbm9taW5hdG9yOiBleHBlY3RlZCByYXRpb25hbCBvciBpbnRlZ2VyXCIpKTtcbiAgcmVnaXN0ZXIgXCJwYXJzZS1pbnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgcGFyc2VfbGVhZGluZ19pbnQgcyA9XG4gICAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBsZXQgc3RhcnQgPSByZWYgMCBpblxuICAgICAgbGV0IG5lZyA9IGxlbiA+IDAgJiYgcy5bMF0gPSAnLScgaW5cbiAgICAgIGlmIG5lZyB0aGVuIHN0YXJ0IDo9IDFcbiAgICAgIGVsc2UgaWYgbGVuID4gMCAmJiBzLlswXSA9ICcrJyB0aGVuIHN0YXJ0IDo9IDE7XG4gICAgICBsZXQgaiA9IHJlZiAhc3RhcnQgaW5cbiAgICAgIHdoaWxlICFqIDwgbGVuICYmIHMuWyFqXSA+PSAnMCcgJiYgcy5bIWpdIDw9ICc5JyBkbyBpbmNyIGogZG9uZTtcbiAgICAgIGlmICFqID4gIXN0YXJ0IHRoZW5cbiAgICAgICAgbGV0IG4gPSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHMgIXN0YXJ0ICghaiAtICFzdGFydCkpIGluXG4gICAgICAgIFNvbWUgKGlmIG5lZyB0aGVuIC1uIGVsc2UgbilcbiAgICAgIGVsc2UgTm9uZVxuICAgIGluXG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IChtYXRjaCBwYXJzZV9sZWFkaW5nX2ludCBzIHdpdGggU29tZSBuIC0+IEludGVnZXIgbiB8IE5vbmUgLT4gTmlsKVxuICAgIHwgW1N0cmluZyBzOyBkZWZhdWx0X3ZhbF0gLT5cbiAgICAgIChtYXRjaCBwYXJzZV9sZWFkaW5nX2ludCBzIHdpdGggU29tZSBuIC0+IEludGVnZXIgbiB8IE5vbmUgLT4gZGVmYXVsdF92YWwpXG4gICAgfCBbSW50ZWdlciBuXSB8IFtJbnRlZ2VyIG47IF9dIC0+IEludGVnZXIgblxuICAgIHwgW051bWJlciBuXSB8IFtOdW1iZXIgbjsgX10gLT4gSW50ZWdlciAoaW50X29mX2Zsb2F0IG4pXG4gICAgfCBbXzsgZGVmYXVsdF92YWxdIC0+IGRlZmF1bHRfdmFsXG4gICAgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwicGFyc2UtZmxvYXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gKG1hdGNoIGZsb2F0X29mX3N0cmluZ19vcHQgcyB3aXRoIFNvbWUgbiAtPiBOdW1iZXIgbiB8IE5vbmUgLT4gTmlsKVxuICAgIHwgW051bWJlciBuXSAtPiBOdW1iZXIgblxuICAgIHwgXyAtPiBOaWwpO1xuXG4gICgqID09PSBDb21wYXJpc29uID09PSAqKVxuICAoKiBTYWZlIGVxdWFsaXR5OiBwaHlzaWNhbCBlcXVhbGl0eSBmb3IgcG90ZW50aWFsbHktY2lyY3VsYXIgdHlwZXNcbiAgICAgKERpY3QsIExhbWJkYSwgQ29tcG9uZW50LCBJc2xhbmQsIFNpZ25hbCwgTmF0aXZlRm4pLFxuICAgICBzdHJ1Y3R1cmFsIGVxdWFsaXR5IGZvciBhY3ljbGljIHR5cGVzIChOdW1iZXIsIFN0cmluZywgQm9vbCwgZXRjLikuXG4gICAgIExpc3RzIGFyZSBjb21wYXJlZCBlbGVtZW50LXdpc2UgcmVjdXJzaXZlbHkgd2l0aCB0aGUgc2FtZSBzYWZldHkuICopXG4gIGxldCByZWMgc2FmZV9lcSBhIGIgPVxuICAgIGlmIGEgPT0gYiB0aGVuIHRydWUgICgqIHBoeXNpY2FsIGVxdWFsaXR5IGZhc3QgcGF0aCAqKVxuICAgIGVsc2UgbWF0Y2ggYSwgYiB3aXRoXG4gICAgfCBJbnRlZ2VyIHgsIEludGVnZXIgeSAtPiB4ID0geVxuICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IHggPSB5XG4gICAgfCBJbnRlZ2VyIHgsIE51bWJlciB5IC0+IGZsb2F0X29mX2ludCB4ID0geVxuICAgIHwgTnVtYmVyIHgsIEludGVnZXIgeSAtPiB4ID0gZmxvYXRfb2ZfaW50IHlcbiAgICB8IFJhdGlvbmFsKG4sIGQpLCBOdW1iZXIgeSAtPiBmbG9hdF9vZl9pbnQgbiAvLiBmbG9hdF9vZl9pbnQgZCA9IHlcbiAgICB8IE51bWJlciB4LCBSYXRpb25hbChuLCBkKSAtPiB4ID0gZmxvYXRfb2ZfaW50IG4gLy4gZmxvYXRfb2ZfaW50IGRcbiAgICB8IFJhdGlvbmFsKGFuLCBhZCksIFJhdGlvbmFsKGJuLCBiZCkgLT4gYW4gKiBiZCA9IGJuICogYWRcbiAgICB8IFJhdGlvbmFsKG4sIGQpLCBJbnRlZ2VyIHkgLT4gbiA9IHkgKiBkXG4gICAgfCBJbnRlZ2VyIHgsIFJhdGlvbmFsKG4sIGQpIC0+IHggKiBkID0gblxuICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IHggPSB5XG4gICAgfCBCb29sIHgsIEJvb2wgeSAtPiB4ID0geVxuICAgIHwgTmlsLCBOaWwgLT4gdHJ1ZVxuICAgIHwgU3ltYm9sIHgsIFN5bWJvbCB5IC0+IHggPSB5XG4gICAgfCBLZXl3b3JkIHgsIEtleXdvcmQgeSAtPiB4ID0geVxuICAgIHwgKExpc3QgbGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYSB9KSxcbiAgICAgIChMaXN0IGxiIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGIgfSkgLT5cbiAgICAgIExpc3QubGVuZ3RoIGxhID0gTGlzdC5sZW5ndGggbGIgJiZcbiAgICAgIExpc3QuZm9yX2FsbDIgc2FmZV9lcSBsYSBsYlxuICAgICgqIERpY3Q6IF9faG9zdF9oYW5kbGUgaWRlbnRpdHkgZm9yIERPTS13cmFwcGVkIGRpY3RzOyBvdGhlcndpc2VcbiAgICAgICBzdHJ1Y3R1cmFsIGVxdWFsaXR5IG92ZXIga2V5cyArIHZhbHVlcy4gKilcbiAgICB8IERpY3QgYSwgRGljdCBiIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBhIFwiX19ob3N0X2hhbmRsZVwiLCBIYXNodGJsLmZpbmRfb3B0IGIgXCJfX2hvc3RfaGFuZGxlXCIgd2l0aFxuICAgICAgIHwgU29tZSAoTnVtYmVyIGhhKSwgU29tZSAoTnVtYmVyIGhiKSAtPiBoYSA9IGhiXG4gICAgICAgfCBTb21lIF8sIF8gfCBfLCBTb21lIF8gLT4gZmFsc2VcbiAgICAgICB8IE5vbmUsIE5vbmUgLT5cbiAgICAgICAgIEhhc2h0YmwubGVuZ3RoIGEgPSBIYXNodGJsLmxlbmd0aCBiICYmXG4gICAgICAgICAobGV0IGVxID0gcmVmIHRydWUgaW5cbiAgICAgICAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICAgICAgICAgIGlmICFlcSB0aGVuXG4gICAgICAgICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgYiBrIHdpdGhcbiAgICAgICAgICAgICAgfCBTb21lIHYnIC0+IGlmIG5vdCAoc2FmZV9lcSB2IHYnKSB0aGVuIGVxIDo9IGZhbHNlXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBlcSA6PSBmYWxzZVxuICAgICAgICAgICkgYTtcbiAgICAgICAgICAhZXEpKVxuICAgICgqIFJlY29yZHM6IHNhbWUgdHlwZSArIHN0cnVjdHVyYWxseSBlcXVhbCBmaWVsZHMgKilcbiAgICB8IFJlY29yZCBhLCBSZWNvcmQgYiAtPlxuICAgICAgYS5yX3R5cGUucnRfdWlkID0gYi5yX3R5cGUucnRfdWlkICYmXG4gICAgICBBcnJheS5sZW5ndGggYS5yX2ZpZWxkcyA9IEFycmF5Lmxlbmd0aCBiLnJfZmllbGRzICYmXG4gICAgICAobGV0IGVxID0gcmVmIHRydWUgaW5cbiAgICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEucl9maWVsZHMgLSAxIGRvXG4gICAgICAgICBpZiBub3QgKHNhZmVfZXEgYS5yX2ZpZWxkcy4oaSkgYi5yX2ZpZWxkcy4oaSkpIHRoZW4gZXEgOj0gZmFsc2VcbiAgICAgICBkb25lOyAhZXEpXG4gICAgKCogUGFyYW1ldGVyczogc2FtZSBVSUQgPSBzYW1lIHBhcmFtZXRlciAqKVxuICAgIHwgUGFyYW1ldGVyIGEsIFBhcmFtZXRlciBiIC0+IGEucG1fdWlkID0gYi5wbV91aWRcbiAgICAoKiBWZWN0b3JzOiBzYW1lIGxlbmd0aCArIGVsZW1lbnQtd2lzZSBlcXVhbCAqKVxuICAgIHwgVmVjdG9yIGEsIFZlY3RvciBiIC0+XG4gICAgICBBcnJheS5sZW5ndGggYSA9IEFycmF5Lmxlbmd0aCBiICYmXG4gICAgICAobGV0IGVxID0gcmVmIHRydWUgaW5cbiAgICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgICBpZiBub3QgKHNhZmVfZXEgYS4oaSkgYi4oaSkpIHRoZW4gZXEgOj0gZmFsc2VcbiAgICAgICBkb25lOyAhZXEpXG4gICAgKCogTGFtYmRhL0NvbXBvbmVudC9Jc2xhbmQvU2lnbmFsL05hdGl2ZUZuOiBwaHlzaWNhbCBvbmx5ICopXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIHJlZ2lzdGVyIFwiPVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+IEJvb2wgKHNhZmVfZXEgYSBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIj06IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiIT1cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPiBCb29sIChub3QgKHNhZmVfZXEgYSBiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCIhPTogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCI8XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGE7IFN0cmluZyBiXSAtPiBCb29sIChhIDwgYilcbiAgICB8IFthOyBiXSAtPiBCb29sIChhc19udW1iZXIgYSA8IGFzX251bWJlciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIjw6IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiPlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBhOyBTdHJpbmcgYl0gLT4gQm9vbCAoYSA+IGIpXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAoYXNfbnVtYmVyIGEgPiBhc19udW1iZXIgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCI+OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIjw9XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGE7IFN0cmluZyBiXSAtPiBCb29sIChhIDw9IGIpXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAoYXNfbnVtYmVyIGEgPD0gYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiPD06IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiPj1cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgYTsgU3RyaW5nIGJdIC0+IEJvb2wgKGEgPj0gYilcbiAgICB8IFthOyBiXSAtPiBCb29sIChhc19udW1iZXIgYSA+PSBhc19udW1iZXIgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCI+PTogMiBhcmdzXCIpKTtcblxuICAoKiA9PT0gTG9naWMgPT09ICopXG4gIHJlZ2lzdGVyIFwibm90XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBCb29sIChub3QgKHN4X3RydXRoeSBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90OiAxIGFyZ1wiKSk7XG5cbiAgKCogPT09IFByZWRpY2F0ZXMgPT09ICopXG4gIHJlZ2lzdGVyIFwibmlsP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gQm9vbCAoaXNfbmlsIGEpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5pbD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJudW1iZXI/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBfXSB8IFtOdW1iZXIgX10gLT4gQm9vbCB0cnVlXG4gICAgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm51bWJlcj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbnRlZ2VyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgX10gLT4gQm9vbCB0cnVlXG4gICAgfCBbTnVtYmVyIGZdIC0+IEJvb2wgKEZsb2F0LmlzX2ludGVnZXIgZilcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW50ZWdlcj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJmbG9hdD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtOdW1iZXIgX10gLT4gQm9vbCB0cnVlXG4gICAgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZsb2F0PzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInN0cmluZz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmc/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiYm9vbGVhbj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0Jvb2wgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2UgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYm9vbGVhbj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJsaXN0P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGlzdCBfXSB8IFtMaXN0UmVmIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxpc3Q/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZGljdD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0RpY3QgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2UgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzeW1ib2w/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTeW1ib2wgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2UgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3ltYm9sPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImtleXdvcmQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtLZXl3b3JkIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImtleXdvcmQ/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZW1wdHk/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBbXV0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gW10gfV0gLT4gQm9vbCB0cnVlXG4gICAgfCBbTGlzdCBfXSB8IFtMaXN0UmVmIF9dIC0+IEJvb2wgZmFsc2VcbiAgICB8IFtTdHJpbmcgXCJcIl0gLT4gQm9vbCB0cnVlIHwgW1N0cmluZyBfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBbRGljdCBkXSAtPiBCb29sIChIYXNodGJsLmxlbmd0aCBkID0gMClcbiAgICB8IFtOaWxdIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbXB0eT86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJvZGQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBCb29sIChpbnRfb2ZfZmxvYXQgKGFzX251bWJlciBhKSBtb2QgMiA8PiAwKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJvZGQ/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXZlbj9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IEJvb2wgKGludF9vZl9mbG9hdCAoYXNfbnVtYmVyIGEpIG1vZCAyID0gMCkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXZlbj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ6ZXJvP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gQm9vbCAoYXNfbnVtYmVyIGEgPSAwLjApIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInplcm8/OiAxIGFyZ1wiKSk7XG5cbiAgKCogPT09IFN0cmluZ3MgPT09ICopXG4gIHJlZ2lzdGVyIFwic3RyXCIgKGZ1biBhcmdzIC0+IFN0cmluZyAoU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCB0b19zdHJpbmcgYXJncykpKTtcbiAgcmVnaXN0ZXIgXCJ1cHBlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcudXBwZXJjYXNlX2FzY2lpIChhc19zdHJpbmcgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInVwcGVyOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwidXBjYXNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKFN0cmluZy51cHBlcmNhc2VfYXNjaWkgKGFzX3N0cmluZyBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidXBjYXNlOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibG93ZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IFN0cmluZyAoU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSAoYXNfc3RyaW5nIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsb3dlcjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImRvd25jYXNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgKGFzX3N0cmluZyBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZG93bmNhc2U6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ0cmltXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKFN0cmluZy50cmltIChhc19zdHJpbmcgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRyaW06IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctbGVuZ3RoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBJbnRlZ2VyIChTdHJpbmcubGVuZ3RoIChhc19zdHJpbmcgYSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nLWxlbmd0aDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInN0cmluZy1jb250YWlucz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgaGF5c3RhY2s7IFN0cmluZyBuZWVkbGVdIC0+XG4gICAgICBsZXQgcmVjIGZpbmQgaSA9XG4gICAgICAgIGlmIGkgKyBTdHJpbmcubGVuZ3RoIG5lZWRsZSA+IFN0cmluZy5sZW5ndGggaGF5c3RhY2sgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGlmIFN0cmluZy5zdWIgaGF5c3RhY2sgaSAoU3RyaW5nLmxlbmd0aCBuZWVkbGUpID0gbmVlZGxlIHRoZW4gdHJ1ZVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gQm9vbCAoZmluZCAwKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy1jb250YWlucz86IDIgc3RyaW5nIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInN0YXJ0cy13aXRoP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBTdHJpbmcgcHJlZml4XSAtPlxuICAgICAgQm9vbCAoU3RyaW5nLmxlbmd0aCBzID49IFN0cmluZy5sZW5ndGggcHJlZml4ICYmXG4gICAgICAgICAgICBTdHJpbmcuc3ViIHMgMCAoU3RyaW5nLmxlbmd0aCBwcmVmaXgpID0gcHJlZml4KVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJlbmRzLXdpdGg/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IFN0cmluZyBzdWZmaXhdIC0+XG4gICAgICBsZXQgc2wgPSBTdHJpbmcubGVuZ3RoIHMgYW5kIHhsID0gU3RyaW5nLmxlbmd0aCBzdWZmaXggaW5cbiAgICAgIEJvb2wgKHNsID49IHhsICYmIFN0cmluZy5zdWIgcyAoc2wgLSB4bCkgeGwgPSBzdWZmaXgpXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImluZGV4LW9mXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGhheXN0YWNrOyBTdHJpbmcgbmVlZGxlXSAtPlxuICAgICAgbGV0IG5sID0gU3RyaW5nLmxlbmd0aCBuZWVkbGUgYW5kIGhsID0gU3RyaW5nLmxlbmd0aCBoYXlzdGFjayBpblxuICAgICAgbGV0IHJlYyBmaW5kIGkgPVxuICAgICAgICBpZiBpICsgbmwgPiBobCB0aGVuIE51bWJlciAoLTEuMClcbiAgICAgICAgZWxzZSBpZiBTdHJpbmcuc3ViIGhheXN0YWNrIGkgbmwgPSBuZWVkbGUgdGhlbiBOdW1iZXIgKGZsb2F0X29mX2ludCBpKVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gZmluZCAwXG4gICAgfCBbTGlzdCBpdGVtczsgdGFyZ2V0XSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9OyB0YXJnZXRdIC0+XG4gICAgICBsZXQgZXEgYSBiID0gbWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgIHwgSW50ZWdlciB4LCBJbnRlZ2VyIHkgLT4geCA9IHlcbiAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4geCA9IHlcbiAgICAgICAgfCBJbnRlZ2VyIHgsIE51bWJlciB5IC0+IGZsb2F0X29mX2ludCB4ID0geVxuICAgICAgICB8IE51bWJlciB4LCBJbnRlZ2VyIHkgLT4geCA9IGZsb2F0X29mX2ludCB5XG4gICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IHggPSB5XG4gICAgICAgIHwgU3ltYm9sIHgsIFN5bWJvbCB5IC0+IHggPSB5IHwgS2V5d29yZCB4LCBLZXl3b3JkIHkgLT4geCA9IHlcbiAgICAgICAgfCBCb29sIHgsIEJvb2wgeSAtPiB4ID0geSB8IE5pbCwgTmlsIC0+IHRydWUgfCBfIC0+IGEgPT0gYiBpblxuICAgICAgbGV0IHJlYyBmaW5kIGkgPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IE5pbFxuICAgICAgICB8IGggOjogXyB3aGVuIGVxIGggdGFyZ2V0IC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpXG4gICAgICAgIHwgXyA6OiB0bCAtPiBmaW5kIChpICsgMSkgdGxcbiAgICAgIGluIGZpbmQgMCBpdGVtc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluZGV4LW9mOiAyIHN0cmluZyBhcmdzIG9yIGxpc3QrdGFyZ2V0XCIpKTtcbiAgcmVnaXN0ZXIgXCJzdWJzdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgc3RhcnRfdjsgZW5kX3ZdIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBzdGFydF92IGFuZCBqID0gYXNfaW50IGVuZF92IGluXG4gICAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBsZXQgaSA9IG1heCAwIChtaW4gaSBsZW4pIGFuZCBqID0gbWF4IDAgKG1pbiBqIGxlbikgaW5cbiAgICAgIFN0cmluZyAoU3RyaW5nLnN1YiBzIGkgKG1heCAwIChqIC0gaSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN1YnN0cmluZzogMyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdWJzdHJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgc3RhcnRfdjsgbGVuX3ZdIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBzdGFydF92IGFuZCBuID0gYXNfaW50IGxlbl92IGluXG4gICAgICBsZXQgc2wgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICAgIGxldCBpID0gbWF4IDAgKG1pbiBpIHNsKSBpblxuICAgICAgbGV0IG4gPSBtYXggMCAobWluIG4gKHNsIC0gaSkpIGluXG4gICAgICBTdHJpbmcgKFN0cmluZy5zdWIgcyBpIG4pXG4gICAgfCBbU3RyaW5nIHM7IHN0YXJ0X3ZdIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBzdGFydF92IGluXG4gICAgICBsZXQgc2wgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICAgIGxldCBpID0gbWF4IDAgKG1pbiBpIHNsKSBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSAoc2wgLSBpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdWJzdHI6IDItMyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzcGxpdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBTdHJpbmcgc2VwXSAtPlxuICAgICAgaWYgU3RyaW5nLmxlbmd0aCBzZXAgPSAxIHRoZW5cbiAgICAgICAgTGlzdCAoTGlzdC5tYXAgKGZ1biBwIC0+IFN0cmluZyBwKSAoU3RyaW5nLnNwbGl0X29uX2NoYXIgc2VwLlswXSBzKSlcbiAgICAgIGVsc2VcbiAgICAgICAgKCogTXVsdGktY2hhciBzZXBhcmF0b3I6IHVzZSBSZSBmb3IgbGl0ZXJhbCBzcGxpdCAqKVxuICAgICAgICBsZXQgcmUgPSBSZS5jb21waWxlIChSZS5zdHIgc2VwKSBpblxuICAgICAgICBMaXN0IChMaXN0Lm1hcCAoZnVuIHAgLT4gU3RyaW5nIHApIChSZS5zcGxpdCByZSBzKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzcGxpdDogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJqb2luXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNlcDsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIFN0cmluZyAoU3RyaW5nLmNvbmNhdCBzZXAgKExpc3QubWFwIHRvX3N0cmluZyBpdGVtcykpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiam9pbjogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZXBsYWNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IHRvX3N0ciA9IGZ1bmN0aW9uXG4gICAgICB8IFN0cmluZyBzIC0+IHMgfCBTeEV4cHIgcyAtPiBzIHwgUmF3SFRNTCBzIC0+IHNcbiAgICAgIHwgS2V5d29yZCBrIC0+IGsgfCBTeW1ib2wgcyAtPiBzXG4gICAgICB8IE5pbCAtPiBcIlwiIHwgQm9vbCB0cnVlIC0+IFwidHJ1ZVwiIHwgQm9vbCBmYWxzZSAtPiBcImZhbHNlXCJcbiAgICAgIHwgSW50ZWdlciBuIC0+IHN0cmluZ19vZl9pbnQgblxuICAgICAgfCBOdW1iZXIgbiAtPiBpZiBGbG9hdC5pc19pbnRlZ2VyIG4gdGhlbiBzdHJpbmdfb2ZfaW50IChpbnRfb2ZfZmxvYXQgbikgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVnXCIgblxuICAgICAgfCBUaHVuayBfIGFzIHQgLT4gKG1hdGNoICFfc3hfdHJhbXBvbGluZV9mbiB0IHdpdGggU3RyaW5nIHMgLT4gcyB8IHYgLT4gdG9fc3RyaW5nIHYpXG4gICAgICB8IHYgLT4gdG9fc3RyaW5nIHZcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3M7IG9sZF9zOyBuZXdfc10gLT5cbiAgICAgIGxldCBzID0gdG9fc3RyIHMgYW5kIG9sZF9zID0gdG9fc3RyIG9sZF9zIGFuZCBuZXdfcyA9IHRvX3N0ciBuZXdfcyBpblxuICAgICAgbGV0IG9sID0gU3RyaW5nLmxlbmd0aCBvbGRfcyBpblxuICAgICAgaWYgb2wgPSAwIHRoZW4gU3RyaW5nIHNcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICAgICAgbGV0IHJlYyBnbyBpID1cbiAgICAgICAgICBpZiBpID49IFN0cmluZy5sZW5ndGggcyB0aGVuICgpXG4gICAgICAgICAgZWxzZSBpZiBpICsgb2wgPD0gU3RyaW5nLmxlbmd0aCBzICYmIFN0cmluZy5zdWIgcyBpIG9sID0gb2xkX3MgdGhlbiBiZWdpblxuICAgICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIG5ld19zO1xuICAgICAgICAgICAgZ28gKGkgKyBvbClcbiAgICAgICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBzLltpXTtcbiAgICAgICAgICAgIGdvIChpICsgMSlcbiAgICAgICAgICBlbmRcbiAgICAgICAgaW4gZ28gMDtcbiAgICAgICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKVxuICAgICAgZW5kXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVwbGFjZTogMyBzdHJpbmcgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1mcm9tLWNvZGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthXSAtPlxuICAgICAgbGV0IG4gPSBhc19pbnQgYSBpblxuICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNCBpblxuICAgICAgQnVmZmVyLmFkZF91dGZfOF91Y2hhciBidWYgKFVjaGFyLm9mX2ludCBuKTtcbiAgICAgIFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWZyb20tY29kZTogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImNoYXItYXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgbl0gLT5cbiAgICAgIGxldCBpID0gYXNfaW50IG4gaW5cbiAgICAgIGlmIGkgPj0gMCAmJiBpIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICAgICAgU3RyaW5nIChTdHJpbmcubWFrZSAxIHMuW2ldKVxuICAgICAgZWxzZSBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWF0OiBzdHJpbmcgYW5kIGluZGV4XCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLWNvZGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gd2hlbiBTdHJpbmcubGVuZ3RoIHMgPiAwIC0+IEludGVnZXIgKENoYXIuY29kZSBzLlswXSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNvZGU6IDEgbm9uLWVtcHR5IHN0cmluZyBhcmdcIikpO1xuICByZWdpc3RlciBcInBhcnNlLW51bWJlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPlxuICAgICAgbGV0IGhhc19kZWMgPSBTdHJpbmcuY29udGFpbnMgcyAnLicgaW5cbiAgICAgIGxldCBoYXNfZXhwID0gU3RyaW5nLmNvbnRhaW5zIHMgJ2UnIHx8IFN0cmluZy5jb250YWlucyBzICdFJyBpblxuICAgICAgaWYgaGFzX2RlYyB8fCBoYXNfZXhwIHRoZW5cbiAgICAgICAgKHRyeSBOdW1iZXIgKGZsb2F0X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOaWwpXG4gICAgICBlbHNlXG4gICAgICAgIChtYXRjaCBpbnRfb2Zfc3RyaW5nX29wdCBzIHdpdGhcbiAgICAgICAgIHwgU29tZSBuIC0+IEludGVnZXIgblxuICAgICAgICAgfCBOb25lIC0+ICh0cnkgTnVtYmVyIChmbG9hdF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTmlsKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJzZS1udW1iZXI6IDEgc3RyaW5nIGFyZ1wiKSk7XG5cbiAgKCogPT09IFJlZ2V4IChQQ1JFLWNvbXBhdGlibGUg4oCUIHNhbWUgc3ludGF4IGFzIEpTIFJlZ0V4cCkgPT09ICopXG4gIHJlZ2lzdGVyIFwicmVnZXgtbWF0Y2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0dGVybjsgU3RyaW5nIGlucHV0XSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgcmUgPSBSZS5QY3JlLnJlIHBhdHRlcm4gfD4gUmUuY29tcGlsZSBpblxuICAgICAgICBtYXRjaCBSZS5leGVjX29wdCByZSBpbnB1dCB3aXRoXG4gICAgICAgIHwgU29tZSBncm91cCAtPlxuICAgICAgICAgIGxldCBmdWxsID0gUmUuR3JvdXAuZ2V0IGdyb3VwIDAgaW5cbiAgICAgICAgICBsZXQgbiA9IFJlLkdyb3VwLm5iX2dyb3VwcyBncm91cCBpblxuICAgICAgICAgIGxldCBncm91cHMgPSByZWYgW1N0cmluZyBmdWxsXSBpblxuICAgICAgICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgICAgICAgKHRyeSBncm91cHMgOj0gIWdyb3VwcyBAIFtTdHJpbmcgKFJlLkdyb3VwLmdldCBncm91cCBpKV1cbiAgICAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPiBncm91cHMgOj0gIWdyb3VwcyBAIFtOaWxdKVxuICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgTGlzdCAhZ3JvdXBzXG4gICAgICAgIHwgTm9uZSAtPiBOaWxcbiAgICAgICB3aXRoIF8gLT4gTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LW1hdGNoOiBwYXR0ZXJuIGFuZCBpbnB1dCBzdHJpbmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleC1tYXRjaD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0dGVybjsgU3RyaW5nIGlucHV0XSAtPlxuICAgICAgKHRyeSBCb29sIChSZS5leGVjcCAoUmUuUGNyZS5yZSBwYXR0ZXJuIHw+IFJlLmNvbXBpbGUpIGlucHV0KVxuICAgICAgIHdpdGggXyAtPiBCb29sIGZhbHNlKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LW1hdGNoPzogcGF0dGVybiBhbmQgaW5wdXQgc3RyaW5nc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtZmluZC1hbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0dGVybjsgU3RyaW5nIGlucHV0XSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgcmUgPSBSZS5QY3JlLnJlIHBhdHRlcm4gfD4gUmUuY29tcGlsZSBpblxuICAgICAgICBsZXQgbWF0Y2hlcyA9IFJlLmFsbCByZSBpbnB1dCBpblxuICAgICAgICBsZXQgcmVzdWx0cyA9IExpc3QubWFwIChmdW4gZ3JvdXAgLT5cbiAgICAgICAgICAoKiBJZiB0aGVyZSdzIGEgY2FwdHVyZSBncm91cCwgcmV0dXJuIGdyb3VwIDE7IGVsc2UgZnVsbCBtYXRjaCAqKVxuICAgICAgICAgIHRyeSBTdHJpbmcgKFJlLkdyb3VwLmdldCBncm91cCAxKVxuICAgICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IFN0cmluZyAoUmUuR3JvdXAuZ2V0IGdyb3VwIDApXG4gICAgICAgICkgbWF0Y2hlcyBpblxuICAgICAgICBMaXN0UmVmIChyZWYgcmVzdWx0cylcbiAgICAgICB3aXRoIF8gLT4gTGlzdFJlZiAocmVmIFtdKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1maW5kLWFsbDogcGF0dGVybiBhbmQgaW5wdXQgc3RyaW5nc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtcmVwbGFjZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXR0ZXJuOyBTdHJpbmcgcmVwbGFjZW1lbnQ7IFN0cmluZyBpbnB1dF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IHJlID0gUmUuUGNyZS5yZSBwYXR0ZXJuIHw+IFJlLmNvbXBpbGUgaW5cbiAgICAgICAgU3RyaW5nIChSZS5yZXBsYWNlX3N0cmluZyByZSB+Ynk6cmVwbGFjZW1lbnQgaW5wdXQpXG4gICAgICAgd2l0aCBfIC0+IFN0cmluZyBpbnB1dClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1yZXBsYWNlOiBwYXR0ZXJuLCByZXBsYWNlbWVudCwgaW5wdXQgc3RyaW5nc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtcmVwbGFjZS1maXJzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXR0ZXJuOyBTdHJpbmcgcmVwbGFjZW1lbnQ7IFN0cmluZyBpbnB1dF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IHJlID0gUmUuUGNyZS5yZSBwYXR0ZXJuIHw+IFJlLmNvbXBpbGUgaW5cbiAgICAgICAgKCogUmUgZG9lc24ndCBoYXZlIHJlcGxhY2VfZmlyc3QsIHNvIHVzZSBhbGwgbWF0Y2hlcyBhbmQgcmVwbGFjZSBvbmx5IGZpcnN0ICopXG4gICAgICAgIG1hdGNoIFJlLmV4ZWNfb3B0IHJlIGlucHV0IHdpdGhcbiAgICAgICAgfCBTb21lIGdyb3VwIC0+XG4gICAgICAgICAgbGV0IHN0YXJ0ID0gUmUuR3JvdXAuc3RhcnQgZ3JvdXAgMCBhbmQgc3RvcCA9IFJlLkdyb3VwLnN0b3AgZ3JvdXAgMCBpblxuICAgICAgICAgIFN0cmluZyAoU3RyaW5nLnN1YiBpbnB1dCAwIHN0YXJ0IF4gcmVwbGFjZW1lbnQgXlxuICAgICAgICAgICAgICAgICAgU3RyaW5nLnN1YiBpbnB1dCBzdG9wIChTdHJpbmcubGVuZ3RoIGlucHV0IC0gc3RvcCkpXG4gICAgICAgIHwgTm9uZSAtPiBTdHJpbmcgaW5wdXRcbiAgICAgICB3aXRoIF8gLT4gU3RyaW5nIGlucHV0KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LXJlcGxhY2UtZmlyc3Q6IHBhdHRlcm4sIHJlcGxhY2VtZW50LCBpbnB1dCBzdHJpbmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleC1zcGxpdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBwYXR0ZXJuOyBTdHJpbmcgaW5wdXRdIC0+XG4gICAgICAodHJ5XG4gICAgICAgIGxldCByZSA9IFJlLlBjcmUucmUgcGF0dGVybiB8PiBSZS5jb21waWxlIGluXG4gICAgICAgIExpc3RSZWYgKHJlZiAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSAoUmUuc3BsaXQgcmUgaW5wdXQpKSlcbiAgICAgICB3aXRoIF8gLT4gTGlzdFJlZiAocmVmIFtTdHJpbmcgaW5wdXRdKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1zcGxpdDogcGF0dGVybiBhbmQgaW5wdXQgc3RyaW5nc1wiKSk7XG5cbiAgKCogPT09IENvbGxlY3Rpb25zID09PSAqKVxuICByZWdpc3RlciBcImxpc3RcIiAoZnVuIGFyZ3MgLT4gTGlzdFJlZiAocmVmIGFyZ3MpKTtcbiAgcmVnaXN0ZXIgXCJsZW5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gSW50ZWdlciAoTGlzdC5sZW5ndGggbClcbiAgICB8IFtTdHJpbmcgc10gLT4gSW50ZWdlciAoU3RyaW5nLmxlbmd0aCBzKVxuICAgIHwgW0RpY3QgZF0gLT4gSW50ZWdlciAoSGFzaHRibC5sZW5ndGggZClcbiAgICB8IFtOaWxdIHwgW0Jvb2wgZmFsc2VdIC0+IEludGVnZXIgMFxuICAgIHwgW0Jvb2wgdHJ1ZV0gLT4gSW50ZWdlciAxXG4gICAgfCBbTnVtYmVyIF9dIHwgW0ludGVnZXIgX10gLT4gSW50ZWdlciAxXG4gICAgfCBbUmF3SFRNTCBzXSAtPiBJbnRlZ2VyIChTdHJpbmcubGVuZ3RoIHMpXG4gICAgfCBbU3hFeHByIHNdIC0+IEludGVnZXIgKFN0cmluZy5sZW5ndGggcylcbiAgICB8IFtTcHJlYWQgcGFpcnNdIC0+IEludGVnZXIgKExpc3QubGVuZ3RoIHBhaXJzKVxuICAgIHwgW0NvbXBvbmVudCBfXSB8IFtJc2xhbmQgX10gfCBbTGFtYmRhIF9dIHwgW05hdGl2ZUZuIF9dXG4gICAgfCBbTWFjcm8gX10gfCBbVGh1bmsgX10gfCBbS2V5d29yZCBfXSB8IFtTeW1ib2wgX10gLT4gSW50ZWdlciAwXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcImxlbjogJWQgYXJnc1wiXG4gICAgICAgIChMaXN0Lmxlbmd0aCBhcmdzKSkpKTtcbiAgcmVnaXN0ZXIgXCJsZW5ndGhcIiAoSGFzaHRibC5maW5kIHByaW1pdGl2ZXMgXCJsZW5cIik7XG4gIHJlZ2lzdGVyIFwiZmlyc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0ICh4IDo6IF8pXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSB4IDo6IF8gfV0gLT4geFxuICAgIHwgW0xpc3QgW11dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IFtdIH1dIC0+IE5pbCB8IFtOaWxdIC0+IE5pbFxuICAgIHwgW3hdIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpcnN0OiBleHBlY3RlZCBsaXN0LCBnb3QgXCIgXiBpbnNwZWN0IHgpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpcnN0OiAxIGxpc3QgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCAoXyA6OiB4cyldIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IF8gOjogeHMgfV0gLT4gTGlzdCB4c1xuICAgIHwgW0xpc3QgW11dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IFtdIH1dIC0+IExpc3QgW10gfCBbTmlsXSAtPiBMaXN0IFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVzdDogMSBsaXN0IGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibGFzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPlxuICAgICAgKG1hdGNoIExpc3QucmV2IGwgd2l0aCB4IDo6IF8gLT4geCB8IFtdIC0+IE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsYXN0OiAxIGxpc3QgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbml0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+XG4gICAgICAobWF0Y2ggTGlzdC5yZXYgbCB3aXRoIF8gOjogcmVzdCAtPiBMaXN0IChMaXN0LnJldiByZXN0KSB8IFtdIC0+IExpc3QgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW5pdDogMSBsaXN0IGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibnRoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsOyBuXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH07IG5dIC0+XG4gICAgICAodHJ5IExpc3QubnRoIGwgKGFzX2ludCBuKSB3aXRoIF8gLT4gTmlsKVxuICAgIHwgW1N0cmluZyBzOyBuXSAtPlxuICAgICAgbGV0IGkgPSBhc19pbnQgbiBpblxuICAgICAgaWYgaSA+PSAwICYmIGkgPCBTdHJpbmcubGVuZ3RoIHMgdGhlbiBTdHJpbmcgKFN0cmluZy5tYWtlIDEgcy5baV0pXG4gICAgICBlbHNlIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm50aDogbGlzdC9zdHJpbmcgYW5kIG51bWJlclwiKSk7XG4gIHJlZ2lzdGVyIFwiY29uc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3g7IExpc3QgbF0gfCBbeDsgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPiBMaXN0ICh4IDo6IGwpXG4gICAgfCBbeDsgTmlsXSAtPiBMaXN0IFt4XVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNvbnM6IHZhbHVlIGFuZCBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJhcHBlbmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGEgfTsgTGlzdCBsYiB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxiIH1dIC0+XG4gICAgICBMaXN0IChsYSBAIGxiKVxuICAgIHwgW0xpc3QgbGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYSB9OyBOaWxdIC0+IExpc3QgbGFcbiAgICB8IFtOaWw7IExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9XSAtPiBMaXN0IGxiXG4gICAgfCBbTGlzdCBsYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxhIH07IHZdIC0+IExpc3QgKGxhIEAgW3ZdKVxuICAgIHwgW3Y7IExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9XSAtPiBMaXN0IChbdl0gQCBsYilcbiAgICB8IF8gLT5cbiAgICAgIGxldCBhbGwgPSBMaXN0LmNvbmNhdF9tYXAgYXNfbGlzdCBhcmdzIGluXG4gICAgICBMaXN0IGFsbCk7XG4gIHJlZ2lzdGVyIFwiYXBwZW5kIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgaXRlbV0gLT4gciA6PSAhciBAIFtpdGVtXTsgTGlzdFJlZiByXG4gICAgfCBbTGlzdCBpdGVtczsgaXRlbV0gLT4gTGlzdCAoaXRlbXMgQCBbaXRlbV0pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXBwZW5kITogbGlzdCBhbmQgaXRlbVwiKSk7XG4gIHJlZ2lzdGVyIFwicmV2ZXJzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPiBMaXN0IChMaXN0LnJldiBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJldmVyc2U6IDEgbGlzdFwiKSk7XG4gIHJlZ2lzdGVyIFwiZmxhdHRlblwiIChmdW4gYXJncyAtPlxuICAgIGxldCByZWMgZmxhdCA9IGZ1bmN0aW9uXG4gICAgICB8IExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9IC0+IExpc3QuY29uY2F0X21hcCBmbGF0IGl0ZW1zXG4gICAgICB8IHggLT4gW3hdXG4gICAgaW5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gTGlzdCAoTGlzdC5jb25jYXRfbWFwIGZsYXQgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmbGF0dGVuOiAxIGxpc3RcIikpO1xuICByZWdpc3RlciBcImNvbmNhdFwiIChmdW4gYXJncyAtPiBMaXN0IChMaXN0LmNvbmNhdF9tYXAgYXNfbGlzdCBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwiY29udGFpbnM/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsOyBpdGVtXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH07IGl0ZW1dIC0+XG4gICAgICAoKiBQaHlzaWNhbCBlcXVhbGl0eSBmaXJzdCAoaGFuZGxlcyBzaWduYWxzL2RpY3RzL2Nsb3N1cmVzIHNhZmVseSksXG4gICAgICAgICBzdHJ1Y3R1cmFsIGZhbGxiYWNrIG9ubHkgZm9yIGFjeWNsaWMgdHlwZXMgKHN0cmluZy9udW1iZXIvYm9vbC9uaWwvc3ltYm9sL2tleXdvcmQpICopXG4gICAgICBsZXQgc2FmZV9lcSBhIGIgPVxuICAgICAgICBhID09IGIgfHxcbiAgICAgICAgKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgfCBJbnRlZ2VyIHgsIEludGVnZXIgeSAtPiB4ID0geVxuICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4geCA9IHlcbiAgICAgICAgIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBmbG9hdF9vZl9pbnQgeCA9IHlcbiAgICAgICAgIHwgTnVtYmVyIHgsIEludGVnZXIgeSAtPiB4ID0gZmxvYXRfb2ZfaW50IHlcbiAgICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IHggPSB5XG4gICAgICAgICB8IEJvb2wgeCwgQm9vbCB5IC0+IHggPSB5XG4gICAgICAgICB8IE5pbCwgTmlsIC0+IHRydWVcbiAgICAgICAgIHwgU3ltYm9sIHgsIFN5bWJvbCB5IC0+IHggPSB5XG4gICAgICAgICB8IEtleXdvcmQgeCwgS2V5d29yZCB5IC0+IHggPSB5XG4gICAgICAgICB8IERpY3QgYSwgRGljdCBiIC0+XG4gICAgICAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGEgXCJfX2hvc3RfaGFuZGxlXCIsIEhhc2h0YmwuZmluZF9vcHQgYiBcIl9faG9zdF9oYW5kbGVcIiB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgKE51bWJlciBoYSksIFNvbWUgKE51bWJlciBoYikgLT4gaGEgPSBoYlxuICAgICAgICAgICAgfCBfIC0+IGZhbHNlKVxuICAgICAgICAgfCBfIC0+IGZhbHNlKVxuICAgICAgaW5cbiAgICAgIEJvb2wgKExpc3QuZXhpc3RzIChmdW4geCAtPiBzYWZlX2VxIHggaXRlbSkgbClcbiAgICB8IFtTdHJpbmcgczsgU3RyaW5nIHN1Yl0gLT5cbiAgICAgIGxldCByZWMgZmluZCBpID1cbiAgICAgICAgaWYgaSArIFN0cmluZy5sZW5ndGggc3ViID4gU3RyaW5nLmxlbmd0aCBzIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBpZiBTdHJpbmcuc3ViIHMgaSAoU3RyaW5nLmxlbmd0aCBzdWIpID0gc3ViIHRoZW4gdHJ1ZVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gQm9vbCAoZmluZCAwKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNvbnRhaW5zPzogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJyYW5nZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3N0b3Bfdl0gLT5cbiAgICAgIGxldCBuID0gYXNfaW50IHN0b3BfdiBpblxuICAgICAgTGlzdCAoTGlzdC5pbml0IChtYXggMCBuKSAoZnVuIGkgLT4gSW50ZWdlciBpKSlcbiAgICB8IFtzdGFydF92OyBzdG9wX3ZdIC0+XG4gICAgICBsZXQgcyA9IGFzX2ludCBzdGFydF92IGFuZCBlID0gYXNfaW50IHN0b3BfdiBpblxuICAgICAgbGV0IGxlbiA9IG1heCAwIChlIC0gcykgaW5cbiAgICAgIExpc3QgKExpc3QuaW5pdCBsZW4gKGZ1biBpIC0+IEludGVnZXIgKHMgKyBpKSkpXG4gICAgfCBbc3RhcnRfdjsgc3RvcF92OyBzdGVwX3ZdIC0+XG4gICAgICAobWF0Y2ggc3RhcnRfdiwgc3RvcF92LCBzdGVwX3Ygd2l0aFxuICAgICAgIHwgSW50ZWdlciBzLCBJbnRlZ2VyIGUsIEludGVnZXIgc3QgLT5cbiAgICAgICAgIGlmIHN0ID0gMCB0aGVuIExpc3QgW11cbiAgICAgICAgIGVsc2VcbiAgICAgICAgICAgbGV0IGl0ZW1zID0gcmVmIFtdIGluXG4gICAgICAgICAgIGxldCBpID0gcmVmIHMgaW5cbiAgICAgICAgICAgaWYgc3QgPiAwIHRoZW5cbiAgICAgICAgICAgICAod2hpbGUgIWkgPCBlIGRvIGl0ZW1zIDo9IEludGVnZXIgIWkgOjogIWl0ZW1zOyBpIDo9ICFpICsgc3QgZG9uZSlcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICh3aGlsZSAhaSA+IGUgZG8gaXRlbXMgOj0gSW50ZWdlciAhaSA6OiAhaXRlbXM7IGkgOj0gIWkgKyBzdCBkb25lKTtcbiAgICAgICAgICAgTGlzdCAoTGlzdC5yZXYgIWl0ZW1zKVxuICAgICAgIHwgXyAtPlxuICAgICAgICAgbGV0IHMgPSBhc19udW1iZXIgc3RhcnRfdiBhbmQgZSA9IGFzX251bWJlciBzdG9wX3YgYW5kIHN0ID0gYXNfbnVtYmVyIHN0ZXBfdiBpblxuICAgICAgICAgaWYgc3QgPSAwLjAgdGhlbiBMaXN0IFtdXG4gICAgICAgICBlbHNlXG4gICAgICAgICAgIGxldCBpdGVtcyA9IHJlZiBbXSBpblxuICAgICAgICAgICBsZXQgaSA9IHJlZiBzIGluXG4gICAgICAgICAgIGlmIHN0ID4gMC4wIHRoZW5cbiAgICAgICAgICAgICAod2hpbGUgIWkgPCBlIGRvIGl0ZW1zIDo9IE51bWJlciAhaSA6OiAhaXRlbXM7IGkgOj0gIWkgKy4gc3QgZG9uZSlcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICh3aGlsZSAhaSA+IGUgZG8gaXRlbXMgOj0gTnVtYmVyICFpIDo6ICFpdGVtczsgaSA6PSAhaSArLiBzdCBkb25lKTtcbiAgICAgICAgICAgTGlzdCAoTGlzdC5yZXYgIWl0ZW1zKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyYW5nZTogMS0zIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInNsaWNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSk7IHN0YXJ0X3ZdIC0+XG4gICAgICBsZXQgaSA9IG1heCAwIChhc19pbnQgc3RhcnRfdikgaW5cbiAgICAgIGxldCByZWMgZHJvcCBuID0gZnVuY3Rpb24gXyA6OiB4cyB3aGVuIG4gPiAwIC0+IGRyb3AgKG4tMSkgeHMgfCBsIC0+IGwgaW5cbiAgICAgIExpc3QgKGRyb3AgaSBsKVxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pOyBzdGFydF92OyBlbmRfdl0gLT5cbiAgICAgIGxldCBpID0gbWF4IDAgKGFzX2ludCBzdGFydF92KSBhbmQgaiA9IGFzX2ludCBlbmRfdiBpblxuICAgICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICAgIGxldCBqID0gbWluIGogbGVuIGluXG4gICAgICBsZXQgcmVjIHRha2VfcmFuZ2UgaWR4ID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbXVxuICAgICAgICB8IHggOjogeHMgLT5cbiAgICAgICAgICBpZiBpZHggPj0gaiB0aGVuIFtdXG4gICAgICAgICAgZWxzZSBpZiBpZHggPj0gaSB0aGVuIHggOjogdGFrZV9yYW5nZSAoaWR4KzEpIHhzXG4gICAgICAgICAgZWxzZSB0YWtlX3JhbmdlIChpZHgrMSkgeHNcbiAgICAgIGluIExpc3QgKHRha2VfcmFuZ2UgMCBsKVxuICAgIHwgW1N0cmluZyBzOyBzdGFydF92XSAtPlxuICAgICAgbGV0IGkgPSBtYXggMCAoYXNfaW50IHN0YXJ0X3YpIGluXG4gICAgICBTdHJpbmcgKFN0cmluZy5zdWIgcyBpIChtYXggMCAoU3RyaW5nLmxlbmd0aCBzIC0gaSkpKVxuICAgIHwgW1N0cmluZyBzOyBzdGFydF92OyBlbmRfdl0gLT5cbiAgICAgIGxldCBpID0gbWF4IDAgKGFzX2ludCBzdGFydF92KSBhbmQgaiA9IGFzX2ludCBlbmRfdiBpblxuICAgICAgbGV0IHNsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBsZXQgaiA9IG1pbiBqIHNsIGluXG4gICAgICBTdHJpbmcgKFN0cmluZy5zdWIgcyBpIChtYXggMCAoaiAtIGkpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzbGljZTogMi0zIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInNvcnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gTGlzdCAoTGlzdC5zb3J0IGNvbXBhcmUgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzb3J0OiAxIGxpc3RcIikpO1xuICByZWdpc3RlciBcInppcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgbGEgPSBhc19saXN0IGEgYW5kIGxiID0gYXNfbGlzdCBiIGluXG4gICAgICBsZXQgcmVjIGdvIGwxIGwyIGFjYyA9IG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgICAgIHwgeCA6OiB4cywgeSA6OiB5cyAtPiBnbyB4cyB5cyAoTGlzdCBbeDsgeV0gOjogYWNjKVxuICAgICAgICB8IF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgICBpbiBMaXN0IChnbyBsYSBsYiBbXSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ6aXA6IDIgbGlzdHNcIikpO1xuICByZWdpc3RlciBcInppcC1wYWlyc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+XG4gICAgICBsZXQgbCA9IGFzX2xpc3QgdiBpblxuICAgICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICAgIHwgYSA6OiBiIDo6IHJlc3QgLT4gTGlzdCBbYTsgYl0gOjogZ28gcmVzdFxuICAgICAgICB8IF8gLT4gW11cbiAgICAgIGluIExpc3QgKGdvIGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiemlwLXBhaXJzOiAxIGxpc3RcIikpO1xuICByZWdpc3RlciBcInRha2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFsoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KTsgbl0gLT5cbiAgICAgIGxldCByZWMgdGFrZV9uIGkgPSBmdW5jdGlvblxuICAgICAgICB8IHggOjogeHMgd2hlbiBpID4gMCAtPiB4IDo6IHRha2VfbiAoaS0xKSB4c1xuICAgICAgICB8IF8gLT4gW11cbiAgICAgIGluIExpc3QgKHRha2VfbiAoYXNfaW50IG4pIGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidGFrZTogbGlzdCBhbmQgbnVtYmVyXCIpKTtcbiAgcmVnaXN0ZXIgXCJkcm9wXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSk7IG5dIC0+XG4gICAgICBsZXQgcmVjIGRyb3BfbiBpID0gZnVuY3Rpb25cbiAgICAgICAgfCBfIDo6IHhzIHdoZW4gaSA+IDAgLT4gZHJvcF9uIChpLTEpIHhzXG4gICAgICAgIHwgbCAtPiBsXG4gICAgICBpbiBMaXN0IChkcm9wX24gKGFzX2ludCBuKSBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRyb3A6IGxpc3QgYW5kIG51bWJlclwiKSk7XG4gIHJlZ2lzdGVyIFwiY2h1bmstZXZlcnlcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFsoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KTsgbl0gLT5cbiAgICAgIGxldCBzaXplID0gYXNfaW50IG4gaW5cbiAgICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IFtdXG4gICAgICAgIHwgbCAtPlxuICAgICAgICAgIGxldCByZWMgdGFrZV9uIGkgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCB4IDo6IHhzIHdoZW4gaSA+IDAgLT4geCA6OiB0YWtlX24gKGktMSkgeHNcbiAgICAgICAgICAgIHwgXyAtPiBbXVxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHJlYyBkcm9wX24gaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgICB8IF8gOjogeHMgd2hlbiBpID4gMCAtPiBkcm9wX24gKGktMSkgeHNcbiAgICAgICAgICAgIHwgbCAtPiBsXG4gICAgICAgICAgaW5cbiAgICAgICAgICBMaXN0ICh0YWtlX24gc2l6ZSBsKSA6OiBnbyAoZHJvcF9uIHNpemUgbClcbiAgICAgIGluIExpc3QgKGdvIGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2h1bmstZXZlcnk6IGxpc3QgYW5kIG51bWJlclwiKSk7XG4gIHJlZ2lzdGVyIFwidW5pcXVlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSldIC0+XG4gICAgICBsZXQgc2VlbiA9IEhhc2h0YmwuY3JlYXRlIDE2IGluXG4gICAgICBsZXQgcmVzdWx0ID0gTGlzdC5maWx0ZXIgKGZ1biB4IC0+XG4gICAgICAgIGxldCBrZXkgPSBpbnNwZWN0IHggaW5cbiAgICAgICAgaWYgSGFzaHRibC5tZW0gc2VlbiBrZXkgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIChIYXNodGJsLnJlcGxhY2Ugc2VlbiBrZXkgdHJ1ZTsgdHJ1ZSlcbiAgICAgICkgbCBpblxuICAgICAgTGlzdCByZXN1bHRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ1bmlxdWU6IDEgbGlzdFwiKSk7XG5cbiAgKCogPT09IERpY3QgPT09ICopXG4gIHJlZ2lzdGVyIFwiZGljdFwiIChmdW4gYXJncyAtPlxuICAgIGxldCBkID0gbWFrZV9kaWN0ICgpIGluXG4gICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+IERpY3QgZFxuICAgICAgfCBLZXl3b3JkIGsgOjogdiA6OiByZXN0IC0+IGRpY3Rfc2V0IGQgayB2OyBnbyByZXN0XG4gICAgICB8IFN0cmluZyBrIDo6IHYgOjogcmVzdCAtPiBkaWN0X3NldCBkIGsgdjsgZ28gcmVzdFxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdDogcGFpcnMgb2Yga2V5IHZhbHVlXCIpXG4gICAgaW4gZ28gYXJncyk7XG4gIHJlZ2lzdGVyIFwiZ2V0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkOyBTdHJpbmcga10gLT4gZGljdF9nZXQgZCBrXG4gICAgfCBbRGljdCBkOyBLZXl3b3JkIGtdIC0+IGRpY3RfZ2V0IGQga1xuICAgIHwgW0xpc3QgbDsgbl0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9OyBuXVxuICAgICAgICB3aGVuIChtYXRjaCBuIHdpdGggTnVtYmVyIF8gfCBJbnRlZ2VyIF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpIC0+XG4gICAgICAodHJ5IExpc3QubnRoIGwgKGFzX2ludCBuKSB3aXRoIF8gLT4gTmlsKVxuICAgIHwgW05pbDsgX10gLT4gTmlsICAoKiBuaWwuYW55dGhpbmcg4oaSIG5pbCAqKVxuICAgIHwgW187IF9dIC0+IE5pbCAgICAoKiB0eXBlIG1pc21hdGNoIOKGkiBuaWwgKG1hdGNoZXMgSlMvUHl0aG9uIGJlaGF2aW9yKSAqKVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImhhcy1rZXk/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkOyBTdHJpbmcga10gLT4gQm9vbCAoZGljdF9oYXMgZCBrKVxuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrXSAtPiBCb29sIChkaWN0X2hhcyBkIGspXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzLWtleT86IGRpY3QgYW5kIGtleVwiKSk7XG4gIHJlZ2lzdGVyIFwiYXNzb2NcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IERpY3QgZCA6OiByZXN0IC0+XG4gICAgICBsZXQgZDIgPSBIYXNodGJsLmNvcHkgZCBpblxuICAgICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gRGljdCBkMlxuICAgICAgICB8IFN0cmluZyBrIDo6IHYgOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgZDIgayB2OyBnbyByZXN0XG4gICAgICAgIHwgS2V5d29yZCBrIDo6IHYgOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgZDIgayB2OyBnbyByZXN0XG4gICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFzc29jOiBwYWlyc1wiKVxuICAgICAgaW4gZ28gcmVzdFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFzc29jOiBkaWN0ICsgcGFpcnNcIikpO1xuICByZWdpc3RlciBcImRpc3NvY1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgRGljdCBkIDo6IGtleXMgLT5cbiAgICAgIGxldCBkMiA9IEhhc2h0YmwuY29weSBkIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biBrIC0+IEhhc2h0YmwucmVtb3ZlIGQyICh0b19zdHJpbmcgaykpIGtleXM7XG4gICAgICBEaWN0IGQyXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGlzc29jOiBkaWN0ICsga2V5c1wiKSk7XG4gIHJlZ2lzdGVyIFwibWVyZ2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICAgIExpc3QuaXRlciAoZnVuY3Rpb25cbiAgICAgIHwgRGljdCBzcmMgLT4gSGFzaHRibC5pdGVyIChmdW4gayB2IC0+IEhhc2h0YmwucmVwbGFjZSBkIGsgdikgc3JjXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtZXJnZTogYWxsIGFyZ3MgbXVzdCBiZSBkaWN0c1wiKVxuICAgICkgYXJncztcbiAgICBEaWN0IGQpO1xuICByZWdpc3RlciBcImtleXNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gTGlzdCAoZGljdF9rZXlzIGQpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImtleXM6IDEgZGljdFwiKSk7XG4gIHJlZ2lzdGVyIFwidmFsc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbRGljdCBkXSAtPiBMaXN0IChkaWN0X3ZhbHMgZCkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidmFsczogMSBkaWN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJtdXRhYmxlLWxpc3RcIiAoZnVuIF9hcmdzIC0+IExpc3RSZWYgKHJlZiBbXSkpO1xuICByZWdpc3RlciBcInNldC1udGghXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdFJlZiByOyBpZHg7IHZdIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBpZHggaW5cbiAgICAgIGxldCBsID0gIXIgaW5cbiAgICAgIHIgOj0gTGlzdC5tYXBpIChmdW4gaiB4IC0+IGlmIGogPSBpIHRoZW4gdiBlbHNlIHgpIGw7XG4gICAgICBOaWxcbiAgICB8IFtMaXN0IF87IF87IF9dIC0+XG4gICAgICByYWlzZSAoRXZhbF9lcnJvciBcInNldC1udGghOiBsaXN0IGlzIGltbXV0YWJsZSwgdXNlIExpc3RSZWZcIilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtbnRoITogZXhwZWN0ZWQgKGxpc3QgaWR4IHZhbClcIikpO1xuICByZWdpc3RlciBcImRpY3Qtc2V0IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGs7IHZdIC0+IGRpY3Rfc2V0IGQgayB2OyB2XG4gICAgfCBbRGljdCBkOyBLZXl3b3JkIGs7IHZdIC0+IGRpY3Rfc2V0IGQgayB2OyB2XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1zZXQhOiBkaWN0IGtleSB2YWxcIikpO1xuICByZWdpc3RlciBcImRpY3QtZ2V0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkOyBTdHJpbmcga10gLT4gZGljdF9nZXQgZCBrXG4gICAgfCBbRGljdCBkOyBLZXl3b3JkIGtdIC0+IGRpY3RfZ2V0IGQga1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3QtZ2V0OiBkaWN0IGFuZCBrZXlcIikpO1xuICByZWdpc3RlciBcImRpY3QtaGFzP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IEJvb2wgKGRpY3RfaGFzIGQgaylcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaWN0LWhhcz86IGRpY3QgYW5kIGtleVwiKSk7XG4gIHJlZ2lzdGVyIFwiZGljdC1kZWxldGUhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkOyBTdHJpbmcga10gLT4gZGljdF9kZWxldGUgZCBrOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaWN0LWRlbGV0ZSE6IGRpY3QgYW5kIGtleVwiKSk7XG5cbiAgKCogPT09IE1pc2MgPT09ICopXG4gIHJlZ2lzdGVyIFwidHlwZS1vZlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nICh0eXBlX29mIGEpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInR5cGUtb2Y6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbnNwZWN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKGluc3BlY3QgYSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW5zcGVjdDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInNlcmlhbGl6ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4RXhwciBzXSAtPiBTdHJpbmcgc1xuICAgIHwgW1Jhd0hUTUwgc10gLT4gU3RyaW5nIHNcbiAgICB8IFtTcHJlYWQgcGFpcnNdIC0+XG4gICAgICAoKiBTZXJpYWxpemUgc3ByZWFkIHZhbHVlcyBhcyAobWFrZS1zcHJlYWQgezprZXkgXCJ2YWxcIiAuLi59KSAqKVxuICAgICAgbGV0IGRpY3RfcGFydHMgPSBMaXN0Lm1hcCAoZnVuIChrLCB2KSAtPlxuICAgICAgICBQcmludGYuc3ByaW50ZiBcIjolcyAlc1wiIGsgKGluc3BlY3QgdikpIHBhaXJzIGluXG4gICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwiKG1ha2Utc3ByZWFkIHslc30pXCIgKFN0cmluZy5jb25jYXQgXCIgXCIgZGljdF9wYXJ0cykpXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+XG4gICAgICAoKiBTZXJpYWxpemUgY29tcG9uZW50IHZhbHVlcyBhcyB0aGVpciB+bmFtZSByZWZlcmVuY2UgKilcbiAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCJ+JXNcIiBjLmNfbmFtZSlcbiAgICB8IFtJc2xhbmQgaV0gLT5cbiAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCJ+JXNcIiBpLmlfbmFtZSlcbiAgICB8IFtMYW1iZGEgX10gLT4gU3RyaW5nIFwiPGxhbWJkYT5cIlxuICAgIHwgW1JlY29yZCByXSAtPiBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwiIzwlcz5cIiByLnJfdHlwZS5ydF9uYW1lKVxuICAgIHwgW1BhcmFtZXRlciBwXSAtPiBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwiIzxwYXJhbWV0ZXIgJXM+XCIgcC5wbV91aWQpXG4gICAgfCBbVmVjdG9yIGFycl0gLT5cbiAgICAgIGxldCBlbHRzID0gQXJyYXkudG9fbGlzdCAoQXJyYXkubWFwIChmdW4gdiAtPiBpbnNwZWN0IHYpIGFycikgaW5cbiAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIjKCVzKVwiIChTdHJpbmcuY29uY2F0IFwiIFwiIGVsdHMpKVxuICAgIHwgW2FdIC0+IFN0cmluZyAoaW5zcGVjdCBhKSAgKCogdXNlZCBmb3IgZGVkdXAga2V5cyBpbiBjb21waWxlciAqKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNlcmlhbGl6ZTogMSBhcmdcIikpO1xuICByZWdpc3RlciBcIm1ha2Utc3ltYm9sXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IFN5bWJvbCBzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1zeW1ib2w6IGV4cGVjdGVkIHN0cmluZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXJyb3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBtc2ddIC0+IHJhaXNlIChFdmFsX2Vycm9yIG1zZylcbiAgICB8IFthXSAtPiByYWlzZSAoRXZhbF9lcnJvciAodG9fc3RyaW5nIGEpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVycm9yOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiaG9zdC1lcnJvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIG1zZ10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgbXNnKVxuICAgIHwgW2FdIC0+IHJhaXNlIChFdmFsX2Vycm9yICh0b19zdHJpbmcgYSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaG9zdC1lcnJvcjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInRyeS1jYXRjaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3RyeV9mbjsgY2F0Y2hfZm5dIC0+XG4gICAgICAodHJ5ICFfc3hfdHJhbXBvbGluZV9mbiAoIV9zeF9jYWxsX2ZuIHRyeV9mbiBbXSlcbiAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgICAhX3N4X3RyYW1wb2xpbmVfZm4gKCFfc3hfY2FsbF9mbiBjYXRjaF9mbiBbU3RyaW5nIG1zZ10pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRyeS1jYXRjaDogZXhwZWN0ZWQgKHRyeS1mbiBjYXRjaC1mbilcIikpO1xuICAoKiBjbGllbnQ/IOKAlCBmYWxzZSBieSBkZWZhdWx0IChzZXJ2ZXIpOyBzeF9icm93c2VyLm1sIHNldHMgX2lzX2NsaWVudCA6PSB0cnVlICopXG4gIHJlZ2lzdGVyIFwiY2xpZW50P1wiIChmdW4gX2FyZ3MgLT4gQm9vbCAhX2lzX2NsaWVudCk7XG4gICgqIE5hbWVkIHN0b3JlcyDigJQgZ2xvYmFsIG11dGFibGUgcmVnaXN0cnksIGJ5cGFzc2VzIGVudiBzY29waW5nIGlzc3VlcyAqKVxuICBsZXQgc3RvcmVfcmVnaXN0cnkgOiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgMTYgaW5cbiAgcmVnaXN0ZXIgXCJkZWYtc3RvcmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgaW5pdF9mbl0gLT5cbiAgICAgIGlmIG5vdCAoSGFzaHRibC5tZW0gc3RvcmVfcmVnaXN0cnkgbmFtZSkgdGhlbiBiZWdpblxuICAgICAgICBsZXQgc3RvcmUgPSAhX3N4X3RyYW1wb2xpbmVfZm4gKCFfc3hfY2FsbF9mbiBpbml0X2ZuIFtdKSBpblxuICAgICAgICBIYXNodGJsLnJlcGxhY2Ugc3RvcmVfcmVnaXN0cnkgbmFtZSBzdG9yZVxuICAgICAgZW5kO1xuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgc3RvcmVfcmVnaXN0cnkgbmFtZSB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBOaWwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGVmLXN0b3JlOiBleHBlY3RlZCAobmFtZSBpbml0LWZuKVwiKSk7XG4gIHJlZ2lzdGVyIFwidXNlLXN0b3JlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBzdG9yZV9yZWdpc3RyeSBuYW1lIHdpdGhcbiAgICAgICB8IFNvbWUgdiAtPiB2XG4gICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlN0b3JlIG5vdCBmb3VuZDogXCIgXiBuYW1lKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidXNlLXN0b3JlOiBleHBlY3RlZCAobmFtZSlcIikpO1xuICByZWdpc3RlciBcImNsZWFyLXN0b3Jlc1wiIChmdW4gX2FyZ3MgLT4gSGFzaHRibC5jbGVhciBzdG9yZV9yZWdpc3RyeTsgTmlsKTtcbiAgKCogU1NSIHN0dWJzIOKAlCByZXNvdXJjZSByZXR1cm5zIGxvYWRpbmcgc3RhdGUgb24gc2VydmVyLlxuICAgICBOT1RFOiBlZmZlY3QgYW5kIHJlZ2lzdGVyLWluLXNjb3BlIG11c3QgTk9UIGJlIHJlZ2lzdGVyZWQgYXMgcHJpbWl0aXZlc1xuICAgICBoZXJlIOKAlCB0aGUgYnl0ZWNvZGUgY29tcGlsZXIgdXNlcyBwcmltaXRpdmU/IHRvIGRlY2lkZSBDQUxMX1BSSU0gdnNcbiAgICAgR0xPQkFMX0dFVCtDQUxMLiBJZiBlZmZlY3QgaXMgYSBwcmltaXRpdmUsIGJ5dGVjb2RlZCBtb2R1bGVzIGVtaXRcbiAgICAgQ0FMTF9QUklNIHdoaWNoIHJldHVybnMgTmlsIGluc3RlYWQgb2YgY2FsbGluZyB0aGUgcmVhbCBlZmZlY3QgZnVuY3Rpb25cbiAgICAgZnJvbSBjb3JlLXNpZ25hbHMuc3guIFRoZSBzZXJ2ZXIgb3ZlcnJpZGVzIGVmZmVjdCBpbiBzeF9zZXJ2ZXIubWwgdmlhXG4gICAgIGVudl9iaW5kIEFGVEVSIGNvbXBpbGF0aW9uLiAqKVxuICAoKiByZWdpc3RlciBcImVmZmVjdFwiIOKAlCBSRU1PVkVEOiBzZWUgbm90ZSBhYm92ZSAqKVxuICAoKiByZWdpc3RlciBcInJlZ2lzdGVyLWluLXNjb3BlXCIg4oCUIFJFTU9WRUQ6IHNlZSBub3RlIGFib3ZlICopXG4gICgqIHJlc291cmNlIOKAlCBTU1Igc3R1YjogcmV0dXJuIHNpZ25hbCB3aXRoIHtsb2FkaW5nOiB0cnVlfSwgY2xpZW50IGh5ZHJhdGVzIHJlYWwgZmV0Y2ggKilcbiAgcmVnaXN0ZXIgXCJyZXNvdXJjZVwiIChmdW4gX2FyZ3MgLT5cbiAgICBsZXQgc3RhdGUgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgSGFzaHRibC5yZXBsYWNlIHN0YXRlIFwibG9hZGluZ1wiIChCb29sIHRydWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzdGF0ZSBcImRhdGFcIiBOaWw7XG4gICAgSGFzaHRibC5yZXBsYWNlIHN0YXRlIFwiZXJyb3JcIiBOaWw7XG4gICAgbGV0IHNpZ19kID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBzaWdfZCBcIl9fc2lnbmFsXCIgKEJvb2wgdHJ1ZSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIHNpZ19kIFwidmFsdWVcIiAoRGljdCBzdGF0ZSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIHNpZ19kIFwic3Vic2NyaWJlcnNcIiAoTGlzdCBbXSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIHNpZ19kIFwiZGVwc1wiIChMaXN0IFtdKTtcbiAgICBEaWN0IHNpZ19kKTtcbiAgcmVnaXN0ZXIgXCJhcHBseVwiIChmdW4gYXJncyAtPlxuICAgIGxldCBjYWxsIGYgYSA9XG4gICAgICBtYXRjaCBmIHdpdGhcbiAgICAgIHwgTmF0aXZlRm4gKF8sIGZuKSAtPiBmbiBhXG4gICAgICB8IF8gLT4gIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gZiBhKVxuICAgIGluXG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGEgfSldIC0+IGNhbGwgZiBhXG4gICAgfCBbZjsgTmlsXSAtPiBjYWxsIGYgW11cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhcHBseTogZnVuY3Rpb24gYW5kIGxpc3RcIikpO1xuICByZWdpc3RlciBcImlkZW50aWNhbD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPlxuICAgICAgbGV0IGlkZW50aWNhbCA9IG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICB8IEludGVnZXIgeCwgSW50ZWdlciB5IC0+IHggPSB5XG4gICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IHggPSB5XG4gICAgICAgIHwgSW50ZWdlciB4LCBOdW1iZXIgeSAtPiBmbG9hdF9vZl9pbnQgeCA9IHlcbiAgICAgICAgfCBOdW1iZXIgeCwgSW50ZWdlciB5IC0+IHggPSBmbG9hdF9vZl9pbnQgeVxuICAgICAgICB8IFN0cmluZyB4LCBTdHJpbmcgeSAtPiB4ID0geVxuICAgICAgICB8IEJvb2wgeCwgQm9vbCB5IC0+IHggPSB5XG4gICAgICAgIHwgTmlsLCBOaWwgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gYSA9PSBiXG4gICAgICBpbiBCb29sIGlkZW50aWNhbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImlkZW50aWNhbD86IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1zcHJlYWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtEaWN0IGRdIC0+XG4gICAgICBsZXQgcGFpcnMgPSBIYXNodGJsLmZvbGQgKGZ1biBrIHYgYWNjIC0+IChrLCB2KSA6OiBhY2MpIGQgW10gaW5cbiAgICAgIFNwcmVhZCBwYWlyc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc3ByZWFkOiAxIGRpY3RcIikpO1xuICByZWdpc3RlciBcInNwcmVhZD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1NwcmVhZCBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNwcmVhZD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzcHJlYWQtYXR0cnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTcHJlYWQgcGFpcnNdIC0+XG4gICAgICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IGRpY3Rfc2V0IGQgayB2KSBwYWlycztcbiAgICAgIERpY3QgZFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNwcmVhZC1hdHRyczogMSBzcHJlYWRcIikpO1xuXG4gICgqIEhpZ2hlci1vcmRlciBmb3JtcyBhcyBjYWxsYWJsZSBwcmltaXRpdmVzIOKAlCB1c2VkIGJ5IHRoZSBWTS5cbiAgICAgVGhlIENFSyBtYWNoaW5lIGhhbmRsZXMgdGhlc2UgYXMgc3BlY2lhbCBmb3JtcyB3aXRoIGRlZGljYXRlZCBmcmFtZXM7XG4gICAgIHRoZSBWTSBuZWVkcyB0aGVtIGFzIHBsYWluIGNhbGxhYmxlIHZhbHVlcy4gKilcbiAgKCogQ2FsbCBhbnkgU1ggY2FsbGFibGUg4oCUIGhhbmRsZXMgTmF0aXZlRm4sIExhbWJkYSAodmlhIHRyYW1wb2xpbmUpLCBWTSBjbG9zdXJlcyAqKVxuICBsZXQgY2FsbF9hbnkgZiBhcmdzID1cbiAgICBtYXRjaCBmIHdpdGhcbiAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYXJnc1xuICAgIHwgXyAtPiAhX3N4X3RyYW1wb2xpbmVfZm4gKCFfc3hfY2FsbF9mbiBmIGFyZ3MpXG4gIGluXG4gIHJlZ2lzdGVyIFwibWFwXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIExpc3QgKExpc3QubWFwIChmdW4geCAtPiBjYWxsX2FueSBmIFt4XSkgaXRlbXMpXG4gICAgfCBbXzsgTmlsXSAtPiBMaXN0IFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFwOiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuICByZWdpc3RlciBcIm1hcC1pbmRleGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIExpc3QgKExpc3QubWFwaSAoZnVuIGkgeCAtPiBjYWxsX2FueSBmIFtJbnRlZ2VyIGk7IHhdKSBpdGVtcylcbiAgICB8IFtfOyBOaWxdIC0+IExpc3QgW11cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYXAtaW5kZXhlZDogZXhwZWN0ZWQgKGZuIGxpc3QpXCIpKTtcbiAgcmVnaXN0ZXIgXCJmaWx0ZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgTGlzdCAoTGlzdC5maWx0ZXIgKGZ1biB4IC0+IHN4X3RydXRoeSAoY2FsbF9hbnkgZiBbeF0pKSBpdGVtcylcbiAgICB8IFtfOyBOaWxdIC0+IExpc3QgW11cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWx0ZXI6IGV4cGVjdGVkIChmbiBsaXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiZm9yLWVhY2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgTGlzdC5pdGVyIChmdW4geCAtPiBpZ25vcmUgKGNhbGxfYW55IGYgW3hdKSkgaXRlbXM7IE5pbFxuICAgIHwgW187IE5pbF0gLT4gTmlsICAoKiBuaWwgY29sbGVjdGlvbiA9IG5vLW9wICopXG4gICAgfCBfIC0+XG4gICAgICBsZXQgdHlwZXMgPSBTdHJpbmcuY29uY2F0IFwiLCBcIiAoTGlzdC5tYXAgKGZ1biB2IC0+IHR5cGVfb2YgdikgYXJncykgaW5cbiAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcImZvci1lYWNoOiBleHBlY3RlZCAoZm4gbGlzdCksIGdvdCAoJXMpICVkIGFyZ3NcIiB0eXBlcyAoTGlzdC5sZW5ndGggYXJncykpKSk7XG4gIHJlZ2lzdGVyIFwicmVkdWNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgaW5pdDsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4gY2FsbF9hbnkgZiBbYWNjOyB4XSkgaW5pdCBpdGVtc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZHVjZTogZXhwZWN0ZWQgKGZuIGluaXQgbGlzdClcIikpO1xuICByZWdpc3RlciBcInNvbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBCb29sIGZhbHNlXG4gICAgICAgIHwgeCA6OiByZXN0IC0+XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IGNhbGxfYW55IGYgW3hdIGluXG4gICAgICAgICAgaWYgc3hfdHJ1dGh5IHJlc3VsdCB0aGVuIHJlc3VsdCBlbHNlIGZpbmQgcmVzdFxuICAgICAgaW4gZmluZCBpdGVtc1xuICAgIHwgW187IE5pbF0gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNvbWU6IGV4cGVjdGVkIChmbiBsaXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiZXZlcnk/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIHggLT4gc3hfdHJ1dGh5IChjYWxsX2FueSBmIFt4XSkpIGl0ZW1zKVxuICAgIHwgW187IE5pbF0gLT4gQm9vbCB0cnVlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXZlcnk/OiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuXG4gICgqIC0tLS0gVk0gc3RhY2sgcHJpbWl0aXZlcyAodm0uc3ggcGxhdGZvcm0gaW50ZXJmYWNlKSAtLS0tICopXG4gIHJlZ2lzdGVyIFwibWFrZS12bS1zdGFja1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW25dIC0+IExpc3RSZWYgKHJlZiAoTGlzdC5pbml0IChhc19pbnQgbikgKGZ1biBfIC0+IE5pbCkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utdm0tc3RhY2s6IGV4cGVjdGVkIChzaXplKVwiKSk7XG4gIHJlZ2lzdGVyIFwidm0tc3RhY2stZ2V0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdFJlZiByOyBuXSAtPiBMaXN0Lm50aCAhciAoYXNfaW50IG4pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidm0tc3RhY2stZ2V0OiBleHBlY3RlZCAoc3RhY2sgaWR4KVwiKSk7XG4gIHJlZ2lzdGVyIFwidm0tc3RhY2stc2V0IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgbjsgdl0gLT5cbiAgICAgIGxldCBpID0gYXNfaW50IG4gaW5cbiAgICAgIHIgOj0gTGlzdC5tYXBpIChmdW4gaiB4IC0+IGlmIGogPSBpIHRoZW4gdiBlbHNlIHgpICFyOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2bS1zdGFjay1zZXQhOiBleHBlY3RlZCAoc3RhY2sgaWR4IHZhbClcIikpO1xuICByZWdpc3RlciBcInZtLXN0YWNrLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcl0gLT4gSW50ZWdlciAoTGlzdC5sZW5ndGggIXIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidm0tc3RhY2stbGVuZ3RoOiBleHBlY3RlZCAoc3RhY2spXCIpKTtcbiAgcmVnaXN0ZXIgXCJ2bS1zdGFjay1jb3B5IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgc3JjOyBMaXN0UmVmIGRzdDsgbl0gLT5cbiAgICAgIGxldCBjb3VudCA9IGFzX2ludCBuIGluXG4gICAgICBsZXQgc3JjX2l0ZW1zID0gIXNyYyBpblxuICAgICAgZHN0IDo9IExpc3QubWFwaSAoZnVuIGkgeCAtPiBpZiBpIDwgY291bnQgdGhlbiBMaXN0Lm50aCBzcmNfaXRlbXMgaSBlbHNlIHgpICFkc3Q7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtLXN0YWNrLWNvcHkhOiBleHBlY3RlZCAoc3JjIGRzdCBjb3VudClcIikpO1xuICByZWdpc3RlciBcInByaW1pdGl2ZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT4gQm9vbCAoSGFzaHRibC5tZW0gcHJpbWl0aXZlcyBuYW1lKVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcblxuICAoKiBTY29wZSBzdGFjayBwcmltaXRpdmVzIGFyZSByZWdpc3RlcmVkIGJ5IHN4X3NlcnZlci5tbCAvIHJ1bl90ZXN0cy5tbFxuICAgICBiZWNhdXNlIHRoZXkgdXNlIGEgc2hhcmVkIHNjb3BlIHN0YWNrcyB0YWJsZSB3aXRoIGNvbGxlY3QhL2NvbGxlY3RlZC4gKilcblxuICAoKiAtLS0tIFByZWRpY2F0ZXMgbmVlZGVkIGJ5IGFkYXB0ZXItaHRtbC5zeCAtLS0tICopXG4gIHJlZ2lzdGVyIFwibGFtYmRhP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiaXNsYW5kP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbSXNsYW5kIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG5cbiAgKCogUjdSUyByZWNvcmRzICopXG4gIHJlZ2lzdGVyIFwicmVjb3JkP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gcmVjb3JkX3AgdiB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1ydGRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW25hbWU7IGZpZWxkczsgY3Rvcl9wYXJhbXNdIC0+IG1ha2VfcnRkIG5hbWUgZmllbGRzIGN0b3JfcGFyYW1zXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1ydGQ6IGV4cGVjdGVkIChuYW1lIGZpZWxkcyBjdG9yLXBhcmFtcylcIikpO1xuICByZWdpc3RlciBcIm1ha2UtcmVjb3JkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFt1aWQ7IGFyZ19saXN0XSAtPiBtYWtlX3JlY29yZCB1aWQgYXJnX2xpc3RcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXJlY29yZDogZXhwZWN0ZWQgKHVpZCBhcmdzLWxpc3QpXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWNvcmQtcmVmXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFt2OyBpZHhdIC0+IHJlY29yZF9yZWYgdiBpZHhcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWNvcmQtcmVmOiBleHBlY3RlZCAocmVjb3JkIGluZGV4KVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVjb3JkLXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW3Y7IGlkeDsgbnZdIC0+IHJlY29yZF9zZXRfYiB2IGlkeCBudlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlY29yZC1zZXQhOiBleHBlY3RlZCAocmVjb3JkIGluZGV4IHZhbHVlKVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVjb3JkLXR5cGU/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFt2OyB1aWRdIC0+IHJlY29yZF90eXBlX3AgdiB1aWQgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcIm1ha2UtcmVjb3JkLWNvbnN0cnVjdG9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFt1aWRdIC0+IG1ha2VfcmVjb3JkX2NvbnN0cnVjdG9yIHVpZFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtcmVjb3JkLWNvbnN0cnVjdG9yOiBleHBlY3RlZCAodWlkKVwiKSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1yZWNvcmQtcHJlZGljYXRlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFt1aWRdIC0+IG1ha2VfcmVjb3JkX3ByZWRpY2F0ZSB1aWRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXJlY29yZC1wcmVkaWNhdGU6IGV4cGVjdGVkICh1aWQpXCIpKTtcbiAgcmVnaXN0ZXIgXCJtYWtlLXJlY29yZC1hY2Nlc3NvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbaWR4XSAtPiBtYWtlX3JlY29yZF9hY2Nlc3NvciBpZHhcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXJlY29yZC1hY2Nlc3NvcjogZXhwZWN0ZWQgKGluZGV4KVwiKSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1yZWNvcmQtbXV0YXRvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbaWR4XSAtPiBtYWtlX3JlY29yZF9tdXRhdG9yIGlkeFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtcmVjb3JkLW11dGF0b3I6IGV4cGVjdGVkIChpbmRleClcIikpO1xuICAoKiBSN1JTIHBhcmFtZXRlcnMg4oCUIGNvbnZlcnRlciBzdG9yZWQsIGFwcGxpZWQgYnkgcGFyYW1ldGVyaXplIGZyYW1lICopXG4gIHJlZ2lzdGVyIFwibWFrZS1wYXJhbWV0ZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtpbml0XSAtPlxuICAgICAgbGV0IHVpZCA9ICFwYXJhbV9jb3VudGVyIGluXG4gICAgICBpbmNyIHBhcmFtX2NvdW50ZXI7XG4gICAgICBQYXJhbWV0ZXIgeyBwbV91aWQgPSBcIl9fcGFyYW1fXCIgXiBzdHJpbmdfb2ZfaW50IHVpZDtcbiAgICAgICAgICAgICAgICAgIHBtX2RlZmF1bHQgPSBpbml0OyBwbV9jb252ZXJ0ZXIgPSBOb25lIH1cbiAgICB8IFtpbml0OyBjb252ZXJ0ZXJdIC0+XG4gICAgICBsZXQgdWlkID0gIXBhcmFtX2NvdW50ZXIgaW5cbiAgICAgIGluY3IgcGFyYW1fY291bnRlcjtcbiAgICAgICgqIEFwcGx5IGNvbnZlcnRlciB0byBpbml0IGZvciBOYXRpdmVGbiwgc3RvcmUgcmF3IGZvciBMYW1iZGEgKilcbiAgICAgIGxldCBjb252ZXJ0ZWQgPSBtYXRjaCBjb252ZXJ0ZXIgd2l0aFxuICAgICAgICB8IE5hdGl2ZUZuIChfLCBmKSAtPiBmIFtpbml0XVxuICAgICAgICB8IF8gLT4gaW5pdCAgKCogTGFtYmRhIGNvbnZlcnRlcnMgYXBwbGllZCB2aWEgQ0VLIGF0IHBhcmFtZXRlcml6ZSB0aW1lICopXG4gICAgICBpblxuICAgICAgUGFyYW1ldGVyIHsgcG1fdWlkID0gXCJfX3BhcmFtX1wiIF4gc3RyaW5nX29mX2ludCB1aWQ7XG4gICAgICAgICAgICAgICAgICBwbV9kZWZhdWx0ID0gY29udmVydGVkOyBwbV9jb252ZXJ0ZXIgPSBTb21lIGNvbnZlcnRlciB9XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1wYXJhbWV0ZXI6IGV4cGVjdGVkIDEtMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJwYXJhbWV0ZXI/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtQYXJhbWV0ZXIgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwicGFyYW1ldGVyLXVpZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbUGFyYW1ldGVyIHBdIC0+IFN0cmluZyBwLnBtX3VpZFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBhcmFtZXRlci11aWQ6IGV4cGVjdGVkIHBhcmFtZXRlclwiKSk7XG4gIHJlZ2lzdGVyIFwicGFyYW1ldGVyLWRlZmF1bHRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1BhcmFtZXRlciBwXSAtPiBwLnBtX2RlZmF1bHRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJhbWV0ZXItZGVmYXVsdDogZXhwZWN0ZWQgcGFyYW1ldGVyXCIpKTtcbiAgcmVnaXN0ZXIgXCJwYXJhbWV0ZXItY29udmVydGVyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUGFyYW1ldGVyIHBdIC0+IChtYXRjaCBwLnBtX2NvbnZlcnRlciB3aXRoIFNvbWUgYyAtPiBjIHwgTm9uZSAtPiBOaWwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGFyYW1ldGVyLWNvbnZlcnRlcjogZXhwZWN0ZWQgcGFyYW1ldGVyXCIpKTtcbiAgKCogUjdSUyB2ZWN0b3JzIOKAlCBtdXRhYmxlIGZpeGVkLXNpemUgYXJyYXlzICopXG4gIHJlZ2lzdGVyIFwibWFrZS12ZWN0b3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtuXSAtPiBWZWN0b3IgKEFycmF5Lm1ha2UgKGFzX2ludCBuKSBOaWwpXG4gICAgfCBbbjsgZmlsbF0gLT4gVmVjdG9yIChBcnJheS5tYWtlIChhc19pbnQgbikgZmlsbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXZlY3RvcjogZXhwZWN0ZWQgKGxlbmd0aCkgb3IgKGxlbmd0aCBmaWxsKVwiKSk7XG4gIHJlZ2lzdGVyIFwidmVjdG9yXCIgKGZ1biBhcmdzIC0+IFZlY3RvciAoQXJyYXkub2ZfbGlzdCBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwidmVjdG9yP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbVmVjdG9yIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidmVjdG9yPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInZlY3Rvci1sZW5ndGhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1ZlY3RvciBhcnJdIC0+IEludGVnZXIgKEFycmF5Lmxlbmd0aCBhcnIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidmVjdG9yLWxlbmd0aDogZXhwZWN0ZWQgdmVjdG9yXCIpKTtcbiAgcmVnaXN0ZXIgXCJ2ZWN0b3ItcmVmXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbVmVjdG9yIGFycjsgbl0gLT5cbiAgICAgIGxldCBpID0gYXNfaW50IG4gaW5cbiAgICAgIGlmIGkgPCAwIHx8IGkgPj0gQXJyYXkubGVuZ3RoIGFyciB0aGVuXG4gICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcInZlY3Rvci1yZWY6IGluZGV4ICVkIG91dCBvZiBib3VuZHMgKGxlbmd0aCAlZClcIiBpIChBcnJheS5sZW5ndGggYXJyKSkpO1xuICAgICAgYXJyLihpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZlY3Rvci1yZWY6IGV4cGVjdGVkICh2ZWN0b3IgaW5kZXgpXCIpKTtcbiAgcmVnaXN0ZXIgXCJ2ZWN0b3Itc2V0IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1ZlY3RvciBhcnI7IG47IHZdIC0+XG4gICAgICBsZXQgaSA9IGFzX2ludCBuIGluXG4gICAgICBpZiBpIDwgMCB8fCBpID49IEFycmF5Lmxlbmd0aCBhcnIgdGhlblxuICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJ2ZWN0b3Itc2V0ITogaW5kZXggJWQgb3V0IG9mIGJvdW5kcyAobGVuZ3RoICVkKVwiIGkgKEFycmF5Lmxlbmd0aCBhcnIpKSk7XG4gICAgICBhcnIuKGkpIDwtIHY7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZlY3Rvci1zZXQhOiBleHBlY3RlZCAodmVjdG9yIGluZGV4IHZhbHVlKVwiKSk7XG4gIHJlZ2lzdGVyIFwidmVjdG9yLT5saXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtWZWN0b3IgYXJyXSAtPiBMaXN0IChBcnJheS50b19saXN0IGFycilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2ZWN0b3ItPmxpc3Q6IGV4cGVjdGVkIHZlY3RvclwiKSk7XG4gIHJlZ2lzdGVyIFwibGlzdC0+dmVjdG9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSAtPiBWZWN0b3IgKEFycmF5Lm9mX2xpc3QgbClcbiAgICB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+IFZlY3RvciAoQXJyYXkub2ZfbGlzdCBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxpc3QtPnZlY3RvcjogZXhwZWN0ZWQgbGlzdFwiKSk7XG4gIHJlZ2lzdGVyIFwidmVjdG9yLWZpbGwhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbVmVjdG9yIGFycjsgdl0gLT4gQXJyYXkuZmlsbCBhcnIgMCAoQXJyYXkubGVuZ3RoIGFycikgdjsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidmVjdG9yLWZpbGwhOiBleHBlY3RlZCAodmVjdG9yIHZhbHVlKVwiKSk7XG4gIHJlZ2lzdGVyIFwidmVjdG9yLWNvcHlcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtWZWN0b3IgYXJyXSAtPiBWZWN0b3IgKEFycmF5LmNvcHkgYXJyKVxuICAgIHwgW1ZlY3RvciBhcnI7IHNdIC0+XG4gICAgICBsZXQgc3RhcnQgPSBhc19pbnQgcyBpblxuICAgICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBhcnIgLSBzdGFydCBpblxuICAgICAgaWYgbGVuIDw9IDAgdGhlbiBWZWN0b3IgW3x8XSBlbHNlIFZlY3RvciAoQXJyYXkuc3ViIGFyciBzdGFydCBsZW4pXG4gICAgfCBbVmVjdG9yIGFycjsgczsgZV0gLT5cbiAgICAgIGxldCBzdGFydCA9IGFzX2ludCBzIGluXG4gICAgICBsZXQgc3RvcCA9IG1pbiAoYXNfaW50IGUpIChBcnJheS5sZW5ndGggYXJyKSBpblxuICAgICAgbGV0IGxlbiA9IHN0b3AgLSBzdGFydCBpblxuICAgICAgaWYgbGVuIDw9IDAgdGhlbiBWZWN0b3IgW3x8XSBlbHNlIFZlY3RvciAoQXJyYXkuc3ViIGFyciBzdGFydCBsZW4pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidmVjdG9yLWNvcHk6IGV4cGVjdGVkICh2ZWN0b3IpIG9yICh2ZWN0b3Igc3RhcnQpIG9yICh2ZWN0b3Igc3RhcnQgZW5kKVwiKSk7XG5cbiAgKCogU3RyaW5nIGJ1ZmZlcnMg4oCUIE8oMSkgYW1vcnRpc2VkIGFwcGVuZCBmb3Igc3RyaW5nIGJ1aWxkaW5nIGluIGxvb3BzICopXG4gIHJlZ2lzdGVyIFwibWFrZS1zdHJpbmctYnVmZmVyXCIgKGZ1biBfIC0+IFN0cmluZ0J1ZmZlciAoQnVmZmVyLmNyZWF0ZSA2NCkpO1xuICByZWdpc3RlciBcInN0cmluZy1idWZmZXI/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmdCdWZmZXIgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctYnVmZmVyPzogZXhwZWN0ZWQgMSBhcmdcIikpO1xuICByZWdpc3RlciBcInN0cmluZy1idWZmZXItYXBwZW5kIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZ0J1ZmZlciBidWY7IFN0cmluZyBzXSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgczsgTmlsXG4gICAgfCBbU3RyaW5nQnVmZmVyIF87IHZdIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcInN0cmluZy1idWZmZXItYXBwZW5kITogZXhwZWN0ZWQgc3RyaW5nLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy1idWZmZXItYXBwZW5kITogZXhwZWN0ZWQgKGJ1ZmZlciBzdHJpbmcpXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctYnVmZmVyLT5zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZ0J1ZmZlciBidWZdIC0+IFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdHJpbmctYnVmZmVyLT5zdHJpbmc6IGV4cGVjdGVkIChidWZmZXIpXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctYnVmZmVyLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nQnVmZmVyIGJ1Zl0gLT4gSW50ZWdlciAoQnVmZmVyLmxlbmd0aCBidWYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nLWJ1ZmZlci1sZW5ndGg6IGV4cGVjdGVkIChidWZmZXIpXCIpKTtcblxuICAoKiBDYXBhYmlsaXR5LWJhc2VkIHNhbmRib3hpbmcg4oCUIGdhdGUgSU8gb3BlcmF0aW9ucyAqKVxuICBsZXQgY2FwX3N0YWNrIDogc3RyaW5nIGxpc3QgcmVmID0gcmVmIFtdIGluXG4gIHJlZ2lzdGVyIFwid2l0aC1jYXBhYmlsaXRpZXNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGNhcHM7IGJvZHldIC0+XG4gICAgICBsZXQgY2FwX3NldCA9IExpc3QuZmlsdGVyX21hcCAoZnVuIHYgLT4gbWF0Y2ggdiB3aXRoXG4gICAgICAgIHwgU3ltYm9sIHMgfCBTdHJpbmcgcyB8IEtleXdvcmQgcyAtPiBTb21lIHMgfCBfIC0+IE5vbmUpIGNhcHMgaW5cbiAgICAgIGxldCBwcmV2ID0gIWNhcF9zdGFjayBpblxuICAgICAgY2FwX3N0YWNrIDo9IGNhcF9zZXQ7XG4gICAgICAobWF0Y2ggYm9keSB3aXRoXG4gICAgICAgfCBMYW1iZGEgXyB8IE5hdGl2ZUZuIF8gfCBWbUNsb3N1cmUgXyAtPlxuICAgICAgICAgbGV0IHJlc3VsdCA9ICh0cnkgIVN4X3R5cGVzLl9jZWtfY2FsbF9yZWYgYm9keSBOaWxcbiAgICAgICAgICAgd2l0aCBleG4gLT4gY2FwX3N0YWNrIDo9IHByZXY7IHJhaXNlIGV4bikgaW5cbiAgICAgICAgIGNhcF9zdGFjayA6PSBwcmV2OyByZXN1bHRcbiAgICAgICB8IF8gLT4gY2FwX3N0YWNrIDo9IHByZXY7IGJvZHkpXG4gICAgfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gY2FwcyB9OyBib2R5XSAtPlxuICAgICAgKCogSGFuZGxlIG11dGFibGUgbGlzdHMgdG9vICopXG4gICAgICBsZXQgY2FwX3NldCA9IExpc3QuZmlsdGVyX21hcCAoZnVuIHYgLT4gbWF0Y2ggdiB3aXRoXG4gICAgICAgIHwgU3ltYm9sIHMgfCBTdHJpbmcgcyB8IEtleXdvcmQgcyAtPiBTb21lIHMgfCBfIC0+IE5vbmUpIGNhcHMgaW5cbiAgICAgIGxldCBwcmV2ID0gIWNhcF9zdGFjayBpblxuICAgICAgY2FwX3N0YWNrIDo9IGNhcF9zZXQ7XG4gICAgICAobWF0Y2ggYm9keSB3aXRoXG4gICAgICAgfCBMYW1iZGEgXyB8IE5hdGl2ZUZuIF8gfCBWbUNsb3N1cmUgXyAtPlxuICAgICAgICAgbGV0IHJlc3VsdCA9ICh0cnkgIVN4X3R5cGVzLl9jZWtfY2FsbF9yZWYgYm9keSBOaWxcbiAgICAgICAgICAgd2l0aCBleG4gLT4gY2FwX3N0YWNrIDo9IHByZXY7IHJhaXNlIGV4bikgaW5cbiAgICAgICAgIGNhcF9zdGFjayA6PSBwcmV2OyByZXN1bHRcbiAgICAgICB8IF8gLT4gY2FwX3N0YWNrIDo9IHByZXY7IGJvZHkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwid2l0aC1jYXBhYmlsaXRpZXM6IGV4cGVjdGVkIChjYXAtbGlzdCBib2R5LWZuKVwiKSk7XG4gIHJlZ2lzdGVyIFwiY3VycmVudC1jYXBhYmlsaXRpZXNcIiAoZnVuIF9hcmdzIC0+XG4gICAgaWYgIWNhcF9zdGFjayA9IFtdIHRoZW4gTmlsXG4gICAgZWxzZSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpICFjYXBfc3RhY2spKTtcbiAgcmVnaXN0ZXIgXCJoYXMtY2FwYWJpbGl0eT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgY2FwXSB8IFtLZXl3b3JkIGNhcF0gfCBbU3ltYm9sIGNhcF0gLT5cbiAgICAgIGlmICFjYXBfc3RhY2sgPSBbXSB0aGVuIEJvb2wgdHJ1ZSAgKCogdW5yZXN0cmljdGVkICopXG4gICAgICBlbHNlIEJvb2wgKExpc3QubWVtIGNhcCAhY2FwX3N0YWNrKVxuICAgIHwgXyAtPiBCb29sIHRydWUpO1xuICByZWdpc3RlciBcInJlcXVpcmUtY2FwYWJpbGl0eSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgY2FwXSB8IFtLZXl3b3JkIGNhcF0gfCBbU3ltYm9sIGNhcF0gLT5cbiAgICAgIGlmICFjYXBfc3RhY2sgPSBbXSB0aGVuIE5pbCAgKCogdW5yZXN0cmljdGVkICopXG4gICAgICBlbHNlIGlmIExpc3QubWVtIGNhcCAhY2FwX3N0YWNrIHRoZW4gTmlsXG4gICAgICBlbHNlIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZlxuICAgICAgICBcIkNhcGFiaWxpdHkgJyVzJyBub3QgYXZhaWxhYmxlLiBDdXJyZW50IGNhcGFiaWxpdGllczogWyVzXVwiXG4gICAgICAgIGNhcCAoU3RyaW5nLmNvbmNhdCBcIiwgXCIgIWNhcF9zdGFjaykpKVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNhcGFiaWxpdHktcmVzdHJpY3RlZD9cIiAoZnVuIF9hcmdzIC0+XG4gICAgQm9vbCAoIWNhcF9zdGFjayA8PiBbXSkpO1xuXG4gIHJlZ2lzdGVyIFwiaXMtZWxzZS1jbGF1c2U/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbS2V5d29yZCBcImVsc2VcIl0gLT4gQm9vbCB0cnVlXG4gICAgfCBbQm9vbCB0cnVlXSAtPiBCb29sIHRydWVcbiAgICB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiY29uZC1zY2hlbWU/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBjbGF1c2VzXSAtPlxuICAgICAgQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4gYyAtPlxuICAgICAgICBtYXRjaCBjIHdpdGhcbiAgICAgICAgfCBMaXN0IGwgLT4gTGlzdC5sZW5ndGggbCA9IDJcbiAgICAgICAgfCBfIC0+IGZhbHNlKSBjbGF1c2VzKVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJjb21wb25lbnQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgX10gLT4gQm9vbCB0cnVlIHwgW0lzbGFuZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImxhbWJkYS1jbG9zdXJlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgbF0gLT4gRW52IGwubF9jbG9zdXJlIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1jbG9zdXJlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IEVudiBjLmNfY2xvc3VyZVxuICAgIHwgW0lzbGFuZCBpXSAtPiBFbnYgaS5pX2Nsb3N1cmVcbiAgICB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NvbXBvbmVudCBjXSAtPiBCb29sIGMuY19oYXNfY2hpbGRyZW5cbiAgICB8IFtJc2xhbmQgaV0gLT4gQm9vbCBpLmlfaGFzX2NoaWxkcmVuXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1uYW1lXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IFN0cmluZyBjLmNfbmFtZVxuICAgIHwgW0lzbGFuZCBpXSAtPiBTdHJpbmcgaS5pX25hbWVcbiAgICB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJjb21wb25lbnQtcGFyYW1zXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgYy5jX3BhcmFtcylcbiAgICB8IFtJc2xhbmQgaV0gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBpLmlfcGFyYW1zKVxuICAgIHwgXyAtPiBMaXN0IFtdKTtcbiAgcmVnaXN0ZXIgXCJjb21wb25lbnQtYm9keVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NvbXBvbmVudCBjXSAtPiBjLmNfYm9keVxuICAgIHwgW0lzbGFuZCBpXSAtPiBpLmlfYm9keVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1maWxlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFt2XSAtPiBjb21wb25lbnRfZmlsZSB2IHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1zZXQtZmlsZSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW3Y7IGZdIC0+IGNvbXBvbmVudF9zZXRfZmlsZSB2IGYgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwibWFjcm8/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtNYWNybyBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImZvci1lYWNoLWluZGV4ZWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgTGlzdC5pdGVyaSAoZnVuIGkgeCAtPiBpZ25vcmUgKGNhbGxfYW55IGYgW051bWJlciAoZmxvYXRfb2ZfaW50IGkpOyB4XSkpIGl0ZW1zOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmb3ItZWFjaC1pbmRleGVkOiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuICByZWdpc3RlciBcImxhbWJkYS1wYXJhbXNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMYW1iZGEgbF0gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBsLmxfcGFyYW1zKVxuICAgIHwgXyAtPiBMaXN0IFtdKTtcbiAgcmVnaXN0ZXIgXCJsYW1iZGEtYm9keVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIGxdIC0+IGwubF9ib2R5IHwgXyAtPiBOaWwpO1xuICAoKiBleHBhbmQtbWFjcm8gaXMgcmVnaXN0ZXJlZCBsYXRlciBieSBydW5fdGVzdHMubWwgLyBzeF9zZXJ2ZXIubWxcbiAgICAgYmVjYXVzZSBpdCBuZWVkcyBldmFsX2V4cHIgd2hpY2ggY3JlYXRlcyBhIGRlcGVuZGVuY3kgY3ljbGUgKik7XG4gIHJlZ2lzdGVyIFwiZW1wdHktZGljdD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtEaWN0IGRdIC0+IEJvb2wgKEhhc2h0YmwubGVuZ3RoIGQgPSAwKVxuICAgIHwgXyAtPiBCb29sIHRydWUpO1xuICByZWdpc3RlciBcIm1ha2UtcmF3LWh0bWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBSYXdIVE1MIHMgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwicmF3LWh0bWwtY29udGVudFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbUmF3SFRNTCBzXSAtPiBTdHJpbmcgcyB8IF8gLT4gU3RyaW5nIFwiXCIpO1xuICByZWdpc3RlciBcImdldC1wcmltaXRpdmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gICAgICAgfCBTb21lIGZuIC0+IE5hdGl2ZUZuIChuYW1lLCBmbilcbiAgICAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk0gdW5kZWZpbmVkOiBcIiBeIG5hbWUpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJnZXQtcHJpbWl0aXZlOiBleHBlY3RlZCAobmFtZSlcIikpO1xuICByZWdpc3RlciBcImNhbGwtcHJpbWl0aXZlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IChMaXN0IGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBhIH0pXSAtPlxuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBuYW1lIHdpdGhcbiAgICAgICB8IFNvbWUgZm4gLT4gZm4gYVxuICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbmFtZSkpKVxuICAgIHwgW1N0cmluZyBuYW1lOyBOaWxdIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIG5hbWUgd2l0aFxuICAgICAgIHwgU29tZSBmbiAtPiBmbiBbXVxuICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbmFtZSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNhbGwtcHJpbWl0aXZlOiBleHBlY3RlZCAobmFtZSBhcmdzLWxpc3QpXCIpKTtcbiAgKCk7XG5cbiAgKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuICAoKiBTY29wZSBzdGFja3Mg4oCUIGR5bmFtaWMgc2NvcGUgZm9yIHJlbmRlci10aW1lIGVmZmVjdHMuICAgICAgICAgICAgKilcbiAgKCogTWlncmF0ZWQgZnJvbSBzeF9zY29wZS5tbCDigJQgUGhhc2UgMSBvZiBzdGVwIDUuNSAgICAgICAgICAgICAgICAgKilcbiAgKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4gICgqIC0tLSBDb29raWVzIC0tLSAqKVxuXG4gIHJlZ2lzdGVyIFwiZ2V0LWNvb2tpZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgX3JlcXVlc3RfY29va2llcyBuYW1lIHdpdGhcbiAgICAgICB8IFNvbWUgdiAtPiBTdHJpbmcgdlxuICAgICAgIHwgTm9uZSAtPiBOaWwpXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgcmVnaXN0ZXIgXCJzZXQtY29va2llXCIgKGZ1biBfYXJncyAtPiBOaWwpO1xuXG4gICgqIC0tLSBDb3JlIHNjb3BlIHN0YWNrIG9wZXJhdGlvbnMgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1wdXNoIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lOyB2YWx1ZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBpZiAhX3Njb3BlX3RyYWNlIHRoZW5cbiAgICAgICAgX3Njb3BlX2xvZyA6PSBQcmludGYuc3ByaW50ZiBcIlBVU0ggJXMgZGVwdGg9JWQtPiVkXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChMaXN0Lmxlbmd0aCBzdGFjayArIDEpIDo6ICFfc2NvcGVfbG9nO1xuICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSAodmFsdWUgOjogc3RhY2spOyBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcInNjb3BlLXBvcCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBpZiAhX3Njb3BlX3RyYWNlIHRoZW5cbiAgICAgICAgX3Njb3BlX2xvZyA6PSBQcmludGYuc3ByaW50ZiBcIlBPUCAlcyBkZXB0aD0lZC0+JWRcIiBuYW1lIChMaXN0Lmxlbmd0aCBzdGFjaykgKG1heCAwIChMaXN0Lmxlbmd0aCBzdGFjayAtIDEpKSA6OiAhX3Njb3BlX2xvZztcbiAgICAgIChtYXRjaCBzdGFjayB3aXRoIF8gOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgX3Njb3BlX3N0YWNrcyBuYW1lIHJlc3QgfCBbXSAtPiAoKSk7IE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtcGVla1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIGlmICFfc2NvcGVfdHJhY2UgdGhlblxuICAgICAgICBfc2NvcGVfbG9nIDo9IFByaW50Zi5zcHJpbnRmIFwiUEVFSyAlcyBkZXB0aD0lZCBmb3VuZD0lYlwiIG5hbWUgKExpc3QubGVuZ3RoIHN0YWNrKSAoc3RhY2sgPD4gW10pIDo6ICFfc2NvcGVfbG9nO1xuICAgICAgKG1hdGNoIHN0YWNrIHdpdGggdiA6OiBfIC0+IHYgfCBbXSAtPiBOaWwpXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIENvbnRleHQgKHNjb3BlIGxvb2t1cCB3aXRoIG9wdGlvbmFsIGRlZmF1bHQpIC0tLSAqKVxuXG4gIHJlZ2lzdGVyIFwiY29udGV4dFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgKFN0cmluZyBuYW1lKSA6OiByZXN0IC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgaWYgIV9zY29wZV90cmFjZSB0aGVuXG4gICAgICAgIF9zY29wZV9sb2cgOj0gUHJpbnRmLnNwcmludGYgXCJDVFggJXMgZGVwdGg9JWQgZm91bmQ9JWJcIiBuYW1lIChMaXN0Lmxlbmd0aCBzdGFjaykgKHN0YWNrIDw+IFtdKSA6OiAhX3Njb3BlX2xvZztcbiAgICAgIChtYXRjaCBzdGFjayB3aXRoXG4gICAgICAgfCB2IDo6IF8gLT4gdlxuICAgICAgIHwgW10gLT4gKG1hdGNoIHJlc3Qgd2l0aCBkZWZhdWx0X3ZhbCA6OiBfIC0+IGRlZmF1bHRfdmFsIHwgW10gLT4gTmlsKSlcbiAgICB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcImNvbnRleHQtZGVidWdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBsZXQgYWxsX2tleXMgPSBIYXNodGJsLmZvbGQgKGZ1biBrIF8gYWNjIC0+IGsgOjogYWNjKSBfc2NvcGVfc3RhY2tzIFtdIGluXG4gICAgICBTdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwibmFtZT0lcyBzdGFja19sZW49JWQgYWxsX2tleXM9WyVzXVwiXG4gICAgICAgIG5hbWUgKExpc3QubGVuZ3RoIHN0YWNrKSAoU3RyaW5nLmNvbmNhdCBcIixcIiBhbGxfa2V5cykpXG4gICAgfCBfIC0+IFN0cmluZyBcImJhZCBhcmdzXCIpO1xuXG4gICgqIC0tLSBDb2xsZWN0IC8gY29sbGVjdGVkIC8gY2xlYXItY29sbGVjdGVkISAtLS0gKilcblxuICByZWdpc3RlciBcImNvbGxlY3QhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IHZhbHVlXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIChtYXRjaCBzdGFjayB3aXRoXG4gICAgICAgfCBMaXN0IGl0ZW1zIDo6IHJlc3QgLT5cbiAgICAgICAgIGlmIG5vdCAoTGlzdC5tZW0gdmFsdWUgaXRlbXMpIHRoZW5cbiAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSAoTGlzdCAoaXRlbXMgQCBbdmFsdWVdKSA6OiByZXN0KVxuICAgICAgIHwgW10gLT5cbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBfc2NvcGVfc3RhY2tzIG5hbWUgW0xpc3QgW3ZhbHVlXV1cbiAgICAgICB8IF8gOjogXyAtPiAoKSk7XG4gICAgICBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcImNvbGxlY3RlZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIChtYXRjaCBzdGFjayB3aXRoIExpc3QgaXRlbXMgOjogXyAtPiBMaXN0IGl0ZW1zIHwgXyAtPiBMaXN0IFtdKVxuICAgIHwgXyAtPiBMaXN0IFtdKTtcblxuICByZWdpc3RlciBcImNsZWFyLWNvbGxlY3RlZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgXyA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBfc2NvcGVfc3RhY2tzIG5hbWUgKExpc3QgW10gOjogcmVzdClcbiAgICAgICB8IFtdIC0+IEhhc2h0YmwucmVwbGFjZSBfc2NvcGVfc3RhY2tzIG5hbWUgW0xpc3QgW11dKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBVbmlmaWVkIHJlYWN0aXZlIG1vZGVsIChTdGVwIDEwYykgLS0tXG4gICAgIHByb3ZpZGUgd3JhcHMgdmFsdWUgaW4gYSBTaWduYWwgKHJlYWN0aXZlIGNlbGwpLlxuICAgICBjb250ZXh0IHVud3JhcHMgdGhlIHNpZ25hbCArIHJlZ2lzdGVycyBpbiB0cmFja2luZyBjb250ZXh0LlxuICAgICBwZWVrIHVud3JhcHMgd2l0aG91dCB0cmFja2luZy5cbiAgICAgcHJvdmlkZSEgbXV0YXRlcyB0aGUgc2lnbmFsIGFuZCBub3RpZmllcyBzdWJzY3JpYmVycy4gKilcblxuICBsZXQgX3RyYWNraW5nX2FjdGl2ZSA6IGJvb2wgcmVmID0gcmVmIGZhbHNlIGluXG4gIGxldCBfdHJhY2tpbmdfZGVwcyA6IHZhbHVlIGxpc3QgcmVmID0gcmVmIFtdIGluXG5cbiAgcmVnaXN0ZXIgXCJwcm92aWRlLXJlYWN0aXZlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lOyB2YWx1ZV0gLT5cbiAgICAgIGxldCBzaWcnID0geyBzX3ZhbHVlID0gdmFsdWU7IHNfc3Vic2NyaWJlcnMgPSBbXTsgc19kZXBzID0gW10gfSBpblxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBfc2NvcGVfc3RhY2tzIG5hbWUgKFNpZ25hbCBzaWcnIDo6IHN0YWNrKTsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicHJvdmlkZS1yZWFjdGl2ZSE6IGV4cGVjdGVkIChuYW1lIHZhbHVlKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJwcm92aWRlLXBvcC1yZWFjdGl2ZSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCBfIDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSByZXN0IHwgW10gLT4gKCkpOyBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcInByb3ZpZGUtc2V0IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lOyBuZXdfdmFsdWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IFNpZ25hbCBzaWcnIDo6IF8gLT5cbiAgICAgICAgIHNpZycuc192YWx1ZSA8LSBuZXdfdmFsdWU7XG4gICAgICAgICBMaXN0Lml0ZXIgKGZ1biBzdWIgLT4gc3ViICgpKSBzaWcnLnNfc3Vic2NyaWJlcnM7XG4gICAgICAgICBOaWxcbiAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgIFwicHJvdmlkZS1zZXQhOiAnJXMnIGlzIG5vdCBhIHJlYWN0aXZlIHByb3ZpZGVcIiBuYW1lKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicHJvdmlkZS1zZXQhOiBleHBlY3RlZCAobmFtZSBuZXctdmFsdWUpXCIpKTtcblxuICByZWdpc3RlciBcInBlZWtcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IChTdHJpbmcgbmFtZSkgOjogXyAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIChtYXRjaCBzdGFjayB3aXRoXG4gICAgICAgfCBTaWduYWwgc2lnJyA6OiBfIC0+IHNpZycuc192YWx1ZVxuICAgICAgIHwgdiA6OiBfIC0+IHZcbiAgICAgICB8IFtdIC0+IE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwZWVrOiBleHBlY3RlZCAobmFtZSlcIikpO1xuXG4gIHJlZ2lzdGVyIFwidHJhY2tpbmctc3RhcnQhXCIgKGZ1biBfYXJncyAtPlxuICAgIF90cmFja2luZ19hY3RpdmUgOj0gdHJ1ZTsgX3RyYWNraW5nX2RlcHMgOj0gW107IE5pbCk7XG5cbiAgcmVnaXN0ZXIgXCJ0cmFja2luZy1zdG9wIVwiIChmdW4gX2FyZ3MgLT5cbiAgICBfdHJhY2tpbmdfYWN0aXZlIDo9IGZhbHNlO1xuICAgIGxldCBkZXBzID0gIV90cmFja2luZ19kZXBzIGluXG4gICAgX3RyYWNraW5nX2RlcHMgOj0gW107XG4gICAgTGlzdCBkZXBzKTtcblxuICByZWdpc3RlciBcInRyYWNraW5nLWFjdGl2ZT9cIiAoZnVuIF9hcmdzIC0+XG4gICAgQm9vbCAhX3RyYWNraW5nX2FjdGl2ZSk7XG5cbiAgKCogT3ZlcnJpZGUgY29udGV4dCB0byBiZSB0cmFja2luZy1hd2FyZSAqKVxuICBIYXNodGJsLnJlbW92ZSBwcmltaXRpdmVzIFwiY29udGV4dFwiO1xuICByZWdpc3RlciBcImNvbnRleHRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IChTdHJpbmcgbmFtZSkgOjogcmVzdCAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBfc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIChtYXRjaCBzdGFjayB3aXRoXG4gICAgICAgfCBTaWduYWwgc2lnJyA6OiBfIC0+XG4gICAgICAgICAoKiBSZWdpc3RlciBpbiB0cmFja2luZyBjb250ZXh0IGlmIGFjdGl2ZSAqKVxuICAgICAgICAgaWYgIV90cmFja2luZ19hY3RpdmUgdGhlbiBiZWdpblxuICAgICAgICAgICBpZiBub3QgKExpc3QubWVtcSAoU2lnbmFsIHNpZycpICFfdHJhY2tpbmdfZGVwcykgdGhlblxuICAgICAgICAgICAgIF90cmFja2luZ19kZXBzIDo9IFNpZ25hbCBzaWcnIDo6ICFfdHJhY2tpbmdfZGVwc1xuICAgICAgICAgZW5kO1xuICAgICAgICAgc2lnJy5zX3ZhbHVlXG4gICAgICAgfCB2IDo6IF8gLT4gdlxuICAgICAgIHwgW10gLT4gKG1hdGNoIHJlc3Qgd2l0aCBkZWZhdWx0X3ZhbCA6OiBfIC0+IGRlZmF1bHRfdmFsIHwgW10gLT4gTmlsKSlcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiB0cmFja2luZy1yZWdpc3Rlci1zY29wZSEg4oCUIGV4cGxpY2l0bHkgcmVnaXN0ZXIgYSByZWFjdGl2ZSBwcm92aWRlIGFzIGEgZGVwICopXG4gIHJlZ2lzdGVyIFwidHJhY2tpbmctcmVnaXN0ZXItc2NvcGUhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBpZiAhX3RyYWNraW5nX2FjdGl2ZSB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgX3Njb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAgIG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICAgfCBTaWduYWwgc2lnJyA6OiBfIC0+XG4gICAgICAgICAgaWYgbm90IChMaXN0Lm1lbXEgKFNpZ25hbCBzaWcnKSAhX3RyYWNraW5nX2RlcHMpIHRoZW5cbiAgICAgICAgICAgIF90cmFja2luZ19kZXBzIDo9IFNpZ25hbCBzaWcnIDo6ICFfdHJhY2tpbmdfZGVwcztcbiAgICAgICAgICBOaWxcbiAgICAgICAgfCBfIC0+IE5pbFxuICAgICAgZW5kIGVsc2UgTmlsXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogZGVyZWYg4oCUIHVud3JhcCBhIHNpZ25hbCB2YWx1ZSB3aXRoIHJlYWN0aXZlIGRlcGVuZGVuY3kgdHJhY2tpbmcuXG4gICAgIElmIHZhbHVlIGlzIGEgU2lnbmFsLCByZXR1cm5zIHNfdmFsdWUgYW5kIHJlZ2lzdGVycyBpbiB0cmFja2luZyBjb250ZXh0LlxuICAgICBPdGhlcndpc2UgcmV0dXJucyB2YWx1ZSBhcy1pcy4gKilcbiAgcmVnaXN0ZXIgXCJkZXJlZlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1NpZ25hbCBzaWcnXSAtPlxuICAgICAgaWYgIV90cmFja2luZ19hY3RpdmUgdGhlbiBiZWdpblxuICAgICAgICBpZiBub3QgKExpc3QubWVtcSAoU2lnbmFsIHNpZycpICFfdHJhY2tpbmdfZGVwcykgdGhlblxuICAgICAgICAgIF90cmFja2luZ19kZXBzIDo9IFNpZ25hbCBzaWcnIDo6ICFfdHJhY2tpbmdfZGVwc1xuICAgICAgZW5kO1xuICAgICAgc2lnJy5zX3ZhbHVlXG4gICAgfCBbdl0gLT4gdlxuICAgIHwgXyAtPiBOaWwpO1xuXG4gICgqIGJpbmQg4oCUIGNyZWF0ZSBhIHRyYWNrZWQgY29tcHV0YXRpb24uIFRha2VzIGEgYm9keS1mbiAobGFtYmRhKS5cbiAgICAgU3RhcnRzIHRyYWNraW5nLCBldmFsdWF0ZXMgYm9keSwgY29sbGVjdHMgZGVwcywgc3Vic2NyaWJlcy5cbiAgICAgT24gZGVwIGNoYW5nZTogdW5zdWJzY3JpYmVzLCByZS1ldmFsdWF0ZXMsIHJlLXN1YnNjcmliZXMuXG4gICAgIFJldHVybnMgaW5pdGlhbCB2YWx1ZS4gT3B0aW9uYWwgdXBkYXRlLWZuIGNhbGxlZCB3aXRoIG5ldyB2YWx1ZXMuICopXG4gIHJlZ2lzdGVyIFwiYmluZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2JvZHlfZm5dIHwgW2JvZHlfZm47IF9dIC0+XG4gICAgICBsZXQgdXBkYXRlX2ZuID0gbWF0Y2ggYXJncyB3aXRoIFtfOyB1XSAtPiBTb21lIHUgfCBfIC0+IE5vbmUgaW5cbiAgICAgIGxldCBkaXNwb3NlcnMgOiAodW5pdCAtPiB1bml0KSBsaXN0IHJlZiA9IHJlZiBbXSBpblxuICAgICAgbGV0IHJlYyBydW5fdHJhY2tlZCAoKSA9XG4gICAgICAgICgqIENsZWFuIHVwIHByZXZpb3VzIHN1YnNjcmlwdGlvbnMgKilcbiAgICAgICAgTGlzdC5pdGVyIChmdW4gZCAtPiBkICgpKSAhZGlzcG9zZXJzO1xuICAgICAgICBkaXNwb3NlcnMgOj0gW107XG4gICAgICAgICgqIFN0YXJ0IHRyYWNraW5nICopXG4gICAgICAgIF90cmFja2luZ19hY3RpdmUgOj0gdHJ1ZTtcbiAgICAgICAgX3RyYWNraW5nX2RlcHMgOj0gW107XG4gICAgICAgICgqIEV2YWx1YXRlIGJvZHkgKilcbiAgICAgICAgbGV0IHJlc3VsdCA9ICFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIGJvZHlfZm4gTmlsIGluXG4gICAgICAgICgqIENvbGxlY3QgZGVwcyAqKVxuICAgICAgICBsZXQgZGVwcyA9ICFfdHJhY2tpbmdfZGVwcyBpblxuICAgICAgICBfdHJhY2tpbmdfYWN0aXZlIDo9IGZhbHNlO1xuICAgICAgICBfdHJhY2tpbmdfZGVwcyA6PSBbXTtcbiAgICAgICAgKCogU3Vic2NyaWJlIHRvIGVhY2ggZGVwICopXG4gICAgICAgIExpc3QuaXRlciAoZnVuIGRlcCAtPlxuICAgICAgICAgIG1hdGNoIGRlcCB3aXRoXG4gICAgICAgICAgfCBTaWduYWwgc2lnJyAtPlxuICAgICAgICAgICAgbGV0IHN1YnNjcmliZXIgPSAoZnVuICgpIC0+XG4gICAgICAgICAgICAgIGxldCBuZXdfcmVzdWx0ID0gcnVuX3RyYWNrZWQgKCkgaW5cbiAgICAgICAgICAgICAgbWF0Y2ggdXBkYXRlX2ZuIHdpdGhcbiAgICAgICAgICAgICAgfCBTb21lIGYgLT4gaWdub3JlICghU3hfdHlwZXMuX2Nla19jYWxsX3JlZiBmIChMaXN0IFtuZXdfcmVzdWx0XSkpXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgICAgKSBpblxuICAgICAgICAgICAgc2lnJy5zX3N1YnNjcmliZXJzIDwtIHN1YnNjcmliZXIgOjogc2lnJy5zX3N1YnNjcmliZXJzO1xuICAgICAgICAgICAgZGlzcG9zZXJzIDo9IChmdW4gKCkgLT5cbiAgICAgICAgICAgICAgc2lnJy5zX3N1YnNjcmliZXJzIDwtIExpc3QuZmlsdGVyIChmdW4gcyAtPiBzICE9IHN1YnNjcmliZXIpIHNpZycuc19zdWJzY3JpYmVyc1xuICAgICAgICAgICAgKSA6OiAhZGlzcG9zZXJzXG4gICAgICAgICAgfCBfIC0+ICgpXG4gICAgICAgICkgZGVwcztcbiAgICAgICAgcmVzdWx0XG4gICAgICBpblxuICAgICAgcnVuX3RyYWNrZWQgKClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJiaW5kOiBleHBlY3RlZCAoYm9keS1mbikgb3IgKGJvZHktZm4gdXBkYXRlLWZuKVwiKSk7XG5cbiAgKCogLS0tIEVtaXQgLyBlbWl0dGVkIC0tLSAqKVxuXG4gIHJlZ2lzdGVyIFwic2NvcGUtZW1pdCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgdmFsdWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IExpc3QgaXRlbXMgOjogcmVzdCAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIF9zY29wZV9zdGFja3MgbmFtZSAoTGlzdCAoaXRlbXMgQCBbdmFsdWVdKSA6OiByZXN0KVxuICAgICAgIHwgTmlsIDo6IHJlc3QgLT5cbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBfc2NvcGVfc3RhY2tzIG5hbWUgKExpc3QgW3ZhbHVlXSA6OiByZXN0KVxuICAgICAgIHwgW10gLT5cbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBfc2NvcGVfc3RhY2tzIG5hbWUgW0xpc3QgW3ZhbHVlXV1cbiAgICAgICB8IF8gOjogXyAtPiAoKSk7XG4gICAgICBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcImVtaXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIFwic2NvcGUtZW1pdCFcIiB3aXRoXG4gICAgfCBTb21lIGZuIC0+IGZuIGFyZ3MgfCBOb25lIC0+IE5pbCk7XG5cbiAgcmVnaXN0ZXIgXCJlbWl0dGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIF9zY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGggTGlzdCBpdGVtcyA6OiBfIC0+IExpc3QgaXRlbXMgfCBfIC0+IExpc3QgW10pXG4gICAgfCBfIC0+IExpc3QgW10pO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtZW1pdHRlZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBcImVtaXR0ZWRcIiB3aXRoXG4gICAgfCBTb21lIGZuIC0+IGZuIGFyZ3MgfCBOb25lIC0+IExpc3QgW10pO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtY29sbGVjdGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIFwiY29sbGVjdGVkXCIgd2l0aFxuICAgIHwgU29tZSBmbiAtPiBmbiBhcmdzIHwgTm9uZSAtPiBMaXN0IFtdKTtcblxuICByZWdpc3RlciBcInNjb3BlLWNsZWFyLWNvbGxlY3RlZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgXCJjbGVhci1jb2xsZWN0ZWQhXCIgd2l0aFxuICAgIHwgU29tZSBmbiAtPiBmbiBhcmdzIHwgTm9uZSAtPiBOaWwpO1xuXG4gICgqIC0tLSBQcm92aWRlIGFsaWFzZXMgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJwcm92aWRlLXB1c2ghXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIFwic2NvcGUtcHVzaCFcIiB3aXRoXG4gICAgfCBTb21lIGZuIC0+IGZuIGFyZ3MgfCBOb25lIC0+IE5pbCk7XG5cbiAgcmVnaXN0ZXIgXCJwcm92aWRlLXBvcCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgXCJzY29wZS1wb3AhXCIgd2l0aFxuICAgIHwgU29tZSBmbiAtPiBmbiBhcmdzIHwgTm9uZSAtPiBOaWwpO1xuXG4gICgqIGhzLXNhZmUtY2FsbDogaW52b2tlIGEgMC1hcmcgdGh1bmssIHJldHVybiBuaWwgb24gYW55IG5hdGl2ZSBlcnJvci5cbiAgICAgVXNlZCBieSB0aGUgaHlwZXJzY3JpcHQgY29tcGlsZXIgdG8gd3JhcCBjb2xsZWN0aW9uIGV4cHJlc3Npb25zIGluXG4gICAgIGZvci1sb29wcywgc28gYGZvciB4IGluIGRvZXNOb3RFeGlzdGAgaXRlcmF0ZXMgb3ZlciBuaWwgaW5zdGVhZCBvZlxuICAgICBjcmFzaGluZyB3aXRoIGFuIHVuZGVmaW5lZC1zeW1ib2wgZXJyb3IuICopXG4gIHJlZ2lzdGVyIFwiaHMtc2FmZS1jYWxsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdGh1bmtdIC0+XG4gICAgICAodHJ5ICFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIHRodW5rIE5pbFxuICAgICAgIHdpdGggXyAtPiBOaWwpXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogPT09IFJlZ2V4ID09PSB3cmFwcGluZyBSZSArIFJlLlBjcmUgKilcbiAgbGV0IHJlZ2V4X3RhYmxlIDogKGludCwgUmUucmUgKiBzdHJpbmcgKiBzdHJpbmcpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDMyIGluXG4gIGxldCByZWdleF9uZXh0X2lkID0gcmVmIDAgaW5cbiAgbGV0IHBhcnNlX2ZsYWdzIGZsYWdzID1cbiAgICBsZXQgb3B0cyA9IHJlZiBbXSBpblxuICAgIFN0cmluZy5pdGVyIChmdW5jdGlvblxuICAgICAgfCAnaScgLT4gb3B0cyA6PSBgQ0FTRUxFU1MgOjogIW9wdHNcbiAgICAgIHwgJ20nIC0+IG9wdHMgOj0gYE1VTFRJTElORSA6OiAhb3B0c1xuICAgICAgfCAncycgLT4gb3B0cyA6PSBgRE9UQUxMIDo6ICFvcHRzXG4gICAgICB8IF8gLT4gKCkpIGZsYWdzO1xuICAgICFvcHRzXG4gIGluXG4gIGxldCBtYWtlX3JlZ2V4X3ZhbHVlIGlkIHNvdXJjZSBmbGFncyA9XG4gICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJfX3JlZ2V4X19cIiAoQm9vbCB0cnVlKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImlkXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGlkKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJzb3VyY2VcIiAoU3RyaW5nIHNvdXJjZSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJmbGFnc1wiIChTdHJpbmcgZmxhZ3MpO1xuICAgIERpY3QgZFxuICBpblxuICBsZXQgcmVnZXhfb2ZfdmFsdWUgPSBmdW5jdGlvblxuICAgIHwgRGljdCBkIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiaWRcIiB3aXRoXG4gICAgICAgfCBTb21lIChOdW1iZXIgbikgLT5cbiAgICAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHJlZ2V4X3RhYmxlIChpbnRfb2ZfZmxvYXQgbikgd2l0aFxuICAgICAgICAgIHwgU29tZSByIC0+IHJcbiAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleDogaGFuZGxlIG5vdCBmb3VuZFwiKSlcbiAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleDogbWlzc2luZyBpZFwiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleDogZXhwZWN0ZWQgcmVnZXggZGljdFwiKVxuICBpblxuICBsZXQgZ3JvdXBfdG9fZGljdCBnIGlucHV0ID1cbiAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcIm1hdGNoXCIgKFN0cmluZyAoUmUuR3JvdXAuZ2V0IGcgMCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiaW5kZXhcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgKFJlLkdyb3VwLnN0YXJ0IGcgMCkpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImlucHV0XCIgKFN0cmluZyBpbnB1dCk7XG4gICAgbGV0IGNvdW50ID0gUmUuR3JvdXAubmJfZ3JvdXBzIGcgaW5cbiAgICBsZXQgZ3JvdXBzID0gcmVmIFtdIGluXG4gICAgZm9yIGkgPSBjb3VudCAtIDEgZG93bnRvIDEgZG9cbiAgICAgIGxldCBzID0gdHJ5IFJlLkdyb3VwLmdldCBnIGkgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICAgICAgZ3JvdXBzIDo9IFN0cmluZyBzIDo6ICFncm91cHNcbiAgICBkb25lO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiZ3JvdXBzXCIgKExpc3QgIWdyb3Vwcyk7XG4gICAgRGljdCBkXG4gIGluXG4gIHJlZ2lzdGVyIFwicmVnZXgtY29tcGlsZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzb3VyY2U7IFN0cmluZyBmbGFnc10gfCBbU3RyaW5nIHNvdXJjZTsgU3RyaW5nIGZsYWdzOyBfXSAtPlxuICAgICAgbGV0IG9wdHMgPSBwYXJzZV9mbGFncyBmbGFncyBpblxuICAgICAgKHRyeVxuICAgICAgICBsZXQgcmUgPSBSZS5jb21waWxlIChSZS5QY3JlLnJlIH5mbGFnczpvcHRzIHNvdXJjZSkgaW5cbiAgICAgICAgbGV0IGlkID0gIXJlZ2V4X25leHRfaWQgaW5cbiAgICAgICAgaW5jciByZWdleF9uZXh0X2lkO1xuICAgICAgICBIYXNodGJsLnJlcGxhY2UgcmVnZXhfdGFibGUgaWQgKHJlLCBzb3VyY2UsIGZsYWdzKTtcbiAgICAgICAgbWFrZV9yZWdleF92YWx1ZSBpZCBzb3VyY2UgZmxhZ3NcbiAgICAgIHdpdGggXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJyZWdleC1jb21waWxlOiBpbnZhbGlkIHBhdHRlcm4gXCIgXiBzb3VyY2UpKSlcbiAgICB8IFtTdHJpbmcgc291cmNlXSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgcmUgPSBSZS5jb21waWxlIChSZS5QY3JlLnJlIHNvdXJjZSkgaW5cbiAgICAgICAgbGV0IGlkID0gIXJlZ2V4X25leHRfaWQgaW5cbiAgICAgICAgaW5jciByZWdleF9uZXh0X2lkO1xuICAgICAgICBIYXNodGJsLnJlcGxhY2UgcmVnZXhfdGFibGUgaWQgKHJlLCBzb3VyY2UsIFwiXCIpO1xuICAgICAgICBtYWtlX3JlZ2V4X3ZhbHVlIGlkIHNvdXJjZSBcIlwiXG4gICAgICB3aXRoIF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwicmVnZXgtY29tcGlsZTogaW52YWxpZCBwYXR0ZXJuIFwiIF4gc291cmNlKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXgtY29tcGlsZTogKHNvdXJjZSBmbGFncylcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LXRlc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtyeDsgU3RyaW5nIHNdIC0+XG4gICAgICBsZXQgKHJlLCBfLCBfKSA9IHJlZ2V4X29mX3ZhbHVlIHJ4IGluXG4gICAgICBCb29sIChSZS5leGVjcCByZSBzKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LXRlc3Q6IChyZWdleCBzdHJpbmcpXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleC1leGVjXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IChyeCwgcywgc3RhcnQpID0gbWF0Y2ggYXJncyB3aXRoXG4gICAgICB8IFtyeDsgU3RyaW5nIHNdIC0+IChyeCwgcywgMClcbiAgICAgIHwgW3J4OyBTdHJpbmcgczsgTnVtYmVyIG5dIC0+IChyeCwgcywgaW50X29mX2Zsb2F0IG4pXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1leGVjOiAocmVnZXggc3RyaW5nIHN0YXJ0PylcIilcbiAgICBpblxuICAgIGxldCAocmUsIF8sIF8pID0gcmVnZXhfb2ZfdmFsdWUgcnggaW5cbiAgICB0cnlcbiAgICAgIGxldCBnID0gUmUuZXhlYyB+cG9zOnN0YXJ0IHJlIHMgaW5cbiAgICAgIGdyb3VwX3RvX2RpY3QgZyBzXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJyZWdleC1tYXRjaC1hbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtyeDsgU3RyaW5nIHNdIC0+XG4gICAgICBsZXQgKHJlLCBfLCBfKSA9IHJlZ2V4X29mX3ZhbHVlIHJ4IGluXG4gICAgICBsZXQgYWxsID0gUmUuYWxsIHJlIHMgaW5cbiAgICAgIExpc3QgKExpc3QubWFwIChmdW4gZyAtPiBncm91cF90b19kaWN0IGcgcykgYWxsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LW1hdGNoLWFsbDogKHJlZ2V4IHN0cmluZylcIikpO1xuICByZWdpc3RlciBcInJlZ2V4LXJlcGxhY2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtyeDsgU3RyaW5nIHM7IFN0cmluZyByZXBsYWNlbWVudF0gLT5cbiAgICAgIGxldCAocmUsIF8sIGZsYWdzKSA9IHJlZ2V4X29mX3ZhbHVlIHJ4IGluXG4gICAgICBsZXQgZXhwYW5kIGcgPVxuICAgICAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCByZXBsYWNlbWVudCkgaW5cbiAgICAgICAgbGV0IGkgPSByZWYgMCBpblxuICAgICAgICBsZXQgbiA9IFN0cmluZy5sZW5ndGggcmVwbGFjZW1lbnQgaW5cbiAgICAgICAgd2hpbGUgIWkgPCBuIGRvXG4gICAgICAgICAgbGV0IGMgPSByZXBsYWNlbWVudC5bIWldIGluXG4gICAgICAgICAgaWYgYyA9ICckJyAmJiAhaSArIDEgPCBuIHRoZW5cbiAgICAgICAgICAgIChtYXRjaCByZXBsYWNlbWVudC5bIWkgKyAxXSB3aXRoXG4gICAgICAgICAgICAgfCAnJicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChSZS5Hcm91cC5nZXQgZyAwKTsgaSA6PSAhaSArIDJcbiAgICAgICAgICAgICB8ICckJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICckJzsgaSA6PSAhaSArIDJcbiAgICAgICAgICAgICB8IGMgd2hlbiBjID49ICcwJyAmJiBjIDw9ICc5JyAtPlxuICAgICAgICAgICAgICAgbGV0IGlkeCA9IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJyBpblxuICAgICAgICAgICAgICAgKHRyeSBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFJlLkdyb3VwLmdldCBnIGlkeCkgd2l0aCBOb3RfZm91bmQgLT4gKCkpO1xuICAgICAgICAgICAgICAgaSA6PSAhaSArIDJcbiAgICAgICAgICAgICB8IF8gLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjOyBpbmNyIGkpXG4gICAgICAgICAgZWxzZSAoQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjOyBpbmNyIGkpXG4gICAgICAgIGRvbmU7XG4gICAgICAgIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgICAgIGluXG4gICAgICBsZXQgZ2xvYmFsID0gU3RyaW5nLmNvbnRhaW5zIGZsYWdzICdnJyBpblxuICAgICAgaWYgZ2xvYmFsIHRoZW5cbiAgICAgICAgU3RyaW5nIChSZS5yZXBsYWNlIHJlIH5mOmV4cGFuZCBzKVxuICAgICAgZWxzZVxuICAgICAgICAobWF0Y2ggUmUuZXhlY19vcHQgcmUgcyB3aXRoXG4gICAgICAgICB8IE5vbmUgLT4gU3RyaW5nIHNcbiAgICAgICAgIHwgU29tZSBnIC0+XG4gICAgICAgICAgIGxldCByZXBsID0gZXhwYW5kIGcgaW5cbiAgICAgICAgICAgbGV0IGJlZm9yZSA9IFN0cmluZy5zdWIgcyAwIChSZS5Hcm91cC5zdGFydCBnIDApIGluXG4gICAgICAgICAgIGxldCBhZnRlcl9zdGFydCA9IFJlLkdyb3VwLnN0b3AgZyAwIGluXG4gICAgICAgICAgIGxldCBhZnRlciA9IFN0cmluZy5zdWIgcyBhZnRlcl9zdGFydCAoU3RyaW5nLmxlbmd0aCBzIC0gYWZ0ZXJfc3RhcnQpIGluXG4gICAgICAgICAgIFN0cmluZyAoYmVmb3JlIF4gcmVwbCBeIGFmdGVyKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleC1yZXBsYWNlOiAocmVnZXggc3RyaW5nIHJlcGxhY2VtZW50KVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtcmVwbGFjZS1mblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3J4OyBTdHJpbmcgczsgZl0gLT5cbiAgICAgIGxldCAocmUsIF8sIGZsYWdzKSA9IHJlZ2V4X29mX3ZhbHVlIHJ4IGluXG4gICAgICBsZXQgY2FsbF9mbiBnID1cbiAgICAgICAgbGV0IG1hdGNoX3N0ciA9IFJlLkdyb3VwLmdldCBnIDAgaW5cbiAgICAgICAgbGV0IGNvdW50ID0gUmUuR3JvdXAubmJfZ3JvdXBzIGcgaW5cbiAgICAgICAgbGV0IGdyb3Vwc19iZWZvcmUgPSByZWYgW10gaW5cbiAgICAgICAgZm9yIGkgPSBjb3VudCAtIDEgZG93bnRvIDEgZG9cbiAgICAgICAgICBsZXQgdiA9IHRyeSBTdHJpbmcgKFJlLkdyb3VwLmdldCBnIGkpIHdpdGggTm90X2ZvdW5kIC0+IE5pbCBpblxuICAgICAgICAgIGdyb3Vwc19iZWZvcmUgOj0gdiA6OiAhZ3JvdXBzX2JlZm9yZVxuICAgICAgICBkb25lO1xuICAgICAgICBsZXQgaWR4ID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgKFJlLkdyb3VwLnN0YXJ0IGcgMCkpIGluXG4gICAgICAgIGxldCBhbGxfYXJncyA9IFtTdHJpbmcgbWF0Y2hfc3RyXSBAICFncm91cHNfYmVmb3JlIEAgW2lkeDsgU3RyaW5nIHNdIGluXG4gICAgICAgIG1hdGNoICFTeF90eXBlcy5fY2VrX2NhbGxfcmVmIGYgKExpc3QgYWxsX2FyZ3MpIHdpdGhcbiAgICAgICAgfCBTdHJpbmcgcyAtPiBzXG4gICAgICAgIHwgTnVtYmVyIG4gLT4gU3hfdHlwZXMuZm9ybWF0X251bWJlciBuXG4gICAgICAgIHwgdiAtPiBTeF90eXBlcy5pbnNwZWN0IHZcbiAgICAgIGluXG4gICAgICBsZXQgZ2xvYmFsID0gU3RyaW5nLmNvbnRhaW5zIGZsYWdzICdnJyBpblxuICAgICAgaWYgZ2xvYmFsIHRoZW5cbiAgICAgICAgU3RyaW5nIChSZS5yZXBsYWNlIHJlIH5mOmNhbGxfZm4gcylcbiAgICAgIGVsc2VcbiAgICAgICAgKG1hdGNoIFJlLmV4ZWNfb3B0IHJlIHMgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IFN0cmluZyBzXG4gICAgICAgICB8IFNvbWUgZyAtPlxuICAgICAgICAgICBsZXQgcmVwbCA9IGNhbGxfZm4gZyBpblxuICAgICAgICAgICBsZXQgYmVmb3JlID0gU3RyaW5nLnN1YiBzIDAgKFJlLkdyb3VwLnN0YXJ0IGcgMCkgaW5cbiAgICAgICAgICAgbGV0IGFmdGVyX3N0YXJ0ID0gUmUuR3JvdXAuc3RvcCBnIDAgaW5cbiAgICAgICAgICAgbGV0IGFmdGVyID0gU3RyaW5nLnN1YiBzIGFmdGVyX3N0YXJ0IChTdHJpbmcubGVuZ3RoIHMgLSBhZnRlcl9zdGFydCkgaW5cbiAgICAgICAgICAgU3RyaW5nIChiZWZvcmUgXiByZXBsIF4gYWZ0ZXIpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LXJlcGxhY2UtZm46IChyZWdleCBzdHJpbmcgZm4pXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWdleC1zcGxpdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3J4OyBTdHJpbmcgc10gLT5cbiAgICAgIGxldCAocmUsIF8sIF8pID0gcmVnZXhfb2ZfdmFsdWUgcnggaW5cbiAgICAgIExpc3QgKExpc3QubWFwIChmdW4geCAtPiBTdHJpbmcgeCkgKFJlLnNwbGl0IHJlIHMpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LXNwbGl0OiAocmVnZXggc3RyaW5nKVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtc291cmNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbcnhdIC0+XG4gICAgICBsZXQgKF8sIHNvdXJjZSwgXykgPSByZWdleF9vZl92YWx1ZSByeCBpblxuICAgICAgU3RyaW5nIHNvdXJjZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LXNvdXJjZTogKHJlZ2V4KVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXgtZmxhZ3NcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtyeF0gLT5cbiAgICAgIGxldCAoXywgXywgZmxhZ3MpID0gcmVnZXhfb2ZfdmFsdWUgcnggaW5cbiAgICAgIFN0cmluZyBmbGFnc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4LWZsYWdzOiAocmVnZXgpXCIpKTtcblxuICAoKiBtYWtlLXJlZ2V4cCAvIHJlZ2V4cD8gLyByZWdleHAtbWF0Y2ggLyByZWdleHAtbWF0Y2gtYWxsIC8gcmVnZXhwLXJlcGxhY2UgLyByZWdleHAtcmVwbGFjZS1hbGwgLyByZWdleHAtc3BsaXQgKilcbiAgbGV0IHBhcnNlX3JlX2ZsYWdzIGZsYWdzID1cbiAgICBsZXQgb3B0cyA9IHJlZiBbXSBpblxuICAgIFN0cmluZy5pdGVyIChmdW5jdGlvblxuICAgICAgfCAnaScgLT4gb3B0cyA6PSBgQ0FTRUxFU1MgOjogIW9wdHNcbiAgICAgIHwgJ20nIC0+IG9wdHMgOj0gYE1VTFRJTElORSA6OiAhb3B0c1xuICAgICAgfCAncycgLT4gb3B0cyA6PSBgRE9UQUxMIDo6ICFvcHRzXG4gICAgICB8IF8gLT4gKCkpIGZsYWdzO1xuICAgICFvcHRzXG4gIGluXG4gIGxldCBtYWtlX3JlZ2V4cF92YWx1ZSBzb3VyY2UgZmxhZ3MgPVxuICAgIGxldCBvcHRzID0gcGFyc2VfcmVfZmxhZ3MgZmxhZ3MgaW5cbiAgICB0cnlcbiAgICAgIGxldCBjb21waWxlZCA9IFJlLmNvbXBpbGUgKFJlLlBjcmUucmUgfmZsYWdzOm9wdHMgc291cmNlKSBpblxuICAgICAgU3hSZWdleHAgKHNvdXJjZSwgZmxhZ3MsIGNvbXBpbGVkKVxuICAgIHdpdGggXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJtYWtlLXJlZ2V4cDogaW52YWxpZCBwYXR0ZXJuOiBcIiBeIHNvdXJjZSkpXG4gIGluXG4gIGxldCBtYXRjaF9kaWN0IGcgaW5wdXQgPVxuICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwibWF0Y2hcIiAoU3RyaW5nIChSZS5Hcm91cC5nZXQgZyAwKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJzdGFydFwiIChJbnRlZ2VyIChSZS5Hcm91cC5zdGFydCBnIDApKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImVuZFwiIChJbnRlZ2VyIChSZS5Hcm91cC5zdG9wIGcgMCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiaW5wdXRcIiAoU3RyaW5nIGlucHV0KTtcbiAgICBsZXQgY291bnQgPSBSZS5Hcm91cC5uYl9ncm91cHMgZyBpblxuICAgIGxldCBncm91cHMgPSByZWYgW10gaW5cbiAgICBmb3IgaSA9IGNvdW50IC0gMSBkb3dudG8gMSBkb1xuICAgICAgbGV0IHMgPSB0cnkgUmUuR3JvdXAuZ2V0IGcgaSB3aXRoIE5vdF9mb3VuZCAtPiBcIlwiIGluXG4gICAgICBncm91cHMgOj0gU3RyaW5nIHMgOjogIWdyb3Vwc1xuICAgIGRvbmU7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJncm91cHNcIiAoTGlzdCAhZ3JvdXBzKTtcbiAgICBEaWN0IGRcbiAgaW5cbiAgcmVnaXN0ZXIgXCJtYWtlLXJlZ2V4cFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmNdIC0+IG1ha2VfcmVnZXhwX3ZhbHVlIHNyYyBcIlwiXG4gICAgfCBbU3RyaW5nIHNyYzsgU3RyaW5nIGZsYWdzXSAtPiBtYWtlX3JlZ2V4cF92YWx1ZSBzcmMgZmxhZ3NcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXJlZ2V4cDogKHBhdHRlcm4gW2ZsYWdzXSlcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCBfXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXhwPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cC1zb3VyY2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCAoc3JjLCBfLCBfKV0gLT4gU3RyaW5nIHNyY1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cC1zb3VyY2U6IGV4cGVjdGVkIHJlZ2V4cFwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXhwLWZsYWdzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hSZWdleHAgKF8sIGZsYWdzLCBfKV0gLT4gU3RyaW5nIGZsYWdzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXhwLWZsYWdzOiBleHBlY3RlZCByZWdleHBcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cC1tYXRjaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4UmVnZXhwIChfLCBfLCByZSk7IFN0cmluZyBzXSAtPlxuICAgICAgKG1hdGNoIFJlLmV4ZWNfb3B0IHJlIHMgd2l0aFxuICAgICAgIHwgTm9uZSAtPiBOaWxcbiAgICAgICB8IFNvbWUgZyAtPiBtYXRjaF9kaWN0IGcgcylcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWdleHAtbWF0Y2g6IChyZWdleHAgc3RyaW5nKVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXhwLW1hdGNoLWFsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4UmVnZXhwIChfLCBfLCByZSk7IFN0cmluZyBzXSAtPlxuICAgICAgTGlzdCAoTGlzdC5tYXAgKGZ1biBnIC0+IG1hdGNoX2RpY3QgZyBzKSAoUmUuYWxsIHJlIHMpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cC1tYXRjaC1hbGw6IChyZWdleHAgc3RyaW5nKVwiKSk7XG4gIHJlZ2lzdGVyIFwicmVnZXhwLXJlcGxhY2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFJlZ2V4cCAoXywgXywgcmUpOyBTdHJpbmcgczsgU3RyaW5nIHJlcGxhY2VtZW50XSAtPlxuICAgICAgKG1hdGNoIFJlLmV4ZWNfb3B0IHJlIHMgd2l0aFxuICAgICAgIHwgTm9uZSAtPiBTdHJpbmcgc1xuICAgICAgIHwgU29tZSBnIC0+XG4gICAgICAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICAgICAgICAgbGV0IGkgPSByZWYgMCBpblxuICAgICAgICAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIHJlcGxhY2VtZW50IGluXG4gICAgICAgICBsZXQgZXhwYW5kICgpID1cbiAgICAgICAgICAgd2hpbGUgIWkgPCBuIGRvXG4gICAgICAgICAgICAgbGV0IGMgPSByZXBsYWNlbWVudC5bIWldIGluXG4gICAgICAgICAgICAgaWYgYyA9ICckJyAmJiAhaSArIDEgPCBuIHRoZW5cbiAgICAgICAgICAgICAgIChtYXRjaCByZXBsYWNlbWVudC5bIWkgKyAxXSB3aXRoXG4gICAgICAgICAgICAgICAgfCAnJicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChSZS5Hcm91cC5nZXQgZyAwKTsgaSA6PSAhaSArIDJcbiAgICAgICAgICAgICAgICB8ICckJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICckJzsgaSA6PSAhaSArIDJcbiAgICAgICAgICAgICAgICB8IGMgd2hlbiBjID49ICcwJyAmJiBjIDw9ICc5JyAtPlxuICAgICAgICAgICAgICAgICAgbGV0IGlkeCA9IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJyBpblxuICAgICAgICAgICAgICAgICAgKHRyeSBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFJlLkdyb3VwLmdldCBnIGlkeCkgd2l0aCBOb3RfZm91bmQgLT4gKCkpO1xuICAgICAgICAgICAgICAgICAgaSA6PSAhaSArIDJcbiAgICAgICAgICAgICAgICB8IF8gLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjOyBpbmNyIGkpXG4gICAgICAgICAgICAgZWxzZSAoQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjOyBpbmNyIGkpXG4gICAgICAgICAgIGRvbmVcbiAgICAgICAgIGluXG4gICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFN0cmluZy5zdWIgcyAwIChSZS5Hcm91cC5zdGFydCBnIDApKTtcbiAgICAgICAgIGV4cGFuZCAoKTtcbiAgICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoU3RyaW5nLnN1YiBzIChSZS5Hcm91cC5zdG9wIGcgMClcbiAgICAgICAgICAgKFN0cmluZy5sZW5ndGggcyAtIFJlLkdyb3VwLnN0b3AgZyAwKSk7XG4gICAgICAgICBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZ2V4cC1yZXBsYWNlOiAocmVnZXhwIHN0cmluZyByZXBsYWNlbWVudClcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cC1yZXBsYWNlLWFsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4UmVnZXhwIChfLCBfLCByZSk7IFN0cmluZyBzOyBTdHJpbmcgcmVwbGFjZW1lbnRdIC0+XG4gICAgICBsZXQgZXhwYW5kIGcgPVxuICAgICAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCByZXBsYWNlbWVudCkgaW5cbiAgICAgICAgbGV0IGkgPSByZWYgMCBpblxuICAgICAgICBsZXQgbiA9IFN0cmluZy5sZW5ndGggcmVwbGFjZW1lbnQgaW5cbiAgICAgICAgd2hpbGUgIWkgPCBuIGRvXG4gICAgICAgICAgbGV0IGMgPSByZXBsYWNlbWVudC5bIWldIGluXG4gICAgICAgICAgaWYgYyA9ICckJyAmJiAhaSArIDEgPCBuIHRoZW5cbiAgICAgICAgICAgIChtYXRjaCByZXBsYWNlbWVudC5bIWkgKyAxXSB3aXRoXG4gICAgICAgICAgICAgfCAnJicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChSZS5Hcm91cC5nZXQgZyAwKTsgaSA6PSAhaSArIDJcbiAgICAgICAgICAgICB8ICckJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICckJzsgaSA6PSAhaSArIDJcbiAgICAgICAgICAgICB8IGMgd2hlbiBjID49ICcwJyAmJiBjIDw9ICc5JyAtPlxuICAgICAgICAgICAgICAgbGV0IGlkeCA9IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJyBpblxuICAgICAgICAgICAgICAgKHRyeSBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFJlLkdyb3VwLmdldCBnIGlkeCkgd2l0aCBOb3RfZm91bmQgLT4gKCkpO1xuICAgICAgICAgICAgICAgaSA6PSAhaSArIDJcbiAgICAgICAgICAgICB8IF8gLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjOyBpbmNyIGkpXG4gICAgICAgICAgZWxzZSAoQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjOyBpbmNyIGkpXG4gICAgICAgIGRvbmU7XG4gICAgICAgIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgICAgIGluXG4gICAgICBTdHJpbmcgKFJlLnJlcGxhY2UgcmUgfmY6ZXhwYW5kIHMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXhwLXJlcGxhY2UtYWxsOiAocmVnZXhwIHN0cmluZyByZXBsYWNlbWVudClcIikpO1xuICByZWdpc3RlciBcInJlZ2V4cC1zcGxpdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4UmVnZXhwIChfLCBfLCByZSk7IFN0cmluZyBzXSAtPlxuICAgICAgTGlzdCAoTGlzdC5tYXAgKGZ1biB4IC0+IFN0cmluZyB4KSAoUmUuc3BsaXQgcmUgcykpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVnZXhwLXNwbGl0OiAocmVnZXhwIHN0cmluZylcIikpO1xuICAoKiBCaXR3aXNlIG9wZXJhdGlvbnMgKilcbiAgcmVnaXN0ZXIgXCJiaXR3aXNlLWFuZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYTsgSW50ZWdlciBiXSAtPiBJbnRlZ2VyIChhIGxhbmQgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJiaXR3aXNlLWFuZDogZXhwZWN0ZWQgKGludGVnZXIgaW50ZWdlcilcIikpO1xuICByZWdpc3RlciBcImJpdHdpc2Utb3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT4gSW50ZWdlciAoYSBsb3IgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJiaXR3aXNlLW9yOiBleHBlY3RlZCAoaW50ZWdlciBpbnRlZ2VyKVwiKSk7XG4gIHJlZ2lzdGVyIFwiYml0d2lzZS14b3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgYl0gLT4gSW50ZWdlciAoYSBseG9yIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYml0d2lzZS14b3I6IGV4cGVjdGVkIChpbnRlZ2VyIGludGVnZXIpXCIpKTtcbiAgcmVnaXN0ZXIgXCJiaXR3aXNlLW5vdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgYV0gLT4gSW50ZWdlciAobG5vdCBhKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJpdHdpc2Utbm90OiBleHBlY3RlZCAoaW50ZWdlcilcIikpO1xuICByZWdpc3RlciBcImFyaXRobWV0aWMtc2hpZnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIGE7IEludGVnZXIgY291bnRdIC0+XG4gICAgICBJbnRlZ2VyIChpZiBjb3VudCA+PSAwIHRoZW4gYSBsc2wgY291bnQgZWxzZSBhIGFzciAoLWNvdW50KSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhcml0aG1ldGljLXNoaWZ0OiBleHBlY3RlZCAoaW50ZWdlciBpbnRlZ2VyKVwiKSk7XG4gIHJlZ2lzdGVyIFwiYml0LWNvdW50XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhXSAtPlxuICAgICAgbGV0IG4gPSByZWYgKGFicyBhKSBpblxuICAgICAgbGV0IGMgPSByZWYgMCBpblxuICAgICAgd2hpbGUgIW4gPD4gMCBkb1xuICAgICAgICBjIDo9ICFjICsgKCFuIGxhbmQgMSk7XG4gICAgICAgIG4gOj0gIW4gbHNyIDFcbiAgICAgIGRvbmU7XG4gICAgICBJbnRlZ2VyICFjXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYml0LWNvdW50OiBleHBlY3RlZCAoaW50ZWdlcilcIikpO1xuICByZWdpc3RlciBcImludGVnZXItbGVuZ3RoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBhXSAtPlxuICAgICAgbGV0IG4gPSByZWYgKGFicyBhKSBpblxuICAgICAgbGV0IGJpdHMgPSByZWYgMCBpblxuICAgICAgd2hpbGUgIW4gPD4gMCBkb1xuICAgICAgICBpbmNyIGJpdHM7XG4gICAgICAgIG4gOj0gIW4gbHNyIDFcbiAgICAgIGRvbmU7XG4gICAgICBJbnRlZ2VyICFiaXRzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW50ZWdlci1sZW5ndGg6IGV4cGVjdGVkIChpbnRlZ2VyKVwiKSk7XG5cbiAgKCogUGhhc2UgMTA6IG11dGFibGUgaGFzaCB0YWJsZXMgKilcbiAgcmVnaXN0ZXIgXCJtYWtlLWhhc2gtdGFibGVcIiAoZnVuIF8gLT4gSGFzaFRhYmxlIChIYXNodGJsLmNyZWF0ZSAxNikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGU/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiaGFzaC10YWJsZS1zZXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0OyBrOyB2XSAtPlxuICAgICAgKHRyeSBIYXNodGJsLnJlcGxhY2UgaHQgayB2XG4gICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAoKiBmYWxsYmFjazogc2NhbiBmb3IgcGh5c2ljYWxseSBlcXVhbCBrZXkgKilcbiAgICAgICAgIGxldCBmb3VuZCA9IHJlZiBmYWxzZSBpblxuICAgICAgICAgSGFzaHRibC5pdGVyIChmdW4gZWsgXyAtPiBpZiBlayA9PSBrIHRoZW4gKEhhc2h0YmwucmVwbGFjZSBodCBlayB2OyBmb3VuZCA6PSB0cnVlKSkgaHQ7XG4gICAgICAgICBpZiBub3QgIWZvdW5kIHRoZW4gSGFzaHRibC5yZXBsYWNlIGh0IGsgdik7XG4gICAgICBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJoYXNoLXRhYmxlLXNldCE6IGV4cGVjdGVkIChodCBrZXkgdmFsKVwiKSk7XG4gIHJlZ2lzdGVyIFwiaGFzaC10YWJsZS1yZWZcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtIYXNoVGFibGUgaHQ7IGtdIC0+XG4gICAgICAodHJ5IEhhc2h0YmwuZmluZCBodCBrXG4gICAgICAgd2l0aCBOb3RfZm91bmQgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiaGFzaC10YWJsZS1yZWY6IGtleSBub3QgZm91bmRcIikpKVxuICAgIHwgW0hhc2hUYWJsZSBodDsgazsgZGVmYXVsdF0gLT5cbiAgICAgICh0cnkgSGFzaHRibC5maW5kIGh0IGsgd2l0aCBOb3RfZm91bmQgLT4gZGVmYXVsdClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJoYXNoLXRhYmxlLXJlZjogZXhwZWN0ZWQgKGh0IGtleSkgb3IgKGh0IGtleSBkZWZhdWx0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiaGFzaC10YWJsZS1kZWxldGUhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0OyBrXSAtPiBIYXNodGJsLnJlbW92ZSBodCBrOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJoYXNoLXRhYmxlLWRlbGV0ZSE6IGV4cGVjdGVkIChodCBrZXkpXCIpKTtcbiAgcmVnaXN0ZXIgXCJoYXNoLXRhYmxlLXNpemVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtIYXNoVGFibGUgaHRdIC0+IEludGVnZXIgKEhhc2h0YmwubGVuZ3RoIGh0KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImhhc2gtdGFibGUtc2l6ZTogZXhwZWN0ZWQgKGh0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiaGFzaC10YWJsZS1rZXlzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0XSAtPiBMaXN0IChIYXNodGJsLmZvbGQgKGZ1biBrIF8gYWNjIC0+IGsgOjogYWNjKSBodCBbXSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJoYXNoLXRhYmxlLWtleXM6IGV4cGVjdGVkIChodClcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtdmFsdWVzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSGFzaFRhYmxlIGh0XSAtPiBMaXN0IChIYXNodGJsLmZvbGQgKGZ1biBfIHYgYWNjIC0+IHYgOjogYWNjKSBodCBbXSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJoYXNoLXRhYmxlLXZhbHVlczogZXhwZWN0ZWQgKGh0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiaGFzaC10YWJsZS0+YWxpc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtIYXNoVGFibGUgaHRdIC0+XG4gICAgICBMaXN0IChIYXNodGJsLmZvbGQgKGZ1biBrIHYgYWNjIC0+IExpc3QgW2s7IHZdIDo6IGFjYykgaHQgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS0+YWxpc3Q6IGV4cGVjdGVkIChodClcIikpO1xuICByZWdpc3RlciBcImhhc2gtdGFibGUtZm9yLWVhY2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtIYXNoVGFibGUgaHQ7IGZuXSAtPlxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+IGlnbm9yZSAoIVN4X3R5cGVzLl9jZWtfY2FsbF9yZWYgZm4gKExpc3QgW2s7IHZdKSkpIGh0O1xuICAgICAgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzaC10YWJsZS1mb3ItZWFjaDogZXhwZWN0ZWQgKGh0IGZuKVwiKSk7XG4gIHJlZ2lzdGVyIFwiaGFzaC10YWJsZS1tZXJnZSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtIYXNoVGFibGUgZHN0OyBIYXNoVGFibGUgc3JjXSAtPlxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+IEhhc2h0YmwucmVwbGFjZSBkc3QgayB2KSBzcmM7XG4gICAgICBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJoYXNoLXRhYmxlLW1lcmdlITogZXhwZWN0ZWQgKGRzdCBzcmMpXCIpKTtcbiAgKCogUGhhc2UgMTE6IHNlcXVlbmNlIHByb3RvY29sICopXG4gIGxldCBzZXFfdG9fbGlzdCB2ID1cbiAgICBtYXRjaCB2IHdpdGhcbiAgICB8IE5pbCAtPiBMaXN0IFtdXG4gICAgfCBMaXN0IF8gLT4gdlxuICAgIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSAtPiBMaXN0IGl0ZW1zXG4gICAgfCBWZWN0b3IgYXJyIC0+IExpc3QgKEFycmF5LnRvX2xpc3QgYXJyKVxuICAgIHwgU3RyaW5nIHMgLT5cbiAgICAgIGxldCBjaGFycyA9IHJlZiBbXSBpblxuICAgICAgU3RyaW5nLml0ZXIgKGZ1biBjIC0+IGNoYXJzIDo9IFN0cmluZyAoU3RyaW5nLm1ha2UgMSBjKSA6OiAhY2hhcnMpIHM7XG4gICAgICBMaXN0IChMaXN0LnJldiAhY2hhcnMpXG4gICAgfCBfIC0+IHZcbiAgaW5cbiAgcmVnaXN0ZXIgXCJzZXEtdG8tbGlzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+IHNlcV90b19saXN0IHZcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXEtdG8tbGlzdDogZXhwZWN0ZWQgMSBhcmdcIikpO1xuICByZWdpc3RlciBcInNlcXVlbmNlLXRvLWxpc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiBzZXFfdG9fbGlzdCB2XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtdG8tbGlzdDogZXhwZWN0ZWQgMSBhcmdcIikpO1xuICByZWdpc3RlciBcInNlcXVlbmNlLXRvLXZlY3RvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+IChtYXRjaCBzZXFfdG9fbGlzdCB2IHdpdGggTGlzdCB4cyAtPiBWZWN0b3IgKEFycmF5Lm9mX2xpc3QgeHMpIHwgeCAtPiB4KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNlcXVlbmNlLXRvLXZlY3RvcjogZXhwZWN0ZWQgMSBhcmdcIikpO1xuICByZWdpc3RlciBcInNlcXVlbmNlLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiBJbnRlZ2VyIChTdHJpbmcubGVuZ3RoIHMpXG4gICAgfCBbVmVjdG9yIGFycl0gLT4gSW50ZWdlciAoQXJyYXkubGVuZ3RoIGFycilcbiAgICB8IFt2XSAtPiAobWF0Y2ggc2VxX3RvX2xpc3QgdiB3aXRoXG4gICAgICAgIHwgTGlzdCB4cyAtPiBJbnRlZ2VyIChMaXN0Lmxlbmd0aCB4cylcbiAgICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtbGVuZ3RoOiBleHBlY3RlZCBzZXF1ZW5jZVwiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXF1ZW5jZS1sZW5ndGg6IGV4cGVjdGVkIDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXF1ZW5jZS1yZWZcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgSW50ZWdlciBpXSAtPlxuICAgICAgaWYgaSA8IDAgfHwgaSA+PSBTdHJpbmcubGVuZ3RoIHNcbiAgICAgIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwic2VxdWVuY2UtcmVmOiBpbmRleCAlZCBvdXQgb2YgYm91bmRzXCIgaSkpXG4gICAgICBlbHNlIFN0cmluZyAoU3RyaW5nLm1ha2UgMSAoU3RyaW5nLmdldCBzIGkpKVxuICAgIHwgW1N0cmluZyBzOyBOdW1iZXIgbl0gLT5cbiAgICAgIGxldCBpID0gaW50X29mX2Zsb2F0IG4gaW5cbiAgICAgIGlmIGkgPCAwIHx8IGkgPj0gU3RyaW5nLmxlbmd0aCBzXG4gICAgICB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcInNlcXVlbmNlLXJlZjogaW5kZXggJWQgb3V0IG9mIGJvdW5kc1wiIGkpKVxuICAgICAgZWxzZSBTdHJpbmcgKFN0cmluZy5tYWtlIDEgKFN0cmluZy5nZXQgcyBpKSlcbiAgICB8IFt2OyBpZHhdIC0+XG4gICAgICBsZXQgbHN0ID0gc2VxX3RvX2xpc3QgdiBpblxuICAgICAgbGV0IGkgPSAobWF0Y2ggaWR4IHdpdGggSW50ZWdlciBuIC0+IG4gfCBOdW1iZXIgbiAtPiBpbnRfb2ZfZmxvYXQgbiB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXF1ZW5jZS1yZWY6IGluZGV4IG11c3QgYmUgbnVtYmVyXCIpKSBpblxuICAgICAgKG1hdGNoIGxzdCB3aXRoXG4gICAgICAgfCBMaXN0IHhzIC0+XG4gICAgICAgICAodHJ5IExpc3QubnRoIHhzIGlcbiAgICAgICAgICB3aXRoIF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwic2VxdWVuY2UtcmVmOiBpbmRleCAlZCBvdXQgb2YgYm91bmRzXCIgaSkpKVxuICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNlcXVlbmNlLXJlZjogZXhwZWN0ZWQgc2VxdWVuY2VcIikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VxdWVuY2UtcmVmOiBleHBlY3RlZCAoc2VxIGluZGV4KVwiKSk7XG4gIHJlZ2lzdGVyIFwic2VxdWVuY2UtYXBwZW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHMxOyBTdHJpbmcgczJdIC0+IFN0cmluZyAoczEgXiBzMilcbiAgICB8IFt2MTsgdjJdIC0+XG4gICAgICBsZXQgbDEgPSBzZXFfdG9fbGlzdCB2MSBpblxuICAgICAgbGV0IGwyID0gc2VxX3RvX2xpc3QgdjIgaW5cbiAgICAgIChtYXRjaCBsMSwgbDIgd2l0aFxuICAgICAgIHwgTGlzdCB4czEsIExpc3QgeHMyIC0+IExpc3QgKHhzMSBAIHhzMilcbiAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXF1ZW5jZS1hcHBlbmQ6IGV4cGVjdGVkIHNlcXVlbmNlc1wiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXF1ZW5jZS1hcHBlbmQ6IGV4cGVjdGVkIDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW4tcmFuZ2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+XG4gICAgICBsZXQgcmVjIGJ1aWxkIGkgYWNjID0gaWYgaSA8IDAgdGhlbiBhY2MgZWxzZSBidWlsZCAoaS0xKSAoSW50ZWdlciBpIDo6IGFjYykgaW5cbiAgICAgIExpc3QgKGJ1aWxkIChuLTEpIFtdKVxuICAgIHwgW051bWJlciBuXSAtPlxuICAgICAgbGV0IGhpID0gaW50X29mX2Zsb2F0IG4gaW5cbiAgICAgIGxldCByZWMgYnVpbGQgaSBhY2MgPSBpZiBpIDwgMCB0aGVuIGFjYyBlbHNlIGJ1aWxkIChpLTEpIChJbnRlZ2VyIGkgOjogYWNjKSBpblxuICAgICAgTGlzdCAoYnVpbGQgKGhpLTEpIFtdKVxuICAgIHwgW0ludGVnZXIgbG87IEludGVnZXIgaGldIC0+XG4gICAgICBsZXQgcmVjIGJ1aWxkIGkgYWNjID0gaWYgaSA8IGxvIHRoZW4gYWNjIGVsc2UgYnVpbGQgKGktMSkgKEludGVnZXIgaSA6OiBhY2MpIGluXG4gICAgICBMaXN0IChidWlsZCAoaGktMSkgW10pXG4gICAgfCBbTnVtYmVyIGxvOyBOdW1iZXIgaGldIC0+XG4gICAgICBsZXQgbG9faSA9IGludF9vZl9mbG9hdCBsbyBhbmQgaGlfaSA9IGludF9vZl9mbG9hdCBoaSBpblxuICAgICAgbGV0IHJlYyBidWlsZCBpIGFjYyA9IGlmIGkgPCBsb19pIHRoZW4gYWNjIGVsc2UgYnVpbGQgKGktMSkgKEludGVnZXIgaSA6OiBhY2MpIGluXG4gICAgICBMaXN0IChidWlsZCAoaGlfaS0xKSBbXSlcbiAgICB8IFtJbnRlZ2VyIGxvOyBJbnRlZ2VyIGhpOyBJbnRlZ2VyIHN0ZXBdIC0+XG4gICAgICBpZiBzdGVwID0gMCB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwiaW4tcmFuZ2U6IHN0ZXAgY2Fubm90IGJlIHplcm9cIik7XG4gICAgICBsZXQgcmVjIGJ1aWxkIGkgYWNjID1cbiAgICAgICAgaWYgKHN0ZXAgPiAwICYmIGkgPj0gaGkpIHx8IChzdGVwIDwgMCAmJiBpIDw9IGhpKSB0aGVuIGFjY1xuICAgICAgICBlbHNlIGJ1aWxkIChpICsgc3RlcCkgKEludGVnZXIgaSA6OiBhY2MpIGluXG4gICAgICBMaXN0IChMaXN0LnJldiAoYnVpbGQgbG8gW10pKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluLXJhbmdlOiBleHBlY3RlZCAoZW5kKSBvciAoc3RhcnQgZW5kKSBvciAoc3RhcnQgZW5kIHN0ZXApXCIpKTtcbiAgKCogPT09IGdlbnN5bSArIHN5bWJvbCBpbnRlcm5pbmcgPT09ICopXG4gIHJlZ2lzdGVyIFwiZ2Vuc3ltXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IHByZWZpeCA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgICAgfCBbXSAtPiBcImdcIlxuICAgICAgfCBbU3RyaW5nIHNdIC0+IHNcbiAgICAgIHwgW1N5bWJvbCBzXSAtPiBzXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJnZW5zeW06IGV4cGVjdGVkIG9wdGlvbmFsIHByZWZpeCBzdHJpbmdcIikgaW5cbiAgICBpbmNyIGdlbnN5bV9jb3VudGVyO1xuICAgIFN5bWJvbCAocHJlZml4IF4gc3RyaW5nX29mX2ludCAhZ2Vuc3ltX2NvdW50ZXIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmctPnN5bWJvbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiBTeW1ib2wgc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy0+c3ltYm9sOiBleHBlY3RlZCAxIHN0cmluZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3ltYm9sLT5zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeW1ib2wgc10gLT4gU3RyaW5nIHNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzeW1ib2wtPnN0cmluZzogZXhwZWN0ZWQgMSBzeW1ib2xcIikpO1xuICByZWdpc3RlciBcImludGVyblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiBTeW1ib2wgc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImludGVybjogZXhwZWN0ZWQgMSBzdHJpbmdcIikpO1xuICByZWdpc3RlciBcInN5bWJvbC1pbnRlcm5lZD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeW1ib2wgX10gLT4gQm9vbCB0cnVlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3ltYm9sLWludGVybmVkPzogZXhwZWN0ZWQgMSBzeW1ib2xcIikpO1xuICAoKiBQaGFzZSAxMzogY2hhcmFjdGVyIHR5cGUgKilcbiAgbGV0IGNoYXJfZG93bmNhc2VfY3AgbiA9XG4gICAgaWYgbiA+PSA2NSAmJiBuIDw9IDkwIHRoZW4gbiArIDMyIGVsc2UgbiBpblxuICBsZXQgY2hhcl91cGNhc2VfY3AgbiA9XG4gICAgaWYgbiA+PSA5NyAmJiBuIDw9IDEyMiB0aGVuIG4gLSAzMiBlbHNlIG4gaW5cbiAgcmVnaXN0ZXIgXCJtYWtlLWNoYXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG5dIC0+IENoYXIgblxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtY2hhcjogZXhwZWN0ZWQgaW50ZWdlciBjb2RlcG9pbnRcIikpO1xuICByZWdpc3RlciBcImNoYXI/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ2hhciBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXI/OiBleHBlY3RlZCAxIGFyZ3VtZW50XCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLT5pbnRlZ2VyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ2hhciBuXSAtPiBJbnRlZ2VyIG5cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLT5pbnRlZ2VyOiBleHBlY3RlZCBjaGFyXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbnRlZ2VyLT5jaGFyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbSW50ZWdlciBuXSAtPiBDaGFyIG5cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbnRlZ2VyLT5jaGFyOiBleHBlY3RlZCBpbnRlZ2VyXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLXVwY2FzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NoYXIgbl0gLT4gQ2hhciAoY2hhcl91cGNhc2VfY3AgbilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLXVwY2FzZTogZXhwZWN0ZWQgY2hhclwiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1kb3duY2FzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NoYXIgbl0gLT4gQ2hhciAoY2hhcl9kb3duY2FzZV9jcCBuKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItZG93bmNhc2U6IGV4cGVjdGVkIGNoYXJcIikpO1xuICByZWdpc3RlciBcImNoYXI9P1wiICAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoYSA9IGIpICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyPT86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXI8P1wiICAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoYSA8IGIpICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyPD86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXI+P1wiICAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoYSA+IGIpICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyPj86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXI8PT9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDaGFyIGE7IENoYXIgYl0gLT4gQm9vbCAoYSA8PSBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyPD0/OiBleHBlY3RlZCAyIGNoYXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyPj0/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ2hhciBhOyBDaGFyIGJdIC0+IEJvb2wgKGEgPj0gYikgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhcj49PzogZXhwZWN0ZWQgMiBjaGFyc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1jaT0/XCIgIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NoYXIgYTsgQ2hhciBiXSAtPiBCb29sIChjaGFyX2Rvd25jYXNlX2NwIGEgPSBjaGFyX2Rvd25jYXNlX2NwIGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItY2k9PzogZXhwZWN0ZWQgMiBjaGFyc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1jaTw/XCIgIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NoYXIgYTsgQ2hhciBiXSAtPiBCb29sIChjaGFyX2Rvd25jYXNlX2NwIGEgPCBjaGFyX2Rvd25jYXNlX2NwIGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItY2k8PzogZXhwZWN0ZWQgMiBjaGFyc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1jaT4/XCIgIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NoYXIgYTsgQ2hhciBiXSAtPiBCb29sIChjaGFyX2Rvd25jYXNlX2NwIGEgPiBjaGFyX2Rvd25jYXNlX2NwIGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItY2k+PzogZXhwZWN0ZWQgMiBjaGFyc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1jaTw9P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NoYXIgYTsgQ2hhciBiXSAtPiBCb29sIChjaGFyX2Rvd25jYXNlX2NwIGEgPD0gY2hhcl9kb3duY2FzZV9jcCBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWNpPD0/OiBleHBlY3RlZCAyIGNoYXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLWNpPj0/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ2hhciBhOyBDaGFyIGJdIC0+IEJvb2wgKGNoYXJfZG93bmNhc2VfY3AgYSA+PSBjaGFyX2Rvd25jYXNlX2NwIGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItY2k+PT86IGV4cGVjdGVkIDIgY2hhcnNcIikpO1xuICByZWdpc3RlciBcImNoYXItYWxwaGFiZXRpYz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG5dIC0+IEJvb2wgKChuID49IDY1ICYmIG4gPD0gOTApIHx8IChuID49IDk3ICYmIG4gPD0gMTIyKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWFscGhhYmV0aWM/OiBleHBlY3RlZCBjaGFyXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLW51bWVyaWM/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ2hhciBuXSAtPiBCb29sIChuID49IDQ4ICYmIG4gPD0gNTcpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1udW1lcmljPzogZXhwZWN0ZWQgY2hhclwiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci13aGl0ZXNwYWNlP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NoYXIgbl0gLT4gQm9vbCAobiA9IDMyIHx8IG4gPSA5IHx8IG4gPSAxMCB8fCBuID0gMTMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci13aGl0ZXNwYWNlPzogZXhwZWN0ZWQgY2hhclwiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci11cHBlci1jYXNlP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NoYXIgbl0gLT4gQm9vbCAobiA+PSA2NSAmJiBuIDw9IDkwKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNoYXItdXBwZXItY2FzZT86IGV4cGVjdGVkIGNoYXJcIikpO1xuICByZWdpc3RlciBcImNoYXItbG93ZXItY2FzZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG5dIC0+IEJvb2wgKG4gPj0gOTcgJiYgbiA8PSAxMjIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1sb3dlci1jYXNlPzogZXhwZWN0ZWQgY2hhclwiKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLT5saXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+XG4gICAgICBsZXQgY2hhcnMgPSByZWYgW10gaW5cbiAgICAgIFN0cmluZy5pdGVyIChmdW4gYyAtPiBjaGFycyA6PSBDaGFyIChDaGFyLmNvZGUgYykgOjogIWNoYXJzKSBzO1xuICAgICAgTGlzdCAoTGlzdC5yZXYgIWNoYXJzKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy0+bGlzdDogZXhwZWN0ZWQgc3RyaW5nXCIpKTtcbiAgcmVnaXN0ZXIgXCJsaXN0LT5zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGNoYXJzXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBjaGFycyB9XSAtPlxuICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKExpc3QubGVuZ3RoIGNoYXJzKSBpblxuICAgICAgTGlzdC5pdGVyIChmdW5jdGlvblxuICAgICAgICB8IENoYXIgbiAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIChDaGFyLmNociAobiBsYW5kIDB4RkYpKVxuICAgICAgICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwibGlzdC0+c3RyaW5nOiBleHBlY3RlZCBjaGFyLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuICAgICAgKSBjaGFycztcbiAgICAgIFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsaXN0LT5zdHJpbmc6IGV4cGVjdGVkIGxpc3Qgb2YgY2hhcnNcIikpO1xuICAoKiBQaGFzZSAxNCDigJQgRU9GIG9iamVjdCArIHN0cmluZyBwb3J0cyAqKVxuICByZWdpc3RlciBcImVvZi1vYmplY3RcIiAoZnVuIF9hcmdzIC0+IEVvZik7XG4gIHJlZ2lzdGVyIFwiZW9mLW9iamVjdD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtFb2ZdIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dICAgLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVvZi1vYmplY3Q/OiBleHBlY3RlZCAxIGFyZ3VtZW50XCIpKTtcbiAgcmVnaXN0ZXIgXCJvcGVuLWlucHV0LXN0cmluZ1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPlxuICAgICAgUG9ydCB7IHNwX2Nsb3NlZCA9IGZhbHNlOyBzcF9raW5kID0gUG9ydElucHV0IChzLCByZWYgMCkgfVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm9wZW4taW5wdXQtc3RyaW5nOiBleHBlY3RlZCBzdHJpbmdcIikpO1xuICByZWdpc3RlciBcIm9wZW4tb3V0cHV0LXN0cmluZ1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gUG9ydCB7IHNwX2Nsb3NlZCA9IGZhbHNlOyBzcF9raW5kID0gUG9ydE91dHB1dCAoQnVmZmVyLmNyZWF0ZSA2NCkgfVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm9wZW4tb3V0cHV0LXN0cmluZzogZXhwZWN0ZWQgbm8gYXJndW1lbnRzXCIpKTtcbiAgcmVnaXN0ZXIgXCJnZXQtb3V0cHV0LXN0cmluZ1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1BvcnQgeyBzcF9raW5kID0gUG9ydE91dHB1dCBidWY7IF8gfV0gLT4gU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImdldC1vdXRwdXQtc3RyaW5nOiBleHBlY3RlZCBvdXRwdXQgcG9ydFwiKSk7XG4gIHJlZ2lzdGVyIFwicG9ydD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtQb3J0IF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dICAgICAgLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBvcnQ/OiBleHBlY3RlZCAxIGFyZ3VtZW50XCIpKTtcbiAgcmVnaXN0ZXIgXCJpbnB1dC1wb3J0P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1BvcnQgeyBzcF9raW5kID0gUG9ydElucHV0IF87IF8gfV0gLT4gQm9vbCB0cnVlXG4gICAgfCBbX10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImlucHV0LXBvcnQ/OiBleHBlY3RlZCAxIGFyZ3VtZW50XCIpKTtcbiAgcmVnaXN0ZXIgXCJvdXRwdXQtcG9ydD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtQb3J0IHsgc3Bfa2luZCA9IFBvcnRPdXRwdXQgXzsgXyB9XSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm91dHB1dC1wb3J0PzogZXhwZWN0ZWQgMSBhcmd1bWVudFwiKSk7XG4gIHJlZ2lzdGVyIFwiY2xvc2UtcG9ydFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1BvcnQgcF0gLT4gcC5zcF9jbG9zZWQgPC0gdHJ1ZTsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2xvc2UtcG9ydDogZXhwZWN0ZWQgcG9ydFwiKSk7XG4gIHJlZ2lzdGVyIFwicmVhZC1jaGFyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlYWQtY2hhcjogbm8gZGVmYXVsdCBwb3J0IGluIHRoaXMgaG9zdFwiKVxuICAgIHwgW1BvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydE91dHB1dCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVhZC1jaGFyOiBleHBlY3RlZCBpbnB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0SW5wdXQgKHNyYywgcG9zKSAtPlxuICAgICAgICAgaWYgcC5zcF9jbG9zZWQgfHwgIXBvcyA+PSBTdHJpbmcubGVuZ3RoIHNyYyB0aGVuIEVvZlxuICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICBsZXQgY3AgPSBDaGFyLmNvZGUgc3JjLlshcG9zXSBpblxuICAgICAgICAgICBpbmNyIHBvcztcbiAgICAgICAgICAgQ2hhciBjcFxuICAgICAgICAgZW5kKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlYWQtY2hhcjogZXhwZWN0ZWQgaW5wdXQgcG9ydFwiKSk7XG4gIHJlZ2lzdGVyIFwicGVlay1jaGFyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBlZWstY2hhcjogbm8gZGVmYXVsdCBwb3J0IGluIHRoaXMgaG9zdFwiKVxuICAgIHwgW1BvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydE91dHB1dCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGVlay1jaGFyOiBleHBlY3RlZCBpbnB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0SW5wdXQgKHNyYywgcG9zKSAtPlxuICAgICAgICAgaWYgcC5zcF9jbG9zZWQgfHwgIXBvcyA+PSBTdHJpbmcubGVuZ3RoIHNyYyB0aGVuIEVvZlxuICAgICAgICAgZWxzZSBDaGFyIChDaGFyLmNvZGUgc3JjLlshcG9zXSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGVlay1jaGFyOiBleHBlY3RlZCBpbnB1dCBwb3J0XCIpKTtcbiAgcmVnaXN0ZXIgXCJyZWFkLWxpbmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVhZC1saW5lOiBubyBkZWZhdWx0IHBvcnQgaW4gdGhpcyBob3N0XCIpXG4gICAgfCBbUG9ydCBwXSAtPlxuICAgICAgKG1hdGNoIHAuc3Bfa2luZCB3aXRoXG4gICAgICAgfCBQb3J0T3V0cHV0IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWFkLWxpbmU6IGV4cGVjdGVkIGlucHV0IHBvcnRcIilcbiAgICAgICB8IFBvcnRJbnB1dCAoc3JjLCBwb3MpIC0+XG4gICAgICAgICBpZiBwLnNwX2Nsb3NlZCB8fCAhcG9zID49IFN0cmluZy5sZW5ndGggc3JjIHRoZW4gRW9mXG4gICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgIGxldCBzdGFydCA9ICFwb3MgaW5cbiAgICAgICAgICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3JjIGluXG4gICAgICAgICAgIHdoaWxlICFwb3MgPCBsZW4gJiYgc3JjLlshcG9zXSA8PiAnXFxuJyBkbyBpbmNyIHBvcyBkb25lO1xuICAgICAgICAgICBsZXQgbGluZSA9IFN0cmluZy5zdWIgc3JjIHN0YXJ0ICghcG9zIC0gc3RhcnQpIGluXG4gICAgICAgICAgIGlmICFwb3MgPCBsZW4gdGhlbiBpbmNyIHBvcztcbiAgICAgICAgICAgU3RyaW5nIGxpbmVcbiAgICAgICAgIGVuZClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWFkLWxpbmU6IGV4cGVjdGVkIGlucHV0IHBvcnRcIikpO1xuICByZWdpc3RlciBcIndyaXRlLWNoYXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDaGFyIG47IFBvcnQgcF0gLT5cbiAgICAgIChtYXRjaCBwLnNwX2tpbmQgd2l0aFxuICAgICAgIHwgUG9ydElucHV0IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ3cml0ZS1jaGFyOiBleHBlY3RlZCBvdXRwdXQgcG9ydFwiKVxuICAgICAgIHwgUG9ydE91dHB1dCBidWYgLT5cbiAgICAgICAgIGlmIG5vdCBwLnNwX2Nsb3NlZCB0aGVuXG4gICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKENoYXIuY2hyIChuIGxhbmQgMHhGRikpO1xuICAgICAgICAgTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIndyaXRlLWNoYXI6IGV4cGVjdGVkIGNoYXIgYW5kIG91dHB1dCBwb3J0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ3cml0ZS1zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgUG9ydCBwXSAtPlxuICAgICAgKG1hdGNoIHAuc3Bfa2luZCB3aXRoXG4gICAgICAgfCBQb3J0SW5wdXQgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIndyaXRlLXN0cmluZzogZXhwZWN0ZWQgb3V0cHV0IHBvcnRcIilcbiAgICAgICB8IFBvcnRPdXRwdXQgYnVmIC0+XG4gICAgICAgICBpZiBub3QgcC5zcF9jbG9zZWQgdGhlbiBCdWZmZXIuYWRkX3N0cmluZyBidWYgcztcbiAgICAgICAgIE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ3cml0ZS1zdHJpbmc6IGV4cGVjdGVkIHN0cmluZyBhbmQgb3V0cHV0IHBvcnRcIikpO1xuICByZWdpc3RlciBcImNoYXItcmVhZHk/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbUG9ydCB7IHNwX2Nsb3NlZCA9IGZhbHNlOyBzcF9raW5kID0gUG9ydElucHV0IChzcmMsIHBvcyk7IF8gfV0gLT5cbiAgICAgIEJvb2wgKCFwb3MgPCBTdHJpbmcubGVuZ3RoIHNyYylcbiAgICB8IFtQb3J0IF9dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLXJlYWR5PzogZXhwZWN0ZWQgaW5wdXQgcG9ydFwiKSlcbjtcbiAgKCogPT09IHJlYWQgLyB3cml0ZSAvIGRpc3BsYXkgPT09ICopXG4gIGxldCByZWMgcmVhZF9wb3N0cHJvY2VzcyA9IGZ1bmN0aW9uXG4gICAgfCBMaXN0IFtdIC0+IE5pbFxuICAgIHwgTGlzdCBpdGVtcyAtPiBMaXN0IChMaXN0Lm1hcCByZWFkX3Bvc3Rwcm9jZXNzIGl0ZW1zKVxuICAgIHwgdiAtPiB2XG4gIGluXG4gIHJlZ2lzdGVyIFwicmVhZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gRW9mXG4gICAgfCBbUG9ydCBwXSAtPlxuICAgICAgKG1hdGNoIHAuc3Bfa2luZCB3aXRoXG4gICAgICAgfCBQb3J0T3V0cHV0IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZWFkOiBleHBlY3RlZCBpbnB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0SW5wdXQgKHNyYywgcG9zKSAtPlxuICAgICAgICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3JjIGluXG4gICAgICAgICBpZiBwLnNwX2Nsb3NlZCB8fCAhcG9zID49IGxlbiB0aGVuIEVvZlxuICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICBsZXQgc3ViID0gU3RyaW5nLnN1YiBzcmMgIXBvcyAobGVuIC0gIXBvcykgaW5cbiAgICAgICAgICAgbGV0IHMgPSBTeF9wYXJzZXIubWFrZV9zdGF0ZSBzdWIgaW5cbiAgICAgICAgICAgU3hfcGFyc2VyLnNraXBfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMgcztcbiAgICAgICAgICAgaWYgU3hfcGFyc2VyLmF0X2VuZCBzIHRoZW4gKHBvcyA6PSBsZW47IEVvZilcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICh0cnkgbGV0IGZvcm0gPSByZWFkX3Bvc3Rwcm9jZXNzIChTeF9wYXJzZXIucmVhZF92YWx1ZSBzKSBpblxuICAgICAgICAgICAgICAgICAgcG9zIDo9ICFwb3MgKyBzLnBvczsgZm9ybVxuICAgICAgICAgICAgICB3aXRoIF8gLT4gcG9zIDo9IGxlbjsgRW9mKVxuICAgICAgICAgZW5kKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlYWQ6IGV4cGVjdGVkIG9wdGlvbmFsIGlucHV0IHBvcnRcIikpO1xuICByZWdpc3RlciBcIndyaXRlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gU3RyaW5nIChzeF93cml0ZV92YWwgdilcbiAgICB8IFt2OyBQb3J0IHBdIC0+XG4gICAgICAobWF0Y2ggcC5zcF9raW5kIHdpdGhcbiAgICAgICB8IFBvcnRJbnB1dCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwid3JpdGU6IGV4cGVjdGVkIG91dHB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0T3V0cHV0IGJ1ZiAtPlxuICAgICAgICAgaWYgbm90IHAuc3BfY2xvc2VkIHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChzeF93cml0ZV92YWwgdik7XG4gICAgICAgICBOaWwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwid3JpdGU6IGV4cGVjdGVkIHZhbCBbcG9ydF1cIikpO1xuICByZWdpc3RlciBcImRpc3BsYXlcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiBTdHJpbmcgKHN4X2Rpc3BsYXlfdmFsIHYpXG4gICAgfCBbdjsgUG9ydCBwXSAtPlxuICAgICAgKG1hdGNoIHAuc3Bfa2luZCB3aXRoXG4gICAgICAgfCBQb3J0SW5wdXQgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpc3BsYXk6IGV4cGVjdGVkIG91dHB1dCBwb3J0XCIpXG4gICAgICAgfCBQb3J0T3V0cHV0IGJ1ZiAtPlxuICAgICAgICAgaWYgbm90IHAuc3BfY2xvc2VkIHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChzeF9kaXNwbGF5X3ZhbCB2KTtcbiAgICAgICAgIE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaXNwbGF5OiBleHBlY3RlZCB2YWwgW3BvcnRdXCIpKTtcbiAgcmVnaXN0ZXIgXCJuZXdsaW5lXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiBOaWxcbiAgICB8IFtQb3J0IHBdIC0+XG4gICAgICAobWF0Y2ggcC5zcF9raW5kIHdpdGhcbiAgICAgICB8IFBvcnRJbnB1dCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibmV3bGluZTogZXhwZWN0ZWQgb3V0cHV0IHBvcnRcIilcbiAgICAgICB8IFBvcnRPdXRwdXQgYnVmIC0+XG4gICAgICAgICBpZiBub3QgcC5zcF9jbG9zZWQgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICAgICAgICAgTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5ld2xpbmU6IGV4cGVjdGVkIG9wdGlvbmFsIG91dHB1dCBwb3J0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ3cml0ZS10by1zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiBTdHJpbmcgKHN4X3dyaXRlX3ZhbCB2KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIndyaXRlLXRvLXN0cmluZzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImRpc3BsYXktdG8tc3RyaW5nXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gU3RyaW5nIChzeF9kaXNwbGF5X3ZhbCB2KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpc3BsYXktdG8tc3RyaW5nOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZm9ybWF0LWRlY2ltYWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIG47IEludGVnZXIgcHJlY10gLT4gU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIiUuKmZcIiBwcmVjIChmbG9hdF9vZl9pbnQgbikpXG4gICAgfCBbTnVtYmVyIG47ICBJbnRlZ2VyIHByZWNdIC0+IFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlLipmXCIgcHJlYyBuKVxuICAgIHwgW0ludGVnZXIgbjsgX10gLT4gU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIiUuNmZcIiAoZmxvYXRfb2ZfaW50IG4pKVxuICAgIHwgW051bWJlciBuOyAgX10gLT4gU3RyaW5nIChQcmludGYuc3ByaW50ZiBcIiUuNmZcIiBuKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZvcm1hdC1kZWNpbWFsOiBleHBlY3RlZCBudW1iZXIgcHJlY2lzaW9uXCIpKTtcbiAgcmVnaXN0ZXIgXCJjdXJyZW50LWlucHV0LXBvcnRcIiAgKGZ1biBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY3VycmVudC1vdXRwdXQtcG9ydFwiIChmdW4gXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImN1cnJlbnQtZXJyb3ItcG9ydFwiICAoZnVuIF8gLT4gTmlsKTtcbiAgKCogLS0tLSBTZXRzIC0tLS0gKilcbiAgbGV0IHNldF9rZXkgdiA9IFN4X3R5cGVzLmluc3BlY3QgdiBpblxuICByZWdpc3RlciBcIm1ha2Utc2V0XCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGh0ID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgIChtYXRjaCBhcmdzIHdpdGhcbiAgICAgfCBbXSAtPiAoKVxuICAgICB8IFtMaXN0IGl0ZW1zXSAtPiBMaXN0Lml0ZXIgKGZ1biB2IC0+IEhhc2h0YmwucmVwbGFjZSBodCAoc2V0X2tleSB2KSB2KSBpdGVtc1xuICAgICB8IFtMaXN0UmVmIHJdIC0+IExpc3QuaXRlciAoZnVuIHYgLT4gSGFzaHRibC5yZXBsYWNlIGh0IChzZXRfa2V5IHYpIHYpICFyXG4gICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc2V0OiBleHBlY3RlZCBvcHRpb25hbCBsaXN0XCIpKTtcbiAgICBTeFNldCBodCk7XG4gIHJlZ2lzdGVyIFwic2V0P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4U2V0IF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQ/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LWFkZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBodDsgdl0gLT4gSGFzaHRibC5yZXBsYWNlIGh0IChzZXRfa2V5IHYpIHY7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1hZGQhOiBleHBlY3RlZCBzZXQgdmFsXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXQtbWVtYmVyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4U2V0IGh0OyB2XSAtPiBCb29sIChIYXNodGJsLm1lbSBodCAoc2V0X2tleSB2KSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtbWVtYmVyPzogZXhwZWN0ZWQgc2V0IHZhbFwiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LXJlbW92ZSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBodDsgdl0gLT4gSGFzaHRibC5yZW1vdmUgaHQgKHNldF9rZXkgdik7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNldC1yZW1vdmUhOiBleHBlY3RlZCBzZXQgdmFsXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXQtc2l6ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4U2V0IGh0XSAtPiBJbnRlZ2VyIChIYXNodGJsLmxlbmd0aCBodClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtc2l6ZTogZXhwZWN0ZWQgc2V0XCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXQtPmxpc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBodF0gLT4gTGlzdCAoSGFzaHRibC5mb2xkIChmdW4gXyB2IGFjYyAtPiB2IDo6IGFjYykgaHQgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LT5saXN0OiBleHBlY3RlZCBzZXRcIikpO1xuICByZWdpc3RlciBcImxpc3QtPnNldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgaXRlbXNdIC0+XG4gICAgICBsZXQgaHQgPSBIYXNodGJsLmNyZWF0ZSAoTGlzdC5sZW5ndGggaXRlbXMpIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IEhhc2h0YmwucmVwbGFjZSBodCAoc2V0X2tleSB2KSB2KSBpdGVtcztcbiAgICAgIFN4U2V0IGh0XG4gICAgfCBbTGlzdFJlZiByXSAtPlxuICAgICAgbGV0IGh0ID0gSGFzaHRibC5jcmVhdGUgKExpc3QubGVuZ3RoICFyKSBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBIYXNodGJsLnJlcGxhY2UgaHQgKHNldF9rZXkgdikgdikgIXI7XG4gICAgICBTeFNldCBodFxuICAgIHwgW05pbF0gLT4gU3hTZXQgKEhhc2h0YmwuY3JlYXRlIDApXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibGlzdC0+c2V0OiBleHBlY3RlZCBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXQtdW5pb25cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBhOyBTeFNldCBiXSAtPlxuICAgICAgbGV0IGh0ID0gSGFzaHRibC5jb3B5IGEgaW5cbiAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBIYXNodGJsLnJlcGxhY2UgaHQgayB2KSBiO1xuICAgICAgU3hTZXQgaHRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtdW5pb246IGV4cGVjdGVkIDIgc2V0c1wiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LWludGVyc2VjdGlvblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4U2V0IGE7IFN4U2V0IGJdIC0+XG4gICAgICBsZXQgaHQgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT4gaWYgSGFzaHRibC5tZW0gYiBrIHRoZW4gSGFzaHRibC5yZXBsYWNlIGh0IGsgdikgYTtcbiAgICAgIFN4U2V0IGh0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LWludGVyc2VjdGlvbjogZXhwZWN0ZWQgMiBzZXRzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXQtZGlmZmVyZW5jZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4U2V0IGE7IFN4U2V0IGJdIC0+XG4gICAgICBsZXQgaHQgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT4gaWYgbm90IChIYXNodGJsLm1lbSBiIGspIHRoZW4gSGFzaHRibC5yZXBsYWNlIGh0IGsgdikgYTtcbiAgICAgIFN4U2V0IGh0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LWRpZmZlcmVuY2U6IGV4cGVjdGVkIDIgc2V0c1wiKSk7XG4gIHJlZ2lzdGVyIFwic2V0LWZvci1lYWNoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hTZXQgaHQ7IGZuXSAtPlxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gXyB2IC0+IGlnbm9yZSAoIVN4X3R5cGVzLl9jZWtfY2FsbF9yZWYgZm4gKExpc3QgW3ZdKSkpIGh0O1xuICAgICAgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LWZvci1lYWNoOiBleHBlY3RlZCBzZXQgZm5cIikpO1xuICByZWdpc3RlciBcInNldC1tYXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeFNldCBodDsgZm5dIC0+XG4gICAgICBsZXQgb3V0ID0gSGFzaHRibC5jcmVhdGUgKEhhc2h0YmwubGVuZ3RoIGh0KSBpblxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gXyB2IC0+XG4gICAgICAgIGxldCByID0gIVN4X3R5cGVzLl9jZWtfY2FsbF9yZWYgZm4gKExpc3QgW3ZdKSBpblxuICAgICAgICBIYXNodGJsLnJlcGxhY2Ugb3V0IChzZXRfa2V5IHIpIHIpIGh0O1xuICAgICAgU3hTZXQgb3V0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LW1hcDogZXhwZWN0ZWQgc2V0IGZuXCIpKTtcbiAgKCogPT09IEJ5dGV2ZWN0b3JzID09PSAqKVxuICByZWdpc3RlciBcIm1ha2UtYnl0ZXZlY3RvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0ludGVnZXIgbl0gLT4gU3hCeXRldmVjdG9yIChCeXRlcy5tYWtlIG4gJ1xcMDAwJylcbiAgICB8IFtJbnRlZ2VyIG47IEludGVnZXIgZmlsbF0gLT5cbiAgICAgIGlmIGZpbGwgPCAwIHx8IGZpbGwgPiAyNTUgdGhlbiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtYnl0ZXZlY3RvcjogZmlsbCBtdXN0IGJlIDAtMjU1XCIpO1xuICAgICAgU3hCeXRldmVjdG9yIChCeXRlcy5tYWtlIG4gKENoYXIuY2hyIGZpbGwpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtYnl0ZXZlY3RvcjogZXhwZWN0ZWQgbiBbZmlsbF1cIikpO1xuICByZWdpc3RlciBcImJ5dGV2ZWN0b3I/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hCeXRldmVjdG9yIF9dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImJ5dGV2ZWN0b3ItbGVuZ3RoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3hCeXRldmVjdG9yIGJdIC0+IEludGVnZXIgKEJ5dGVzLmxlbmd0aCBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ5dGV2ZWN0b3ItbGVuZ3RoOiBleHBlY3RlZCBieXRldmVjdG9yXCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yLXU4LXJlZlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4Qnl0ZXZlY3RvciBiOyBJbnRlZ2VyIGldIC0+XG4gICAgICBpZiBpIDwgMCB8fCBpID49IEJ5dGVzLmxlbmd0aCBiIHRoZW5cbiAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiYnl0ZXZlY3Rvci11OC1yZWY6IGluZGV4ICVkIG91dCBvZiByYW5nZVwiIGkpKTtcbiAgICAgIEludGVnZXIgKENoYXIuY29kZSAoQnl0ZXMuZ2V0IGIgaSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnl0ZXZlY3Rvci11OC1yZWY6IGV4cGVjdGVkIGJ5dGV2ZWN0b3IgaW5kZXhcIikpO1xuICByZWdpc3RlciBcImJ5dGV2ZWN0b3ItdTgtc2V0IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N4Qnl0ZXZlY3RvciBiOyBJbnRlZ2VyIGk7IEludGVnZXIgYnl0ZV0gLT5cbiAgICAgIGlmIGkgPCAwIHx8IGkgPj0gQnl0ZXMubGVuZ3RoIGIgdGhlblxuICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJieXRldmVjdG9yLXU4LXNldCE6IGluZGV4ICVkIG91dCBvZiByYW5nZVwiIGkpKTtcbiAgICAgIGlmIGJ5dGUgPCAwIHx8IGJ5dGUgPiAyNTUgdGhlblxuICAgICAgICByYWlzZSAoRXZhbF9lcnJvciBcImJ5dGV2ZWN0b3ItdTgtc2V0ITogYnl0ZSBtdXN0IGJlIDAtMjU1XCIpO1xuICAgICAgQnl0ZXMuc2V0IGIgaSAoQ2hhci5jaHIgYnl0ZSk7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ5dGV2ZWN0b3ItdTgtc2V0ITogZXhwZWN0ZWQgYnl0ZXZlY3RvciBpbmRleCBieXRlXCIpKTtcbiAgcmVnaXN0ZXIgXCJieXRldmVjdG9yLWNvcHlcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgYl0gLT4gU3hCeXRldmVjdG9yIChCeXRlcy5jb3B5IGIpXG4gICAgfCBbU3hCeXRldmVjdG9yIGI7IEludGVnZXIgc3RhcnRdIC0+XG4gICAgICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGIgLSBzdGFydCBpblxuICAgICAgU3hCeXRldmVjdG9yIChCeXRlcy5zdWIgYiBzdGFydCBsZW4pXG4gICAgfCBbU3hCeXRldmVjdG9yIGI7IEludGVnZXIgc3RhcnQ7IEludGVnZXIgc3RvcF0gLT5cbiAgICAgIFN4Qnl0ZXZlY3RvciAoQnl0ZXMuc3ViIGIgc3RhcnQgKHN0b3AgLSBzdGFydCkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYnl0ZXZlY3Rvci1jb3B5OiBleHBlY3RlZCBieXRldmVjdG9yIFtzdGFydCBbZW5kXV1cIikpO1xuICByZWdpc3RlciBcImJ5dGV2ZWN0b3ItY29weSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgZG9fY29weSBkc3QgYXQgc3JjIHN0YXJ0IHN0b3AgPVxuICAgICAgbGV0IGxlbiA9IHN0b3AgLSBzdGFydCBpblxuICAgICAgQnl0ZXMuYmxpdCBzcmMgc3RhcnQgZHN0IGF0IGxlbjsgTmlsXG4gICAgaW5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgZHN0OyBJbnRlZ2VyIGF0OyBTeEJ5dGV2ZWN0b3Igc3JjXSAtPlxuICAgICAgZG9fY29weSBkc3QgYXQgc3JjIDAgKEJ5dGVzLmxlbmd0aCBzcmMpXG4gICAgfCBbU3hCeXRldmVjdG9yIGRzdDsgSW50ZWdlciBhdDsgU3hCeXRldmVjdG9yIHNyYzsgSW50ZWdlciBzdGFydF0gLT5cbiAgICAgIGRvX2NvcHkgZHN0IGF0IHNyYyBzdGFydCAoQnl0ZXMubGVuZ3RoIHNyYylcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgZHN0OyBJbnRlZ2VyIGF0OyBTeEJ5dGV2ZWN0b3Igc3JjOyBJbnRlZ2VyIHN0YXJ0OyBJbnRlZ2VyIHN0b3BdIC0+XG4gICAgICBkb19jb3B5IGRzdCBhdCBzcmMgc3RhcnQgc3RvcFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJ5dGV2ZWN0b3ItY29weSE6IGV4cGVjdGVkIGRzdCBhdCBzcmMgW3N0YXJ0IFtlbmRdXVwiKSk7XG4gIHJlZ2lzdGVyIFwiYnl0ZXZlY3Rvci1hcHBlbmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgYnVmcyA9IExpc3QubWFwIChmdW5jdGlvblxuICAgICAgfCBTeEJ5dGV2ZWN0b3IgYiAtPiBiXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yLWFwcGVuZDogZXhwZWN0ZWQgYnl0ZXZlY3RvcnNcIikpIGFyZ3MgaW5cbiAgICBsZXQgdG90YWwgPSBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBiIC0+IGFjYyArIEJ5dGVzLmxlbmd0aCBiKSAwIGJ1ZnMgaW5cbiAgICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIHRvdGFsIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgTGlzdC5pdGVyIChmdW4gYiAtPlxuICAgICAgbGV0IGxlbiA9IEJ5dGVzLmxlbmd0aCBiIGluXG4gICAgICBCeXRlcy5ibGl0IGIgMCByZXN1bHQgIXBvcyBsZW47XG4gICAgICBwb3MgOj0gIXBvcyArIGxlbikgYnVmcztcbiAgICBTeEJ5dGV2ZWN0b3IgcmVzdWx0KTtcbiAgcmVnaXN0ZXIgXCJ1dGY4LT5zdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgYl0gLT4gU3RyaW5nIChCeXRlcy50b19zdHJpbmcgYilcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgYjsgSW50ZWdlciBzdGFydF0gLT5cbiAgICAgIFN0cmluZyAoQnl0ZXMuc3ViX3N0cmluZyBiIHN0YXJ0IChCeXRlcy5sZW5ndGggYiAtIHN0YXJ0KSlcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgYjsgSW50ZWdlciBzdGFydDsgSW50ZWdlciBzdG9wXSAtPlxuICAgICAgU3RyaW5nIChCeXRlcy5zdWJfc3RyaW5nIGIgc3RhcnQgKHN0b3AgLSBzdGFydCkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidXRmOC0+c3RyaW5nOiBleHBlY3RlZCBieXRldmVjdG9yIFtzdGFydCBbZW5kXV1cIikpO1xuICByZWdpc3RlciBcInN0cmluZy0+dXRmOFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiBTeEJ5dGV2ZWN0b3IgKEJ5dGVzLm9mX3N0cmluZyBzKVxuICAgIHwgW1N0cmluZyBzOyBJbnRlZ2VyIHN0YXJ0XSAtPlxuICAgICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyAtIHN0YXJ0IGluXG4gICAgICBTeEJ5dGV2ZWN0b3IgKEJ5dGVzLm9mX3N0cmluZyAoU3RyaW5nLnN1YiBzIHN0YXJ0IGxlbikpXG4gICAgfCBbU3RyaW5nIHM7IEludGVnZXIgc3RhcnQ7IEludGVnZXIgc3RvcF0gLT5cbiAgICAgIFN4Qnl0ZXZlY3RvciAoQnl0ZXMub2Zfc3RyaW5nIChTdHJpbmcuc3ViIHMgc3RhcnQgKHN0b3AgLSBzdGFydCkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy0+dXRmODogZXhwZWN0ZWQgc3RyaW5nIFtzdGFydCBbZW5kXV1cIikpO1xuICByZWdpc3RlciBcImJ5dGV2ZWN0b3ItPmxpc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEJ5dGV2ZWN0b3IgYl0gLT5cbiAgICAgIGxldCBpdGVtcyA9IExpc3QuaW5pdCAoQnl0ZXMubGVuZ3RoIGIpIChmdW4gaSAtPiBJbnRlZ2VyIChDaGFyLmNvZGUgKEJ5dGVzLmdldCBiIGkpKSkgaW5cbiAgICAgIExpc3QgaXRlbXNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJieXRldmVjdG9yLT5saXN0OiBleHBlY3RlZCBieXRldmVjdG9yXCIpKTtcbiAgcmVnaXN0ZXIgXCJsaXN0LT5ieXRldmVjdG9yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBpdGVtc10gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfV0gLT5cbiAgICAgIGxldCBieXRlc19saXN0ID0gTGlzdC5tYXAgKGZ1bmN0aW9uXG4gICAgICAgIHwgSW50ZWdlciBuIHdoZW4gbiA+PSAwICYmIG4gPD0gMjU1IC0+IENoYXIuY2hyIG5cbiAgICAgICAgfCBJbnRlZ2VyIG4gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwibGlzdC0+Ynl0ZXZlY3RvcjogYnl0ZSAlZCBvdXQgb2YgcmFuZ2VcIiBuKSlcbiAgICAgICAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImxpc3QtPmJ5dGV2ZWN0b3I6IGV4cGVjdGVkIGludGVnZXIsIGdvdCBcIiBeIFN4X3R5cGVzLnR5cGVfb2YgdikpKSBpdGVtcyBpblxuICAgICAgbGV0IGIgPSBCeXRlcy5jcmVhdGUgKExpc3QubGVuZ3RoIGJ5dGVzX2xpc3QpIGluXG4gICAgICBMaXN0Lml0ZXJpIChmdW4gaSBjIC0+IEJ5dGVzLnNldCBiIGkgYykgYnl0ZXNfbGlzdDtcbiAgICAgIFN4Qnl0ZXZlY3RvciBiXG4gICAgfCBbTmlsXSAtPiBTeEJ5dGV2ZWN0b3IgKEJ5dGVzLmNyZWF0ZSAwKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxpc3QtPmJ5dGV2ZWN0b3I6IGV4cGVjdGVkIGxpc3RcIikpO1xuXG4gICgqID09PSBGaWxlIEkvTyA9PT0gKilcbiAgcmVnaXN0ZXIgXCJmaWxlLXJlYWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0aF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IGljID0gb3Blbl9pbiBwYXRoIGluXG4gICAgICAgIGxldCBuID0gaW5fY2hhbm5lbF9sZW5ndGggaWMgaW5cbiAgICAgICAgbGV0IHMgPSBCeXRlcy5jcmVhdGUgbiBpblxuICAgICAgICByZWFsbHlfaW5wdXQgaWMgcyAwIG47XG4gICAgICAgIGNsb3NlX2luIGljO1xuICAgICAgICBTdHJpbmcgKEJ5dGVzLnRvX3N0cmluZyBzKVxuICAgICAgd2l0aCBTeXNfZXJyb3IgbXNnIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpbGUtcmVhZDogXCIgXiBtc2cpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLXJlYWQ6IChwYXRoKVwiKSk7XG5cbiAgcmVnaXN0ZXIgXCJmaWxlLXdyaXRlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdGg7IFN0cmluZyBjb250ZW50XSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgb2MgPSBvcGVuX291dCBwYXRoIGluXG4gICAgICAgIG91dHB1dF9zdHJpbmcgb2MgY29udGVudDtcbiAgICAgICAgY2xvc2Vfb3V0IG9jO1xuICAgICAgICBOaWxcbiAgICAgIHdpdGggU3lzX2Vycm9yIG1zZyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJmaWxlLXdyaXRlOiBcIiBeIG1zZykpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpbGUtd3JpdGU6IChwYXRoIGNvbnRlbnQpXCIpKTtcblxuICByZWdpc3RlciBcImZpbGUtYXBwZW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdGg7IFN0cmluZyBjb250ZW50XSAtPlxuICAgICAgKHRyeVxuICAgICAgICBsZXQgb2MgPSBvcGVuX291dF9nZW4gW09wZW5fYXBwZW5kOyBPcGVuX2NyZWF0OyBPcGVuX3dyb25seTsgT3Blbl90ZXh0XSAwbzY0NCBwYXRoIGluXG4gICAgICAgIG91dHB1dF9zdHJpbmcgb2MgY29udGVudDtcbiAgICAgICAgY2xvc2Vfb3V0IG9jO1xuICAgICAgICBOaWxcbiAgICAgIHdpdGggU3lzX2Vycm9yIG1zZyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJmaWxlLWFwcGVuZDogXCIgXiBtc2cpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWxlLWFwcGVuZDogKHBhdGggY29udGVudClcIikpO1xuXG4gIHJlZ2lzdGVyIFwiZmlsZS1leGlzdHM/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHBhdGhdIC0+IEJvb2wgKFN5cy5maWxlX2V4aXN0cyBwYXRoKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpbGUtZXhpc3RzPzogKHBhdGgpXCIpKTtcblxuICByZWdpc3RlciBcImZpbGUtZ2xvYlwiIChmdW4gYXJncyAtPlxuICAgIGxldCBnbG9iX21hdGNoIHBhdCBzdHIgPVxuICAgICAgbGV0IHBuID0gU3RyaW5nLmxlbmd0aCBwYXQgYW5kIHNuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICAgIGxldCByZWMgZ28gcGkgc2kgPVxuICAgICAgICBpZiBwaSA9IHBuIHRoZW4gc2kgPSBzblxuICAgICAgICBlbHNlIG1hdGNoIHBhdC5bcGldIHdpdGhcbiAgICAgICAgICB8ICcqJyAtPlxuICAgICAgICAgICAgbGV0IHJlYyB0cnlfZnJvbSBpID0gaSA8PSBzbiAmJiAoZ28gKHBpKzEpIGkgfHwgdHJ5X2Zyb20gKGkrMSkpIGluXG4gICAgICAgICAgICB0cnlfZnJvbSBzaVxuICAgICAgICAgIHwgJz8nIC0+IHNpIDwgc24gJiYgZ28gKHBpKzEpIChzaSsxKVxuICAgICAgICAgIHwgJ1snIC0+XG4gICAgICAgICAgICBsZXQgcGknID0gcmVmIChwaSsxKSBpblxuICAgICAgICAgICAgbGV0IG5lZ2F0ZSA9ICFwaScgPCBwbiAmJiBwYXQuWyFwaSddID0gJ14nIGluXG4gICAgICAgICAgICBpZiBuZWdhdGUgdGhlbiBpbmNyIHBpJztcbiAgICAgICAgICAgIGxldCBtYXRjaGVkID0gcmVmIGZhbHNlIGluXG4gICAgICAgICAgICB3aGlsZSAhcGknIDwgcG4gJiYgcGF0LlshcGknXSA8PiAnXScgZG9cbiAgICAgICAgICAgICAgbGV0IGMxID0gcGF0LlshcGknXSBpblxuICAgICAgICAgICAgICBpbmNyIHBpJztcbiAgICAgICAgICAgICAgaWYgIXBpJyArIDEgPCBwbiAmJiBwYXQuWyFwaSddID0gJy0nIHRoZW4gYmVnaW5cbiAgICAgICAgICAgICAgICBsZXQgYzIgPSBwYXQuWyFwaScgKyAxXSBpblxuICAgICAgICAgICAgICAgIHBpJyA6PSAhcGknICsgMjtcbiAgICAgICAgICAgICAgICBpZiBzaSA8IHNuICYmIHN0ci5bc2ldID49IGMxICYmIHN0ci5bc2ldIDw9IGMyIHRoZW4gbWF0Y2hlZCA6PSB0cnVlXG4gICAgICAgICAgICAgIGVuZCBlbHNlIGlmIHNpIDwgc24gJiYgc3RyLltzaV0gPSBjMSB0aGVuIG1hdGNoZWQgOj0gdHJ1ZVxuICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgIGlmICFwaScgPCBwbiB0aGVuIGluY3IgcGknO1xuICAgICAgICAgICAgKCghbWF0Y2hlZCAmJiBub3QgbmVnYXRlKSB8fCAobm90ICFtYXRjaGVkICYmIG5lZ2F0ZSkpICYmIGdvICFwaScgKHNpKzEpXG4gICAgICAgICAgfCBjIC0+IHNpIDwgc24gJiYgc3RyLltzaV0gPSBjICYmIGdvIChwaSsxKSAoc2krMSlcbiAgICAgIGluIGdvIDAgMFxuICAgIGluXG4gICAgbGV0IGdsb2JfcGF0aHMgcGF0ID1cbiAgICAgIGxldCBkaXIgPSBGaWxlbmFtZS5kaXJuYW1lIHBhdCBpblxuICAgICAgbGV0IGJhc2VfcGF0ID0gRmlsZW5hbWUuYmFzZW5hbWUgcGF0IGluXG4gICAgICBsZXQgZGlyJyA9IGlmIGRpciA9IFwiLlwiICYmIG5vdCAoU3RyaW5nLmxlbmd0aCBwYXQgPiAxICYmIHBhdC5bMF0gPSAnLicpIHRoZW4gXCIuXCIgZWxzZSBkaXIgaW5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IGVudHJpZXMgPSBTeXMucmVhZGRpciBkaXInIGluXG4gICAgICAgIEFycmF5LmZvbGRfbGVmdCAoZnVuIGFjYyBlbnRyeSAtPlxuICAgICAgICAgIGlmIGdsb2JfbWF0Y2ggYmFzZV9wYXQgZW50cnkgdGhlblxuICAgICAgICAgICAgbGV0IGZ1bGwgPSBpZiBkaXInID0gXCIuXCIgdGhlbiBlbnRyeSBlbHNlIEZpbGVuYW1lLmNvbmNhdCBkaXInIGVudHJ5IGluXG4gICAgICAgICAgICBmdWxsIDo6IGFjY1xuICAgICAgICAgIGVsc2UgYWNjXG4gICAgICAgICkgW10gZW50cmllc1xuICAgICAgICB8PiBMaXN0LnNvcnQgU3RyaW5nLmNvbXBhcmVcbiAgICAgIHdpdGggU3lzX2Vycm9yIF8gLT4gW10pXG4gICAgaW5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgcGF0XSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIChnbG9iX3BhdGhzIHBhdCkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmlsZS1nbG9iOiAocGF0dGVybilcIikpO1xuXG4gICgqID09PSBDbG9jayA9PT0gKilcbiAgcmVnaXN0ZXIgXCJjbG9jay1zZWNvbmRzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiBJbnRlZ2VyIChpbnRfb2ZfZmxvYXQgKFVuaXguZ2V0dGltZW9mZGF5ICgpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjbG9jay1zZWNvbmRzOiBubyBhcmdzXCIpKTtcblxuICByZWdpc3RlciBcImNsb2NrLW1pbGxpc2Vjb25kc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gSW50ZWdlciAoaW50X29mX2Zsb2F0IChVbml4LmdldHRpbWVvZmRheSAoKSAqLiAxMDAwLjApKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNsb2NrLW1pbGxpc2Vjb25kczogbm8gYXJnc1wiKSk7XG5cbiAgcmVnaXN0ZXIgXCJjbG9jay1mb3JtYXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtJbnRlZ2VyIHRdIHwgW0ludGVnZXIgdDsgU3RyaW5nIF9dIC0+XG4gICAgICBsZXQgZm10ID0gKG1hdGNoIGFyZ3Mgd2l0aCBbXzsgU3RyaW5nIGZdIC0+IGYgfCBfIC0+IFwiJWEgJWIgJWUgJUg6JU06JVMgJVogJVlcIikgaW5cbiAgICAgIGxldCB0bSA9IFVuaXguZ210aW1lIChmbG9hdF9vZl9pbnQgdCkgaW5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gICAgICBsZXQgbiA9IFN0cmluZy5sZW5ndGggZm10IGluXG4gICAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgICB3aGlsZSAhaSA8IG4gZG9cbiAgICAgICAgaWYgZm10LlshaV0gPSAnJScgJiYgIWkgKyAxIDwgbiB0aGVuIGJlZ2luXG4gICAgICAgICAgKG1hdGNoIGZtdC5bIWkgKyAxXSB3aXRoXG4gICAgICAgICAgIHwgJ1knIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDRkXCIgKDE5MDAgKyB0bS5Vbml4LnRtX3llYXIpKVxuICAgICAgICAgICB8ICdtJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTAyZFwiICh0bS5Vbml4LnRtX21vbiArIDEpKVxuICAgICAgICAgICB8ICdkJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTAyZFwiIHRtLlVuaXgudG1fbWRheSlcbiAgICAgICAgICAgfCAnZScgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIiUyZFwiICB0bS5Vbml4LnRtX21kYXkpXG4gICAgICAgICAgIHwgJ0gnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCIlMDJkXCIgdG0uVW5peC50bV9ob3VyKVxuICAgICAgICAgICB8ICdNJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTAyZFwiIHRtLlVuaXgudG1fbWluKVxuICAgICAgICAgICB8ICdTJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTAyZFwiIHRtLlVuaXgudG1fc2VjKVxuICAgICAgICAgICB8ICdqJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKFByaW50Zi5zcHJpbnRmIFwiJTAzZFwiICh0bS5Vbml4LnRtX3lkYXkgKyAxKSlcbiAgICAgICAgICAgfCAnWicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiVVRDXCJcbiAgICAgICAgICAgfCAnYScgLT4gbGV0IGRheXMgPSBbfFwiU3VuXCI7XCJNb25cIjtcIlR1ZVwiO1wiV2VkXCI7XCJUaHVcIjtcIkZyaVwiO1wiU2F0XCJ8XSBpblxuICAgICAgICAgICAgICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgZGF5cy4odG0uVW5peC50bV93ZGF5KVxuICAgICAgICAgICB8ICdBJyAtPiBsZXQgZGF5cyA9IFt8XCJTdW5kYXlcIjtcIk1vbmRheVwiO1wiVHVlc2RheVwiO1wiV2VkbmVzZGF5XCI7XCJUaHVyc2RheVwiO1wiRnJpZGF5XCI7XCJTYXR1cmRheVwifF0gaW5cbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGRheXMuKHRtLlVuaXgudG1fd2RheSlcbiAgICAgICAgICAgfCAnYicgfCAnaCcgLT4gbGV0IG1vbnMgPSBbfFwiSmFuXCI7XCJGZWJcIjtcIk1hclwiO1wiQXByXCI7XCJNYXlcIjtcIkp1blwiO1wiSnVsXCI7XCJBdWdcIjtcIlNlcFwiO1wiT2N0XCI7XCJOb3ZcIjtcIkRlY1wifF0gaW5cbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIG1vbnMuKHRtLlVuaXgudG1fbW9uKVxuICAgICAgICAgICB8ICdCJyAtPiBsZXQgbW9ucyA9IFt8XCJKYW51YXJ5XCI7XCJGZWJydWFyeVwiO1wiTWFyY2hcIjtcIkFwcmlsXCI7XCJNYXlcIjtcIkp1bmVcIjtcIkp1bHlcIjtcIkF1Z3VzdFwiO1wiU2VwdGVtYmVyXCI7XCJPY3RvYmVyXCI7XCJOb3ZlbWJlclwiO1wiRGVjZW1iZXJcInxdIGluXG4gICAgICAgICAgICAgICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBtb25zLih0bS5Vbml4LnRtX21vbilcbiAgICAgICAgICAgfCBjIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJyUnOyBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpO1xuICAgICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBmbXQuWyFpXTtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgZW5kXG4gICAgICBkb25lO1xuICAgICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNsb2NrLWZvcm1hdDogKHNlY29uZHMgW2Zvcm1hdF0pXCIpKTtcblxuICAoKiBKSVQgY2FjaGUgY29udHJvbCAmIG9ic2VydmFiaWxpdHkg4oCUIGJhY2tlZCBieSByZWZzIGluIHN4X3R5cGVzLm1sIHRvXG4gICAgIGF2b2lkIGNyZWF0aW5nIGEgc3hfcHJpbWl0aXZlcyDihpIgc3hfdm0gZGVwZW5kZW5jeSBjeWNsZS4gc3hfdm0gcmVhZHNcbiAgICAgdGhlc2UgcmVmcyB0byBkZWNpZGUgd2hlbiB0byBKSVQuICopXG4gIHJlZ2lzdGVyIFwiaml0LXN0YXRzXCIgKGZ1biBfYXJncyAtPlxuICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidGhyZXNob2xkXCIgICAgICAgIChOdW1iZXIgKGZsb2F0X29mX2ludCAhU3hfdHlwZXMuaml0X3RocmVzaG9sZCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiYnVkZ2V0XCIgICAgICAgICAgIChOdW1iZXIgKGZsb2F0X29mX2ludCAhU3hfdHlwZXMuaml0X2J1ZGdldCkpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiY2FjaGUtc2l6ZVwiICAgICAgIChOdW1iZXIgKGZsb2F0X29mX2ludCAoU3hfdHlwZXMuaml0X2NhY2hlX3NpemUgKCkpKSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb21waWxlZFwiICAgICAgICAgKE51bWJlciAoZmxvYXRfb2ZfaW50ICFTeF90eXBlcy5qaXRfY29tcGlsZWRfY291bnQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbXBpbGUtZmFpbGVkXCIgICAoTnVtYmVyIChmbG9hdF9vZl9pbnQgIVN4X3R5cGVzLmppdF9za2lwcGVkX2NvdW50KSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJiZWxvdy10aHJlc2hvbGRcIiAgKE51bWJlciAoZmxvYXRfb2ZfaW50ICFTeF90eXBlcy5qaXRfdGhyZXNob2xkX3NraXBwZWRfY291bnQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcImV2aWN0ZWRcIiAgICAgICAgICAoTnVtYmVyIChmbG9hdF9vZl9pbnQgIVN4X3R5cGVzLmppdF9ldmljdGVkX2NvdW50KSk7XG4gICAgRGljdCBkKTtcbiAgcmVnaXN0ZXIgXCJqaXQtc2V0LXRocmVzaG9sZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtOdW1iZXIgbl0gLT4gU3hfdHlwZXMuaml0X3RocmVzaG9sZCA6PSBpbnRfb2ZfZmxvYXQgbjsgTmlsXG4gICAgfCBbSW50ZWdlciBuXSAtPiBTeF90eXBlcy5qaXRfdGhyZXNob2xkIDo9IG47IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImppdC1zZXQtdGhyZXNob2xkITogKG4pIHdoZXJlIG4gaXMgaW50ZWdlclwiKSk7XG4gIHJlZ2lzdGVyIFwiaml0LXNldC1idWRnZXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTnVtYmVyIG5dIC0+IFN4X3R5cGVzLmppdF9idWRnZXQgOj0gaW50X29mX2Zsb2F0IG47IE5pbFxuICAgIHwgW0ludGVnZXIgbl0gLT4gU3hfdHlwZXMuaml0X2J1ZGdldCA6PSBuOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJqaXQtc2V0LWJ1ZGdldCE6IChuKSB3aGVyZSBuIGlzIGludGVnZXJcIikpO1xuICByZWdpc3RlciBcImppdC1yZXNldC1jYWNoZSFcIiAoZnVuIF9hcmdzIC0+XG4gICAgKCogUGhhc2UgMyBtYW51YWwgY2FjaGUgcmVzZXQg4oCUIGNsZWFyIGFsbCBjb21waWxlZCBWbUNsb3N1cmVzLlxuICAgICAgIEhvdCBwYXRocyB3aWxsIHJlLUpJVCBvbiBuZXh0IGNhbGwgKGFmdGVyIHJlLWhpdHRpbmcgdGhyZXNob2xkKS4gKilcbiAgICBRdWV1ZS5pdGVyIChmdW4gKF8sIHYpIC0+XG4gICAgICBtYXRjaCB2IHdpdGggTGFtYmRhIGwgLT4gbC5sX2NvbXBpbGVkIDwtIE5vbmUgfCBfIC0+ICgpXG4gICAgKSBTeF90eXBlcy5qaXRfY2FjaGVfcXVldWU7XG4gICAgUXVldWUuY2xlYXIgU3hfdHlwZXMuaml0X2NhY2hlX3F1ZXVlO1xuICAgIE5pbCk7XG4gIHJlZ2lzdGVyIFwiaml0LXJlc2V0LWNvdW50ZXJzIVwiIChmdW4gX2FyZ3MgLT5cbiAgICBTeF90eXBlcy5qaXRfY29tcGlsZWRfY291bnQgOj0gMDtcbiAgICBTeF90eXBlcy5qaXRfc2tpcHBlZF9jb3VudCA6PSAwO1xuICAgIFN4X3R5cGVzLmppdF90aHJlc2hvbGRfc2tpcHBlZF9jb3VudCA6PSAwO1xuICAgIFN4X3R5cGVzLmppdF9ldmljdGVkX2NvdW50IDo9IDA7XG4gICAgTmlsKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX2dldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9kaXYiLCJjYW1sX2VxdWFsIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJjYW1sX2ludF9vZl9zdHJpbmciLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfYnl0ZXNfbGVuZ3RoIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9tb2QiLCJjYW1sX211bCIsImNhbWxfb2JqX2R1cCIsImNhbWxfcm91bmRfZmxvYXQiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0Zsb2F0IiwiU3RkbGliX0hhc2h0YmwiLCJTeF90eXBlcyIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9DaGFyIiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfUXVldWUiLCJVbml4IiwiU3RkbGliX0ZpbGVuYW1lIiwiU3RkbGliX0FycmF5IiwiU3RkbGliX0J5dGVzIiwiU3hfcGFyc2VyIiwiUmUiLCJSZV9QY3JlIiwiU3RkbGliX1VjaGFyIiwicHJpbWl0aXZlcyIsInN4X2NhbGxfZm4iLCJwYXJhbSIsInN4X3RyYW1wb2xpbmVfZm4iLCJ2Iiwic2NvcGVfc3RhY2tzIiwic2NvcGVfdHJhY2UiLCJzY29wZV9sb2ciLCJzY29wZV90cmFjZV9lbmFibGUiLCJzY29wZV90cmFjZV9kaXNhYmxlIiwic2NvcGVfdHJhY2VfZHJhaW4iLCJsb2ciLCJyZXF1ZXN0X2Nvb2tpZXMiLCJzY29wZV9jbGVhcl9hbGwiLCJyZWdpc3RlciIsIm5hbWUiLCJmbiIsImlzX3ByaW1pdGl2ZSIsImdldF9wcmltaXRpdmUiLCJtYXRjaCIsInRyYW1wb2xpbmVfaG9vayIsImNzdF9FeHBlY3RlZF9udW1iZXJfZ290IiwiYXNfaW50IiwibiIsImFsbF9pbnRzIiwiY3N0IiwiY3N0X3NpZ25hbCIsImNzdF9kaWN0IiwiY3N0X3ZhbHVlIiwiYXNfbnVtYmVyIiwidCIsInMiLCJkIiwiYXNfc3RyaW5nIiwiYXNfbGlzdCIsImwiLCJyIiwiYXNfYm9vbCIsImIiLCJjc3RfZmFsc2UiLCJjc3RfdHJ1ZSIsInRvX3N0cmluZyIsInJhdF9nY2QiLCJhIiwiY3N0X3JhdGlvbmFsX2RpdmlzaW9uX2J5X3plcm8iLCJtYWtlX3JhdCIsInNpZ24iLCJnIiwicm4iLCJyZCIsInJhdF9vZl92YWwiLCJoYXNfcmF0aW9uYWwiLCJhcmdzIiwiaGFzX2Zsb2F0IiwicmF0X2FkZCIsImJkIiwiYm4iLCJhZCIsImFuIiwicmF0X3N1YiIsInJhdF9tdWwiLCJyYXRfZGl2IiwiY3N0X2RfZCIsImNzdF9nIiwic3hfd3JpdGVfdmFsIiwiYnVmIiwiYyIsImsiLCJpdGVtcyIsInN4X2Rpc3BsYXlfdmFsIiwiYWNjIiwidGwiLCJoIiwicmVzdCIsIngiLCJwbGFjZXMiLCJmYWN0b3IiLCJzdW0iLCJpIiwiY291bnQiLCJ0b3UzMiIsImFpIiwiYmkiLCJoaSIsImxvIiwiYmFzZSIsImUiLCJpZ2NkIiwiaW50X3RvX3JhZGl4IiwibmVnIiwiZ28iLCJjc3RfbnVtYmVyX3N0cmluZ19yYWRpeF9vdXRfb2YiLCJleG4iLCJzdGFydCIsIm1ha2VfcmF0aW9uYWxfdmFsIiwicGFyc2VfbGVhZGluZ19pbnQiLCJsZW4iLCJqIiwiZGVmYXVsdF92YWwiLCJjc3RfaG9zdF9oYW5kbGUiLCJzYWZlX2VxIiwieSIsImxhIiwiaGIiLCJoYSIsImVxIiwibGIiLCJuZWVkbGUiLCJoYXlzdGFjayIsInByZWZpeCIsInN1ZmZpeCIsInNsIiwieGwiLCJubCIsImhsIiwidGFyZ2V0IiwiZW5kX3YiLCJzdGFydF92IiwibGVuX3YiLCJzZXAiLCJwIiwicmUiLCJ0b19zdHIiLCJuZXdfcyIsIm9sZF9zIiwib2wiLCJoYXNfZGVjIiwiaGFzX2V4cCIsImlucHV0IiwicGF0dGVybiIsImdyb3VwIiwiZnVsbCIsImdyb3VwcyIsIm1hdGNoZXMiLCJyZXN1bHRzIiwiY3N0X3JlZ2V4X3JlcGxhY2UiLCJyZXBsYWNlbWVudCIsInN0b3AiLCJjc3RfcmVnZXhfc3BsaXQiLCJjc3RfYXJncyIsImNzdF9sZW4iLCJwYWlycyIsInhzIiwiYWxsIiwiaXRlbSIsImZsYXQiLCJzdWIiLCJzdG9wX3YiLCJzdGVwX3YiLCJzdCIsInRha2VfcmFuZ2UiLCJpZHgiLCJsMSIsImwyIiwieXMiLCJ0YWtlX24iLCJzaXplIiwic2VlbiIsInJlc3VsdCIsImtleSIsImQyIiwia2V5cyIsInNyYyIsImNzdF9zIiwiZGljdF9wYXJ0cyIsImFyciIsImVsdHMiLCJjc3RfZXJyb3IiLCJtc2ciLCJjYXRjaF9mbiIsInRyeV9mbiIsImlzX2NsaWVudCIsInN0b3JlX3JlZ2lzdHJ5IiwiaW5pdF9mbiIsInN0b3JlIiwic3RhdGUiLCJzaWdfZCIsImNhbGwiLCJpZGVudGljYWwiLCJjYWxsX2FueSIsInR5cGVzIiwiaW5pdCIsImRzdCIsInNyY19pdGVtcyIsImN0b3JfcGFyYW1zIiwiZmllbGRzIiwiYXJnX2xpc3QiLCJ1aWQiLCJudiIsImNzdF9wYXJhbSIsImNvbnZlcnRlciIsImNvbnZlcnRlZCIsImZpbGwiLCJjc3Rfb3V0X29mX2JvdW5kc19sZW5ndGgiLCJjYXBfc3RhY2siLCJib2R5IiwiY2FwcyIsImNhcF9zZXQiLCJwcmV2IiwiY2FwIiwiY2xhdXNlcyIsImNzdF9WTV91bmRlZmluZWQiLCJjc3RfZGVwdGgiLCJjc3Rfc2NvcGVfcHVzaCIsInZhbHVlIiwic3RhY2siLCJjc3Rfc2NvcGVfcG9wIiwiY3N0X2ZvdW5kIiwiY3N0X2NvbnRleHQiLCJhbGxfa2V5cyIsImNzdF9jb2xsZWN0ZWQiLCJjc3RfY2xlYXJfY29sbGVjdGVkIiwibmV3X3ZhbHVlIiwic2lnIiwidHJhY2tpbmdfYWN0aXZlIiwidHJhY2tpbmdfZGVwcyIsImRlcHMiLCJib2R5X2ZuIiwidSIsInVwZGF0ZV9mbiIsImRpc3Bvc2VycyIsInJ1bl90cmFja2VkIiwiZGVwIiwic3Vic2NyaWJlciIsIm5ld19yZXN1bHQiLCJjc3Rfc2NvcGVfZW1pdCIsImNzdF9lbWl0dGVkIiwidGh1bmsiLCJyZWdleF90YWJsZSIsImNzdF9pZCIsIm1ha2VfcmVnZXhfdmFsdWUiLCJpZCIsInNvdXJjZSIsImZsYWdzIiwicmVnZXhfb2ZfdmFsdWUiLCJjc3RfZ3JvdXBzIiwiY3N0X2lucHV0IiwiY3N0X21hdGNoIiwiZ3JvdXBfdG9fZGljdCIsInJlZ2V4X25leHRfaWQiLCJjc3RfcmVnZXhfY29tcGlsZV9pbnZhbGlkX3BhdHQiLCJvcHRzIiwic3dpdGNoZXIiLCJyeCIsImV4cGFuZCIsImdsb2JhbCIsInJlcGwiLCJiZWZvcmUiLCJhZnRlcl9zdGFydCIsImFmdGVyIiwiY2FsbF9mbiIsIm1hdGNoX3N0ciIsImdyb3Vwc19iZWZvcmUiLCJhbGxfYXJncyIsIm1ha2VfcmVnZXhwX3ZhbHVlIiwiY29tcGlsZWQiLCJtYXRjaF9kaWN0IiwiYml0cyIsImh0IiwiZm91bmQiLCJlayIsImRlZmF1bHQkIiwic2VxX3RvX2xpc3QiLCJjaGFycyIsImNzdF9vdXRfb2ZfYm91bmRzIiwiY3N0X3NlcXVlbmNlX3JlZl9pbmRleCIsImNzdF9zZXF1ZW5jZV9yZWZfaW5kZXhfZF9vdXRfbyIsImxzdCIsInYxIiwiczIiLCJzMSIsInYyIiwieHMyIiwieHMxIiwic3RlcCIsImxvX2kiLCJoaV9pIiwiZ2Vuc3ltX2NvdW50ZXIiLCJjaGFyX2Rvd25jYXNlX2NwIiwiY3N0X3JlYWRfY2hhcl9leHBlY3RlZF9pbnB1dF9wIiwicG9zIiwiY3AiLCJjc3RfcGVla19jaGFyX2V4cGVjdGVkX2lucHV0X3AiLCJjc3RfcmVhZF9saW5lX2V4cGVjdGVkX2lucHV0X3AiLCJsaW5lIiwicmVhZF9wb3N0cHJvY2VzcyIsImZvcm0iLCJjc3RfZiIsImNzdF82ZiIsInByZWMiLCJzZXRfa2V5Iiwib3V0IiwiY3N0X291dF9vZl9yYW5nZSIsImJ5dGUiLCJkb19jb3B5IiwiYXQiLCJidWZzIiwidG90YWwiLCJieXRlc19saXN0IiwicGF0aCIsImljIiwiY29udGVudCIsIm9jIiwicGF0IiwiZGlyIiwiYmFzZV9wYXQiLCJlbnRyaWVzIiwiZW50cnkiLCJwbiIsInNuIiwicGkiLCJzaSIsIm5lZ2F0ZSIsIm1hdGNoZWQiLCJjMSIsImMyIiwiY3N0XzAyZCIsImNzdF9NYXkiLCJjc3RfYV9iX2VfSF9NX1NfWl9ZIiwiZm10IiwidG0iLCJkYXlzIiwibW9ucyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdB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a0JBQUFBLE1BQUEsTUFDZ0IsMkJBQXVDO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFFaEQ7QUFBQTtBQUFBLEtBQTREO0FBQUEsR0FDckU7QUFBQTtBQUFBLGNBQUE2QjtBQUFBQSxNQUdFO0FBQUE7QUFBQSxpQkFBQWxEO0FBQUFBLGFBQUFFLElBQVc7QUFBQSxTQUNULDRDQUFBK0IsSUFBQSxNQUF5QjtBQUFBLFNBQTRCO0FBQUEsUUFDdEQ7QUFBQTtBQUFBLE1BQ0Q7QUFBQSxNQUFvQztBQUFBLEtBQ2pDO0FBQUEsR0FDTDtBQUFBO0FBQUEsY0FBQWlCO0FBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsS0FBRztBQUFBLEdBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJuR1IiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo0OTY1NSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfcnVudGltZS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBSdW50aW1lIGhlbHBlcnMgZm9yIHRyYW5zcGlsZWQgY29kZS5cblxuICAgIFRoZXNlIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4gdGhlIHRyYW5zcGlsZXIncyBvdXRwdXQgYW5kIHRoZVxuICAgIGZvdW5kYXRpb24gdHlwZXMvcHJpbWl0aXZlcy4gVGhlIHRyYW5zcGlsZWQgZXZhbHVhdG9yIGNhbGxzIHRoZXNlXG4gICAgZnVuY3Rpb25zIGRpcmVjdGx5LiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbigqKiBDYWxsIGEgcmVnaXN0ZXJlZCBwcmltaXRpdmUgYnkgbmFtZS4gKilcbmxldCBwcmltX2NhbGwgbmFtZSBhcmdzID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gIHwgU29tZSBmIC0+IGYgYXJnc1xuICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVW5rbm93biBwcmltaXRpdmU6IFwiIF4gbmFtZSkpXG5cbigqKiBDb252ZXJ0IGFueSBTWCB2YWx1ZSB0byBhbiBPQ2FtbCBzdHJpbmcgKGludGVybmFsKS4gKilcbmxldCB2YWx1ZV90b19zdHIgPSBmdW5jdGlvblxuICB8IFN0cmluZyBzIC0+IHNcbiAgfCBOdW1iZXIgbiAtPiBTeF90eXBlcy5mb3JtYXRfbnVtYmVyIG5cbiAgfCBCb29sIHRydWUgLT4gXCJ0cnVlXCJcbiAgfCBCb29sIGZhbHNlIC0+IFwiZmFsc2VcIlxuICB8IE5pbCAtPiBcIlwiXG4gIHwgU3ltYm9sIHMgLT4gc1xuICB8IEtleXdvcmQgayAtPiBrXG4gIHwgdiAtPiBpbnNwZWN0IHZcblxuKCoqIHN4X3RvX3N0cmluZyByZXR1cm5zIGEgdmFsdWUgKFN0cmluZykgZm9yIHRyYW5zcGlsZWQgY29kZS4gKilcbmxldCBzeF90b19zdHJpbmcgdiA9IFN0cmluZyAodmFsdWVfdG9fc3RyIHYpXG5cbigqKiBTdHJpbmcgY29uY2F0ZW5hdGlvbiBoZWxwZXIg4oCUIFtzeF9zdHJdIHRha2VzIGEgbGlzdCBvZiB2YWx1ZXMuICopXG5sZXQgc3hfc3RyIGFyZ3MgPVxuICBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIHZhbHVlX3RvX3N0ciBhcmdzKVxuXG4oKiogQ29udmVydCBhIHZhbHVlIHRvIGEgbGlzdC4gKilcbmxldCBzeF90b19saXN0ID0gZnVuY3Rpb25cbiAgfCBMaXN0IGwgLT4gbFxuICB8IExpc3RSZWYgciAtPiAhclxuICB8IE5pbCAtPiBbXVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGlzdCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxuKCoqIENhbGwgYW4gU1ggY2FsbGFibGUgKGxhbWJkYSwgbmF0aXZlIGZuLCBjb250aW51YXRpb24pLiAqKVxubGV0IHN4X2NhbGwgZiBhcmdzID1cbiAgbWF0Y2ggZiB3aXRoXG4gIHwgTmF0aXZlRm4gKF8sIGZuKSAtPiBmbiBhcmdzXG4gIHwgVm1DbG9zdXJlIGNsIC0+ICFTeF90eXBlcy5fdm1fY2FsbF9jbG9zdXJlX3JlZiBjbCBhcmdzXG4gIHwgTGFtYmRhIF8gLT5cbiAgICAhU3hfdHlwZXMuX2Nla19ldmFsX2xhbWJkYV9yZWYgZiBhcmdzXG4gIHwgQ29udGludWF0aW9uIChrLCBfKSAtPlxuICAgIGsgKG1hdGNoIGFyZ3Mgd2l0aCB4IDo6IF8gLT4geCB8IFtdIC0+IE5pbClcbiAgfCBDYWxsY2NDb250aW51YXRpb24gKF8sIF8pIC0+XG4gICAgcmFpc2UgKEV2YWxfZXJyb3IgXCJjYWxsY2MgY29udGludWF0aW9ucyBtdXN0IGJlIGludm9rZWQgdGhyb3VnaCB0aGUgQ0VLIG1hY2hpbmVcIilcbiAgfCBfIC0+XG4gICAgbGV0IG5hcmdzID0gTGlzdC5sZW5ndGggYXJncyBpblxuICAgIGxldCBhcmdzX3ByZXZpZXcgPSBpZiBuYXJncyA9IDAgdGhlbiBcIlwiIGVsc2VcbiAgICAgIGxldCBzID0gU3RyaW5nLmNvbmNhdCBcIiwgXCIgKExpc3QubWFwIChmdW4gYSAtPiBsZXQgcyA9IGluc3BlY3QgYSBpbiBpZiBTdHJpbmcubGVuZ3RoIHMgPiA0MCB0aGVuIFN0cmluZy5zdWIgcyAwIDQwIF4gXCIuLlwiIGVsc2UgcykgYXJncykgaW5cbiAgICAgIFwiIHdpdGggYXJncz1bXCIgXiBzIF4gXCJdXCIgaW5cbiAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJOb3QgY2FsbGFibGU6IFwiIF4gaW5zcGVjdCBmIF4gYXJnc19wcmV2aWV3KSlcblxuKCogSW5pdGlhbGl6ZSBmb3J3YXJkIHJlZiBzbyBwcmltaXRpdmVzIGNhbiBjYWxsIFNYIGZ1bmN0aW9ucyAqKVxubGV0ICgpID0gU3hfcHJpbWl0aXZlcy5fc3hfY2FsbF9mbiA6PSBzeF9jYWxsXG4oKiBUcmFtcG9saW5lIHJlZiBpcyBzZXQgYnkgc3hfcmVmLm1sIGFmdGVyIGl0J3MgbG9hZGVkICopXG5cbigqKiBBcHBseSBhIGZ1bmN0aW9uIHRvIGEgbGlzdCBvZiBhcmdzLiAqKVxubGV0IHN4X2FwcGx5IGYgYXJnc19saXN0ID1cbiAgc3hfY2FsbCBmIChzeF90b19saXN0IGFyZ3NfbGlzdClcblxuKCoqIENFSy1zYWZlIGFwcGx5IOKAlCBjYXRjaGVzIEV2YWxfZXJyb3IgZnJvbSBuYXRpdmUgZm5zIGFuZCByZXR1cm5zIGFuIGVycm9yXG4gICAgbWFya2VyIGRpY3QgaW5zdGVhZCBvZiByYWlzaW5nLiAgVGhlIENFSyBldmFsdWF0b3IgY2hlY2tzIGZvciB0aGlzIGFuZFxuICAgIGNvbnZlcnRzIHRvIGEgcmFpc2UtZXZhbCBzdGF0ZSBzbyBndWFyZC9oYW5kbGVyLWJpbmQgY2FuIGludGVyY2VwdCBpdC5cbiAgICBOb24tbmF0aXZlIGNhbGxzIChsYW1iZGEsIGNvbnRpbnVhdGlvbikgZGVsZWdhdGUgdG8gc3hfYXBwbHkgdW5jaGFuZ2VkLiAqKVxubGV0IHN4X2FwcGx5X2NlayBmIGFyZ3NfbGlzdCA9XG4gIG1hdGNoIGYgd2l0aFxuICB8IE5hdGl2ZUZuIF8gfCBWbUNsb3N1cmUgXyAtPlxuICAgICh0cnkgc3hfYXBwbHkgZiBhcmdzX2xpc3RcbiAgICAgd2l0aFxuICAgICB8IENla1BlcmZvcm1SZXF1ZXN0IF8gYXMgZSAtPiByYWlzZSBlXG4gICAgIHwgZXhuIC0+XG4gICAgICAgKCogQ2hlY2sgaWYgdGhpcyBpcyBhIFZNIHN1c3BlbnNpb24g4oCUIHJldHVybiBtYXJrZXIgZGljdCBzb1xuICAgICAgICAgIGNvbnRpbnVlX3dpdGhfY2FsbCBjYW4gYnVpbGQgYSBwcm9wZXIgc3VzcGVuZGVkIENFSyBzdGF0ZVxuICAgICAgICAgIHdpdGggdm0tcmVzdW1lLWZyYW1lIG9uIHRoZSBrb250LiAqKVxuICAgICAgIChtYXRjaCAhX3ZtX3N1c3BlbnNpb25fdG9fZGljdCBleG4gd2l0aFxuICAgICAgICB8IFNvbWUgbWFya2VyIC0+IG1hcmtlclxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAobWF0Y2ggZXhuIHdpdGhcbiAgICAgICAgICAgfCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMyBpblxuICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiX19ldmFsX2Vycm9yX19cIiAoQm9vbCB0cnVlKTtcbiAgICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcIm1lc3NhZ2VcIiAoU3RyaW5nIG1zZyk7XG4gICAgICAgICAgICAgRGljdCBkXG4gICAgICAgICAgIHwgXyAtPiByYWlzZSBleG4pKSlcbiAgfCBfIC0+IHN4X2FwcGx5IGYgYXJnc19saXN0XG5cbigqKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIGV2YWwtZXJyb3IgbWFya2VyIGZyb20gc3hfYXBwbHlfY2VrLiAqKVxubGV0IGlzX2V2YWxfZXJyb3IgdiA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiX19ldmFsX2Vycm9yX19cIiB3aXRoXG4gICAgfCBTb21lIChCb29sIHRydWUpIC0+IHRydWUgfCBfIC0+IGZhbHNlKVxuICB8IF8gLT4gZmFsc2VcblxuKCoqIE11dGFibGUgYXBwZW5kIOKAlCBhZGQgaXRlbSB0byBhIGxpc3QgcmVmIG9yIGFjY3VtdWxhdG9yLlxuICAgIEluIHRyYW5zcGlsZWQgY29kZSwgbGlzdHMgdGhhdCBnZXQgYXBwZW5kZWQgdG8gYXJlIG11dGFibGUgcmVmcy4gKilcbmxldCBzeF9hcHBlbmRfYiBsc3QgaXRlbSA9XG4gIG1hdGNoIGxzdCB3aXRoXG4gIHwgTGlzdCBpdGVtcyAtPiBMaXN0IChpdGVtcyBAIFtpdGVtXSlcbiAgfCBMaXN0UmVmIHIgLT4gciA6PSAhciBAIFtpdGVtXTsgbHN0ICAoKiBtdXRhdGUgaW4gcGxhY2UsIHJldHVybiBzYW1lIHJlZiAqKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiYXBwZW5kITogZXhwZWN0ZWQgbGlzdCwgZ290IFwiIF4gdHlwZV9vZiBsc3QpKVxuXG4oKiogTXV0YWJsZSBkaWN0LXNldCDigJQgc2V0IGtleSBpbiBkaWN0LCByZXR1cm4gdmFsdWUuICopXG5sZXQgc3hfZGljdF9zZXRfYiBkIGsgdiA9XG4gIG1hdGNoIGQsIGsgd2l0aFxuICB8IERpY3QgdGJsLCBTdHJpbmcga2V5IC0+IEhhc2h0YmwucmVwbGFjZSB0Ymwga2V5IHY7IHZcbiAgfCBEaWN0IHRibCwgS2V5d29yZCBrZXkgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrZXkgdjsgdlxuICB8IENla0ZyYW1lIGYsIFN0cmluZyBrZXkgLT5cbiAgICAobWF0Y2gga2V5IHdpdGhcbiAgICAgfCBcInZhbHVlXCIgfCBcImV4dHJhXCIgfCBcImhvLXR5cGVcIiB8IFwic2NoZW1lXCIgfCBcImluZGV4ZWRcIlxuICAgICB8IFwicGhhc2VcIiB8IFwiaGFzLWVmZmVjdHNcIiB8IFwibWF0Y2gtdmFsXCIgfCBcImN1cnJlbnQtaXRlbVwiXG4gICAgIHwgXCJ1cGRhdGUtZm5cIiB8IFwiaGVhZC1uYW1lXCIgLT4gZi5jZl9leHRyYSA8LSB2OyB2XG4gICAgIHwgXCJyZW1haW5pbmdcIiAtPiBmLmNmX3JlbWFpbmluZyA8LSB2OyB2XG4gICAgIHwgXCJzdWJzY3JpYmVyc1wiIHwgXCJyZXN1bHRzXCIgfCBcInJhdy1hcmdzXCIgLT4gZi5jZl9yZXN1bHRzIDwtIHY7IHZcbiAgICAgfCBcImVtaXR0ZWRcIiB8IFwiZWZmZWN0LWxpc3RcIiB8IFwiZmlyc3QtcmVuZGVyXCIgfCBcImV4dHJhMlwiIC0+IGYuY2ZfZXh0cmEyIDwtIHY7IHZcbiAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImRpY3Qtc2V0ISBjZWstZnJhbWU6IHVua25vd24gZmllbGQgXCIgXiBrZXkpKSlcbiAgfCBWbUZyYW1lIGYsIFN0cmluZyBrZXkgLT5cbiAgICAobWF0Y2gga2V5IHdpdGhcbiAgICAgfCBcImlwXCIgLT4gZi52Zl9pcCA8LSB2YWxfdG9faW50IHY7IHZcbiAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImRpY3Qtc2V0ISB2bS1mcmFtZTogdW5rbm93biBmaWVsZCBcIiBeIGtleSkpKVxuICB8IFZtTWFjaGluZSBtLCBTdHJpbmcga2V5IC0+XG4gICAgKG1hdGNoIGtleSB3aXRoXG4gICAgIHwgXCJzcFwiIC0+IG0udm1fc3AgPC0gdmFsX3RvX2ludCB2OyB2XG4gICAgIHwgXCJmcmFtZXNcIiAtPiBtLnZtX2ZyYW1lcyA8LSAobWF0Y2ggdiB3aXRoIExpc3QgbCAtPiBMaXN0Lm1hcCAoZnVuIHggLT4gbWF0Y2ggeCB3aXRoIFZtRnJhbWUgZiAtPiBmIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtOiBmcmFtZXMgbXVzdCBiZSB2bS1mcmFtZSBsaXN0XCIpKSBsIHwgXyAtPiBbXSk7IHZcbiAgICAgfCBcInN0YWNrXCIgLT4gKG1hdGNoIHYgd2l0aCBMaXN0IF8gLT4gdiB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2bTogc3RhY2sgbXVzdCBiZSBhcnJheVwiKSlcbiAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImRpY3Qtc2V0ISB2bS1tYWNoaW5lOiB1bmtub3duIGZpZWxkIFwiIF4ga2V5KSkpXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3Qtc2V0ITogZXhwZWN0ZWQgZGljdCBhbmQgc3RyaW5nIGtleVwiKVxuXG4oKiogR2V0IGZyb20gZGljdCBvciBsaXN0LiAqKVxubGV0IGdldF92YWwgY29udGFpbmVyIGtleSA9XG4gIG1hdGNoIGNvbnRhaW5lciwga2V5IHdpdGhcbiAgfCBDZWtTdGF0ZSBzLCBTdHJpbmcgayAtPlxuICAgIChtYXRjaCBrIHdpdGhcbiAgICAgfCBcImNvbnRyb2xcIiAtPiBzLmNzX2NvbnRyb2wgfCBcImVudlwiIC0+IHMuY3NfZW52XG4gICAgIHwgXCJrb250XCIgLT4gcy5jc19rb250IHwgXCJwaGFzZVwiIC0+IFN0cmluZyBzLmNzX3BoYXNlXG4gICAgIHwgXCJ2YWx1ZVwiIC0+IHMuY3NfdmFsdWUgfCBfIC0+IE5pbClcbiAgfCBDZWtGcmFtZSBmLCBTdHJpbmcgayAtPlxuICAgIChtYXRjaCBrIHdpdGhcbiAgICAgfCBcInR5cGVcIiAtPiBTdHJpbmcgZi5jZl90eXBlIHwgXCJlbnZcIiAtPiBmLmNmX2VudlxuICAgICB8IFwibmFtZVwiIC0+IGYuY2ZfbmFtZSB8IFwiYm9keVwiIC0+IGYuY2ZfYm9keVxuICAgICB8IFwicmVtYWluaW5nXCIgLT4gZi5jZl9yZW1haW5pbmcgfCBcImZcIiAtPiBmLmNmX2ZcbiAgICAgfCBcImFyZ3NcIiAtPiBmLmNmX2FyZ3MgfCBcImV2YWxlZFwiIC0+IGYuY2ZfYXJnc1xuICAgICB8IFwicmVzdWx0c1wiIC0+IGYuY2ZfcmVzdWx0cyB8IFwicmF3LWFyZ3NcIiAtPiBmLmNmX3Jlc3VsdHNcbiAgICAgfCBcInRoZW5cIiAtPiBmLmNmX2JvZHkgfCBcImVsc2VcIiAtPiBmLmNmX25hbWVcbiAgICAgfCBcImhvLXR5cGVcIiAtPiBmLmNmX2V4dHJhIHwgXCJzY2hlbWVcIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJpbmRleGVkXCIgLT4gZi5jZl9leHRyYSB8IFwidmFsdWVcIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJwaGFzZVwiIC0+IGYuY2ZfZXh0cmEgfCBcImhhcy1lZmZlY3RzXCIgLT4gZi5jZl9leHRyYVxuICAgICB8IFwibWF0Y2gtdmFsXCIgLT4gZi5jZl9leHRyYSB8IFwiY3VycmVudC1pdGVtXCIgLT4gZi5jZl9leHRyYVxuICAgICB8IFwidXBkYXRlLWZuXCIgLT4gZi5jZl9leHRyYSB8IFwiaGVhZC1uYW1lXCIgLT4gZi5jZl9leHRyYVxuICAgICB8IFwiZW1pdHRlZFwiIC0+IGYuY2ZfZXh0cmEyIHwgXCJlZmZlY3QtbGlzdFwiIC0+IGYuY2ZfZXh0cmEyXG4gICAgIHwgXCJmaXJzdC1yZW5kZXJcIiAtPiBmLmNmX2V4dHJhMiB8IFwiZmlsZVwiIC0+IGYuY2ZfZW52XG4gICAgIHwgXCJleHRyYVwiIC0+IGYuY2ZfZXh0cmEgfCBcImV4dHJhMlwiIC0+IGYuY2ZfZXh0cmEyXG4gICAgIHwgXCJzdWJzY3JpYmVyc1wiIC0+IGYuY2ZfcmVzdWx0c1xuICAgICB8IFwicHJldi10cmFja2luZ1wiIC0+IGYuY2ZfZXh0cmFcbiAgICAgfCBcImFmdGVyLXRodW5rXCIgLT4gZi5jZl9mICAgICAgICAoKiB3aW5kLWFmdGVyIGZyYW1lICopXG4gICAgIHwgXCJ3aW5kZXJzLWxlblwiIC0+IGYuY2ZfZXh0cmEgICAgKCogd2luZC1hZnRlciBmcmFtZSAqKVxuICAgICB8IFwiYm9keS1yZXN1bHRcIiAtPiBmLmNmX25hbWUgICAgICgqIHdpbmQtcmV0dXJuIGZyYW1lICopXG4gICAgIHwgXyAtPiBOaWwpXG4gIHwgVm1GcmFtZSBmLCBTdHJpbmcgayAtPlxuICAgIChtYXRjaCBrIHdpdGhcbiAgICAgfCBcImlwXCIgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgZi52Zl9pcClcbiAgICAgfCBcImNsb3N1cmVcIiAtPiBWbUNsb3N1cmUgZi52Zl9jbG9zdXJlXG4gICAgIHwgXCJiYXNlXCIgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgZi52Zl9iYXNlKVxuICAgICB8IFwibG9jYWwtY2VsbHNcIiAtPiBOaWwgICgqIG9wYXF1ZSDigJQgYWNjZXNzZWQgdmlhIGZyYW1lLWxvY2FsLWdldC9zZXQgKilcbiAgICAgfCBfIC0+IE5pbClcbiAgfCBWbU1hY2hpbmUgbSwgU3RyaW5nIGsgLT5cbiAgICAobWF0Y2ggayB3aXRoXG4gICAgIHwgXCJzcFwiIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IG0udm1fc3ApXG4gICAgIHwgXCJzdGFja1wiIC0+IE5pbCAgKCogb3BhcXVlIOKAlCBhY2Nlc3NlZCB2aWEgdm0tcHVzaC9wb3AgKilcbiAgICAgfCBcImZyYW1lc1wiIC0+IExpc3QgKExpc3QubWFwIChmdW4gZiAtPiBWbUZyYW1lIGYpIG0udm1fZnJhbWVzKVxuICAgICB8IFwiZ2xvYmFsc1wiIC0+IERpY3QgbS52bV9nbG9iYWxzXG4gICAgIHwgXyAtPiBOaWwpXG4gIHwgVm1DbG9zdXJlIGNsLCBTdHJpbmcgayAtPlxuICAgIChtYXRjaCBrIHdpdGhcbiAgICAgfCBcInZtLWNvZGVcIiAtPlxuICAgICAgICgqIFJldHVybiB2bV9jb2RlIGZpZWxkcyBhcyBhIERpY3QuICBUaGUgYnl0ZWNvZGUgYW5kIGNvbnN0YW50cyBhcnJheXNcbiAgICAgICAgICBhcmUgbGF6aWx5IGNvbnZlcnRlZCB0byBMaXN0cyBhbmQgY2FjaGVkIG9uIHRoZSB2bV9jb2RlIHJlY29yZCBzb1xuICAgICAgICAgIHRoZSB0cmFuc3BpbGVkIFZNIGxvb3AgKHdoaWNoIHJlLWRlcml2ZXMgYmMvY29uc3RzIGVhY2ggaXRlcmF0aW9uKVxuICAgICAgICAgIGRvZXNuJ3QgYWxsb2NhdGUgb24gZXZlcnkgc3RlcC4gKilcbiAgICAgICBsZXQgYyA9IGNsLnZtX2NvZGUgaW5cbiAgICAgICBsZXQgYmMgPSBtYXRjaCBjLnZjX2J5dGVjb2RlX2xpc3Qgd2l0aFxuICAgICAgICAgfCBTb21lIGwgLT4gbFxuICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgIGxldCBsID0gQXJyYXkudG9fbGlzdCAoQXJyYXkubWFwIChmdW4gaSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBpKSkgYy52Y19ieXRlY29kZSkgaW5cbiAgICAgICAgICAgYy52Y19ieXRlY29kZV9saXN0IDwtIFNvbWUgbDsgbCBpblxuICAgICAgIGxldCBjb25zdHMgPSBtYXRjaCBjLnZjX2NvbnN0YW50c19saXN0IHdpdGhcbiAgICAgICAgIHwgU29tZSBsIC0+IGxcbiAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICBsZXQgbCA9IEFycmF5LnRvX2xpc3QgYy52Y19jb25zdGFudHMgaW5cbiAgICAgICAgICAgYy52Y19jb25zdGFudHNfbGlzdCA8LSBTb21lIGw7IGwgaW5cbiAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcInZjLWJ5dGVjb2RlXCIgKExpc3QgYmMpO1xuICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwidmMtY29uc3RhbnRzXCIgKExpc3QgY29uc3RzKTtcbiAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcInZjLWFyaXR5XCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGMudmNfYXJpdHkpKTtcbiAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcInZjLXJlc3QtYXJpdHlcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgYy52Y19yZXN0X2FyaXR5KSk7XG4gICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2Yy1sb2NhbHNcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgYy52Y19sb2NhbHMpKTtcbiAgICAgICBEaWN0IGRcbiAgICAgfCBcInZtLXVwdmFsdWVzXCIgLT5cbiAgICAgICBMaXN0IChBcnJheS50b19saXN0IChBcnJheS5tYXAgKGZ1biB1diAtPiB1di51dl92YWx1ZSkgY2wudm1fdXB2YWx1ZXMpKVxuICAgICB8IFwidm0tbmFtZVwiIC0+XG4gICAgICAgKG1hdGNoIGNsLnZtX25hbWUgd2l0aCBTb21lIG4gLT4gU3RyaW5nIG4gfCBOb25lIC0+IE5pbClcbiAgICAgfCBcInZtLWdsb2JhbHNcIiAtPiBEaWN0IGNsLnZtX2Vudl9yZWZcbiAgICAgfCBcInZtLWNsb3N1cmUtZW52XCIgLT5cbiAgICAgICAobWF0Y2ggY2wudm1fY2xvc3VyZV9lbnYgd2l0aCBTb21lIGUgLT4gRW52IGUgfCBOb25lIC0+IE5pbClcbiAgICAgfCBfIC0+IE5pbClcbiAgfCBEaWN0IGQsIFN0cmluZyBrIC0+IGRpY3RfZ2V0IGQga1xuICB8IERpY3QgZCwgS2V5d29yZCBrIC0+IGRpY3RfZ2V0IGQga1xuICB8IChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pLCBOdW1iZXIgbiAtPlxuICAgICh0cnkgTGlzdC5udGggbCAoaW50X29mX2Zsb2F0IG4pIHdpdGggXyAtPiBOaWwpXG4gIHwgKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSksIEludGVnZXIgbiAtPlxuICAgICh0cnkgTGlzdC5udGggbCBuIHdpdGggXyAtPiBOaWwpXG4gIHwgTmlsLCBfIC0+IE5pbCAgKCogbmlsLmFueXRoaW5nIOKGkiBuaWwgKilcbiAgfCBfLCBfIC0+IE5pbCAgICAoKiB0eXBlIG1pc21hdGNoIOKGkiBuaWwgKG1hdGNoZXMgSlMvUHl0aG9uIGJlaGF2aW9yKSAqKVxuXG4oKiogUmVnaXN0ZXIgZ2V0IGFzIGEgcHJpbWl0aXZlIG92ZXJyaWRlIOKAlCB0cmFuc3BpbGVkIGNvZGUgY2FsbHMgKGdldCBkIGspLiAqKVxubGV0ICgpID1cbiAgU3hfcHJpbWl0aXZlcy5yZWdpc3RlciBcImdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2M7IGtdIC0+IGdldF92YWwgYyBrXG4gICAgfCBbYzsgazsgZGVmYXVsdF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IHYgPSBnZXRfdmFsIGMgayBpblxuICAgICAgICBpZiB2ID0gTmlsIHRoZW4gZGVmYXVsdCBlbHNlIHZcbiAgICAgIHdpdGggXyAtPiBkZWZhdWx0KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImdldDogMi0zIGFyZ3NcIikpXG5cblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogUHJpbWl0aXZlIGFsaWFzZXMg4oCUIHRvcC1sZXZlbCBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRyYW5zcGlsZWQgY29kZSAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiogVGhlIHRyYW5zcGlsZWQgZXZhbHVhdG9yIGNhbGxzIHByaW1pdGl2ZXMgZGlyZWN0bHkgYnkgdGhlaXIgbWFuZ2xlZFxuICAgIE9DYW1sIG5hbWUuIFRoZXNlIGFsaWFzZXMgZGVsZWdhdGUgdG8gdGhlIHByaW1pdGl2ZXMgdGFibGUgc28gdGhlXG4gICAgdHJhbnNwaWxlZCBjb2RlIGNvbXBpbGVzIHdpdGhvdXQgbmVlZGluZyBbcHJpbV9jYWxsXSBldmVyeXdoZXJlLiAqKVxuXG5sZXQgX3ByaW0gbmFtZSA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIG5hbWUgd2l0aFxuICB8IFNvbWUgZiAtPiBmIHwgTm9uZSAtPiAoZnVuIF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiTWlzc2luZyBwcmltOiBcIiBeIG5hbWUpKSlcblxuKCogQ29sbGVjdGlvbiBvcHMgKilcbmxldCBmaXJzdCBhcmdzID0gX3ByaW0gXCJmaXJzdFwiIFthcmdzXVxubGV0IHJlc3QgYXJncyA9IF9wcmltIFwicmVzdFwiIFthcmdzXVxubGV0IGxhc3QgYXJncyA9IF9wcmltIFwibGFzdFwiIFthcmdzXVxubGV0IG50aCBjb2xsIGkgPSBfcHJpbSBcIm50aFwiIFtjb2xsOyBpXVxubGV0IGNvbnMgeCBsID0gX3ByaW0gXCJjb25zXCIgW3g7IGxdXG5sZXQgYXBwZW5kIGEgYiA9IF9wcmltIFwiYXBwZW5kXCIgW2E7IGJdXG5sZXQgcmV2ZXJzZSBsID0gX3ByaW0gXCJyZXZlcnNlXCIgW2xdXG5sZXQgZmxhdHRlbiBsID0gX3ByaW0gXCJmbGF0dGVuXCIgW2xdXG5sZXQgY29uY2F0IGEgYiA9IF9wcmltIFwiY29uY2F0XCIgW2E7IGJdXG5sZXQgc2xpY2UgYSBiID0gX3ByaW0gXCJzbGljZVwiIFthOyBiXVxubGV0IGxlbiBhID0gX3ByaW0gXCJsZW5cIiBbYV1cbmxldCBnZXQgYSBiID0gZ2V0X3ZhbCBhIGJcbmxldCBzb3J0JyBhID0gX3ByaW0gXCJzb3J0XCIgW2FdXG5sZXQgcmFuZ2UnIGEgPSBfcHJpbSBcInJhbmdlXCIgW2FdXG5sZXQgdW5pcXVlIGEgPSBfcHJpbSBcInVuaXF1ZVwiIFthXVxubGV0IHppcCBhIGIgPSBfcHJpbSBcInppcFwiIFthOyBiXVxubGV0IHRha2UgYSBiID0gX3ByaW0gXCJ0YWtlXCIgW2E7IGJdXG5sZXQgZHJvcCBhIGIgPSBfcHJpbSBcImRyb3BcIiBbYTsgYl1cblxuKCogUHJlZGljYXRlcyAqKVxubGV0IGtleXdvcmRfcCBhID0gX3ByaW0gXCJrZXl3b3JkP1wiIFthXVxubGV0IGVtcHR5X3AgYSA9IF9wcmltIFwiZW1wdHk/XCIgW2FdXG5sZXQgbnVtYmVyX3AgYSA9IF9wcmltIFwibnVtYmVyP1wiIFthXVxubGV0IHN0cmluZ19wIGEgPSBfcHJpbSBcInN0cmluZz9cIiBbYV1cbmxldCBib29sZWFuX3AgYSA9IF9wcmltIFwiYm9vbGVhbj9cIiBbYV1cbmxldCBsaXN0X3AgYSA9IF9wcmltIFwibGlzdD9cIiBbYV1cbmxldCBkaWN0X3AgYSA9IF9wcmltIFwiZGljdD9cIiBbYV1cbmxldCBzeW1ib2xfcCBhID0gX3ByaW0gXCJzeW1ib2w/XCIgW2FdXG5cbigqIFN0cmluZyBvcHMgKilcbmxldCBzdHInIGFyZ3MgPSBTdHJpbmcgKHN4X3N0ciBhcmdzKVxubGV0IHVwcGVyIGEgPSBfcHJpbSBcInVwcGVyXCIgW2FdXG5sZXQgdXBjYXNlIGEgPSBfcHJpbSBcInVwY2FzZVwiIFthXVxubGV0IGxvd2VyIGEgPSBfcHJpbSBcImxvd2VyXCIgW2FdXG5sZXQgZG93bmNhc2UgYSA9IF9wcmltIFwiZG93bmNhc2VcIiBbYV1cbmxldCB0cmltIGEgPSBfcHJpbSBcInRyaW1cIiBbYV1cbmxldCBzcGxpdCBhIGIgPSBfcHJpbSBcInNwbGl0XCIgW2E7IGJdXG5sZXQgam9pbiBhIGIgPSBfcHJpbSBcImpvaW5cIiBbYTsgYl1cbmxldCByZXBsYWNlIGEgYiBjID0gX3ByaW0gXCJyZXBsYWNlXCIgW2E7IGI7IGNdXG5sZXQgc3Vic3RyaW5nIGEgYiBjID0gX3ByaW0gXCJzdWJzdHJpbmdcIiBbYTsgYjsgY11cblxuKCogRGljdCBvcHMgKilcbmxldCBhc3NvYyBkIGsgdiA9IF9wcmltIFwiYXNzb2NcIiBbZDsgazsgdl1cbmxldCBkaXNzb2MgZCBrID0gX3ByaW0gXCJkaXNzb2NcIiBbZDsga11cbmxldCBtZXJnZScgYSBiID0gX3ByaW0gXCJtZXJnZVwiIFthOyBiXVxubGV0IGtleXMgYSA9IF9wcmltIFwia2V5c1wiIFthXVxubGV0IHZhbHMgYSA9IF9wcmltIFwidmFsc1wiIFthXVxubGV0IGRpY3Rfc2V0IGEgYiBjID0gX3ByaW0gXCJkaWN0LXNldCFcIiBbYTsgYjsgY11cbmxldCBkaWN0X2dldCBhIGIgPSBfcHJpbSBcImRpY3QtZ2V0XCIgW2E7IGJdXG5sZXQgZGljdF9kZWxldGUgYSBiID0gX3ByaW0gXCJkaWN0LWRlbGV0ZSFcIiBbYTsgYl1cblxuKCogTWF0aCAqKVxubGV0IGFicycgYSA9IF9wcmltIFwiYWJzXCIgW2FdXG5sZXQgc3FydCcgYSA9IF9wcmltIFwic3FydFwiIFthXVxubGV0IHBvdycgYSBiID0gX3ByaW0gXCJwb3dcIiBbYTsgYl1cbmxldCBmbG9vcicgYSA9IF9wcmltIFwiZmxvb3JcIiBbYV1cbmxldCBjZWlsJyBhID0gX3ByaW0gXCJjZWlsXCIgW2FdXG5sZXQgcm91bmQnIGEgPSBfcHJpbSBcInJvdW5kXCIgW2FdXG5sZXQgbWluJyBhIGIgPSBfcHJpbSBcIm1pblwiIFthOyBiXVxubGV0IG1heCcgYSBiID0gX3ByaW0gXCJtYXhcIiBbYTsgYl1cbmxldCBjbGFtcCBhIGIgYyA9IF9wcmltIFwiY2xhbXBcIiBbYTsgYjsgY11cblxuKCogTWlzYyAqKVxubGV0IGVycm9yIG1zZyA9IHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgbXNnKSlcblxuKCogaW5zcGVjdCB3cmFwcGVyIOKAlCByZXR1cm5zIFN0cmluZyB2YWx1ZSBpbnN0ZWFkIG9mIE9DYW1sIHN0cmluZyAqKVxubGV0IGluc3BlY3QgdiA9IFN0cmluZyAoU3hfdHlwZXMuaW5zcGVjdCB2KVxubGV0IGFwcGx5JyBmIGFyZ3MgPSBzeF9hcHBseSBmIGFyZ3NcbmxldCBzcHJlYWRfYXR0cnMgYSA9IF9wcmltIFwic3ByZWFkLWF0dHJzXCIgW2FdXG5cbmxldCBzeF9jb250ZXh0IGEgYiA9IHByaW1fY2FsbCBcImNvbnRleHRcIiBbYTsgYl1cblxuKCogVHJhbXBvbGluZSDigJQgZm9yd2FyZC1kZWNsYXJlZCBpbiBzeF9yZWYubWwsIGRlbGVnYXRlcyB0byBDRUsgZXZhbF9leHByICopXG4oKiBUaGlzIGlzIGEgc3R1YjsgdGhlIHJlYWwgdHJhbXBvbGluZSBpcyB3aXJlZCB1cCBpbiBzeF9yZWYubWwgYWZ0ZXIgZXZhbF9leHByIGlzIGRlZmluZWQgKilcbmxldCB0cmFtcG9saW5lIHYgPSB2XG5cbigqIFZhbHVlLXJldHVybmluZyB0eXBlIHByZWRpY2F0ZXMg4oCUIHRoZSB0cmFuc3BpbGVkIGNvZGUgcGFzc2VzIHRoZXNlIHRocm91Z2hcbiAgIHN4X3RydXRoeSwgc28gdGhleSBuZWVkIHRvIHJldHVybiBCb29sLCBub3QgT0NhbWwgYm9vbC4gKilcbigqIHR5cGVfb2YgcmV0dXJucyB2YWx1ZSwgbm90IHN0cmluZyAqKVxubGV0IHR5cGVfb2YgdiA9IFN0cmluZyAoU3hfdHlwZXMudHlwZV9vZiB2KVxuXG4oKiBFbnYgb3BlcmF0aW9ucyDigJQgYWNjZXB0IEVudi13cmFwcGVkIHZhbHVlcyBhbmQgdmFsdWUga2V5cy5cbiAgIFRoZSB0cmFuc3BpbGVkIENFSyBtYWNoaW5lIHN0b3JlcyBlbnZzIGluIGRpY3RzIGFzIEVudiB2YWx1ZXMuICopXG5sZXQgdW53cmFwX2VudiA9IGZ1bmN0aW9uXG4gIHwgRW52IGUgLT4gZVxuICB8IERpY3QgZCAtPlxuICAgICgqIERpY3QgdXNlZCBhcyBlbnYg4oCUIHdyYXAgaXQuIE5lZWRlZCBieSBhZGFwdGVyLWh0bWwuc3ggd2hpY2hcbiAgICAgICBwYXNzZXMgZGljdHMgYXMgZW52IGFyZ3MgKGUuZy4gZW1wdHkge30gYXMgY2FsbGVyIGVudikuICopXG4gICAgbGV0IGUgPSBTeF90eXBlcy5tYWtlX2VudiAoKSBpblxuICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBpZ25vcmUgKFN4X3R5cGVzLmVudl9iaW5kIGUgayB2KSkgZDtcbiAgICBlXG4gIHwgTmlsIC0+XG4gICAgU3hfdHlwZXMubWFrZV9lbnYgKClcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGVudiwgZ290IFwiIF4gU3hfdHlwZXMudHlwZV9vZiB2KSlcblxubGV0IGVudl9oYXMgZSBuYW1lID0gQm9vbCAoU3hfdHlwZXMuZW52X2hhcyAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpKVxubGV0IGVudl9nZXQgZSBuYW1lID0gU3hfdHlwZXMuZW52X2dldCAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpXG5sZXQgZW52X2JpbmQgZSBuYW1lIHYgPSBTeF90eXBlcy5lbnZfYmluZCAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpIHZcbmxldCBlbnZfc2V0IGUgbmFtZSB2ID0gU3hfdHlwZXMuZW52X3NldCAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpIHZcblxubGV0IG1ha2VfZW52ICgpID0gRW52IChTeF90eXBlcy5tYWtlX2VudiAoKSlcbmxldCBlbnZfZXh0ZW5kIGUgPSBFbnYgKFN4X3R5cGVzLmVudl9leHRlbmQgKHVud3JhcF9lbnYgZSkpXG5sZXQgZW52X21lcmdlIGEgYiA9IEVudiAoU3hfdHlwZXMuZW52X21lcmdlICh1bndyYXBfZW52IGEpICh1bndyYXBfZW52IGIpKVxuXG4oKiBzZXRfbGFtYmRhX25hbWUgd3JhcHBlciDigJQgYWNjZXB0cyB2YWx1ZSwgZXh0cmFjdHMgc3RyaW5nICopXG5sZXQgc2V0X2xhbWJkYV9uYW1lIGwgbiA9IFN4X3R5cGVzLnNldF9sYW1iZGFfbmFtZSBsICh2YWx1ZV90b19zdHIgbilcblxubGV0IGlzX25pbCB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfbmlsIHYpXG5sZXQgaXNfdGh1bmsgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX3RodW5rIHYpXG5sZXQgaXNfbGFtYmRhIHYgPSBCb29sIChTeF90eXBlcy5pc19sYW1iZGEgdilcbmxldCBpc19jb21wb25lbnQgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX2NvbXBvbmVudCB2KVxubGV0IGlzX2lzbGFuZCB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfaXNsYW5kIHYpXG5sZXQgaXNfbWFjcm8gdiA9IEJvb2wgKFN4X3R5cGVzLmlzX21hY3JvIHYpXG5sZXQgaXNfc2lnbmFsIHYgPSBCb29sIChTeF90eXBlcy5pc19zaWduYWwgdilcbmxldCBpc19jYWxsYWJsZSB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfY2FsbGFibGUgdilcbmxldCBpc19wcmltaXRpdmUgbmFtZSA9IEJvb2wgKFN4X3ByaW1pdGl2ZXMuaXNfcHJpbWl0aXZlICh2YWx1ZV90b19zdHIgbmFtZSkpXG5sZXQgZ2V0X3ByaW1pdGl2ZSBuYW1lID0gU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlICh2YWx1ZV90b19zdHIgbmFtZSlcblxuKCogU3R1YnMgZm9yIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHN4X3JlZi5tbCDigJQgcmVzb2x2ZWQgYXQgbGluayB0aW1lICopXG4oKiBUaGVzZSBhcmUgZm9yd2FyZC1kZWNsYXJlZCBoZXJlOyBzeF9yZWYubWwgZGVmaW5lcyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9ucyAqKVxuXG4oKiBzdHJpcC1wcmVmaXggKilcbigqIFN0dWJzIGZvciBldmFsdWF0b3IgZnVuY3Rpb25zIOKAlCBkZWZpbmVkIGluIHN4X3JlZi5tbCBidXRcbiAgIHNvbWV0aW1lcyByZWZlcmVuY2VkIGJlZm9yZSB0aGVpciBkZWZpbml0aW9uIHZpYSBmb3J3YXJkIGNhbGxzLlxuICAgVGhlc2UgZ2V0IG92ZXJyaWRkZW4gYnkgdGhlIGFjdHVhbCB0cmFuc3BpbGVkIGRlZmluaXRpb25zLiAqKVxuXG5sZXQgZm9yX2VhY2hfaW5kZXhlZCBmbiBjb2xsID1cbiAgTGlzdC5pdGVyaSAoZnVuIGkgeCAtPiBpZ25vcmUgKHN4X2NhbGwgZm4gW051bWJlciAoZmxvYXRfb2ZfaW50IGkpOyB4XSkpIChzeF90b19saXN0IGNvbGwpO1xuICBOaWxcblxuKCogQ29udGludWF0aW9uIHN1cHBvcnQgKilcbmxldCBjb250aW51YXRpb25fcCB2ID0gbWF0Y2ggdiB3aXRoIENvbnRpbnVhdGlvbiAoXywgXykgLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlXG5cbmxldCBtYWtlX2Nla19jb250aW51YXRpb24gY2FwdHVyZWQgcmVzdF9rb250ID1cbiAgbGV0IGRhdGEgPSBIYXNodGJsLmNyZWF0ZSAyIGluXG4gIEhhc2h0YmwucmVwbGFjZSBkYXRhIFwiY2FwdHVyZWRcIiBjYXB0dXJlZDtcbiAgSGFzaHRibC5yZXBsYWNlIGRhdGEgXCJyZXN0LWtvbnRcIiByZXN0X2tvbnQ7XG4gIENvbnRpbnVhdGlvbiAoKGZ1biB2IC0+IHYpLCBTb21lIGRhdGEpXG5cbmxldCBjb250aW51YXRpb25fZGF0YSB2ID0gbWF0Y2ggdiB3aXRoXG4gIHwgQ29udGludWF0aW9uIChfLCBTb21lIGQpIC0+IERpY3QgZFxuICB8IENvbnRpbnVhdGlvbiAoXywgTm9uZSkgLT4gRGljdCAoSGFzaHRibC5jcmVhdGUgMClcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgY29udGludWF0aW9uXCIpXG5cbigqIENhbGxjYyAodW5kZWxpbWl0ZWQpIGNvbnRpbnVhdGlvbiBzdXBwb3J0ICopXG5sZXQgY2FsbGNjX2NvbnRpbnVhdGlvbl9wIHYgPSBtYXRjaCB2IHdpdGggQ2FsbGNjQ29udGludWF0aW9uIChfLCBfKSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2VcblxubGV0IG1ha2VfY2FsbGNjX2NvbnRpbnVhdGlvbiBjYXB0dXJlZCB3aW5kZXJzX2xlbiA9XG4gIGxldCBuID0gbWF0Y2ggd2luZGVyc19sZW4gd2l0aCBOdW1iZXIgZiAtPiBpbnRfb2ZfZmxvYXQgZiB8IEludGVnZXIgbiAtPiBuIHwgXyAtPiAwIGluXG4gIENhbGxjY0NvbnRpbnVhdGlvbiAoc3hfdG9fbGlzdCBjYXB0dXJlZCwgbilcblxubGV0IGNhbGxjY19jb250aW51YXRpb25fZGF0YSB2ID0gbWF0Y2ggdiB3aXRoXG4gIHwgQ2FsbGNjQ29udGludWF0aW9uIChmcmFtZXMsIF8pIC0+IExpc3QgZnJhbWVzXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5vdCBhIGNhbGxjYyBjb250aW51YXRpb25cIilcblxubGV0IGNhbGxjY19jb250aW51YXRpb25fd2luZGVyc19sZW4gdiA9IG1hdGNoIHYgd2l0aFxuICB8IENhbGxjY0NvbnRpbnVhdGlvbiAoXywgbikgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgbilcbiAgfCBfIC0+IE51bWJlciAwLjBcblxuKCogRHluYW1pYyB3aW5kIOKAlCBzaW1wbGlmaWVkIGZvciBPQ2FtbCAobm8gYXN5bmMpICopXG5sZXQgaG9zdF9lcnJvciBtc2cgPVxuICByYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIG1zZykpXG5cbmxldCBkeW5hbWljX3dpbmRfY2FsbCBiZWZvcmUgYm9keSBhZnRlciBfZW52ID1cbiAgaWdub3JlIChzeF9jYWxsIGJlZm9yZSBbXSk7XG4gIGxldCByZXN1bHQgPSBzeF9jYWxsIGJvZHkgW10gaW5cbiAgaWdub3JlIChzeF9jYWxsIGFmdGVyIFtdKTtcbiAgcmVzdWx0XG5cbigqIFNjb3BlIHN0YWNrIOKAlCBhbGwgZGVsZWdhdGVkIHRvIHByaW1pdGl2ZXMgcmVnaXN0ZXJlZCBpbiBzeF9zZXJ2ZXIubWwgKilcbmxldCBzY29wZV9wdXNoIG5hbWUgdmFsdWUgPSBwcmltX2NhbGwgXCJzY29wZS1wdXNoIVwiIFtuYW1lOyB2YWx1ZV1cbmxldCBzY29wZV9wb3AgbmFtZSA9IHByaW1fY2FsbCBcInNjb3BlLXBvcCFcIiBbbmFtZV1cbmxldCBzY29wZV9wZWVrIG5hbWUgPSBwcmltX2NhbGwgXCJzY29wZS1wZWVrXCIgW25hbWVdXG5sZXQgc2NvcGVfZW1pdCBuYW1lIHZhbHVlID0gcHJpbV9jYWxsIFwic2NvcGUtZW1pdCFcIiBbbmFtZTsgdmFsdWVdXG5sZXQgcHJvdmlkZV9wdXNoIG5hbWUgdmFsdWUgPSBwcmltX2NhbGwgXCJzY29wZS1wdXNoIVwiIFtuYW1lOyB2YWx1ZV1cbmxldCBwcm92aWRlX3BvcCBuYW1lID0gcHJpbV9jYWxsIFwic2NvcGUtcG9wIVwiIFtuYW1lXVxuXG4oKiBDdXN0b20gc3BlY2lhbCBmb3JtcyByZWdpc3RyeSDigJQgbXV0YWJsZSBkaWN0ICopXG5sZXQgY3VzdG9tX3NwZWNpYWxfZm9ybXMgPSBEaWN0IChIYXNodGJsLmNyZWF0ZSA0KVxuXG4oKiByZWdpc3Rlci1zcGVjaWFsLWZvcm0hIOKAlCBhZGQgYSBoYW5kbGVyIHRvIHRoZSBjdXN0b20gcmVnaXN0cnkgKilcbmxldCByZWdpc3Rlcl9zcGVjaWFsX2Zvcm0gbmFtZSBoYW5kbGVyID1cbiAgKG1hdGNoIGN1c3RvbV9zcGVjaWFsX2Zvcm1zIHdpdGhcbiAgIHwgRGljdCB0YmwgLT4gSGFzaHRibC5yZXBsYWNlIHRibCAodmFsdWVfdG9fc3RyIG5hbWUpIGhhbmRsZXI7IGhhbmRsZXJcbiAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImN1c3RvbV9zcGVjaWFsX2Zvcm1zIG5vdCBhIGRpY3RcIikpXG5cbigqIFJlbmRlciBjaGVjay9mbiBob29rcyDigJQgbmlsIGJ5IGRlZmF1bHQsIHNldCBieSBwbGF0Zm9ybSBpZiBuZWVkZWQgKilcbmxldCByZW5kZXJfY2hlY2sgPSBOaWxcbmxldCByZW5kZXJfZm4gPSBOaWxcblxuKCogaXMtZWxzZS1jbGF1c2U/IOKAlCBjaGVjayBpZiBhIGNvbmQvY2FzZSB0ZXN0IGlzIGFuIGVsc2UgbWFya2VyICopXG5sZXQgaXNfZWxzZV9jbGF1c2UgdiA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IEtleXdvcmQgayAtPiBCb29sIChrID0gXCJlbHNlXCIgfHwgayA9IFwiZGVmYXVsdFwiKVxuICB8IFN5bWJvbCBzIC0+IEJvb2wgKHMgPSBcImVsc2VcIiB8fCBzID0gXCJkZWZhdWx0XCIpXG4gIHwgQm9vbCB0cnVlIC0+IEJvb2wgdHJ1ZVxuICB8IF8gLT4gQm9vbCBmYWxzZVxuXG4oKiBTaWduYWwgYWNjZXNzb3JzICopXG5sZXQgc2lnbmFsX3ZhbHVlIHMgPSBtYXRjaCBzIHdpdGhcbiAgfCBTaWduYWwgc2lnJyAtPiBzaWcnLnNfdmFsdWVcbiAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInZhbHVlXCIgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJub3QgYSBzaWduYWxcIilcbmxldCBzaWduYWxfYWRkX3N1Yl9iIHMgZiA9XG4gIG1hdGNoIHMgd2l0aFxuICB8IERpY3QgZCAtPlxuICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJzdWJzY3JpYmVyc1wiIHdpdGhcbiAgICAgfCBTb21lIChMaXN0UmVmIHIpIC0+IHIgOj0gIXIgQCBbZl07IE5pbFxuICAgICB8IFNvbWUgKExpc3QgaXRlbXMpIC0+IEhhc2h0YmwucmVwbGFjZSBkIFwic3Vic2NyaWJlcnNcIiAoTGlzdFJlZiAocmVmIChpdGVtcyBAIFtmXSkpKTsgTmlsXG4gICAgIHwgXyAtPiBIYXNodGJsLnJlcGxhY2UgZCBcInN1YnNjcmliZXJzXCIgKExpc3RSZWYgKHJlZiBbZl0pKTsgTmlsKVxuICB8IF8gLT4gTmlsXG5cbmxldCBzaWduYWxfcmVtb3ZlX3N1Yl9iIHMgZiA9XG4gIG1hdGNoIHMgd2l0aFxuICB8IERpY3QgZCAtPlxuICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJzdWJzY3JpYmVyc1wiIHdpdGhcbiAgICAgfCBTb21lIChMaXN0UmVmIHIpIC0+IHIgOj0gTGlzdC5maWx0ZXIgKGZ1biB4IC0+IHggIT0gZikgIXI7IE5pbFxuICAgICB8IFNvbWUgKExpc3QgaXRlbXMpIC0+IEhhc2h0YmwucmVwbGFjZSBkIFwic3Vic2NyaWJlcnNcIiAoTGlzdCAoTGlzdC5maWx0ZXIgKGZ1biB4IC0+IHggIT0gZikgaXRlbXMpKTsgTmlsXG4gICAgIHwgXyAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcblxuKCogSXNsYW5kIHNjb3BlIHN0dWJzIOKAlCBhY2NlcHQgYm90aCBiYXJlIE9DYW1sIGZucyBhbmQgTmF0aXZlRm4gdmFsdWVzXG4gICBmcm9tIHRyYW5zcGlsZWQgY29kZSAoTmF0aXZlRm4gd3JhcHBpbmcgZm9yIHZhbHVlLXN0b3JhYmxlIGxhbWJkYXMpLiAqKVxubGV0IHdpdGhfaXNsYW5kX3Njb3BlIF9yZWdpc3Rlcl9mbiBib2R5X2ZuID1cbiAgbWF0Y2ggYm9keV9mbiB3aXRoXG4gIHwgTmF0aXZlRm4gKF8sIGYpIC0+IGYgW11cbiAgfCBfIC0+IE5pbFxubGV0IHJlZ2lzdGVyX2luX3Njb3BlIF9kaXNwb3NlX2ZuID0gTmlsXG5cbigqIENvbXBvbmVudCB0eXBlIGFubm90YXRpb24gc3R1YiAqKVxubGV0IGNvbXBvbmVudF9zZXRfcGFyYW1fdHlwZXNfYiBfY29tcCBfdHlwZXMgPSBOaWxcblxuKCogUGFyc2Uga2V5d29yZCBhcmdzIGZyb20gYSBjYWxsIOKAlCB0aGlzIGlzIGRlZmluZWQgaW4gZXZhbHVhdG9yLnN4LFxuICAgdGhlIHRyYW5zcGlsZWQgdmVyc2lvbiB3aWxsIG92ZXJyaWRlIHRoaXMgc3R1Yi4gKilcbigqIEZvcndhcmQtcmVmZXJlbmNlIHN0dWJzIGZvciBldmFsdWF0b3IgZnVuY3Rpb25zIHVzZWQgYmVmb3JlIGRlZmluaXRpb24gKilcbmxldCBwYXJzZV9jb21wX3BhcmFtcyBfcGFyYW1zID0gTGlzdCBbTGlzdCBbXTsgTmlsOyBCb29sIGZhbHNlXVxubGV0IHBhcnNlX21hY3JvX3BhcmFtcyBfcGFyYW1zID0gTGlzdCBbTGlzdCBbXTsgTmlsXVxuXG5sZXQgcGFyc2Vfa2V5d29yZF9hcmdzIF9yYXdfYXJncyBfZW52ID1cbiAgKCogU3R1YiDigJQgdGhlIHJlYWwgaW1wbGVtZW50YXRpb24gaXMgdHJhbnNwaWxlZCBmcm9tIGV2YWx1YXRvci5zeCAqKVxuICBMaXN0IFtEaWN0IChIYXNodGJsLmNyZWF0ZSAwKTsgTGlzdCBbXV1cblxuKCogTWFrZSBoYW5kbGVyIGRlZiDigJQgdXNlZCBieSBjdXN0b21fc3BlY2lhbF9mb3JtcyAqKVxubGV0IG1ha2VfaGFuZGxlcl9kZWYgbmFtZSBwYXJhbXMgYm9keSBfZW52ID0gRGljdCAobGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluIEhhc2h0YmwucmVwbGFjZSBkIFwidHlwZVwiIChTdHJpbmcgXCJoYW5kbGVyXCIpOyBIYXNodGJsLnJlcGxhY2UgZCBcIm5hbWVcIiBuYW1lOyBIYXNodGJsLnJlcGxhY2UgZCBcInBhcmFtc1wiIHBhcmFtczsgSGFzaHRibC5yZXBsYWNlIGQgXCJib2R5XCIgYm9keTsgZClcbmxldCBtYWtlX3BhZ2VfZGVmIG5hbWUgX29wdHMgPSBEaWN0IChsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW4gSGFzaHRibC5yZXBsYWNlIGQgXCJ0eXBlXCIgKFN0cmluZyBcInBhZ2VcIik7IEhhc2h0YmwucmVwbGFjZSBkIFwibmFtZVwiIG5hbWU7IGQpXG5cbigqIHNmX2RlZmhhbmRsZXIg4oCUIHVzZWQgYnkgY3VzdG9tX3NwZWNpYWxfZm9ybXMgKilcbmxldCBzZl9kZWZoYW5kbGVyIGFyZ3MgZW52ID1cbiAgbGV0IG5hbWUgPSBmaXJzdCBhcmdzIGluIGxldCByZXN0X2FyZ3MgPSByZXN0IGFyZ3MgaW5cbiAgbWFrZV9oYW5kbGVyX2RlZiBuYW1lIChmaXJzdCByZXN0X2FyZ3MpIChudGggcmVzdF9hcmdzIChOdW1iZXIgMS4wKSkgZW52XG5cbmxldCBzdHJpcF9wcmVmaXggcyBwcmVmaXggPVxuICBtYXRjaCBzLCBwcmVmaXggd2l0aFxuICB8IFN0cmluZyBzLCBTdHJpbmcgcCAtPlxuICAgIGxldCBwbCA9IFN0cmluZy5sZW5ndGggcCBpblxuICAgIGlmIFN0cmluZy5sZW5ndGggcyA+PSBwbCAmJiBTdHJpbmcuc3ViIHMgMCBwbCA9IHBcbiAgICB0aGVuIFN0cmluZyAoU3RyaW5nLnN1YiBzIHBsIChTdHJpbmcubGVuZ3RoIHMgLSBwbCkpXG4gICAgZWxzZSBTdHJpbmcgc1xuICB8IF8gLT4gc1xuXG4oKiBkZWJ1Z19sb2cg4oCUIG5vLW9wIGluIHByb2R1Y3Rpb24sIHVzZWQgYnkgQ0VLIGV2YWx1YXRvciBmb3IgY29tcG9uZW50IHdhcm5pbmdzICopXG5sZXQgZGVidWdfbG9nIF8gXyA9IE5pbFxuXG4oKiBtdXRhYmxlX2xpc3Qg4oCUIG11dGFibGUgbGlzdCBmb3IgYnl0ZWNvZGUgY29tcGlsZXIgcG9vbCBlbnRyaWVzICopXG5sZXQgbXV0YWJsZV9saXN0ICgpID0gTGlzdFJlZiAocmVmIFtdKVxuXG4oKiBKSVQgdHJ5LWNhbGwg4oCUIHJlZiBzZXQgYnkgc3hfc2VydmVyLm1sIGFmdGVyIGNvbXBpbGVyIGxvYWRzLlxuICAgUmV0dXJucyBOaWwgKG5vIEpJVCkgb3IgdGhlIHJlc3VsdCB2YWx1ZS4gU3BlYyBjYWxscyB0aGlzLiAqKVxubGV0IF9qaXRfdHJ5X2NhbGxfZm4gOiAodmFsdWUgLT4gdmFsdWUgbGlzdCAtPiB2YWx1ZSBvcHRpb24pIG9wdGlvbiByZWYgPSByZWYgTm9uZVxubGV0IF9qaXRfaGl0ID0gcmVmIDBcbmxldCBfaml0X21pc3MgPSByZWYgMFxubGV0IF9qaXRfc2tpcCA9IHJlZiAwXG5sZXQgaml0X3Jlc2V0X2NvdW50ZXJzICgpID0gX2ppdF9oaXQgOj0gMDsgX2ppdF9taXNzIDo9IDA7IF9qaXRfc2tpcCA6PSAwXG4oKiBTZW50aW5lbCB2YWx1ZSBmb3IgXCJKSVQgc2tpcHBlZCDigJQgZmFsbCBiYWNrIHRvIENFS1wiLlxuICAgTXVzdCBiZSBkaXN0aW5ndWlzaGFibGUgZnJvbSBhbnkgbGVnaXRpbWF0ZSByZXR1cm4gdmFsdWUgaW5jbHVkaW5nIE5pbC5cbiAgIFdlIHVzZSBhIHVuaXF1ZSB0YWdnZWQgZGljdCB0aGF0IGlzX2ppdF9za2lwIGNhbiBpZGVudGlmeS4gKilcbmxldCBfaml0X3NraXBfc2VudGluZWwgPVxuICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDEgaW5cbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJfX2ppdF9za2lwXCIgKEJvb2wgdHJ1ZSk7XG4gIERpY3QgZFxuXG5sZXQgaXNfaml0X3NraXAgdiA9IG1hdGNoIHYgd2l0aFxuICB8IERpY3QgZCAtPiBIYXNodGJsLm1lbSBkIFwiX19qaXRfc2tpcFwiXG4gIHwgXyAtPiBmYWxzZVxuXG4oKiBQbGF0Zm9ybSBmdW5jdGlvbiBmb3IgdGhlIHNwZWM6IChqaXQtc2tpcD8gdikg4oaSIHRyYW5zcGlsZXMgdG8gaml0X3NraXBfcCAqKVxubGV0IGppdF9za2lwX3AgdiA9IEJvb2wgKGlzX2ppdF9za2lwIHYpXG5cbmxldCBqaXRfdHJ5X2NhbGwgZiBhcmdzID1cbiAgbWF0Y2ggIV9qaXRfdHJ5X2NhbGxfZm4gd2l0aFxuICB8IE5vbmUgLT4gaW5jciBfaml0X3NraXA7IF9qaXRfc2tpcF9zZW50aW5lbFxuICB8IFNvbWUgaG9vayAtPlxuICAgIG1hdGNoIGYgd2l0aFxuICAgIHwgTGFtYmRhIGwgd2hlbiBsLmxfbmFtZSA8PiBOb25lIC0+XG4gICAgICBsZXQgYXJnX2xpc3QgPSBtYXRjaCBhcmdzIHdpdGggTGlzdCBhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gYSB9IC0+IGEgfCBfIC0+IFtdIGluXG4gICAgICAobWF0Y2ggaG9vayBmIGFyZ19saXN0IHdpdGggU29tZSByZXN1bHQgLT4gaW5jciBfaml0X2hpdDsgcmVzdWx0IHwgTm9uZSAtPiBpbmNyIF9qaXRfbWlzczsgX2ppdF9za2lwX3NlbnRpbmVsKVxuICAgIHwgXyAtPiBpbmNyIF9qaXRfc2tpcDsgX2ppdF9za2lwX3NlbnRpbmVsXG5cbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfY29tcGFyZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfSGFzaHRibCIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYiIsIlN4X3R5cGVzIiwiU3hfcHJpbWl0aXZlcyIsIlN0ZGxpYl9BcnJheSIsInByaW1fY2FsbCIsIm5hbWUiLCJhcmdzIiwibWF0Y2giLCJjc3QiLCJ2YWx1ZV90b19zdHIiLCJ2IiwibiIsInMiLCJzeF90b19zdHJpbmciLCJzeF9zdHIiLCJzeF90b19saXN0IiwibCIsInIiLCJzeF9jYWxsIiwiayIsIngiLCJmbiIsImNsIiwibmFyZ3MiLCJhcmdzX3ByZXZpZXciLCJhIiwic3hfYXBwbHkiLCJhcmdzX2xpc3QiLCJjc3RfZXZhbF9lcnJvciIsInN4X2FwcGx5X2NlayIsImUiLCJtYXJrZXIiLCJtc2ciLCJkIiwiaXNfZXZhbF9lcnJvciIsInN4X2FwcGVuZF9iIiwibHN0IiwiaXRlbSIsIml0ZW1zIiwiY3N0X2N1cnJlbnRfaXRlbSIsImNzdF9lZmZlY3RfbGlzdCIsImNzdF9lbWl0dGVkIiwiY3N0X2V4dHJhIiwiY3N0X2V4dHJhMiIsImNzdF9maXJzdF9yZW5kZXIiLCJjc3RfZnJhbWVzIiwiY3N0X2hhc19lZmZlY3RzIiwiY3N0X2hlYWRfbmFtZSIsImNzdF9ob190eXBlIiwiY3N0X2luZGV4ZWQiLCJjc3RfaXAiLCJjc3RfbWF0Y2hfdmFsIiwiY3N0X3BoYXNlIiwiY3N0X3Jhd19hcmdzIiwiY3N0X3JlbWFpbmluZyIsImNzdF9yZXN1bHRzIiwiY3N0X3NjaGVtZSIsImNzdF9zcCIsImNzdF9zdGFjayIsImNzdF9zdWJzY3JpYmVycyIsImNzdF91cGRhdGVfZm4iLCJjc3RfdmFsdWUiLCJzeF9kaWN0X3NldF9iIiwidGJsIiwia2V5Iiwic3dpdGNoJCIsIm0iLCJjc3RfYm9keSIsImNzdF9lbHNlIiwiY3N0X25hbWUiLCJjc3RfdHlwZSIsImdldF92YWwiLCJjb250YWluZXIiLCJjc3RfZW52IiwiYyIsImJjIiwiaSIsImNvbnN0cyIsInV2IiwiZXhuIiwiZGVmYXVsdCQiLCJwcmltIiwicGFyYW0iLCJmaXJzdCIsInJlc3QiLCJsYXN0IiwibnRoIiwiY29sbCIsImNvbnMiLCJhcHBlbmQiLCJiIiwicmV2ZXJzZSIsImZsYXR0ZW4iLCJjb25jYXQiLCJzbGljZSIsImxlbiIsImdldCIsInNvcnQiLCJyYW5nZSIsInVuaXF1ZSIsInppcCIsInRha2UiLCJkcm9wIiwia2V5d29yZF9wIiwiZW1wdHlfcCIsIm51bWJlcl9wIiwic3RyaW5nX3AiLCJib29sZWFuX3AiLCJsaXN0X3AiLCJkaWN0X3AiLCJzeW1ib2xfcCIsInN0ciIsInVwcGVyIiwidXBjYXNlIiwibG93ZXIiLCJkb3duY2FzZSIsInRyaW0iLCJzcGxpdCIsImpvaW4iLCJyZXBsYWNlIiwic3Vic3RyaW5nIiwiYXNzb2MiLCJkaXNzb2MiLCJtZXJnZSIsImtleXMiLCJ2YWxzIiwiZGljdF9zZXQiLCJkaWN0X2dldCIsImRpY3RfZGVsZXRlIiwiYWJzIiwic3FydCIsInBvdyIsImZsb29yIiwiY2VpbCIsInJvdW5kIiwibWluIiwibWF4IiwiY2xhbXAiLCJlcnJvciIsImluc3BlY3QiLCJhcHBseSIsInNwcmVhZF9hdHRycyIsInN4X2NvbnRleHQiLCJ0cmFtcG9saW5lIiwidHlwZV9vZiIsInVud3JhcF9lbnYiLCJlbnZfaGFzIiwiZW52X2dldCIsImVudl9iaW5kIiwiZW52X3NldCIsIm1ha2VfZW52IiwiZW52X2V4dGVuZCIsImVudl9tZXJnZSIsInNldF9sYW1iZGFfbmFtZSIsImlzX25pbCIsImlzX3RodW5rIiwiaXNfbGFtYmRhIiwiaXNfY29tcG9uZW50IiwiaXNfaXNsYW5kIiwiaXNfbWFjcm8iLCJpc19zaWduYWwiLCJpc19jYWxsYWJsZSIsImlzX3ByaW1pdGl2ZSIsImdldF9wcmltaXRpdmUiLCJmb3JfZWFjaF9pbmRleGVkIiwiY29udGludWF0aW9uX3AiLCJtYWtlX2Nla19jb250aW51YXRpb24iLCJjYXB0dXJlZCIsInJlc3Rfa29udCIsImRhdGEiLCJjb250aW51YXRpb25fZGF0YSIsImNhbGxjY19jb250aW51YXRpb25fcCIsIm1ha2VfY2FsbGNjX2NvbnRpbnVhdGlvbiIsIndpbmRlcnNfbGVuIiwiY2FsbGNjX2NvbnRpbnVhdGlvbl9kYXRhIiwiZnJhbWVzIiwiY2FsbGNjX2NvbnRpbnVhdGlvbl93aW5kZXJzX2xlIiwiaG9zdF9lcnJvciIsImR5bmFtaWNfd2luZF9jYWxsIiwiYmVmb3JlIiwiYm9keSIsImFmdGVyIiwiZW52IiwicmVzdWx0IiwiY3N0X3Njb3BlX3B1c2giLCJzY29wZV9wdXNoIiwidmFsdWUiLCJjc3Rfc2NvcGVfcG9wIiwic2NvcGVfcG9wIiwic2NvcGVfcGVlayIsInNjb3BlX2VtaXQiLCJwcm92aWRlX3B1c2giLCJwcm92aWRlX3BvcCIsImN1c3RvbV9zcGVjaWFsX2Zvcm1zIiwicmVnaXN0ZXJfc3BlY2lhbF9mb3JtIiwiaGFuZGxlciIsImlzX2Vsc2VfY2xhdXNlIiwiY3N0X2RlZmF1bHQiLCJzaWduYWxfdmFsdWUiLCJzaWciLCJzaWduYWxfYWRkX3N1Yl9iIiwic2lnbmFsX3JlbW92ZV9zdWJfYiIsIndpdGhfaXNsYW5kX3Njb3BlIiwicmVnaXN0ZXJfZm4iLCJib2R5X2ZuIiwicmVnaXN0ZXJfaW5fc2NvcGUiLCJkaXNwb3NlX2ZuIiwiY29tcG9uZW50X3NldF9wYXJhbV90eXBlc19iIiwiY29tcCIsInR5cGVzIiwicGFyc2VfY29tcF9wYXJhbXMiLCJwYXJhbXMiLCJwYXJzZV9tYWNyb19wYXJhbXMiLCJwYXJzZV9rZXl3b3JkX2FyZ3MiLCJyYXdfYXJncyIsIm1ha2VfaGFuZGxlcl9kZWYiLCJtYWtlX3BhZ2VfZGVmIiwib3B0cyIsInNmX2RlZmhhbmRsZXIiLCJyZXN0X2FyZ3MiLCJzdHJpcF9wcmVmaXgiLCJwcmVmaXgiLCJwIiwicGwiLCJkZWJ1Z19sb2ciLCJtdXRhYmxlX2xpc3QiLCJqaXRfaGl0Iiwiaml0X21pc3MiLCJqaXRfc2tpcCIsImppdF9yZXNldF9jb3VudGVycyIsImNzdF9qaXRfc2tpcCIsImlzX2ppdF9za2lwIiwiaml0X3NraXBfcCIsImppdF90cnlfY2FsbF9mbiIsImppdF9za2lwX3NlbnRpbmVsIiwiaml0X3RyeV9jYWxsIiwiaG9vayIsImFyZ19saXN0Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsWUFBQUMsVUFBQUMsTUFBQUM7QUFBQUEsUUFBQUMsUUNVUTtBQUFBLElBQThDLGNBQUFmLElBQUEsVUFDeEMsMEJBQytDO0FBQUEsWUFBL0I7QUFBQSxJQUE4QjtBQUFBLEdBQUM7QUFBQSxPQUFBZ0IsTURaN0Q7QUFBQSxZQUFBQyxhQUFBQztBQUFBQSxJQ2VtQixzQ0FLUjtBQUFBO0FBQUEsS0FMUTtBQUFBO0FBQUEsc0NBUUQ7QUFBQTtBQUFBLFlBQUFDLElBUkMsTUFFSCxpQ0FNRTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLElBUkM7QUFBQTtBQUFBLElBUVYsa0NBQVM7QUFBQTtBQUFBLFlBQUFDLGFBQUFILEdB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TUFBZ0I7QUFBQTtBQUFBO0FBQUEsSUFDdEY7QUFBQSxJQUFnQjtBQUFBLEdBQWtCO0FBQUEsR0FsQkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHpnQjVDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NTA3NTcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3JlZi5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIHN4X3JlZi5tbCDigJQgQXV0by1nZW5lcmF0ZWQgZnJvbSBTWCBzcGVjIGJ5IGhvc3RzL29jYW1sL2Jvb3RzdHJhcC5weSAqKVxuKCogRG8gbm90IGVkaXQg4oCUIHJlZ2VuZXJhdGUgd2l0aDogcHl0aG9uMyBob3N0cy9vY2FtbC9ib290c3RyYXAucHkgKilcblxuW0BAQHdhcm5pbmcgXCItMjYtMjdcIl1cblxub3BlbiBTeF90eXBlc1xub3BlbiBTeF9ydW50aW1lXG5cbigqIFRyYW1wb2xpbmUg4oCUIGZvcndhcmQgcmVmLCByZXNvbHZlZCBhZnRlciBldmFsX2V4cHIgaXMgZGVmaW5lZC4gKilcbmxldCB0cmFtcG9saW5lX2ZuIDogKHZhbHVlIC0+IHZhbHVlKSByZWYgPSByZWYgKGZ1biB2IC0+IHYpXG5sZXQgdHJhbXBvbGluZSB2ID0gIXRyYW1wb2xpbmVfZm4gdlxuXG4oKiBTdGVwIGxpbWl0IGZvciB0aW1lb3V0IGRldGVjdGlvbiDigJQgc2V0IHRvIDAgdG8gZGlzYWJsZSAqKVxubGV0IHN0ZXBfbGltaXQgOiBpbnQgcmVmID0gcmVmIDBcbmxldCBzdGVwX2NvdW50IDogaW50IHJlZiA9IHJlZiAwXG5cbigqID09PSBNdXRhYmxlIGdsb2JhbHMg4oCUIGJhY2tpbmcgcmVmcyBmb3IgdHJhbnNwaWxlcidzICFfcmVmIC8gX3JlZiA6PSA9PT0gKilcbmxldCBfc3RyaWN0X3JlZiA9IHJlZiAoQm9vbCBmYWxzZSlcbmxldCBfcHJpbV9wYXJhbV90eXBlc19yZWYgPSByZWYgTmlsXG5sZXQgX2xhc3RfZXJyb3Jfa29udF9yZWYgPSByZWYgTmlsXG5sZXQgX3Byb3RvY29sX3JlZ2lzdHJ5XyA9IERpY3QgKEhhc2h0YmwuY3JlYXRlIDApXG5cblxuXG4oKiA9PT0gVHJhbnNwaWxlZCBmcm9tIGV2YWx1YXRvciAoZnJhbWVzICsgZXZhbCArIENFSykgPT09ICopXG5cbigqIHNlcS10by1saXN0OiBjb2VyY2UgbGlzdC92ZWN0b3Ivc3RyaW5nL25pbCB0byBsaXN0IGZvciBITyBkaXNwYXRjaCAqKVxubGV0IHNlcV90b19saXN0IHYgPVxuICBtYXRjaCB2IHdpdGhcbiAgfCBOaWwgLT4gTGlzdCBbXVxuICB8IExpc3QgXyAtPiB2XG4gIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSAtPiBMaXN0IGl0ZW1zXG4gIHwgVmVjdG9yIGFyciAtPiBMaXN0IChBcnJheS50b19saXN0IGFycilcbiAgfCBTdHJpbmcgcyAtPlxuICAgIGxldCBjaGFycyA9IHJlZiBbXSBpblxuICAgIFN0cmluZy5pdGVyIChmdW4gYyAtPiBjaGFycyA6PSBTdHJpbmcgKFN0cmluZy5tYWtlIDEgYykgOjogIWNoYXJzKSBzO1xuICAgIExpc3QgKExpc3QucmV2ICFjaGFycylcbiAgfCBfIC0+IHZcblxuKCogbWFrZS1jZWstc3RhdGUgKilcbmxldCByZWMgbWFrZV9jZWtfc3RhdGUgY29udHJvbCBlbnYga29udCA9XG4gIChDZWtTdGF0ZSB7IGNzX2NvbnRyb2wgPSBjb250cm9sOyBjc19lbnYgPSBlbnY7IGNzX2tvbnQgPSBrb250OyBjc19waGFzZSA9IFwiZXZhbFwiOyBjc192YWx1ZSA9IE5pbCB9KVxuXG4oKiBtYWtlLWNlay12YWx1ZSAqKVxuYW5kIG1ha2VfY2VrX3ZhbHVlIHZhbHVlIGVudiBrb250ID1cbiAgKENla1N0YXRlIHsgY3NfY29udHJvbCA9IE5pbDsgY3NfZW52ID0gZW52OyBjc19rb250ID0ga29udDsgY3NfcGhhc2UgPSBcImNvbnRpbnVlXCI7IGNzX3ZhbHVlID0gdmFsdWUgfSlcblxuKCogbWFrZS1jZWstc3VzcGVuZGVkICopXG5hbmQgbWFrZV9jZWtfc3VzcGVuZGVkIHJlcXVlc3QgZW52IGtvbnQgPVxuICAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgNCBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJlbnZcIiBlbnY7IEhhc2h0YmwucmVwbGFjZSBfZCBcImtvbnRcIiBrb250OyBIYXNodGJsLnJlcGxhY2UgX2QgXCJwaGFzZVwiIChTdHJpbmcgXCJpby1zdXNwZW5kZWRcIik7IEhhc2h0YmwucmVwbGFjZSBfZCBcInJlcXVlc3RcIiByZXF1ZXN0OyBEaWN0IF9kKVxuXG4oKiBjZWstdGVybWluYWw/ICopXG5hbmQgY2VrX3Rlcm1pbmFsX3Agc3RhdGUgPVxuICAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJwaGFzZVwiKSkpOyAoU3RyaW5nIFwiY29udGludWVcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZW1wdHlfcCAoKGdldCAoc3RhdGUpICgoU3RyaW5nIFwia29udFwiKSkpKSkpXG5cbigqIGNlay1zdXNwZW5kZWQ/ICopXG5hbmQgY2VrX3N1c3BlbmRlZF9wIHN0YXRlID1cbiAgKHByaW1fY2FsbCBcIj1cIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwicGhhc2VcIikpKTsgKFN0cmluZyBcImlvLXN1c3BlbmRlZFwiKV0pXG5cbigqIGNlay1jb250cm9sICopXG5hbmQgY2VrX2NvbnRyb2wgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwiY29udHJvbFwiKSkpXG5cbigqIGNlay1lbnYgKilcbmFuZCBjZWtfZW52IHMgPVxuICAoZ2V0IChzKSAoKFN0cmluZyBcImVudlwiKSkpXG5cbigqIGNlay1rb250ICopXG5hbmQgY2VrX2tvbnQgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwia29udFwiKSkpXG5cbigqIGNlay1waGFzZSAqKVxuYW5kIGNla19waGFzZSBzID1cbiAgKGdldCAocykgKChTdHJpbmcgXCJwaGFzZVwiKSkpXG5cbigqIGNlay1pby1yZXF1ZXN0ICopXG5hbmQgY2VrX2lvX3JlcXVlc3QgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwicmVxdWVzdFwiKSkpXG5cbigqIGNlay12YWx1ZSAqKVxuYW5kIGNla192YWx1ZSBzID1cbiAgKGdldCAocykgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpXG5cbigqIG1ha2UtaWYtZnJhbWUgKilcbmFuZCBtYWtlX2lmX2ZyYW1lIHRoZW5fZXhwciBlbHNlX2V4cHIgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiaWZcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gZWxzZV9leHByOyBjZl9ib2R5ID0gdGhlbl9leHByOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS13aGVuLWZyYW1lICopXG5hbmQgbWFrZV93aGVuX2ZyYW1lIGJvZHlfZXhwcnMgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwid2hlblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBib2R5X2V4cHJzOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1iZWdpbi1mcmFtZSAqKVxuYW5kIG1ha2VfYmVnaW5fZnJhbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImJlZ2luXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtbGV0LWZyYW1lICopXG5hbmQgbWFrZV9sZXRfZnJhbWUgbmFtZSByZW1haW5pbmcgYm9keSBsb2NhbCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImxldFwiOyBjZl9lbnYgPSBsb2NhbDsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBib2R5OyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1kZWZpbmUtZnJhbWUgKilcbmFuZCBtYWtlX2RlZmluZV9mcmFtZSBuYW1lIGVudiBoYXNfZWZmZWN0cyBlZmZlY3RfbGlzdCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImRlZmluZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gaGFzX2VmZmVjdHM7IGNmX2V4dHJhMiA9IGVmZmVjdF9saXN0IH0pXG5cbigqIG1ha2UtZGVmaW5lLWZvcmVpZ24tZnJhbWUgKilcbmFuZCBtYWtlX2RlZmluZV9mb3JlaWduX2ZyYW1lIG5hbWUgc3BlYyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkZWZpbmUtZm9yZWlnblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1zZXQtZnJhbWUgKilcbmFuZCBtYWtlX3NldF9mcmFtZSBuYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNldFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1hcmctZnJhbWUgKilcbmFuZCBtYWtlX2FyZ19mcmFtZSBmIGV2YWxlZCByZW1haW5pbmcgZW52IHJhd19hcmdzIGhlYWRfbmFtZSA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImFyZ1wiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBldmFsZWQ7IGNmX3Jlc3VsdHMgPSByYXdfYXJnczsgY2ZfZXh0cmEgPSAobGV0IF9vciA9IGhlYWRfbmFtZSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgTmlsKTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtY2FsbC1mcmFtZSAqKVxuYW5kIG1ha2VfY2FsbF9mcmFtZSBmIGFyZ3MgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiY2FsbFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBhcmdzOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtY29uZC1mcmFtZSAqKVxuYW5kIG1ha2VfY29uZF9mcmFtZSByZW1haW5pbmcgZW52IHNjaGVtZV9wID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiY29uZFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBzY2hlbWVfcDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtY29uZC1hcnJvdy1mcmFtZSAqKVxuYW5kIG1ha2VfY29uZF9hcnJvd19mcmFtZSB0ZXN0X3ZhbHVlIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNvbmQtYXJyb3dcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gdGVzdF92YWx1ZTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtY2FzZS1mcmFtZSAqKVxuYW5kIG1ha2VfY2FzZV9mcmFtZSBtYXRjaF92YWwgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNhc2VcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gbWF0Y2hfdmFsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS10aHJlYWQtZnJhbWUgKilcbmFuZCBtYWtlX3RocmVhZF9mcmFtZSByZW1haW5pbmcgZW52IG1vZGUgbmFtZSA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInRocmVhZFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gbW9kZTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIHRocmVhZC1pbnNlcnQtYXJnICopXG5hbmQgdGhyZWFkX2luc2VydF9hcmcgZm9ybSB2YWx1ZSBmZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGZvcm0pKTsgKFN0cmluZyBcImxpc3RcIildKSkgdGhlbiAoZXZhbF9leHByICgoY29ucyAoKGZpcnN0IChmb3JtKSkpICgoY29ucyAoKExpc3QgWyhTeW1ib2wgXCJxdW90ZVwiKTsgdmFsdWVdKSkgKChyZXN0IChmb3JtKSkpKSkpKSAoZmVudikpIGVsc2UgKGV2YWxfZXhwciAoKExpc3QgW2Zvcm07IChMaXN0IFsoU3ltYm9sIFwicXVvdGVcIik7IHZhbHVlXSldKSkgKGZlbnYpKSlcblxuKCogdGhyZWFkLWluc2VydC1hcmctbGFzdCAqKVxuYW5kIHRocmVhZF9pbnNlcnRfYXJnX2xhc3QgZm9ybSB2YWx1ZSBmZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGZvcm0pKTsgKFN0cmluZyBcImxpc3RcIildKSkgdGhlbiAoZXZhbF9leHByICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2Zvcm07IChMaXN0IFsoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyB2YWx1ZV0pXSldKSkgKGZlbnYpKSBlbHNlIChldmFsX2V4cHIgKChMaXN0IFtmb3JtOyAoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyB2YWx1ZV0pXSkpIChmZW52KSkpXG5cbigqIG1ha2UtbWFwLWZyYW1lICopXG5hbmQgbWFrZV9tYXBfZnJhbWUgZiByZW1haW5pbmcgcmVzdWx0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJtYXBcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gcmVzdWx0czsgY2ZfZXh0cmEgPSAoQm9vbCBmYWxzZSk7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLW1hcC1pbmRleGVkLWZyYW1lICopXG5hbmQgbWFrZV9tYXBfaW5kZXhlZF9mcmFtZSBmIHJlbWFpbmluZyByZXN1bHRzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcIm1hcFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSByZXN1bHRzOyBjZl9leHRyYSA9IChCb29sIHRydWUpOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1tdWx0aS1tYXAtZnJhbWUgKilcbmFuZCBtYWtlX211bHRpX21hcF9mcmFtZSBmIHJlbWFpbmluZ19saXN0cyByZXN1bHRzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcIm11bHRpLW1hcFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZ19saXN0czsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSByZXN1bHRzOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZmlsdGVyLWZyYW1lICopXG5hbmQgbWFrZV9maWx0ZXJfZnJhbWUgZiByZW1haW5pbmcgcmVzdWx0cyBjdXJyZW50X2l0ZW0gZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZmlsdGVyXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IHJlc3VsdHM7IGNmX2V4dHJhID0gY3VycmVudF9pdGVtOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1yZWR1Y2UtZnJhbWUgKilcbmFuZCBtYWtlX3JlZHVjZV9mcmFtZSBmIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyZWR1Y2VcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZm9yLWVhY2gtZnJhbWUgKilcbmFuZCBtYWtlX2Zvcl9lYWNoX2ZyYW1lIGYgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImZvci1lYWNoXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNvbWUtZnJhbWUgKilcbmFuZCBtYWtlX3NvbWVfZnJhbWUgZiByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwic29tZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1ldmVyeS1mcmFtZSAqKVxuYW5kIG1ha2VfZXZlcnlfZnJhbWUgZiByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZXZlcnlcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2Utc2NvcGUtZnJhbWUgKilcbmFuZCBtYWtlX3Njb3BlX2ZyYW1lIG5hbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNjb3BlXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXByb3ZpZGUtZnJhbWUgKilcbmFuZCBtYWtlX3Byb3ZpZGVfZnJhbWUgbmFtZSB2YWx1ZSByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicHJvdmlkZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSAoTGlzdCBbXSk7IGNmX2V4dHJhID0gdmFsdWU7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWJpbmQtZnJhbWUgKilcbmFuZCBtYWtlX2JpbmRfZnJhbWUgYm9keSBlbnYgcHJldl90cmFja2luZyA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImJpbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gYm9keTsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IHByZXZfdHJhY2tpbmc7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXByb3ZpZGUtc2V0LWZyYW1lICopXG5hbmQgbWFrZV9wcm92aWRlX3NldF9mcmFtZSBuYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInByb3ZpZGUtc2V0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNjb3BlLWFjYy1mcmFtZSAqKVxuYW5kIG1ha2Vfc2NvcGVfYWNjX2ZyYW1lIG5hbWUgdmFsdWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNjb3BlLWFjY1wiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gKGxldCBfb3IgPSB2YWx1ZSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgTmlsKTsgY2ZfZXh0cmEyID0gKExpc3QgW10pIH0pXG5cbigqIG1ha2UtcmVzZXQtZnJhbWUgKilcbmFuZCBtYWtlX3Jlc2V0X2ZyYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInJlc2V0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZGljdC1mcmFtZSAqKVxuYW5kIG1ha2VfZGljdF9mcmFtZSByZW1haW5pbmcgcmVzdWx0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkaWN0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gcmVzdWx0czsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWFuZC1mcmFtZSAqKVxuYW5kIG1ha2VfYW5kX2ZyYW1lIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJhbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1vci1mcmFtZSAqKVxuYW5kIG1ha2Vfb3JfZnJhbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcIm9yXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZHluYW1pYy13aW5kLWZyYW1lICopXG5hbmQgbWFrZV9keW5hbWljX3dpbmRfZnJhbWUgcGhhc2UgYm9keV90aHVuayBhZnRlcl90aHVuayBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkeW5hbWljLXdpbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBhZnRlcl90aHVuazsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBwaGFzZTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtcmVhY3RpdmUtcmVzZXQtZnJhbWUgKilcbmFuZCBtYWtlX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lIGVudiB1cGRhdGVfZm4gZmlyc3RfcmVuZGVyX3AgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyZWFjdGl2ZS1yZXNldFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSB1cGRhdGVfZm47IGNmX2V4dHJhMiA9IGZpcnN0X3JlbmRlcl9wIH0pXG5cbigqIG1ha2UtY2FsbGNjLWZyYW1lICopXG5hbmQgbWFrZV9jYWxsY2NfZnJhbWUgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiY2FsbGNjXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2Utd2luZC1hZnRlci1mcmFtZSAqKVxuYW5kIG1ha2Vfd2luZF9hZnRlcl9mcmFtZSBhZnRlcl90aHVuayB3aW5kZXJzX2xlbiBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJ3aW5kLWFmdGVyXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gYWZ0ZXJfdGh1bms7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gd2luZGVyc19sZW47IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXdpbmQtcmV0dXJuLWZyYW1lICopXG5hbmQgbWFrZV93aW5kX3JldHVybl9mcmFtZSBib2R5X3Jlc3VsdCBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJ3aW5kLXJldHVyblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBib2R5X3Jlc3VsdDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZGVyZWYtZnJhbWUgKilcbmFuZCBtYWtlX2RlcmVmX2ZyYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImRlcmVmXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtaG8tc2V0dXAtZnJhbWUgKilcbmFuZCBtYWtlX2hvX3NldHVwX2ZyYW1lIGhvX3R5cGUgcmVtYWluaW5nX2FyZ3MgZXZhbGVkX2FyZ3MgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiaG8tc2V0dXBcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmdfYXJnczsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IGV2YWxlZF9hcmdzOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IGhvX3R5cGU7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNvbXAtdHJhY2UtZnJhbWUgKilcbmFuZCBtYWtlX2NvbXBfdHJhY2VfZnJhbWUgbmFtZSBmaWxlID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiY29tcC10cmFjZVwiOyBjZl9lbnYgPSBmaWxlOyBjZl9uYW1lID0gbmFtZTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIGtvbnQtY29sbGVjdC1jb21wLXRyYWNlICopXG5hbmQga29udF9jb2xsZWN0X2NvbXBfdHJhY2Uga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gKExpc3QgW10pIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwiY29tcC10cmFjZVwiKV0pKSB0aGVuIChjb25zICgobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJmaWxlXCIgKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZmlsZVwiKSkpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJuYW1lXCIgKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpOyBEaWN0IF9kKSkgKChrb250X2NvbGxlY3RfY29tcF90cmFjZSAoKHJlc3QgKGtvbnQpKSkpKSkgZWxzZSAoa29udF9jb2xsZWN0X2NvbXBfdHJhY2UgKChyZXN0IChrb250KSkpKSkpKVxuXG4oKiBtYWtlLWhhbmRsZXItZnJhbWUgKilcbmFuZCBtYWtlX2hhbmRsZXJfZnJhbWUgaGFuZGxlcnMgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImhhbmRsZXJcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBoYW5kbGVyczsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXJlc3RhcnQtZnJhbWUgKilcbmFuZCBtYWtlX3Jlc3RhcnRfZnJhbWUgcmVzdGFydHMgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInJlc3RhcnRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSByZXN0YXJ0czsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNpZ25hbC1yZXR1cm4tZnJhbWUgKilcbmFuZCBtYWtlX3NpZ25hbF9yZXR1cm5fZnJhbWUgZW52IHNhdmVkX2tvbnQgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJzaWduYWwtcmV0dXJuXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gc2F2ZWRfa29udDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXJhaXNlLWV2YWwtZnJhbWUgKilcbmFuZCBtYWtlX3JhaXNlX2V2YWxfZnJhbWUgZW52IGNvbnRpbnVhYmxlX3AgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyYWlzZS1ldmFsXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IGNvbnRpbnVhYmxlX3A7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXJhaXNlLWd1YXJkLWZyYW1lICopXG5hbmQgbWFrZV9yYWlzZV9ndWFyZF9mcmFtZSBlbnYgc2F2ZWRfa29udCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInJhaXNlLWd1YXJkXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gc2F2ZWRfa29udDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXBlcmZvcm0tZnJhbWUgKilcbmFuZCBtYWtlX3BlcmZvcm1fZnJhbWUgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicGVyZm9ybVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXZtLXJlc3VtZS1mcmFtZSAqKVxuYW5kIG1ha2Vfdm1fcmVzdW1lX2ZyYW1lIHJlc3VtZV9mbiBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJ2bS1yZXN1bWVcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSByZXN1bWVfZm47IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1pbXBvcnQtZnJhbWUgKilcbmFuZCBtYWtlX2ltcG9ydF9mcmFtZSBpbXBvcnRfc2V0IHJlbWFpbmluZ19zZXRzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImltcG9ydFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZ19zZXRzOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gaW1wb3J0X3NldDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXBhcmFtZXRlcml6ZS1mcmFtZSAqKVxuYW5kIG1ha2VfcGFyYW1ldGVyaXplX2ZyYW1lIHJlbWFpbmluZyBjdXJyZW50X3BhcmFtIHJlc3VsdHMgYm9keSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJwYXJhbWV0ZXJpemVcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gYm9keTsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gY3VycmVudF9wYXJhbTsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IHJlc3VsdHM7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogZmluZC1tYXRjaGluZy1oYW5kbGVyICopXG5hbmQgZmluZF9tYXRjaGluZ19oYW5kbGVyIGhhbmRsZXJzIGNvbmRpdGlvbiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChoYW5kbGVycykpKSB0aGVuIE5pbCBlbHNlIChsZXQgcGFpciA9IChmaXJzdCAoaGFuZGxlcnMpKSBpbiAobGV0IHByZWQgPSAoZmlyc3QgKHBhaXIpKSBpbiBsZXQgaGFuZGxlcl9mbiA9IChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoY2VrX2NhbGwgKHByZWQpICgoTGlzdCBbY29uZGl0aW9uXSkpKSkgdGhlbiBoYW5kbGVyX2ZuIGVsc2UgKGZpbmRfbWF0Y2hpbmdfaGFuZGxlciAoKHJlc3QgKGhhbmRsZXJzKSkpIChjb25kaXRpb24pKSkpKSlcblxuKCoga29udC1maW5kLWhhbmRsZXIgKilcbmFuZCBrb250X2ZpbmRfaGFuZGxlciBrb250IGNvbmRpdGlvbiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gTmlsIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwiaGFuZGxlclwiKV0pKSB0aGVuIChsZXQgbWF0Y2gnID0gKGZpbmRfbWF0Y2hpbmdfaGFuZGxlciAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpKSAoY29uZGl0aW9uKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAobWF0Y2gnKSkpIHRoZW4gKGtvbnRfZmluZF9oYW5kbGVyICgocmVzdCAoa29udCkpKSAoY29uZGl0aW9uKSkgZWxzZSBtYXRjaCcpKSBlbHNlIChrb250X2ZpbmRfaGFuZGxlciAoKHJlc3QgKGtvbnQpKSkgKGNvbmRpdGlvbikpKSkpXG5cbigqIGtvbnQtdW53aW5kLXRvLWhhbmRsZXIgKilcbmFuZCBrb250X3Vud2luZF90b19oYW5kbGVyIGtvbnQgY29uZGl0aW9uID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtvbnQpKSkgdGhlbiAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJoYW5kbGVyXCIgTmlsOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJrb250XCIga29udDsgRGljdCBfZCkgZWxzZSAobGV0IGZyYW1lID0gKGZpcnN0IChrb250KSkgaW4gbGV0IHJlc3RfayA9IChyZXN0IChrb250KSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJoYW5kbGVyXCIpXSkpIHRoZW4gKGxldCBtYXRjaCcgPSAoZmluZF9tYXRjaGluZ19oYW5kbGVyICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkpIChjb25kaXRpb24pKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChtYXRjaCcpKSkgdGhlbiAoa29udF91bndpbmRfdG9faGFuZGxlciAocmVzdF9rKSAoY29uZGl0aW9uKSkgZWxzZSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJoYW5kbGVyXCIgbWF0Y2gnOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJrb250XCIga29udDsgRGljdCBfZCkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwid2luZC1hZnRlclwiKV0pKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKCFfd2luZGVyc19yZWYpKTsgKGdldCAoZnJhbWUpICgoU3RyaW5nIFwid2luZGVycy1sZW5cIikpKV0pKSB0aGVuIChfd2luZGVyc19yZWYgOj0gKHJlc3QgKCFfd2luZGVyc19yZWYpKTsgTmlsKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChjZWtfY2FsbCAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiYWZ0ZXItdGh1bmtcIikpKSkgKChMaXN0IFtdKSkpKSBpbiAoa29udF91bndpbmRfdG9faGFuZGxlciAocmVzdF9rKSAoY29uZGl0aW9uKSkpKSBlbHNlIChrb250X3Vud2luZF90b19oYW5kbGVyIChyZXN0X2spIChjb25kaXRpb24pKSkpKSlcblxuKCogd2luZC1lc2NhcGUtdG8gKilcbmFuZCB3aW5kX2VzY2FwZV90byB0YXJnZXRfbGVuID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoIV93aW5kZXJzX3JlZikpOyB0YXJnZXRfbGVuXSkpIHRoZW4gKGxldCBhZnRlcl90aHVuayA9IChmaXJzdCAoIV93aW5kZXJzX3JlZikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChfd2luZGVyc19yZWYgOj0gKHJlc3QgKCFfd2luZGVyc19yZWYpKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGNla19jYWxsIChhZnRlcl90aHVuaykgKChMaXN0IFtdKSkpKSBpbiAod2luZF9lc2NhcGVfdG8gKHRhcmdldF9sZW4pKSkpKSBlbHNlIE5pbClcblxuKCogZmluZC1uYW1lZC1yZXN0YXJ0ICopXG5hbmQgZmluZF9uYW1lZF9yZXN0YXJ0IHJlc3RhcnRzIG5hbWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVzdGFydHMpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGVudHJ5ID0gKGZpcnN0IChyZXN0YXJ0cykpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmaXJzdCAoZW50cnkpKTsgbmFtZV0pKSB0aGVuIGVudHJ5IGVsc2UgKGZpbmRfbmFtZWRfcmVzdGFydCAoKHJlc3QgKHJlc3RhcnRzKSkpIChuYW1lKSkpKSlcblxuKCoga29udC1maW5kLXJlc3RhcnQgKilcbmFuZCBrb250X2ZpbmRfcmVzdGFydCBrb250IG5hbWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInJlc3RhcnRcIildKSkgdGhlbiAobGV0IG1hdGNoJyA9IChmaW5kX25hbWVkX3Jlc3RhcnQgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSkgKG5hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChtYXRjaCcpKSkgdGhlbiAoa29udF9maW5kX3Jlc3RhcnQgKChyZXN0IChrb250KSkpIChuYW1lKSkgZWxzZSAoTGlzdCBbbWF0Y2gnOyBmcmFtZTsgKHJlc3QgKGtvbnQpKV0pKSkgZWxzZSAoa29udF9maW5kX3Jlc3RhcnQgKChyZXN0IChrb250KSkpIChuYW1lKSkpKSlcblxuKCogZnJhbWUtdHlwZSAqKVxuYW5kIGZyYW1lX3R5cGUgZiA9XG4gIChnZXQgKGYpICgoU3RyaW5nIFwidHlwZVwiKSkpXG5cbigqIGtvbnQtcHVzaCAqKVxuYW5kIGtvbnRfcHVzaCBmcmFtZSBrb250ID1cbiAgKGNvbnMgKGZyYW1lKSAoa29udCkpXG5cbigqIGtvbnQtdG9wICopXG5hbmQga29udF90b3Aga29udCA9XG4gIChmaXJzdCAoa29udCkpXG5cbigqIGtvbnQtcG9wICopXG5hbmQga29udF9wb3Aga29udCA9XG4gIChyZXN0IChrb250KSlcblxuKCoga29udC1lbXB0eT8gKilcbmFuZCBrb250X2VtcHR5X3Aga29udCA9XG4gIChlbXB0eV9wIChrb250KSlcblxuKCoga29udC1jYXB0dXJlLXRvLXJlc2V0ICopXG5hbmQga29udF9jYXB0dXJlX3RvX3Jlc2V0IGtvbnQgPVxuICAobGV0IHJlYyBzY2FuID0gKGZ1biBrIGNhcHR1cmVkIC0+IChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyBcInNoaWZ0IHdpdGhvdXQgZW5jbG9zaW5nIHJlc2V0XCIpKSkpIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoaykpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJyZXNldFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInJlYWN0aXZlLXJlc2V0XCIpXSkpKSB0aGVuIChMaXN0IFtjYXB0dXJlZDsgKHJlc3QgKGspKV0pIGVsc2UgKHNjYW4gKChyZXN0IChrKSkpICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2NhcHR1cmVkOyAoTGlzdCBbZnJhbWVdKV0pKSkpKSkpIGluIChzY2FuIChrb250KSAoKExpc3QgW10pKSkpXG5cbigqIGtvbnQtcHVzaC1wcm92aWRlcyAqKVxuYW5kIGtvbnRfcHVzaF9wcm92aWRlcyBwYWlycyBlbnYga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChwYWlycykpKSB0aGVuIGtvbnQgZWxzZSAobGV0IHBhaXIgPSAoZmlyc3QgKHBhaXJzKSkgaW4gKGtvbnRfcHVzaF9wcm92aWRlcyAoKHJlc3QgKHBhaXJzKSkpIChlbnYpICgoY29ucyAoKG1ha2VfcHJvdmlkZV9mcmFtZSAoKGZpcnN0IChwYWlyKSkpICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpKSlcblxuKCoga29udC1maW5kLXByb3ZpZGUgKilcbmFuZCBrb250X2ZpbmRfcHJvdmlkZSBrb250IG5hbWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInByb3ZpZGVcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSk7IG5hbWVdKSkpIHRoZW4gZnJhbWUgZWxzZSAoa29udF9maW5kX3Byb3ZpZGUgKChyZXN0IChrb250KSkpIChuYW1lKSkpKSlcblxuKCoga29udC1maW5kLXNjb3BlLWFjYyAqKVxuYW5kIGtvbnRfZmluZF9zY29wZV9hY2Mga29udCBuYW1lID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtvbnQpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGZyYW1lID0gKGZpcnN0IChrb250KSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJzY29wZS1hY2NcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSk7IG5hbWVdKSkpIHRoZW4gZnJhbWUgZWxzZSAoa29udF9maW5kX3Njb3BlX2FjYyAoKHJlc3QgKGtvbnQpKSkgKG5hbWUpKSkpKVxuXG4oKiBoYXMtcmVhY3RpdmUtcmVzZXQtZnJhbWU/ICopXG5hbmQgaGFzX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lX3Aga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gKEJvb2wgZmFsc2UpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKChmaXJzdCAoa29udCkpKSk7IChTdHJpbmcgXCJyZWFjdGl2ZS1yZXNldFwiKV0pKSB0aGVuIChCb29sIHRydWUpIGVsc2UgKGhhc19yZWFjdGl2ZV9yZXNldF9mcmFtZV9wICgocmVzdCAoa29udCkpKSkpKVxuXG4oKiBrb250LWNhcHR1cmUtdG8tcmVhY3RpdmUtcmVzZXQgKilcbmFuZCBrb250X2NhcHR1cmVfdG9fcmVhY3RpdmVfcmVzZXQga29udCA9XG4gIChsZXQgcmVjIHNjYW4gPSAoZnVuIGsgY2FwdHVyZWQgLT4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGspKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwicmVhY3RpdmUgZGVyZWYgd2l0aG91dCBlbmNsb3NpbmcgcmVhY3RpdmUtcmVzZXRcIikpKSkgZWxzZSAobGV0IGZyYW1lID0gKGZpcnN0IChrKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJyZWFjdGl2ZS1yZXNldFwiKV0pKSB0aGVuIChMaXN0IFtjYXB0dXJlZDsgZnJhbWU7IChyZXN0IChrKSldKSBlbHNlIChzY2FuICgocmVzdCAoaykpKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFtjYXB0dXJlZDsgKExpc3QgW2ZyYW1lXSldKSkpKSkpKSBpbiAoc2NhbiAoa29udCkgKChMaXN0IFtdKSkpKVxuXG4oKiAqY3VzdG9tLXNwZWNpYWwtZm9ybXMqICopXG5hbmQgY3VzdG9tX3NwZWNpYWxfZm9ybXMgPVxuICAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpXG5cbigqIHJlZ2lzdGVyLXNwZWNpYWwtZm9ybSEgKilcbmFuZCByZWdpc3Rlcl9zcGVjaWFsX2Zvcm0gbmFtZSBoYW5kbGVyID1cbiAgKHN4X2RpY3Rfc2V0X2IgY3VzdG9tX3NwZWNpYWxfZm9ybXMgbmFtZSBoYW5kbGVyKVxuXG4oKiAqcmVuZGVyLWNoZWNrKiAqKVxuYW5kIHJlbmRlcl9jaGVjayA9XG4gIE5pbFxuXG4oKiAqcmVuZGVyLWZuKiAqKVxuYW5kIHJlbmRlcl9mbiA9XG4gIE5pbFxuXG4oKiAqYmluZC10cmFja2luZyogKilcbmFuZCBfYmluZF90cmFja2luZ19yZWYgPSByZWYgTmlsXG5hbmQgX2JpbmRfdHJhY2tpbmdfID1cbiAgTmlsXG5cbigqICpwcm92aWRlLWJhdGNoLWRlcHRoKiAqKVxuYW5kIF9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZiA9IHJlZiAoTnVtYmVyIDAuMClcbmFuZCBfcHJvdmlkZV9iYXRjaF9kZXB0aF8gPVxuICAoTnVtYmVyIDAuMClcblxuKCogKnByb3ZpZGUtYmF0Y2gtcXVldWUqICopXG5hbmQgX3Byb3ZpZGVfYmF0Y2hfcXVldWVfcmVmID0gcmVmIChMaXN0IFtdKVxuYW5kIF9wcm92aWRlX2JhdGNoX3F1ZXVlXyA9XG4gIChMaXN0IFtdKVxuXG4oKiAqcHJvdmlkZS1zdWJzY3JpYmVycyogKilcbmFuZCBfcHJvdmlkZV9zdWJzY3JpYmVyc19yZWYgPSByZWYgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKVxuYW5kIF9wcm92aWRlX3N1YnNjcmliZXJzXyA9XG4gIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSlcblxuKCogKndpbmRlcnMqICopXG5hbmQgX3dpbmRlcnNfcmVmID0gcmVmIChMaXN0IFtdKVxuYW5kIF93aW5kZXJzXyA9XG4gIChMaXN0IFtdKVxuXG4oKiAqbGlicmFyeS1yZWdpc3RyeSogKilcbmFuZCBfbGlicmFyeV9yZWdpc3RyeV8gPVxuICAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpXG5cbigqIGxpYnJhcnktbmFtZS1rZXkgKilcbmFuZCBsaWJyYXJ5X25hbWVfa2V5IHNwZWMgPVxuICAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiLlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gcyAtPiAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHMpKSkgdGhlbiAoc3ltYm9sX25hbWUgKHMpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbc10pKSkpIChzeF90b19saXN0IHNwZWMpKSldKVxuXG4oKiBsaWJyYXJ5LWxvYWRlZD8gKilcbmFuZCBsaWJyYXJ5X2xvYWRlZF9wIHNwZWMgPVxuICAocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbX2xpYnJhcnlfcmVnaXN0cnlfOyAobGlicmFyeV9uYW1lX2tleSAoc3BlYykpXSlcblxuKCogbGlicmFyeS1leHBvcnRzICopXG5hbmQgbGlicmFyeV9leHBvcnRzIHNwZWMgPVxuICAoZ2V0ICgoZ2V0IChfbGlicmFyeV9yZWdpc3RyeV8pICgobGlicmFyeV9uYW1lX2tleSAoc3BlYykpKSkpICgoU3RyaW5nIFwiZXhwb3J0c1wiKSkpXG5cbigqIHJlZ2lzdGVyLWxpYnJhcnkgKilcbmFuZCByZWdpc3Rlcl9saWJyYXJ5IHNwZWMgZXhwb3J0cyA9XG4gIChzeF9kaWN0X3NldF9iIF9saWJyYXJ5X3JlZ2lzdHJ5XyAobGlicmFyeV9uYW1lX2tleSAoc3BlYykpIChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAxIGluIEhhc2h0YmwucmVwbGFjZSBfZCBcImV4cG9ydHNcIiBleHBvcnRzOyBEaWN0IF9kKSlcblxuKCogKmlvLXJlZ2lzdHJ5KiAqKVxuYW5kIF9pb19yZWdpc3RyeV8gPVxuICAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpXG5cbigqIGlvLXJlZ2lzdGVyISAqKVxuYW5kIGlvX3JlZ2lzdGVyX2IgbmFtZSBzcGVjID1cbiAgKHN4X2RpY3Rfc2V0X2IgX2lvX3JlZ2lzdHJ5XyBuYW1lIHNwZWMpXG5cbigqIGlvLXJlZ2lzdGVyZWQ/ICopXG5hbmQgaW9fcmVnaXN0ZXJlZF9wIG5hbWUgPVxuICAocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbX2lvX3JlZ2lzdHJ5XzsgbmFtZV0pXG5cbigqIGlvLWxvb2t1cCAqKVxuYW5kIGlvX2xvb2t1cCBuYW1lID1cbiAgKGdldCAoX2lvX3JlZ2lzdHJ5XykgKG5hbWUpKVxuXG4oKiBpby1uYW1lcyAqKVxuYW5kIGlvX25hbWVzICgpID1cbiAgKHByaW1fY2FsbCBcImtleXNcIiBbX2lvX3JlZ2lzdHJ5X10pXG5cbigqICpmb3JlaWduLXJlZ2lzdHJ5KiAqKVxuYW5kIF9mb3JlaWduX3JlZ2lzdHJ5XyA9XG4gIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSlcblxuKCogZm9yZWlnbi1yZWdpc3RlciEgKilcbmFuZCBmb3JlaWduX3JlZ2lzdGVyX2IgbmFtZSBzcGVjID1cbiAgKHN4X2RpY3Rfc2V0X2IgX2ZvcmVpZ25fcmVnaXN0cnlfIG5hbWUgc3BlYylcblxuKCogZm9yZWlnbi1yZWdpc3RlcmVkPyAqKVxuYW5kIGZvcmVpZ25fcmVnaXN0ZXJlZF9wIG5hbWUgPVxuICAocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbX2ZvcmVpZ25fcmVnaXN0cnlfOyBuYW1lXSlcblxuKCogZm9yZWlnbi1sb29rdXAgKilcbmFuZCBmb3JlaWduX2xvb2t1cCBuYW1lID1cbiAgKGdldCAoX2ZvcmVpZ25fcmVnaXN0cnlfKSAobmFtZSkpXG5cbigqIGZvcmVpZ24tbmFtZXMgKilcbmFuZCBmb3JlaWduX25hbWVzICgpID1cbiAgKHByaW1fY2FsbCBcImtleXNcIiBbX2ZvcmVpZ25fcmVnaXN0cnlfXSlcblxuKCogZm9yZWlnbi1wYXJzZS1wYXJhbXMgKilcbmFuZCBmb3JlaWduX3BhcnNlX3BhcmFtcyBwYXJhbV9saXN0ID1cbiAgKGxldCByZXN1bHQnID0gKExpc3QgW10pIGluIGxldCBpID0gKE51bWJlciAwLjApIGluIGxldCBpdGVtcyA9IChpZiBzeF90cnV0aHkgKChsaXN0X3AgKHBhcmFtX2xpc3QpKSkgdGhlbiBwYXJhbV9saXN0IGVsc2UgKExpc3QgW10pKSBpbiAoZm9yZWlnbl9wYXJzZV9wYXJhbXNfbG9vcCAoaXRlbXMpIChyZXN1bHQnKSkpXG5cbigqIGZvcmVpZ24tcGFyc2Uta3dhcmdzISAqKVxuYW5kIGZvcmVpZ25fcGFyc2Vfa3dhcmdzX2Igc3BlYyByZW1haW5pbmcgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKHJlbWFpbmluZykpOyAoTnVtYmVyIDIuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoa2V5d29yZF9wICgoZmlyc3QgKHJlbWFpbmluZykpKSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBzcGVjIChrZXl3b3JkX25hbWUgKChmaXJzdCAocmVtYWluaW5nKSkpKSAobGV0IHYgPSAobnRoIChyZW1haW5pbmcpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoa2V5d29yZF9wICh2KSkpIHRoZW4gKGtleXdvcmRfbmFtZSAodikpIGVsc2UgdikpKSkgaW4gKGZvcmVpZ25fcGFyc2Vfa3dhcmdzX2IgKHNwZWMpICgocmVzdCAoKHJlc3QgKHJlbWFpbmluZykpKSkpKSkgZWxzZSBOaWwpXG5cbigqIGZvcmVpZ24tcmVzb2x2ZS1iaW5kaW5nICopXG5hbmQgZm9yZWlnbl9yZXNvbHZlX2JpbmRpbmcgYmluZGluZ19zdHIgPVxuICAobGV0IHBhcnRzID0gKHByaW1fY2FsbCBcInNwbGl0XCIgW2JpbmRpbmdfc3RyOyAoU3RyaW5nIFwiLlwiKV0pIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8PVwiIFsobGVuIChwYXJ0cykpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJtZXRob2RcIiBiaW5kaW5nX3N0cjsgSGFzaHRibC5yZXBsYWNlIF9kIFwib2JqZWN0XCIgTmlsOyBEaWN0IF9kKSBlbHNlIChsZXQgbWV0aG9kJyA9IChsYXN0IChwYXJ0cykpIGluIGxldCBvYmogPSAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiLlwiKTsgKHJldmVyc2UgKChyZXN0ICgocmV2ZXJzZSAocGFydHMpKSkpKSldKSBpbiAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJtZXRob2RcIiBtZXRob2QnOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJvYmplY3RcIiBvYmo7IERpY3QgX2QpKSkpXG5cbigqIGZvcmVpZ24tY2hlY2stYXJncyAqKVxuYW5kIGZvcmVpZ25fY2hlY2tfYXJncyBuYW1lIHBhcmFtcyBhcmdzID1cbiAgKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAocGFyYW1zKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI8XCIgWyhsZW4gKGFyZ3MpKTsgKGxlbiAocGFyYW1zKSldKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiZm9yZWlnbiBcIik7IG5hbWU7IChTdHJpbmcgXCI6IGV4cGVjdGVkIFwiKTsgKGxlbiAocGFyYW1zKSk7IChTdHJpbmcgXCIgYXJncywgZ290IFwiKTsgKGxlbiAoYXJncykpXSkpKSkpIGVsc2UgTmlsKSkgaW4gKExpc3QuaXRlciAoZnVuIGkgLT4gaWdub3JlICgobGV0IHNwZWMgPSAobnRoIChwYXJhbXMpIChpKSkgaW4gbGV0IHZhbCcgPSAobnRoIChhcmdzKSAoaSkpIGluIGxldCBleHBlY3RlZCA9IChnZXQgKHNwZWMpICgoU3RyaW5nIFwidHlwZVwiKSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWQ7IChTdHJpbmcgXCJhbnlcIildKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgodmFsdWVfbWF0Y2hlc190eXBlX3AgKHZhbCcpIChleHBlY3RlZCkpKSkpKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiZm9yZWlnbiBcIik7IG5hbWU7IChTdHJpbmcgXCI6IGFyZyAnXCIpOyAoZ2V0IChzcGVjKSAoKFN0cmluZyBcIm5hbWVcIikpKTsgKFN0cmluZyBcIicgZXhwZWN0ZWQgXCIpOyBleHBlY3RlZDsgKFN0cmluZyBcIiwgZ290IFwiKTsgKHR5cGVfb2YgKHZhbCcpKV0pKSkpKSBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcIm1pblwiIFsobGVuIChwYXJhbXMpKTsgKGxlbiAoYXJncykpXSldKSk7IE5pbCkpXG5cbigqIGZvcmVpZ24tYnVpbGQtbGFtYmRhICopXG5hbmQgZm9yZWlnbl9idWlsZF9sYW1iZGEgc3BlYyA9XG4gIChsZXQgbmFtZSA9IChnZXQgKHNwZWMpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCBtb2RlID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcImhhcy1rZXk/XCIgW3NwZWM7IChTdHJpbmcgXCJyZXR1cm5zXCIpXSkpIHRoZW4gKGxldCByID0gKGdldCAoc3BlYykgKChTdHJpbmcgXCJyZXR1cm5zXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcjsgKFN0cmluZyBcInByb21pc2VcIildKSkgdGhlbiAoU3RyaW5nIFwiYXN5bmNcIikgZWxzZSAoU3RyaW5nIFwic3luY1wiKSkpIGVsc2UgKFN0cmluZyBcInN5bmNcIikpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW21vZGU7IChTdHJpbmcgXCJhc3luY1wiKV0pKSB0aGVuIChMaXN0IFsoU3ltYm9sIFwiZm5cIik7IChMaXN0IFsoU3ltYm9sIFwiJnJlc3RcIik7IChTeW1ib2wgXCJfX2ZmaS1hcmdzX19cIildKTsgKExpc3QgWyhTeW1ib2wgXCJwZXJmb3JtXCIpOyAoTGlzdCBbKFN5bWJvbCBcImZvcmVpZ24tZGlzcGF0Y2hcIik7IChMaXN0IFsoU3ltYm9sIFwicXVvdGVcIik7IG5hbWVdKTsgKFN5bWJvbCBcIl9fZmZpLWFyZ3NfX1wiKV0pXSldKSBlbHNlIChMaXN0IFsoU3ltYm9sIFwiZm5cIik7IChMaXN0IFsoU3ltYm9sIFwiJnJlc3RcIik7IChTeW1ib2wgXCJfX2ZmaS1hcmdzX19cIildKTsgKExpc3QgWyhTeW1ib2wgXCJmb3JlaWduLWRpc3BhdGNoXCIpOyAoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyBuYW1lXSk7IChTeW1ib2wgXCJfX2ZmaS1hcmdzX19cIildKV0pKSlcblxuKCogc2YtZGVmaW5lLWZvcmVpZ24gKilcbmFuZCBzZl9kZWZpbmVfZm9yZWlnbiBhcmdzIGVudiA9XG4gIChsZXQgbmFtZSA9IChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAoKGZpcnN0IChhcmdzKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoYXJncykpKSkgZWxzZSAoZmlyc3QgKGFyZ3MpKSkgaW4gbGV0IHBhcmFtX2xpc3QgPSAobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IHNwZWMgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIHNwZWMgKFN0cmluZyBcIm5hbWVcIikgbmFtZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIHNwZWMgKFN0cmluZyBcInBhcmFtc1wiKSAoZm9yZWlnbl9wYXJzZV9wYXJhbXMgKHBhcmFtX2xpc3QpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChmb3JlaWduX3BhcnNlX2t3YXJnc19iIChzcGVjKSAoKHJlc3QgKChyZXN0IChhcmdzKSkpKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZm9yZWlnbl9yZWdpc3Rlcl9iIChuYW1lKSAoc3BlYykpKSBpbiBzcGVjKSkpKSlcblxuKCogc3RlcC1zZi1kZWZpbmUtZm9yZWlnbiAqKVxuYW5kIHN0ZXBfc2ZfZGVmaW5lX2ZvcmVpZ24gYXJncyBlbnYga29udCA9XG4gIChsZXQgc3BlYyA9IChzZl9kZWZpbmVfZm9yZWlnbiAoYXJncykgKGVudikpIGluIGxldCBuYW1lID0gKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wICgoZmlyc3QgKGFyZ3MpKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBlbHNlIChmaXJzdCAoYXJncykpKSBpbiBsZXQgbGFtYmRhX2V4cHIgPSAoZm9yZWlnbl9idWlsZF9sYW1iZGEgKHNwZWMpKSBpbiAobWFrZV9jZWtfc3RhdGUgKGxhbWJkYV9leHByKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfZGVmaW5lX2ZvcmVpZ25fZnJhbWUgKG5hbWUpIChzcGVjKSAoZW52KSkpIChrb250KSkpKSlcblxuKCogZm9yZWlnbi1kaXNwYXRjaCAqKVxuYW5kIGZvcmVpZ25fZGlzcGF0Y2ggbmFtZSBhcmdzID1cbiAgKGxldCBzcGVjID0gKGZvcmVpZ25fbG9va3VwIChuYW1lKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoc3BlYykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcImZvcmVpZ24tZGlzcGF0Y2g6IHVua25vd24gZm9yZWlnbiBmdW5jdGlvbiAnXCIpOyBuYW1lOyAoU3RyaW5nIFwiJ1wiKV0pKSkpKSBlbHNlIE5pbCkpIGluIChsZXQgcGFyYW1zID0gKGdldCAoc3BlYykgKChTdHJpbmcgXCJwYXJhbXNcIikpKSBpbiBsZXQgYmluZGluZyA9IChnZXQgKHNwZWMpICgoU3RyaW5nIFwianNcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZm9yZWlnbl9jaGVja19hcmdzIChuYW1lKSAoKGlmIHN4X3RydXRoeSAoKGlzX25pbCAocGFyYW1zKSkpIHRoZW4gKExpc3QgW10pIGVsc2UgcGFyYW1zKSkgKGFyZ3MpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoYmluZGluZykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcImZvcmVpZ24gXCIpOyBuYW1lOyAoU3RyaW5nIFwiOiBubyBiaW5kaW5nIGZvciBjdXJyZW50IHBsYXRmb3JtXCIpXSkpKSkpIGVsc2UgKGxldCByZXNvbHZlZCA9IChmb3JlaWduX3Jlc29sdmVfYmluZGluZyAoYmluZGluZykpIGluIGxldCBvYmpfbmFtZSA9IChnZXQgKHJlc29sdmVkKSAoKFN0cmluZyBcIm9iamVjdFwiKSkpIGluIGxldCBtZXRob2QnID0gKGdldCAocmVzb2x2ZWQpICgoU3RyaW5nIFwibWV0aG9kXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX3ByaW1pdGl2ZSAoKFN0cmluZyBcImhvc3QtY2FsbFwiKSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChpc19uaWwgKG9ial9uYW1lKSkpIHRoZW4gKHN4X2FwcGx5IChnZXRfcHJpbWl0aXZlICgoU3RyaW5nIFwiaG9zdC1jYWxsXCIpKSkgKHByaW1fY2FsbCBcImNvbmNhdFwiIFsoTGlzdCBbTmlsOyBtZXRob2QnXSk7IGFyZ3NdKSkgZWxzZSAobGV0IG9iaiA9IChjZWtfY2FsbCAoKGdldF9wcmltaXRpdmUgKChTdHJpbmcgXCJob3N0LWdsb2JhbFwiKSkpKSAoTGlzdCBbb2JqX25hbWVdKSkgaW4gKHN4X2FwcGx5IChnZXRfcHJpbWl0aXZlICgoU3RyaW5nIFwiaG9zdC1jYWxsXCIpKSkgKHByaW1fY2FsbCBcImNvbmNhdFwiIFsoTGlzdCBbb2JqOyBtZXRob2QnXSk7IGFyZ3NdKSkpKSBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcImZvcmVpZ24gXCIpOyBuYW1lOyAoU3RyaW5nIFwiOiBob3N0LWNhbGwgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtXCIpXSkpKSkpKSkpKSkpKVxuXG4oKiBmb3JlaWduLXBhcnNlLXBhcmFtcy1sb29wICopXG5hbmQgZm9yZWlnbl9wYXJzZV9wYXJhbXNfbG9vcCBpdGVtcyBhY2MgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoaXRlbXMpKSkgdGhlbiBhY2MgZWxzZSAobGV0IGl0ZW0gPSAoZmlyc3QgKGl0ZW1zKSkgaW4gbGV0IHJlc3RfaXRlbXMgPSAocmVzdCAoaXRlbXMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChyZXN0X2l0ZW1zKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChrZXl3b3JkX3AgKChmaXJzdCAocmVzdF9pdGVtcykpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZXN0X2l0ZW1zKSkpKTsgKFN0cmluZyBcImFzXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKHJlc3RfaXRlbXMpKTsgKE51bWJlciAyLjApXSkpKSkpIHRoZW4gKGZvcmVpZ25fcGFyc2VfcGFyYW1zX2xvb3AgKChyZXN0ICgocmVzdCAocmVzdF9pdGVtcykpKSkpICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2FjYzsgKExpc3QgWyhsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCBcInR5cGVcIiAobGV0IHQgPSAobnRoIChyZXN0X2l0ZW1zKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGtleXdvcmRfcCAodCkpKSB0aGVuIChrZXl3b3JkX25hbWUgKHQpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbdF0pKSkpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJuYW1lXCIgKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wIChpdGVtKSkpIHRoZW4gKHN5bWJvbF9uYW1lIChpdGVtKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW2l0ZW1dKSkpOyBEaWN0IF9kKV0pXSkpKSBlbHNlIChmb3JlaWduX3BhcnNlX3BhcmFtc19sb29wIChyZXN0X2l0ZW1zKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFthY2M7IChMaXN0IFsoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJhbnlcIjsgY2ZfZW52ID0gTmlsOyBjZl9uYW1lID0gKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wIChpdGVtKSkpIHRoZW4gKHN5bWJvbF9uYW1lIChpdGVtKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW2l0ZW1dKSkpOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSldKV0pKSkpKSlcblxuKCogc3RlcC1zZi1pbyAqKVxuYW5kIHN0ZXBfc2ZfaW8gYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9IChmaXJzdCAoYXJncykpIGluIGxldCBpb19hcmdzID0gKHJlc3QgKGFyZ3MpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChpb19yZWdpc3RlcmVkX3AgKG5hbWUpKSkpKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiaW86IHVua25vd24gb3BlcmF0aW9uICdcIik7IG5hbWU7IChTdHJpbmcgXCInIOKAlCBub3QgaW4gKmlvLXJlZ2lzdHJ5KlwiKV0pKSkpKSBlbHNlIE5pbCkpIGluIChtYWtlX2Nla19zdGF0ZSAoKGNvbnMgKChTeW1ib2wgXCJwZXJmb3JtXCIpKSAoKExpc3QgWyhsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCBcImFyZ3NcIiBpb19hcmdzOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJvcFwiIG5hbWU7IERpY3QgX2QpXSkpKSkgKGVudikgKGtvbnQpKSkpXG5cbigqICpzdHJpY3QqICopXG5hbmQgX3N0cmljdF9yZWYgPSByZWYgKEJvb2wgZmFsc2UpXG5hbmQgX3N0cmljdF8gPVxuICAoQm9vbCBmYWxzZSlcblxuKCogc2V0LXN0cmljdCEgKilcbmFuZCBzZXRfc3RyaWN0X2IgdmFsJyA9XG4gIChfc3RyaWN0X3JlZiA6PSB2YWwnOyBOaWwpXG5cbigqICpwcmltLXBhcmFtLXR5cGVzKiAqKVxuYW5kIF9wcmltX3BhcmFtX3R5cGVzX3JlZiA9IHJlZiBOaWxcbmFuZCBfcHJpbV9wYXJhbV90eXBlc18gPVxuICBOaWxcblxuKCogc2V0LXByaW0tcGFyYW0tdHlwZXMhICopXG5hbmQgc2V0X3ByaW1fcGFyYW1fdHlwZXNfYiB0eXBlcyA9XG4gIChfcHJpbV9wYXJhbV90eXBlc19yZWYgOj0gdHlwZXM7IE5pbClcblxuKCogdmFsdWUtbWF0Y2hlcy10eXBlPyAqKVxuYW5kIHZhbHVlX21hdGNoZXNfdHlwZV9wIHZhbCcgZXhwZWN0ZWRfdHlwZSA9XG4gIChsZXQgX21hdGNoX3ZhbCA9IGV4cGVjdGVkX3R5cGUgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImFueVwiKV0pKSB0aGVuIChCb29sIHRydWUpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm51bWJlclwiKV0pKSB0aGVuIChudW1iZXJfcCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInN0cmluZ1wiKV0pKSB0aGVuIChzdHJpbmdfcCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImJvb2xlYW5cIildKSkgdGhlbiAoYm9vbGVhbl9wICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibmlsXCIpXSkpIHRoZW4gKGlzX25pbCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImxpc3RcIildKSkgdGhlbiAobGlzdF9wICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGljdFwiKV0pKSB0aGVuIChkaWN0X3AgKHZhbCcpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJsYW1iZGFcIildKSkgdGhlbiAoaXNfbGFtYmRhICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHZhbCcpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImtleXdvcmRcIildKSkgdGhlbiAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodmFsJykpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN0cmluZ19wIChleHBlY3RlZF90eXBlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcImVuZHMtd2l0aD9cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcIj9cIildKSkpIHRoZW4gKGxldCBfb3IgPSAoaXNfbmlsICh2YWwnKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlICh2YWx1ZV9tYXRjaGVzX3R5cGVfcCAodmFsJykgKChwcmltX2NhbGwgXCJzbGljZVwiIFtleHBlY3RlZF90eXBlOyAoTnVtYmVyIDAuMCk7IChwcmltX2NhbGwgXCItXCIgWyhwcmltX2NhbGwgXCJzdHJpbmctbGVuZ3RoXCIgW2V4cGVjdGVkX3R5cGVdKTsgKE51bWJlciAxLjApXSldKSkpKSBlbHNlIChCb29sIHRydWUpKSkpKSkpKSkpKSkpXG5cbigqIHN0cmljdC1jaGVjay1hcmdzICopXG5hbmQgc3RyaWN0X2NoZWNrX2FyZ3MgbmFtZSBhcmdzID1cbiAgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gIV9zdHJpY3RfcmVmIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlICFfcHJpbV9wYXJhbV90eXBlc19yZWYpKSB0aGVuIChsZXQgc3BlYyA9IChnZXQgKCFfcHJpbV9wYXJhbV90eXBlc19yZWYpIChuYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoc3BlYykgdGhlbiAobGV0IHBvc2l0aW9uYWwgPSAoZ2V0IChzcGVjKSAoKFN0cmluZyBcInBvc2l0aW9uYWxcIikpKSBpbiBsZXQgcmVzdF90eXBlID0gKGdldCAoc3BlYykgKChTdHJpbmcgXCJyZXN0LXR5cGVcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5IChwb3NpdGlvbmFsKSB0aGVuIChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGxldCBpZHggPSAoZmlyc3QgKHBhaXIpKSBpbiBsZXQgcGFyYW0gPSAobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IHBfbmFtZSA9IChmaXJzdCAocGFyYW0pKSBpbiBsZXQgcF90eXBlID0gKG50aCAocGFyYW0pICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFtpZHg7IChsZW4gKGFyZ3MpKV0pKSB0aGVuIChsZXQgdmFsJyA9IChudGggKGFyZ3MpIChpZHgpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKCh2YWx1ZV9tYXRjaGVzX3R5cGVfcCAodmFsJykgKHBfdHlwZSkpKSkpKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJUeXBlIGVycm9yOiBcIik7IG5hbWU7IChTdHJpbmcgXCIgZXhwZWN0ZWQgXCIpOyBwX3R5cGU7IChTdHJpbmcgXCIgZm9yIHBhcmFtIFwiKTsgcF9uYW1lOyAoU3RyaW5nIFwiLCBnb3QgXCIpOyAodHlwZV9vZiAodmFsJykpOyAoU3RyaW5nIFwiIChcIik7IChTdHJpbmcgKHN4X3N0ciBbdmFsJ10pKTsgKFN0cmluZyBcIilcIildKSkpKSkgZWxzZSBOaWwpKSBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKExpc3QgKExpc3QubWFwaSAoZnVuIGkgcCAtPiBsZXQgaSA9IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpIGluIChMaXN0IFtpOyBwXSkpIChzeF90b19saXN0IHBvc2l0aW9uYWwpKSkpOyBOaWwpIGVsc2UgTmlsKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gcmVzdF90eXBlIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGFyZ3MpKTsgKGxlbiAoKGxldCBfb3IgPSBwb3NpdGlvbmFsIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoTGlzdCBbXSkpKSldKSkpIHRoZW4gKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgobGV0IGlkeCA9IChmaXJzdCAocGFpcikpIGluIGxldCB2YWwnID0gKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHZhbHVlX21hdGNoZXNfdHlwZV9wICh2YWwnKSAocmVzdF90eXBlKSkpKSkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlR5cGUgZXJyb3I6IFwiKTsgbmFtZTsgKFN0cmluZyBcIiBleHBlY3RlZCBcIik7IHJlc3RfdHlwZTsgKFN0cmluZyBcIiBmb3IgcmVzdCBhcmcgXCIpOyBpZHg7IChTdHJpbmcgXCIsIGdvdCBcIik7ICh0eXBlX29mICh2YWwnKSk7IChTdHJpbmcgXCIgKFwiKTsgKFN0cmluZyAoc3hfc3RyIFt2YWwnXSkpOyAoU3RyaW5nIFwiKVwiKV0pKSkpKSBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKExpc3QgKExpc3QubWFwaSAoZnVuIGkgdiAtPiBsZXQgaSA9IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpIGluIChMaXN0IFtpOyB2XSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAobGVuICgobGV0IF9vciA9IHBvc2l0aW9uYWwgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChMaXN0IFtdKSkpKV0pKSkpKTsgTmlsKSBlbHNlIE5pbCkpKSBlbHNlIE5pbCkpIGVsc2UgTmlsKVxuXG4oKiBiaW5kLWxhbWJkYS1wYXJhbXMgKilcbmFuZCBiaW5kX2xhbWJkYV9wYXJhbXMgcGFyYW1zIGFyZ3MgbG9jYWwgPVxuICAobGV0IHJlc3RfaWR4ID0gKHByaW1fY2FsbCBcImluZGV4LW9mXCIgW3BhcmFtczsgKFN0cmluZyBcIiZyZXN0XCIpXSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKG51bWJlcl9wIChyZXN0X2lkeCkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI8XCIgW3Jlc3RfaWR4OyAobGVuIChwYXJhbXMpKV0pKSkgdGhlbiAobGV0IHBvc2l0aW9uYWwgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbcGFyYW1zOyAoTnVtYmVyIDAuMCk7IHJlc3RfaWR4XSkgaW4gbGV0IHJlc3RfbmFtZSA9IChudGggKHBhcmFtcykgKChwcmltX2NhbGwgXCIrXCIgW3Jlc3RfaWR4OyAoTnVtYmVyIDEuMCldKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChmb3JfZWFjaF9pbmRleGVkICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbaTsgcF0gLT4gKGZ1biBpIHAgLT4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgcCkgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbaTsgKGxlbiAoYXJncykpXSkpIHRoZW4gKG50aCAoYXJncykgKGkpKSBlbHNlIE5pbCkpKSBpIHAgfCBfIC0+IE5pbCkpKSAocG9zaXRpb25hbCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyByZXN0X25hbWUpIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGFyZ3MpKTsgcmVzdF9pZHhdKSkgdGhlbiAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgcmVzdF9pZHhdKSBlbHNlIChMaXN0IFtdKSkpKSBpbiAoQm9vbCB0cnVlKSkpKSBlbHNlIChCb29sIGZhbHNlKSkpXG5cbigqIGNhbGwtbGFtYmRhICopXG5hbmQgY2FsbF9sYW1iZGEgZiBhcmdzIGNhbGxlcl9lbnYgPVxuICAobGV0IHBhcmFtcyA9IChsYW1iZGFfcGFyYW1zIChmKSkgaW4gbGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGxhbWJkYV9jbG9zdXJlIChmKSkpIChjYWxsZXJfZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoYmluZF9sYW1iZGFfcGFyYW1zIChwYXJhbXMpIChhcmdzKSAobG9jYWwpKSkpKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAobGVuIChwYXJhbXMpKV0pKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKGxldCBfb3IgPSAobGFtYmRhX25hbWUgKGYpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKFN0cmluZyBcImxhbWJkYVwiKSk7IChTdHJpbmcgXCIgZXhwZWN0cyBcIik7IChsZW4gKHBhcmFtcykpOyAoU3RyaW5nIFwiIGFyZ3MsIGdvdCBcIik7IChsZW4gKGFyZ3MpKV0pKSkpKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKGZpcnN0IChwYWlyKSkpIChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwiemlwXCIgW3BhcmFtczsgYXJnc10pKTsgTmlsKSkgaW4gKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSBOaWwpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInNsaWNlXCIgW3BhcmFtczsgKGxlbiAoYXJncykpXSkpOyBOaWwpKSkgZWxzZSBOaWwpKSBpbiAobWFrZV90aHVuayAoKGxhbWJkYV9ib2R5IChmKSkpIChsb2NhbCkpKSlcblxuKCogY2FsbC1jb21wb25lbnQgKilcbmFuZCBjYWxsX2NvbXBvbmVudCBjb21wIHJhd19hcmdzIGVudiA9XG4gIChsZXQgcGFyc2VkID0gKHBhcnNlX2tleXdvcmRfYXJncyAocmF3X2FyZ3MpIChlbnYpKSBpbiBsZXQga3dhcmdzID0gKGZpcnN0IChwYXJzZWQpKSBpbiBsZXQgY2hpbGRyZW4gPSAobnRoIChwYXJzZWQpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgbG9jYWwgPSAoZW52X21lcmdlICgoY29tcG9uZW50X2Nsb3N1cmUgKGNvbXApKSkgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgcCkgKGxldCBfb3IgPSAoZGljdF9nZXQgKGt3YXJncykgKHApKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAoY29tcG9uZW50X3BhcmFtcyAoY29tcCkpKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGNvbXBvbmVudF9oYXNfY2hpbGRyZW4gKGNvbXApKSkgdGhlbiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiY2hpbGRyZW5cIikpIGNoaWxkcmVuKSBlbHNlIE5pbCkpIGluIChtYWtlX3RodW5rICgoY29tcG9uZW50X2JvZHkgKGNvbXApKSkgKGxvY2FsKSkpKSlcblxuKCogcGFyc2Uta2V5d29yZC1hcmdzICopXG5hbmQgcGFyc2Vfa2V5d29yZF9hcmdzIHJhd19hcmdzIGVudiA9XG4gIChsZXQga3dhcmdzID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiBsZXQgY2hpbGRyZW4gPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IGkgPSAoTnVtYmVyIDAuMCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuZm9sZF9sZWZ0IChmdW4gc3RhdGUgYXJnIC0+IChsZXQgaWR4ID0gKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpIGluIGxldCBza2lwID0gKGdldCAoc3RhdGUpICgoU3RyaW5nIFwic2tpcFwiKSkpIGluIChpZiBzeF90cnV0aHkgKHNraXApIHRoZW4gKHByaW1fY2FsbCBcImFzc29jXCIgW3N0YXRlOyAoU3RyaW5nIFwic2tpcFwiKTsgKEJvb2wgZmFsc2UpOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGFyZykpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI8XCIgWyhwcmltX2NhbGwgXCJpbmNcIiBbaWR4XSk7IChsZW4gKHJhd19hcmdzKSldKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2Iga3dhcmdzIChrZXl3b3JkX25hbWUgKGFyZykpICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChyYXdfYXJncykgKChwcmltX2NhbGwgXCJpbmNcIiBbaWR4XSkpKSkgKGVudikpKSkpKSBpbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJza2lwXCIpOyAoQm9vbCB0cnVlKTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbaWR4XSldKSkgZWxzZSAobGV0ICgpID0gaWdub3JlICgoY2hpbGRyZW4gOj0gc3hfYXBwZW5kX2IgIWNoaWxkcmVuICh0cmFtcG9saW5lICgoZXZhbF9leHByIChhcmcpIChlbnYpKSkpOyBOaWwpKSBpbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgW2lkeF0pXSkpKSkpKSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwiaVwiKSkgKE51bWJlciAwLjApOyBIYXNodGJsLnJlcGxhY2UgX2QgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwic2tpcFwiKSkgKEJvb2wgZmFsc2UpOyAgRGljdCBfZCkgKHN4X3RvX2xpc3QgcmF3X2FyZ3MpKSkgaW4gKExpc3QgW2t3YXJnczsgIWNoaWxkcmVuXSkpKVxuXG4oKiBjb25kLXNjaGVtZT8gKilcbmFuZCBjb25kX3NjaGVtZV9wIGNsYXVzZXMgPVxuICAoQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4gYyAtPiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChjKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChjKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChjKSk7IChOdW1iZXIgMy4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChjKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoKG50aCAoYykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCI9PlwiKV0pKSkpKSkpIChzeF90b19saXN0IGNsYXVzZXMpKSlcblxuKCogaXMtZWxzZS1jbGF1c2U/ICopXG5hbmQgaXNfZWxzZV9jbGF1c2UgdGVzdCA9XG4gIChsZXQgX29yID0gKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHRlc3QpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICh0ZXN0KSk7IChTdHJpbmcgXCJlbHNlXCIpXSkpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodGVzdCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKHRlc3QpKTsgKFN0cmluZyBcImVsc2VcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICh0ZXN0KSk7IChTdHJpbmcgXCI6ZWxzZVwiKV0pKSkpXG5cbigqIHNmLW5hbWVkLWxldCAqKVxuYW5kIHNmX25hbWVkX2xldCBhcmdzIGVudiA9XG4gIChsZXQgbG9vcF9uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGluIGxldCBiaW5kaW5ncyA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiBsZXQgcGFyYW1zID0gcmVmICgoTGlzdCBbXSkpIGluIGxldCBpbml0cyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChOdW1iZXIgMi4wKV0pKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gYmluZGluZyAtPiBpZ25vcmUgKChsZXQgKCkgPSBpZ25vcmUgKChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5nKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChiaW5kaW5nKSkpKSBlbHNlIChmaXJzdCAoYmluZGluZykpKTsgTmlsKSkgaW4gKGluaXRzIDo9IHN4X2FwcGVuZF9iICFpbml0cyAobnRoIChiaW5kaW5nKSAoKE51bWJlciAxLjApKSk7IE5pbCkpKSkgKHN4X3RvX2xpc3QgYmluZGluZ3MpOyBOaWwpIGVsc2UgKExpc3QuZm9sZF9sZWZ0IChmdW4gX2FjYyBwYWlyX2lkeCAtPiAobGV0ICgpID0gaWdub3JlICgocGFyYW1zIDo9IHN4X2FwcGVuZF9iICFwYXJhbXMgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSkpIGVsc2UgKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSk7IE5pbCkpIGluIChpbml0cyA6PSBzeF9hcHBlbmRfYiAhaW5pdHMgKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiaW5jXCIgWyhwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKV0pKSk7IE5pbCkpKSBOaWwgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcIi9cIiBbKGxlbiAoYmluZGluZ3MpKTsgKE51bWJlciAyLjApXSldKSkpKSkgaW4gKGxldCBsb29wX2JvZHkgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChib2R5KSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChmaXJzdCAoYm9keSkpIGVsc2UgKGNvbnMgKChtYWtlX3N5bWJvbCAoKFN0cmluZyBcImJlZ2luXCIpKSkpIChib2R5KSkpIGluIGxldCBsb29wX2ZuID0gKG1ha2VfbGFtYmRhICghcGFyYW1zKSAobG9vcF9ib2R5KSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNldF9sYW1iZGFfbmFtZSBsb29wX2ZuIChzeF90b19zdHJpbmcgbG9vcF9uYW1lKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCAobGFtYmRhX2Nsb3N1cmUgKGxvb3BfZm4pKSAoc3hfdG9fc3RyaW5nIGxvb3BfbmFtZSkgbG9vcF9mbikpIGluIChsZXQgaW5pdF92YWxzID0gKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGVudikpKSkpIChzeF90b19saXN0ICFpbml0cykpKSBpbiAoY2VrX2NhbGwgKGxvb3BfZm4pIChpbml0X3ZhbHMpKSkpKSkpKVxuXG4oKiBzZi1sYW1iZGEgKilcbmFuZCBzZl9sYW1iZGEgYXJncyBlbnYgPVxuICAobGV0IHBhcmFtc19leHByID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHlfZXhwcnMgPSAocmVzdCAoYXJncykpIGluIGxldCBib2R5ID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoYm9keV9leHBycykpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAoZmlyc3QgKGJvZHlfZXhwcnMpKSBlbHNlIChjb25zICgobWFrZV9zeW1ib2wgKChTdHJpbmcgXCJiZWdpblwiKSkpKSAoYm9keV9leHBycykpKSBpbiBsZXQgcGFyYW1fbmFtZXMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBwIC0+IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKHApKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocCkpOyAoTnVtYmVyIDMuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAocCkgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKG50aCAocCkgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJhc1wiKV0pKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChwKSkpKSBlbHNlIHApKSkgKHN4X3RvX2xpc3QgcGFyYW1zX2V4cHIpKSkgaW4gKG1ha2VfbGFtYmRhIChwYXJhbV9uYW1lcykgKGJvZHkpIChlbnYpKSlcblxuKCogc2YtZGVmY29tcCAqKVxuYW5kIHNmX2RlZmNvbXAgYXJncyBlbnYgPVxuICAobGV0IG5hbWVfc3ltID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHBhcmFtc19yYXcgPSAobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGJvZHkgPSAobGFzdCAoYXJncykpIGluIGxldCBjb21wX25hbWUgPSAoc3RyaXBfcHJlZml4ICgoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpICgoU3RyaW5nIFwiflwiKSkpIGluIGxldCBwYXJzZWQgPSAocGFyc2VfY29tcF9wYXJhbXMgKHBhcmFtc19yYXcpKSBpbiBsZXQgcGFyYW1zID0gKGZpcnN0IChwYXJzZWQpKSBpbiBsZXQgaGFzX2NoaWxkcmVuID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IHBhcmFtX3R5cGVzID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAyLjApKSkgaW4gbGV0IGFmZmluaXR5ID0gKGRlZmNvbXBfa3dhcmcgKGFyZ3MpICgoU3RyaW5nIFwiYWZmaW5pdHlcIikpICgoU3RyaW5nIFwiYXV0b1wiKSkpIGluIChsZXQgY29tcCA9IChtYWtlX2NvbXBvbmVudCAoY29tcF9uYW1lKSAocGFyYW1zKSAoaGFzX2NoaWxkcmVuKSAoYm9keSkgKGVudikgKGFmZmluaXR5KSkgaW4gbGV0IGVmZmVjdHMgPSAoZGVmY29tcF9rd2FyZyAoYXJncykgKChTdHJpbmcgXCJlZmZlY3RzXCIpKSAoTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsIChwYXJhbV90eXBlcykpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wICgocHJpbV9jYWxsIFwia2V5c1wiIFtwYXJhbV90eXBlc10pKSkpKSkpKSkgdGhlbiAoY29tcG9uZW50X3NldF9wYXJhbV90eXBlc19iIChjb21wKSAocGFyYW1fdHlwZXMpKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX25pbCAoZWZmZWN0cykpKSkpKSkgdGhlbiAobGV0IGVmZmVjdF9saXN0ID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGVmZmVjdHMpKTsgKFN0cmluZyBcImxpc3RcIildKSkgdGhlbiAoTGlzdCAoTGlzdC5tYXAgKGZ1biBlIC0+IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChlKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKGUpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbZV0pKSkpIChzeF90b19saXN0IGVmZmVjdHMpKSkgZWxzZSAoTGlzdCBbKFN0cmluZyAoc3hfc3RyIFtlZmZlY3RzXSkpXSkpIGluIGxldCBlZmZlY3RfYW5ucyA9IChpZiBzeF90cnV0aHkgKChlbnZfaGFzIChlbnYpICgoU3RyaW5nIFwiKmVmZmVjdC1hbm5vdGF0aW9ucypcIikpKSkgdGhlbiAoZW52X2dldCAoZW52KSAoKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSkgZWxzZSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBlZmZlY3RfYW5ucyAoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkgZWZmZWN0X2xpc3QpKSBpbiAoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSBlZmZlY3RfYW5ucykpKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChlbnZfaGFzIChlbnYpICgoU3RyaW5nIFwiKmN1cnJlbnQtZmlsZSpcIikpKSkgdGhlbiAoY29tcG9uZW50X3NldF9maWxlX2IgKGNvbXApICgoZW52X2dldCAoZW52KSAoKFN0cmluZyBcIipjdXJyZW50LWZpbGUqXCIpKSkpKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpIGNvbXApKSBpbiBjb21wKSkpKSkpXG5cbigqIGRlZmNvbXAta3dhcmcgKilcbmFuZCBkZWZjb21wX2t3YXJnIGFyZ3Mga2V5IGRlZmF1bHQgPVxuICAobGV0IGVuZCcgPSAocHJpbV9jYWxsIFwiLVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMS4wKV0pIGluIGxldCByZXN1bHQnID0gcmVmIChkZWZhdWx0KSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gaSAtPiBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChhcmdzKSAoaSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKG50aCAoYXJncykgKGkpKSkpOyBrZXldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPFwiIFsocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKTsgZW5kJ10pKSkpIHRoZW4gKGxldCB2YWwnID0gKG50aCAoYXJncykgKChwcmltX2NhbGwgXCIrXCIgW2k7IChOdW1iZXIgMS4wKV0pKSkgaW4gKHJlc3VsdCcgOj0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHZhbCcpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSkgdGhlbiAoa2V5d29yZF9uYW1lICh2YWwnKSkgZWxzZSB2YWwnKTsgTmlsKSkgZWxzZSBOaWwpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMi4wKTsgZW5kJzsgKE51bWJlciAxLjApXSkpOyBOaWwpKSBpbiAhcmVzdWx0JykpXG5cbigqIHBhcnNlLWNvbXAtcGFyYW1zICopXG5hbmQgcGFyc2VfY29tcF9wYXJhbXMgcGFyYW1zX2V4cHIgPVxuICAobGV0IHBhcmFtcyA9IHJlZiAoKExpc3QgW10pKSBpbiBsZXQgcGFyYW1fdHlwZXMgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIGxldCBoYXNfY2hpbGRyZW4gPSByZWYgKChCb29sIGZhbHNlKSkgaW4gbGV0IGluX2tleSA9IHJlZiAoKEJvb2wgZmFsc2UpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocCkpOyAoTnVtYmVyIDMuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChwKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChwKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgobnRoIChwKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImFzXCIpXSkpKSkpKSB0aGVuIChsZXQgbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChwKSkpKSBpbiBsZXQgcHR5cGUgPSAobnRoIChwKSAoKE51bWJlciAyLjApKSkgaW4gKGxldCB0eXBlX3ZhbCA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwdHlwZSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChwdHlwZSkpIGVsc2UgcHR5cGUpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoIWhhc19jaGlsZHJlbikpKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHBhcmFtcyA6PSBzeF9hcHBlbmRfYiAhcGFyYW1zIG5hbWU7IE5pbCkpIGluIChzeF9kaWN0X3NldF9iIHBhcmFtX3R5cGVzIG5hbWUgdHlwZV92YWwpKSBlbHNlIE5pbCkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAobGV0IG5hbWUgPSAoc3ltYm9sX25hbWUgKHApKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiJmtleVwiKV0pKSB0aGVuIChpbl9rZXkgOj0gKEJvb2wgdHJ1ZSk7IE5pbCkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiJnJlc3RcIildKSkgdGhlbiAoaGFzX2NoaWxkcmVuIDo9IChCb29sIHRydWUpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIiZjaGlsZHJlblwiKV0pKSB0aGVuIChoYXNfY2hpbGRyZW4gOj0gKEJvb2wgdHJ1ZSk7IE5pbCkgZWxzZSAoaWYgc3hfdHJ1dGh5ICghaGFzX2NoaWxkcmVuKSB0aGVuIE5pbCBlbHNlIChpZiBzeF90cnV0aHkgKCFpbl9rZXkpIHRoZW4gKHBhcmFtcyA6PSBzeF9hcHBlbmRfYiAhcGFyYW1zIG5hbWU7IE5pbCkgZWxzZSAocGFyYW1zIDo9IHN4X2FwcGVuZF9iICFwYXJhbXMgbmFtZTsgTmlsKSkpKSkpKSBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgcGFyYW1zX2V4cHIpOyBOaWwpKSBpbiAoTGlzdCBbIXBhcmFtczsgIWhhc19jaGlsZHJlbjsgcGFyYW1fdHlwZXNdKSkpXG5cbigqIHNmLWRlZmlzbGFuZCAqKVxuYW5kIHNmX2RlZmlzbGFuZCBhcmdzIGVudiA9XG4gIChsZXQgbmFtZV9zeW0gPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgcGFyYW1zX3JhdyA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keV9leHBycyA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiBsZXQgYm9keSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGJvZHlfZXhwcnMpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKGZpcnN0IChib2R5X2V4cHJzKSkgZWxzZSAoY29ucyAoKG1ha2Vfc3ltYm9sICgoU3RyaW5nIFwiYmVnaW5cIikpKSkgKGJvZHlfZXhwcnMpKSkgaW4gbGV0IGNvbXBfbmFtZSA9IChzdHJpcF9wcmVmaXggKChzeW1ib2xfbmFtZSAobmFtZV9zeW0pKSkgKChTdHJpbmcgXCJ+XCIpKSkgaW4gbGV0IHBhcnNlZCA9IChwYXJzZV9jb21wX3BhcmFtcyAocGFyYW1zX3JhdykpIGluIGxldCBwYXJhbXMgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCBoYXNfY2hpbGRyZW4gPSAobnRoIChwYXJzZWQpICgoTnVtYmVyIDEuMCkpKSBpbiAobGV0IGlzbGFuZCA9IChtYWtlX2lzbGFuZCAoY29tcF9uYW1lKSAocGFyYW1zKSAoaGFzX2NoaWxkcmVuKSAoYm9keSkgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChlbnZfaGFzIChlbnYpICgoU3RyaW5nIFwiKmN1cnJlbnQtZmlsZSpcIikpKSkgdGhlbiAoY29tcG9uZW50X3NldF9maWxlX2IgKGlzbGFuZCkgKChlbnZfZ2V0IChlbnYpICgoU3RyaW5nIFwiKmN1cnJlbnQtZmlsZSpcIikpKSkpIGVsc2UgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIChzeW1ib2xfbmFtZSAobmFtZV9zeW0pKSkgaXNsYW5kKSkgaW4gaXNsYW5kKSkpKVxuXG4oKiBkZWZpby1wYXJzZS1rd2FyZ3MhICopXG5hbmQgZGVmaW9fcGFyc2Vfa3dhcmdzX2Igc3BlYyByZW1haW5pbmcgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKHJlbWFpbmluZykpOyAoTnVtYmVyIDIuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoa2V5d29yZF9wICgoZmlyc3QgKHJlbWFpbmluZykpKSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBzcGVjIChrZXl3b3JkX25hbWUgKChmaXJzdCAocmVtYWluaW5nKSkpKSAobnRoIChyZW1haW5pbmcpICgoTnVtYmVyIDEuMCkpKSkpIGluIChkZWZpb19wYXJzZV9rd2FyZ3NfYiAoc3BlYykgKChyZXN0ICgocmVzdCAocmVtYWluaW5nKSkpKSkpKSBlbHNlIE5pbClcblxuKCogc2YtZGVmaW8gKilcbmFuZCBzZl9kZWZpbyBhcmdzIGVudiA9XG4gIChsZXQgbmFtZSA9IChmaXJzdCAoYXJncykpIGluIGxldCBzcGVjID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBzcGVjIChTdHJpbmcgXCJuYW1lXCIpIG5hbWUpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZGVmaW9fcGFyc2Vfa3dhcmdzX2IgKHNwZWMpICgocmVzdCAoYXJncykpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpb19yZWdpc3Rlcl9iIChuYW1lKSAoc3BlYykpKSBpbiBzcGVjKSkpKVxuXG4oKiBzZi1kZWZtYWNybyAqKVxuYW5kIHNmX2RlZm1hY3JvIGFyZ3MgZW52ID1cbiAgKGxldCBuYW1lX3N5bSA9IChmaXJzdCAoYXJncykpIGluIGxldCBwYXJhbXNfcmF3ID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKG50aCAoYXJncykgKChOdW1iZXIgMi4wKSkpIGluIGxldCBwYXJzZWQgPSAocGFyc2VfbWFjcm9fcGFyYW1zIChwYXJhbXNfcmF3KSkgaW4gbGV0IHBhcmFtcyA9IChmaXJzdCAocGFyc2VkKSkgaW4gbGV0IHJlc3RfcGFyYW0gPSAobnRoIChwYXJzZWQpICgoTnVtYmVyIDEuMCkpKSBpbiAobGV0IG1hYyA9IChtYWtlX21hY3JvIChwYXJhbXMpIChyZXN0X3BhcmFtKSAoYm9keSkgKGVudikgKChzeW1ib2xfbmFtZSAobmFtZV9zeW0pKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpIG1hYykpIGluIG1hYykpKVxuXG4oKiBwYXJzZS1tYWNyby1wYXJhbXMgKilcbmFuZCBwYXJzZV9tYWNyb19wYXJhbXMgcGFyYW1zX2V4cHIgPVxuICAobGV0IHBhcmFtcyA9IHJlZiAoKExpc3QgW10pKSBpbiBsZXQgcmVzdF9wYXJhbSA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5mb2xkX2xlZnQgKGZ1biBzdGF0ZSBwIC0+IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKHApKTsgKFN0cmluZyBcIiZyZXN0XCIpXSkpKSB0aGVuIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcImluLXJlc3RcIik7IChCb29sIHRydWUpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpbi1yZXN0XCIpKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHJlc3RfcGFyYW0gOj0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHApKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAocCkpIGVsc2UgcCk7IE5pbCkpIGluIHN0YXRlKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChwKSkgZWxzZSBwKTsgTmlsKSkgaW4gc3RhdGUpKSkpIChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAxIGluIEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJpbi1yZXN0XCIpKSAoQm9vbCBmYWxzZSk7ICBEaWN0IF9kKSAoc3hfdG9fbGlzdCBwYXJhbXNfZXhwcikpKSBpbiAoTGlzdCBbIXBhcmFtczsgIXJlc3RfcGFyYW1dKSkpXG5cbigqIHFxLWV4cGFuZCAqKVxuYW5kIHFxX2V4cGFuZCB0ZW1wbGF0ZSBlbnYgPVxuICAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICh0ZW1wbGF0ZSkpOyAoU3RyaW5nIFwibGlzdFwiKV0pKSkpKSkgdGhlbiB0ZW1wbGF0ZSBlbHNlIChpZiBzeF90cnV0aHkgKChlbXB0eV9wICh0ZW1wbGF0ZSkpKSB0aGVuIChMaXN0IFtdKSBlbHNlIChsZXQgaGVhZCA9IChmaXJzdCAodGVtcGxhdGUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lIChoZWFkKSk7IChTdHJpbmcgXCJ1bnF1b3RlXCIpXSkpKSB0aGVuICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoICh0ZW1wbGF0ZSkgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBlbHNlIChMaXN0LmZvbGRfbGVmdCAoZnVuIHJlc3VsdCcgaXRlbSAtPiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaXRlbSkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGl0ZW0pKTsgKE51bWJlciAyLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoaXRlbSkpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKChmaXJzdCAoaXRlbSkpKSk7IChTdHJpbmcgXCJzcGxpY2UtdW5xdW90ZVwiKV0pKSkpKSB0aGVuIChsZXQgc3BsaWNlZCA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChpdGVtKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChzcGxpY2VkKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKHByaW1fY2FsbCBcImNvbmNhdFwiIFtyZXN1bHQnOyBzcGxpY2VkXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChzcGxpY2VkKSkpIHRoZW4gcmVzdWx0JyBlbHNlIChwcmltX2NhbGwgXCJjb25jYXRcIiBbcmVzdWx0JzsgKExpc3QgW3NwbGljZWRdKV0pKSkpIGVsc2UgKHByaW1fY2FsbCBcImNvbmNhdFwiIFtyZXN1bHQnOyAoTGlzdCBbKHFxX2V4cGFuZCAoaXRlbSkgKGVudikpXSldKSkpIChMaXN0IFtdKSAoc3hfdG9fbGlzdCB0ZW1wbGF0ZSkpKSkpKVxuXG4oKiBzZi1sZXRyZWMgKilcbmFuZCBzZl9sZXRyZWMgYXJncyBlbnYgPVxuICAobGV0IGJpbmRpbmdzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiBsZXQgbmFtZXMgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IHZhbF9leHBycyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChOdW1iZXIgMi4wKV0pKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gYmluZGluZyAtPiBpZ25vcmUgKChsZXQgdm5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5nKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChiaW5kaW5nKSkpKSBlbHNlIChmaXJzdCAoYmluZGluZykpKSBpbiAobGV0ICgpID0gaWdub3JlICgobmFtZXMgOj0gc3hfYXBwZW5kX2IgIW5hbWVzIHZuYW1lOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgodmFsX2V4cHJzIDo9IHN4X2FwcGVuZF9iICF2YWxfZXhwcnMgKG50aCAoYmluZGluZykgKChOdW1iZXIgMS4wKSkpOyBOaWwpKSBpbiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyB2bmFtZSkgTmlsKSkpKSkpIChzeF90b19saXN0IGJpbmRpbmdzKTsgTmlsKSBlbHNlIChMaXN0LmZvbGRfbGVmdCAoZnVuIF9hY2MgcGFpcl9pZHggLT4gKGxldCB2bmFtZSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKSkpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pKSkpKSBlbHNlIChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pKSkpIGluIGxldCB2YWxfZXhwciA9IChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcImluY1wiIFsocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSldKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChuYW1lcyA6PSBzeF9hcHBlbmRfYiAhbmFtZXMgdm5hbWU7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKCh2YWxfZXhwcnMgOj0gc3hfYXBwZW5kX2IgIXZhbF9leHBycyB2YWxfZXhwcjsgTmlsKSkgaW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgdm5hbWUpIE5pbCkpKSkpIE5pbCAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAwLjApOyAocHJpbV9jYWxsIFwiL1wiIFsobGVuIChiaW5kaW5ncykpOyAoTnVtYmVyIDIuMCldKV0pKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgobGV0IHZhbHVlcyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGUgLT4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGUpIChsb2NhbCkpKSkpIChzeF90b19saXN0ICF2YWxfZXhwcnMpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhaXIpKSkgKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJ6aXBcIiBbIW5hbWVzOyB2YWx1ZXNdKSk7IE5pbCkpIGluIChMaXN0Lml0ZXIgKGZ1biB2YWwnIC0+IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGlzX2xhbWJkYSAodmFsJykpKSB0aGVuIChMaXN0Lml0ZXIgKGZ1biBuIC0+IGlnbm9yZSAoKGVudl9iaW5kIChsYW1iZGFfY2xvc3VyZSAodmFsJykpIChzeF90b19zdHJpbmcgbikgKGVudl9nZXQgKGxvY2FsKSAobikpKSkpIChzeF90b19saXN0ICFuYW1lcyk7IE5pbCkgZWxzZSBOaWwpKSkgKHN4X3RvX2xpc3QgdmFsdWVzKTsgTmlsKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gZSAtPiBpZ25vcmUgKCh0cmFtcG9saW5lICgoZXZhbF9leHByIChlKSAobG9jYWwpKSkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInNsaWNlXCIgW2JvZHk7IChOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcImRlY1wiIFsobGVuIChib2R5KSldKV0pKTsgTmlsKSkgaW4gKG1ha2VfdGh1bmsgKChsYXN0IChib2R5KSkpIChsb2NhbCkpKSkpKVxuXG4oKiBzdGVwLXNmLWxldHJlYyAqKVxuYW5kIHN0ZXBfc2ZfbGV0cmVjIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IHRoayA9IChzZl9sZXRyZWMgKGFyZ3MpIChlbnYpKSBpbiAobWFrZV9jZWtfc3RhdGUgKCh0aHVua19leHByICh0aGspKSkgKCh0aHVua19lbnYgKHRoaykpKSAoa29udCkpKVxuXG4oKiBzdGVwLXNmLWR5bmFtaWMtd2luZCAqKVxuYW5kIHN0ZXBfc2ZfZHluYW1pY193aW5kIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IGJlZm9yZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGJvZHkgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgYWZ0ZXIgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMi4wKSkpKSAoZW52KSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoY2VrX2NhbGwgKGJlZm9yZSkgKChMaXN0IFtdKSkpKSBpbiAobGV0IHdpbmRlcnNfbGVuID0gKGxlbiAoIV93aW5kZXJzX3JlZikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChfd2luZGVyc19yZWYgOj0gKGNvbnMgKGFmdGVyKSAoIV93aW5kZXJzX3JlZikpOyBOaWwpKSBpbiAoY29udGludWVfd2l0aF9jYWxsIChib2R5KSAoKExpc3QgW10pKSAoZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2Vfd2luZF9hZnRlcl9mcmFtZSAoYWZ0ZXIpICh3aW5kZXJzX2xlbikgKGVudikpKSAoa29udCkpKSkpKSkpXG5cbigqIHNmLXNjb3BlICopXG5hbmQgc2Zfc2NvcGUgYXJncyBlbnYgPVxuICAobGV0IG5hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCByZXN0ID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChOdW1iZXIgMS4wKV0pIGluIGxldCB2YWwnID0gcmVmIChOaWwpIGluIGxldCBib2R5X2V4cHJzID0gcmVmIChOaWwpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChyZXN0KSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKHJlc3QpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChmaXJzdCAocmVzdCkpKSk7IChTdHJpbmcgXCJ2YWx1ZVwiKV0pKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHZhbCcgOj0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHJlc3QpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSk7IE5pbCkpIGluIChib2R5X2V4cHJzIDo9IChwcmltX2NhbGwgXCJzbGljZVwiIFtyZXN0OyAoTnVtYmVyIDIuMCldKTsgTmlsKSkgZWxzZSAoYm9keV9leHBycyA6PSByZXN0OyBOaWwpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3B1c2ggKG5hbWUpICghdmFsJykpKSBpbiAobGV0IHJlc3VsdCcgPSByZWYgKE5pbCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGUgLT4gaWdub3JlICgocmVzdWx0JyA6PSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGVudikpKSk7IE5pbCkpKSAoc3hfdG9fbGlzdCAhYm9keV9leHBycyk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKG5hbWUpKSkgaW4gIXJlc3VsdCcpKSkpKSlcblxuKCogc2YtcHJvdmlkZSAqKVxuYW5kIHNmX3Byb3ZpZGUgYXJncyBlbnYgPVxuICAobGV0IG5hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCB2YWwnID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IGJvZHlfZXhwcnMgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgKE51bWJlciAyLjApXSkgaW4gbGV0IHJlc3VsdCcgPSByZWYgKE5pbCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3B1c2ggKG5hbWUpICh2YWwnKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBlIC0+IGlnbm9yZSAoKHJlc3VsdCcgOj0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGUpIChlbnYpKSkpOyBOaWwpKSkgKHN4X3RvX2xpc3QgYm9keV9leHBycyk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKG5hbWUpKSkgaW4gIXJlc3VsdCcpKSkpXG5cbigqIGV4cGFuZC1tYWNybyAqKVxuYW5kIGV4cGFuZF9tYWNybyBtYWMgcmF3X2FyZ3MgZW52ID1cbiAgKGxldCBib2R5ID0gKG1hY3JvX2JvZHkgKG1hYykpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAoYm9keSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoYm9keSkpOyAoU3RyaW5nIFwiX19zeW50YXgtcnVsZXMtYm9keV9fXCIpXSkpKSB0aGVuIChsZXQgY2xvc3VyZSA9IChtYWNyb19jbG9zdXJlIChtYWMpKSBpbiAoc3ludGF4X3J1bGVzX2V4cGFuZCAoKGVudl9nZXQgKGNsb3N1cmUpICgoU3RyaW5nIFwiX19zci1saXRlcmFsc1wiKSkpKSAoKGVudl9nZXQgKGNsb3N1cmUpICgoU3RyaW5nIFwiX19zci1ydWxlc1wiKSkpKSAocmF3X2FyZ3MpKSkgZWxzZSAobGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKG1hY3JvX2Nsb3N1cmUgKG1hYykpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhaXIpKSkgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpOyAobGVuIChyYXdfYXJncykpXSkpIHRoZW4gKG50aCAocmF3X2FyZ3MpICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpKSBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKExpc3QgKExpc3QubWFwaSAoZnVuIGkgcCAtPiBsZXQgaSA9IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpIGluIChMaXN0IFtwOyBpXSkpIChzeF90b19saXN0IChtYWNyb19wYXJhbXMgKG1hYykpKSkpKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKG1hY3JvX3Jlc3RfcGFyYW0gKG1hYykpKSB0aGVuIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChtYWNyb19yZXN0X3BhcmFtIChtYWMpKSkgKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jhd19hcmdzOyAobGVuICgobWFjcm9fcGFyYW1zIChtYWMpKSkpXSkpIGVsc2UgTmlsKSkgaW4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChtYWNyb19ib2R5IChtYWMpKSkgKGxvY2FsKSkpKSkpKSkpXG5cbigqIGNlay1zdGVwLWxvb3AgKilcbmFuZCBjZWtfc3RlcF9sb29wIHN0YXRlID1cbiAgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAoY2VrX3Rlcm1pbmFsX3AgKHN0YXRlKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChjZWtfc3VzcGVuZGVkX3AgKHN0YXRlKSkpKSB0aGVuIHN0YXRlIGVsc2UgKGNla19zdGVwX2xvb3AgKChjZWtfc3RlcCAoc3RhdGUpKSkpKVxuXG4oKiBjZWstcnVuICopXG5hbmQgY2VrX3J1biBzdGF0ZSA9XG4gIChsZXQgZmluYWwgPSAoY2VrX3N0ZXBfbG9vcCAoc3RhdGUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoY2VrX3N1c3BlbmRlZF9wIChmaW5hbCkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJJTyBzdXNwZW5zaW9uIGluIG5vbi1JTyBjb250ZXh0XCIpKSkpIGVsc2UgKGNla192YWx1ZSAoZmluYWwpKSkpXG5cbigqIGNlay1yZXN1bWUgKilcbmFuZCBjZWtfcmVzdW1lIHN1c3BlbmRlZF9zdGF0ZSByZXN1bHQnID1cbiAgKGNla19zdGVwX2xvb3AgKChtYWtlX2Nla192YWx1ZSAocmVzdWx0JykgKChjZWtfZW52IChzdXNwZW5kZWRfc3RhdGUpKSkgKChjZWtfa29udCAoc3VzcGVuZGVkX3N0YXRlKSkpKSkpXG5cbigqIGNlay1zdGVwICopXG5hbmQgY2VrX3N0ZXAgc3RhdGUgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoY2VrX3BoYXNlIChzdGF0ZSkpOyAoU3RyaW5nIFwiZXZhbFwiKV0pKSB0aGVuIChzdGVwX2V2YWwgKHN0YXRlKSkgZWxzZSAoc3RlcF9jb250aW51ZSAoc3RhdGUpKSlcblxuKCogc3RlcC1ldmFsICopXG5hbmQgc3RlcF9ldmFsIHN0YXRlID1cbiAgKGxldCBleHByID0gKGNla19jb250cm9sIChzdGF0ZSkpIGluIGxldCBlbnYgPSAoY2VrX2VudiAoc3RhdGUpKSBpbiBsZXQga29udCA9IChjZWtfa29udCAoc3RhdGUpKSBpbiAobGV0IF9tYXRjaF92YWwgPSAodHlwZV9vZiAoZXhwcikpIGluIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcIm51bWJlclwiKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoZXhwcikgKGVudikgKGtvbnQpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInN0cmluZ1wiKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoZXhwcikgKGVudikgKGtvbnQpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImJvb2xlYW5cIikgdGhlbiAobWFrZV9jZWtfdmFsdWUgKGV4cHIpIChlbnYpIChrb250KSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJuaWxcIikgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInN5bWJvbFwiKSB0aGVuIChsZXQgbmFtZSA9IChzeW1ib2xfbmFtZSAoZXhwcikpIGluIChsZXQgdmFsJyA9IChpZiBzeF90cnV0aHkgKChlbnZfaGFzIChlbnYpIChuYW1lKSkpIHRoZW4gKGVudl9nZXQgKGVudikgKG5hbWUpKSBlbHNlIChpZiBzeF90cnV0aHkgKChpc19wcmltaXRpdmUgKG5hbWUpKSkgdGhlbiAoZ2V0X3ByaW1pdGl2ZSAobmFtZSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInRydWVcIildKSkgdGhlbiAoQm9vbCB0cnVlKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJmYWxzZVwiKV0pKSB0aGVuIChCb29sIGZhbHNlKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJuaWxcIildKSkgdGhlbiBOaWwgZWxzZSAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJVbmRlZmluZWQgc3ltYm9sOiBcIik7IG5hbWVdKSkpKSkpKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoaXNfbmlsICh2YWwnKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcInN0YXJ0cy13aXRoP1wiIFtuYW1lOyAoU3RyaW5nIFwiflwiKV0pKSkgdGhlbiAoZGVidWdfbG9nICgoU3RyaW5nIFwiQ29tcG9uZW50IG5vdCBmb3VuZDpcIikpIChuYW1lKSkgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbCcpIChlbnYpIChrb250KSkpKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJrZXl3b3JkXCIpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoa2V5d29yZF9uYW1lIChleHByKSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJkaWN0XCIpIHRoZW4gKGxldCBrcyA9IChwcmltX2NhbGwgXCJrZXlzXCIgW2V4cHJdKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa3MpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkpIChlbnYpIChrb250KSkgZWxzZSAobGV0IGZpcnN0X2tleSA9IChmaXJzdCAoa3MpKSBpbiBsZXQgcmVtYWluaW5nX2VudHJpZXMgPSByZWYgKChMaXN0IFtdKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGsgLT4gaWdub3JlICgocmVtYWluaW5nX2VudHJpZXMgOj0gc3hfYXBwZW5kX2IgIXJlbWFpbmluZ19lbnRyaWVzIChMaXN0IFtrOyAoZ2V0IChleHByKSAoaykpXSk7IE5pbCkpKSAoc3hfdG9fbGlzdCAocmVzdCAoa3MpKSk7IE5pbCkpIGluIChtYWtlX2Nla19zdGF0ZSAoKGdldCAoZXhwcikgKGZpcnN0X2tleSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfZGljdF9mcmFtZSAoIXJlbWFpbmluZ19lbnRyaWVzKSAoKExpc3QgWyhMaXN0IFtmaXJzdF9rZXldKV0pKSAoZW52KSkpIChrb250KSkpKSkpKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJsaXN0XCIpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGV4cHIpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChMaXN0IFtdKSkgKGVudikgKGtvbnQpKSBlbHNlIChzdGVwX2V2YWxfbGlzdCAoZXhwcikgKGVudikgKGtvbnQpKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKGV4cHIpIChlbnYpIChrb250KSkpKSkpKSkpKSkpXG5cbigqIHN0ZXAtc2YtcmFpc2UgKilcbmFuZCBzdGVwX3NmX3JhaXNlIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmFpc2VfZXZhbF9mcmFtZSAoZW52KSAoKEJvb2wgZmFsc2UpKSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWd1YXJkICopXG5hbmQgc3RlcF9zZl9ndWFyZCBhcmdzIGVudiBrb250ID1cbiAgKGxldCB2YXJfY2xhdXNlcyA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5ID0gKHJlc3QgKGFyZ3MpKSBpbiBsZXQgdmFyID0gKGZpcnN0ICh2YXJfY2xhdXNlcykpIGluIGxldCBjbGF1c2VzID0gKHJlc3QgKHZhcl9jbGF1c2VzKSkgaW4gbGV0IHNlbnRpbmVsID0gKG1ha2Vfc3ltYm9sICgoU3RyaW5nIFwiX19ndWFyZC1yZXJhaXNlX19cIikpKSBpbiAoc3RlcF9ldmFsX2xpc3QgKChMaXN0IFsoU3ltYm9sIFwibGV0XCIpOyAoTGlzdCBbKExpc3QgWyhTeW1ib2wgXCJfX2d1YXJkLXJlc3VsdFwiKTsgKGNvbnMgKChTeW1ib2wgXCJjYWxsL2NjXCIpKSAoKExpc3QgWyhjb25zICgoU3ltYm9sIFwiZm5cIikpICgoY29ucyAoKExpc3QgWyhTeW1ib2wgXCJfX2d1YXJkLWtcIildKSkgKChMaXN0IFsoY29ucyAoKFN5bWJvbCBcImhhbmRsZXItYmluZFwiKSkgKChjb25zICgoTGlzdCBbKExpc3QgWyhjb25zICgoU3ltYm9sIFwiZm5cIikpICgoY29ucyAoKExpc3QgWyhTeW1ib2wgXCJfXCIpXSkpICgoTGlzdCBbKEJvb2wgdHJ1ZSldKSkpKSk7IChjb25zICgoU3ltYm9sIFwiZm5cIikpICgoY29ucyAoKExpc3QgW3Zhcl0pKSAoKExpc3QgWyhMaXN0IFsoU3ltYm9sIFwiX19ndWFyZC1rXCIpOyAoY29ucyAoKFN5bWJvbCBcImNvbmRcIikpICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2NsYXVzZXM7IChMaXN0IFsoTGlzdCBbKFN5bWJvbCBcImVsc2VcIik7IChMaXN0IFsoU3ltYm9sIFwibGlzdFwiKTsgKExpc3QgWyhTeW1ib2wgXCJxdW90ZVwiKTsgc2VudGluZWxdKTsgdmFyXSldKV0pXSkpKV0pXSkpKSkpXSldKSkgKChMaXN0IFsoTGlzdCBbKFN5bWJvbCBcIl9fZ3VhcmQta1wiKTsgKGNvbnMgKChTeW1ib2wgXCJiZWdpblwiKSkgKGJvZHkpKV0pXSkpKSkpXSkpKSkpXSkpKV0pXSk7IChMaXN0IFsoU3ltYm9sIFwiaWZcIik7IChMaXN0IFsoU3ltYm9sIFwiYW5kXCIpOyAoTGlzdCBbKFN5bWJvbCBcImxpc3Q/XCIpOyAoU3ltYm9sIFwiX19ndWFyZC1yZXN1bHRcIildKTsgKExpc3QgWyhTeW1ib2wgXCI9XCIpOyAoTGlzdCBbKFN5bWJvbCBcImxlblwiKTsgKFN5bWJvbCBcIl9fZ3VhcmQtcmVzdWx0XCIpXSk7IChOdW1iZXIgMi4wKV0pOyAoTGlzdCBbKFN5bWJvbCBcIj1cIik7IChMaXN0IFsoU3ltYm9sIFwiZmlyc3RcIik7IChTeW1ib2wgXCJfX2d1YXJkLXJlc3VsdFwiKV0pOyAoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyBzZW50aW5lbF0pXSldKTsgKExpc3QgWyhTeW1ib2wgXCJyYWlzZVwiKTsgKExpc3QgWyhTeW1ib2wgXCJudGhcIik7IChTeW1ib2wgXCJfX2d1YXJkLXJlc3VsdFwiKTsgKE51bWJlciAxLjApXSldKTsgKFN5bWJvbCBcIl9fZ3VhcmQtcmVzdWx0XCIpXSldKSkgKGVudikgKGtvbnQpKSlcblxuKCogc3RlcC1zZi1jYWxsY2MgKilcbmFuZCBzdGVwX3NmX2NhbGxjYyBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2NhbGxjY19mcmFtZSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWNhc2UgKilcbmFuZCBzdGVwX3NmX2Nhc2UgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9jYXNlX2ZyYW1lIChOaWwpICgocmVzdCAoYXJncykpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWxldC1tYXRjaCAqKVxuYW5kIHN0ZXBfc2ZfbGV0X21hdGNoIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IHBhdHRlcm4gPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgZXhwciA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChyZXN0ICgocmVzdCAoYXJncykpKSkgaW4gKHN0ZXBfc2ZfbWF0Y2ggKChMaXN0IFtleHByOyAoTGlzdCBbcGF0dGVybjsgKGNvbnMgKChTeW1ib2wgXCJiZWdpblwiKSkgKGJvZHkpKV0pXSkpIChlbnYpIChrb250KSkpXG5cbigqIHN0ZXAtZXZhbC1saXN0ICopXG5hbmQgc3RlcF9ldmFsX2xpc3QgZXhwciBlbnYga29udCA9XG4gIChsZXQgaGVhZCA9IChmaXJzdCAoZXhwcikpIGluIGxldCBhcmdzID0gKHJlc3QgKGV4cHIpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGhlYWQpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChoZWFkKSk7IChTdHJpbmcgXCJsYW1iZGFcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGhlYWQpKTsgKFN0cmluZyBcImxpc3RcIildKSkpKSkpKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoZXhwcikpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKExpc3QgW10pKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGV4cHIpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX21hcF9mcmFtZSAoTmlsKSAoKHJlc3QgKGV4cHIpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGhlYWQpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChzeW1ib2xfbmFtZSAoaGVhZCkpIGluIChsZXQgX21hdGNoX3ZhbCA9IG5hbWUgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImlmXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfaWYgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwid2hlblwiKV0pKSB0aGVuIChzdGVwX3NmX3doZW4gKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY29uZFwiKV0pKSB0aGVuIChzdGVwX3NmX2NvbmQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY2FzZVwiKV0pKSB0aGVuIChzdGVwX3NmX2Nhc2UgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiYW5kXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfYW5kIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm9yXCIpXSkpIHRoZW4gKHN0ZXBfc2Zfb3IgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGV0XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGV0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImxldCpcIildKSkgdGhlbiAoc3RlcF9zZl9sZXQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGFtYmRhXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGFtYmRhIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImZuXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGFtYmRhIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmluZVwiKV0pKSB0aGVuIChzdGVwX3NmX2RlZmluZSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZWZjb21wXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmY29tcCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmlzbGFuZFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2RlZmlzbGFuZCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZm1hY3JvXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmbWFjcm8gKGFyZ3MpIChlbnYpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZWZpb1wiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2RlZmlvIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW5lLWZvcmVpZ25cIildKSkgdGhlbiAoc3RlcF9zZl9kZWZpbmVfZm9yZWlnbiAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJpb1wiKV0pKSB0aGVuIChzdGVwX3NmX2lvIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImJlZ2luXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfYmVnaW4gKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZG9cIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChsaXN0X3AgKChmaXJzdCAoYXJncykpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAoKGZpcnN0IChhcmdzKSkpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxpc3RfcCAoKGZpcnN0ICgoZmlyc3QgKGFyZ3MpKSkpKSkpKSkpIHRoZW4gKGxldCBiaW5kaW5ncyA9IChmaXJzdCAoYXJncykpIGluIGxldCB0ZXN0X2NsYXVzZSA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChyZXN0ICgocmVzdCAoYXJncykpKSkgaW4gbGV0IHZhcnMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBiIC0+IChmaXJzdCAoYikpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncykpKSBpbiBsZXQgaW5pdHMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBiIC0+IChudGggKGIpICgoTnVtYmVyIDEuMCkpKSkgKHN4X3RvX2xpc3QgYmluZGluZ3MpKSkgaW4gbGV0IHN0ZXBzID0gKExpc3QgKExpc3QubWFwIChmdW4gYiAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChiKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuIChudGggKGIpICgoTnVtYmVyIDIuMCkpKSBlbHNlIChmaXJzdCAoYikpKSkgKHN4X3RvX2xpc3QgYmluZGluZ3MpKSkgaW4gbGV0IHRlc3QgPSAoZmlyc3QgKHRlc3RfY2xhdXNlKSkgaW4gbGV0IHJlc3VsdCcgPSAocmVzdCAodGVzdF9jbGF1c2UpKSBpbiAoc3RlcF9ldmFsX2xpc3QgKChjb25zICgoU3ltYm9sIFwibGV0XCIpKSAoKGNvbnMgKChTeW1ib2wgXCJfX2RvLWxvb3BcIikpICgoY29ucyAoKExpc3QgKExpc3QubWFwIChmdW4gYiAtPiAoTGlzdCBbKGZpcnN0IChiKSk7IChudGggKGIpICgoTnVtYmVyIDEuMCkpKV0pKSAoc3hfdG9fbGlzdCBiaW5kaW5ncykpKSkgKChMaXN0IFsoY29ucyAoKFN5bWJvbCBcImlmXCIpKSAoKGNvbnMgKHRlc3QpICgoY29ucyAoKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlc3VsdCcpKSkgdGhlbiBOaWwgZWxzZSAoY29ucyAoKFN5bWJvbCBcImJlZ2luXCIpKSAocmVzdWx0JykpKSkgKChMaXN0IFsoY29ucyAoKFN5bWJvbCBcImJlZ2luXCIpKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFtib2R5OyAoTGlzdCBbKGNvbnMgKChTeW1ib2wgXCJfX2RvLWxvb3BcIikpIChzdGVwcykpXSldKSkpXSkpKSkpKSldKSkpKSkpKSkgKGVudikgKGtvbnQpKSkgZWxzZSAoc3RlcF9zZl9iZWdpbiAoYXJncykgKGVudikgKGtvbnQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZ3VhcmRcIildKSkgdGhlbiAoc3RlcF9zZl9ndWFyZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJxdW90ZVwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiBOaWwgZWxzZSAoZmlyc3QgKGFyZ3MpKSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicXVhc2lxdW90ZVwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHFxX2V4cGFuZCAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCItPlwiKV0pKSB0aGVuIChzdGVwX3NmX3RocmVhZF9maXJzdCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCItPj5cIildKSkgdGhlbiAoc3RlcF9zZl90aHJlYWRfbGFzdCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJ8PlwiKV0pKSB0aGVuIChzdGVwX3NmX3RocmVhZF9sYXN0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImFzLT5cIildKSkgdGhlbiAoc3RlcF9zZl90aHJlYWRfYXMgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic2V0IVwiKV0pKSB0aGVuIChzdGVwX3NmX3NldF9iIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImxldHJlY1wiKV0pKSB0aGVuIChzdGVwX3NmX2xldHJlYyAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyZXNldFwiKV0pKSB0aGVuIChzdGVwX3NmX3Jlc2V0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNoaWZ0XCIpXSkpIHRoZW4gKHN0ZXBfc2Zfc2hpZnQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVyZWZcIildKSkgdGhlbiAoc3RlcF9zZl9kZXJlZiAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzY29wZVwiKV0pKSB0aGVuIChzdGVwX3NmX3Njb3BlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInByb3ZpZGVcIildKSkgdGhlbiAoc3RlcF9zZl9wcm92aWRlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInBlZWtcIildKSkgdGhlbiAoc3RlcF9zZl9wZWVrIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInByb3ZpZGUhXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfcHJvdmlkZV9iIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImNvbnRleHRcIildKSkgdGhlbiAoc3RlcF9zZl9jb250ZXh0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImJpbmRcIildKSkgdGhlbiAoc3RlcF9zZl9iaW5kIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImVtaXQhXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfZW1pdCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJlbWl0dGVkXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfZW1pdHRlZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJoYW5kbGVyLWJpbmRcIildKSkgdGhlbiAoc3RlcF9zZl9oYW5kbGVyX2JpbmQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmVzdGFydC1jYXNlXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfcmVzdGFydF9jYXNlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNpZ25hbC1jb25kaXRpb25cIildKSkgdGhlbiAoc3RlcF9zZl9zaWduYWwgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaW52b2tlLXJlc3RhcnRcIildKSkgdGhlbiAoc3RlcF9zZl9pbnZva2VfcmVzdGFydCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJtYXRjaFwiKV0pKSB0aGVuIChzdGVwX3NmX21hdGNoIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImxldC1tYXRjaFwiKV0pKSB0aGVuIChzdGVwX3NmX2xldF9tYXRjaCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkeW5hbWljLXdpbmRcIildKSkgdGhlbiAoc3RlcF9zZl9keW5hbWljX3dpbmQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibWFwXCIpXSkpIHRoZW4gKHN0ZXBfaG9fbWFwIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkpIHRoZW4gKHN0ZXBfaG9fbWFwX2luZGV4ZWQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZmlsdGVyXCIpXSkpIHRoZW4gKHN0ZXBfaG9fZmlsdGVyIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInJlZHVjZVwiKV0pKSB0aGVuIChzdGVwX2hvX3JlZHVjZSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzb21lXCIpXSkpIHRoZW4gKHN0ZXBfaG9fc29tZSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJldmVyeT9cIildKSkgdGhlbiAoc3RlcF9ob19ldmVyeSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJmb3ItZWFjaFwiKV0pKSB0aGVuIChzdGVwX2hvX2Zvcl9lYWNoIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInJhaXNlXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfcmFpc2UgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmFpc2UtY29udGludWFibGVcIildKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmFpc2VfZXZhbF9mcmFtZSAoZW52KSAoKEJvb2wgdHJ1ZSkpKSkgKGtvbnQpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImNhbGwvY2NcIildKSkgdGhlbiAoc3RlcF9zZl9jYWxsY2MgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY2FsbC13aXRoLWN1cnJlbnQtY29udGludWF0aW9uXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfY2FsbGNjIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInBlcmZvcm1cIildKSkgdGhlbiAoc3RlcF9zZl9wZXJmb3JtIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmluZS1saWJyYXJ5XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfZGVmaW5lX2xpYnJhcnkgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaW1wb3J0XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfaW1wb3J0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmluZS1yZWNvcmQtdHlwZVwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2RlZmluZV9yZWNvcmRfdHlwZSAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmluZS1wcm90b2NvbFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2RlZmluZV9wcm90b2NvbCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImltcGxlbWVudFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2ltcGxlbWVudCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInBhcmFtZXRlcml6ZVwiKV0pKSB0aGVuIChzdGVwX3NmX3BhcmFtZXRlcml6ZSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzeW50YXgtcnVsZXNcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChzZl9zeW50YXhfcnVsZXMgKGFyZ3MpIChlbnYpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZWZpbmUtc3ludGF4XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfZGVmaW5lIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcImhhcy1rZXk/XCIgW2N1c3RvbV9zcGVjaWFsX2Zvcm1zOyBuYW1lXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAobmFtZSkpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoY2VrX2NhbGwgKChnZXQgKGN1c3RvbV9zcGVjaWFsX2Zvcm1zKSAobmFtZSkpKSAoTGlzdCBbYXJnczsgZW52XSkpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGVudl9oYXMgKGVudikgKG5hbWUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoaXNfbWFjcm8gKChlbnZfZ2V0IChlbnYpIChuYW1lKSkpKSkpIHRoZW4gKGxldCBtYWMgPSAoZW52X2dldCAoZW52KSAobmFtZSkpIGluIChtYWtlX2Nla19zdGF0ZSAoKGV4cGFuZF9tYWNybyAobWFjKSAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IHJlbmRlcl9jaGVjayBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbnZfaGFzIChlbnYpIChuYW1lKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChjZWtfY2FsbCAocmVuZGVyX2NoZWNrKSAoTGlzdCBbZXhwcjsgZW52XSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoY2VrX2NhbGwgKHJlbmRlcl9mbikgKExpc3QgW2V4cHI7IGVudl0pKSkgKGVudikgKGtvbnQpKSBlbHNlIChzdGVwX2V2YWxfY2FsbCAoaGVhZCkgKGFyZ3MpIChlbnYpIChrb250KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSBlbHNlIChzdGVwX2V2YWxfY2FsbCAoaGVhZCkgKGFyZ3MpIChlbnYpIChrb250KSkpKSlcblxuKCoga29udC1leHRyYWN0LXByb3ZpZGVzICopXG5hbmQga29udF9leHRyYWN0X3Byb3ZpZGVzIGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIChMaXN0IFtdKSBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiBsZXQgcmVzdF9mcmFtZXMgPSAoa29udF9leHRyYWN0X3Byb3ZpZGVzICgocmVzdCAoa29udCkpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJwcm92aWRlXCIpXSkpIHRoZW4gKGNvbnMgKChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInByb3ZpZGVcIjsgY2ZfZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSk7IGNmX25hbWUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSk7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IChMaXN0IFtdKTsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IChMaXN0IFtdKTsgY2ZfZXh0cmEgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpOyBjZl9leHRyYTIgPSBOaWwgfSkpIChyZXN0X2ZyYW1lcykpIGVsc2UgcmVzdF9mcmFtZXMpKSlcblxuKCogZmlyZS1wcm92aWRlLXN1YnNjcmliZXJzICopXG5hbmQgZmlyZV9wcm92aWRlX3N1YnNjcmliZXJzIG5hbWUgPVxuICAobGV0IHN1YnMgPSAoZ2V0ICghX3Byb3ZpZGVfc3Vic2NyaWJlcnNfcmVmKSAobmFtZSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IHN1YnMgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAoc3VicykpKSkpKSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbIV9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZjsgKE51bWJlciAwLjApXSkpIHRoZW4gKExpc3QuaXRlciAoZnVuIHN1YiAtPiBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcImNvbnRhaW5zP1wiIFshX3Byb3ZpZGVfYmF0Y2hfcXVldWVfcmVmOyBzdWJdKSkpKSkpIHRoZW4gKF9wcm92aWRlX2JhdGNoX3F1ZXVlX3JlZiA6PSBzeF9hcHBlbmRfYiAhX3Byb3ZpZGVfYmF0Y2hfcXVldWVfcmVmIHN1YjsgTmlsKSBlbHNlIE5pbCkpKSAoc3hfdG9fbGlzdCBzdWJzKTsgTmlsKSBlbHNlIChMaXN0Lml0ZXIgKGZ1biBzdWIgLT4gaWdub3JlICgoY2VrX2NhbGwgKHN1YikgKChMaXN0IFtOaWxdKSkpKSkgKHN4X3RvX2xpc3Qgc3Vicyk7IE5pbCkpIGVsc2UgTmlsKSlcblxuKCogYmF0Y2gtYmVnaW4hICopXG5hbmQgYmF0Y2hfYmVnaW5fYiAoKSA9XG4gIChfcHJvdmlkZV9iYXRjaF9kZXB0aF9yZWYgOj0gKHByaW1fY2FsbCBcIitcIiBbIV9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZjsgKE51bWJlciAxLjApXSk7IE5pbClcblxuKCogYmF0Y2gtZW5kISAqKVxuYW5kIGJhdGNoX2VuZF9iICgpID1cbiAgKGxldCAoKSA9IGlnbm9yZSAoKF9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZiA6PSAocHJpbV9jYWxsIFwiLVwiIFshX3Byb3ZpZGVfYmF0Y2hfZGVwdGhfcmVmOyAoTnVtYmVyIDEuMCldKTsgTmlsKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbIV9wcm92aWRlX2JhdGNoX2RlcHRoX3JlZjsgKE51bWJlciAwLjApXSkpIHRoZW4gKGxldCBxdWV1ZSA9ICFfcHJvdmlkZV9iYXRjaF9xdWV1ZV9yZWYgaW4gKGxldCAoKSA9IGlnbm9yZSAoKF9wcm92aWRlX2JhdGNoX3F1ZXVlX3JlZiA6PSAoTGlzdCBbXSk7IE5pbCkpIGluIChMaXN0Lml0ZXIgKGZ1biBzdWIgLT4gaWdub3JlICgoY2VrX2NhbGwgKHN1YikgKChMaXN0IFtOaWxdKSkpKSkgKHN4X3RvX2xpc3QgcXVldWUpOyBOaWwpKSkgZWxzZSBOaWwpKVxuXG4oKiBzdGVwLXNmLWJpbmQgKilcbmFuZCBzdGVwX3NmX2JpbmQgYXJncyBlbnYga29udCA9XG4gIChsZXQgYm9keSA9IChmaXJzdCAoYXJncykpIGluIGxldCBwcmV2ID0gIV9iaW5kX3RyYWNraW5nX3JlZiBpbiAobGV0ICgpID0gaWdub3JlICgoX2JpbmRfdHJhY2tpbmdfcmVmIDo9IChMaXN0IFtdKTsgTmlsKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYmluZF9mcmFtZSAoYm9keSkgKGVudikgKHByZXYpKSkgKGtvbnQpKSkpKSlcblxuKCogc3RlcC1zZi1wYXJhbWV0ZXJpemUgKilcbmFuZCBzdGVwX3NmX3BhcmFtZXRlcml6ZSBhcmdzIGVudiBrb250ID1cbiAgKGxldCBiaW5kaW5ncyA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5ID0gKHJlc3QgKGFyZ3MpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChpc19uaWwgKGJpbmRpbmdzKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChlbXB0eV9wIChiaW5kaW5ncykpKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYm9keSkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgZmlyc3RfcGFpciA9IChmaXJzdCAoYmluZGluZ3MpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoZmlyc3RfcGFpcikpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcGFyYW1ldGVyaXplX2ZyYW1lIChiaW5kaW5ncykgKE5pbCkgKChMaXN0IFtdKSkgKGJvZHkpIChlbnYpKSkgKGtvbnQpKSkpKSkpXG5cbigqIHN5bnRheC1ydWxlcy1tYXRjaCAqKVxuYW5kIHN5bnRheF9ydWxlc19tYXRjaCBwYXR0ZXJuIGZvcm0gbGl0ZXJhbHMgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoc3ltYm9sX3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKHBhdHRlcm4pKTsgKFN0cmluZyBcIl9cIildKSkpIHRoZW4gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbbGl0ZXJhbHM7IChzeW1ib2xfbmFtZSAocGF0dGVybikpXSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAoZm9ybSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAocGF0dGVybikpOyAoc3ltYm9sX25hbWUgKGZvcm0pKV0pKSkgdGhlbiAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGVsc2UgTmlsKSBlbHNlIChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocGF0dGVybikpKSB0aGVuIChsZXQgZCA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgZCAoc3ltYm9sX25hbWUgKHBhdHRlcm4pKSBmb3JtKSkgaW4gZCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChlbXB0eV9wIChwYXR0ZXJuKSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKGZvcm0pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZW1wdHlfcCAoZm9ybSkpKSkgdGhlbiAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGVsc2UgTmlsKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGlzdF9wIChmb3JtKSkpKSB0aGVuIChzeW50YXhfcnVsZXNfbWF0Y2hfbGlzdCAocGF0dGVybikgKChOdW1iZXIgMC4wKSkgKGZvcm0pICgoTnVtYmVyIDAuMCkpIChsaXRlcmFscykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcGF0dGVybjsgZm9ybV0pKSB0aGVuIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgZWxzZSBOaWwpKSkpKSlcblxuKCogc3ludGF4LXJ1bGVzLW1hdGNoLWxpc3QgKilcbmFuZCBzeW50YXhfcnVsZXNfbWF0Y2hfbGlzdCBwYXR0ZXJuIHBpIGZvcm0gZmkgbGl0ZXJhbHMgPVxuICAobGV0IHBsZW4gPSAobGVuIChwYXR0ZXJuKSkgaW4gbGV0IGZsZW4gPSAobGVuIChmb3JtKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgW3BpOyBwbGVuXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj49XCIgW2ZpOyBmbGVuXSkpKSB0aGVuIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbcGk7IHBsZW5dKSkgdGhlbiBOaWwgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPFwiIFsocHJpbV9jYWxsIFwiK1wiIFtwaTsgKE51bWJlciAxLjApXSk7IHBsZW5dKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoc3ltYm9sX3AgKChudGggKHBhdHRlcm4pICgocHJpbV9jYWxsIFwiK1wiIFtwaTsgKE51bWJlciAxLjApXSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoKG50aCAocGF0dGVybikgKChwcmltX2NhbGwgXCIrXCIgW3BpOyAoTnVtYmVyIDEuMCldKSkpKSk7IChTdHJpbmcgXCIuLi5cIildKSkpKSB0aGVuIChsZXQgc3ViX3BhdCA9IChudGggKHBhdHRlcm4pIChwaSkpIGluIGxldCByZXN0X3BhdF9jb3VudCA9IChwcmltX2NhbGwgXCItXCIgW3BsZW47IChwcmltX2NhbGwgXCIrXCIgW3BpOyAoTnVtYmVyIDIuMCldKV0pIGluIGxldCBhdmFpbGFibGUgPSAocHJpbV9jYWxsIFwiLVwiIFtmbGVuOyBmaV0pIGluIGxldCBuX2VsbGlwc2lzID0gKHByaW1fY2FsbCBcIi1cIiBbKHByaW1fY2FsbCBcIi1cIiBbZmxlbjsgZmldKTsgKHByaW1fY2FsbCBcIi1cIiBbcGxlbjsgKHByaW1fY2FsbCBcIitcIiBbcGk7IChOdW1iZXIgMi4wKV0pXSldKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFtuX2VsbGlwc2lzOyAoTnVtYmVyIDAuMCldKSkgdGhlbiBOaWwgZWxzZSAobGV0IGVsbGlwc2lzX2Zvcm1zID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2Zvcm07IGZpOyAocHJpbV9jYWxsIFwiK1wiIFtmaTsgbl9lbGxpcHNpc10pXSkgaW4gbGV0IHN1Yl9iaW5kaW5ncyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGYgLT4gKHN5bnRheF9ydWxlc19tYXRjaCAoc3ViX3BhdCkgKGYpIChsaXRlcmFscykpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwic2xpY2VcIiBbZm9ybTsgZmk7IChwcmltX2NhbGwgXCIrXCIgW2ZpOyBuX2VsbGlwc2lzXSldKSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgW3N1Yl9iaW5kaW5nczsgTmlsXSkpIHRoZW4gTmlsIGVsc2UgKGxldCByZXN0X3Jlc3VsdCA9IChzeW50YXhfcnVsZXNfbWF0Y2hfbGlzdCAocGF0dGVybikgKChwcmltX2NhbGwgXCIrXCIgW3BpOyAoTnVtYmVyIDIuMCldKSkgKGZvcm0pICgocHJpbV9jYWxsIFwiK1wiIFtmaTsgbl9lbGxpcHNpc10pKSAobGl0ZXJhbHMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChyZXN0X3Jlc3VsdCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgbWVyZ2VkID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gYiAtPiBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBrZXkgLT4gaWdub3JlICgobGV0IGV4aXN0aW5nID0gKGRpY3RfZ2V0IChtZXJnZWQpIChrZXkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChleGlzdGluZykpKSB0aGVuIChzeF9kaWN0X3NldF9iIG1lcmdlZCBrZXkgKExpc3QgWyhnZXQgKGIpIChrZXkpKV0pKSBlbHNlIChzeF9kaWN0X3NldF9iIG1lcmdlZCBrZXkgKHByaW1fY2FsbCBcImFwcGVuZFwiIFtleGlzdGluZzsgKExpc3QgWyhnZXQgKGIpIChrZXkpKV0pXSkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwia2V5c1wiIFtiXSkpOyBOaWwpKSkgKHN4X3RvX2xpc3Qgc3ViX2JpbmRpbmdzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGtleSAtPiBpZ25vcmUgKChzeF9kaWN0X3NldF9iIG1lcmdlZCBrZXkgKGdldCAocmVzdF9yZXN1bHQpIChrZXkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwia2V5c1wiIFtyZXN0X3Jlc3VsdF0pKTsgTmlsKSkgaW4gbWVyZ2VkKSkpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj49XCIgW2ZpOyBmbGVuXSkpIHRoZW4gTmlsIGVsc2UgKGxldCBzdWJfcmVzdWx0ID0gKHN5bnRheF9ydWxlc19tYXRjaCAoKG50aCAocGF0dGVybikgKHBpKSkpICgobnRoIChmb3JtKSAoZmkpKSkgKGxpdGVyYWxzKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoc3ViX3Jlc3VsdCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgcmVzdF9yZXN1bHQgPSAoc3ludGF4X3J1bGVzX21hdGNoX2xpc3QgKHBhdHRlcm4pICgocHJpbV9jYWxsIFwiK1wiIFtwaTsgKE51bWJlciAxLjApXSkpIChmb3JtKSAoKHByaW1fY2FsbCBcIitcIiBbZmk7IChOdW1iZXIgMS4wKV0pKSAobGl0ZXJhbHMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChyZXN0X3Jlc3VsdCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBrZXkgLT4gaWdub3JlICgoc3hfZGljdF9zZXRfYiByZXN0X3Jlc3VsdCBrZXkgKGdldCAoc3ViX3Jlc3VsdCkgKGtleSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJrZXlzXCIgW3N1Yl9yZXN1bHRdKSk7IE5pbCkpIGluIHJlc3RfcmVzdWx0KSkpKSkpKSkpKVxuXG4oKiBzeW50YXgtcnVsZXMtZmluZC12YXIgKilcbmFuZCBzeW50YXhfcnVsZXNfZmluZF92YXIgdGVtcGxhdGUgYmluZGluZ3MgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoc3ltYm9sX3AgKHRlbXBsYXRlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcImhhcy1rZXk/XCIgW2JpbmRpbmdzOyAoc3ltYm9sX25hbWUgKHRlbXBsYXRlKSldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGlzdF9wICgoZ2V0IChiaW5kaW5ncykgKChzeW1ib2xfbmFtZSAodGVtcGxhdGUpKSkpKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKHRlbXBsYXRlKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGlzdF9wICh0ZW1wbGF0ZSkpKSB0aGVuIChMaXN0LmZvbGRfbGVmdCAoZnVuIGZvdW5kIHQgLT4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoZm91bmQpKSkgdGhlbiAoc3ludGF4X3J1bGVzX2ZpbmRfdmFyICh0KSAoYmluZGluZ3MpKSBlbHNlIGZvdW5kKSkgTmlsIChzeF90b19saXN0IHRlbXBsYXRlKSkgZWxzZSBOaWwpKVxuXG4oKiBzeW50YXgtcnVsZXMtZmluZC1hbGwtdmFycyAqKVxuYW5kIHN5bnRheF9ydWxlc19maW5kX2FsbF92YXJzIHRlbXBsYXRlIGJpbmRpbmdzID1cbiAgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN5bWJvbF9wICh0ZW1wbGF0ZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCJoYXMta2V5P1wiIFtiaW5kaW5nczsgKHN5bWJvbF9uYW1lICh0ZW1wbGF0ZSkpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxpc3RfcCAoKGdldCAoYmluZGluZ3MpICgoc3ltYm9sX25hbWUgKHRlbXBsYXRlKSkpKSkpKSkpIHRoZW4gKExpc3QgWyhzeW1ib2xfbmFtZSAodGVtcGxhdGUpKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxpc3RfcCAodGVtcGxhdGUpKSkgdGhlbiAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgdCAtPiAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2FjYzsgKHN5bnRheF9ydWxlc19maW5kX2FsbF92YXJzICh0KSAoYmluZGluZ3MpKV0pKSAoTGlzdCBbXSkgKHN4X3RvX2xpc3QgdGVtcGxhdGUpKSBlbHNlIChMaXN0IFtdKSkpXG5cbigqIHN5bnRheC1ydWxlcy1pbnN0YW50aWF0ZSAqKVxuYW5kIHN5bnRheF9ydWxlc19pbnN0YW50aWF0ZSB0ZW1wbGF0ZSBiaW5kaW5ncyA9XG4gIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAodGVtcGxhdGUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiaGFzLWtleT9cIiBbYmluZGluZ3M7IChzeW1ib2xfbmFtZSAodGVtcGxhdGUpKV0pKSkgdGhlbiAoZ2V0IChiaW5kaW5ncykgKChzeW1ib2xfbmFtZSAodGVtcGxhdGUpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgobGlzdF9wICh0ZW1wbGF0ZSkpKSkpKSkgdGhlbiB0ZW1wbGF0ZSBlbHNlIChpZiBzeF90cnV0aHkgKChlbXB0eV9wICh0ZW1wbGF0ZSkpKSB0aGVuIHRlbXBsYXRlIGVsc2UgKHN5bnRheF9ydWxlc19pbnN0YW50aWF0ZV9saXN0ICh0ZW1wbGF0ZSkgKChOdW1iZXIgMC4wKSkgKGJpbmRpbmdzKSkpKSlcblxuKCogc3ludGF4LXJ1bGVzLWluc3RhbnRpYXRlLWxpc3QgKilcbmFuZCBzeW50YXhfcnVsZXNfaW5zdGFudGlhdGVfbGlzdCB0ZW1wbGF0ZSBpIGJpbmRpbmdzID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj49XCIgW2k7IChsZW4gKHRlbXBsYXRlKSldKSkgdGhlbiAoTGlzdCBbXSkgZWxzZSAobGV0IGVsZW0gPSAobnRoICh0ZW1wbGF0ZSkgKGkpKSBpbiBsZXQgaGFzX2VsbGlwc2lzID0gKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIjxcIiBbKHByaW1fY2FsbCBcIitcIiBbaTsgKE51bWJlciAxLjApXSk7IChsZW4gKHRlbXBsYXRlKSldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoc3ltYm9sX3AgKChudGggKHRlbXBsYXRlKSAoKHByaW1fY2FsbCBcIitcIiBbaTsgKE51bWJlciAxLjApXSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoKG50aCAodGVtcGxhdGUpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKSkpKSk7IChTdHJpbmcgXCIuLi5cIildKSkpIGluIChpZiBzeF90cnV0aHkgKGhhc19lbGxpcHNpcykgdGhlbiAobGV0IGFsbF92YXJzID0gKHN5bnRheF9ydWxlc19maW5kX2FsbF92YXJzIChlbGVtKSAoYmluZGluZ3MpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYWxsX3ZhcnMpKSkgdGhlbiAoc3ludGF4X3J1bGVzX2luc3RhbnRpYXRlX2xpc3QgKHRlbXBsYXRlKSAoKHByaW1fY2FsbCBcIitcIiBbaTsgKE51bWJlciAyLjApXSkpIChiaW5kaW5ncykpIGVsc2UgKGxldCBjb3VudCA9IChsZW4gKChnZXQgKGJpbmRpbmdzKSAoKGZpcnN0IChhbGxfdmFycykpKSkpKSBpbiBsZXQgZXhwYW5kZWQgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBpZHggLT4gKGxldCBiID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4ga2V5IC0+IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgYiBrZXkgKGdldCAoYmluZGluZ3MpIChrZXkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwia2V5c1wiIFtiaW5kaW5nc10pKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHZhcl9uYW1lIC0+IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgYiB2YXJfbmFtZSAobnRoICgoZ2V0IChiaW5kaW5ncykgKHZhcl9uYW1lKSkpIChpZHgpKSkpKSAoc3hfdG9fbGlzdCBhbGxfdmFycyk7IE5pbCkpIGluIChzeW50YXhfcnVsZXNfaW5zdGFudGlhdGUgKGVsZW0pIChiKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFtjb3VudF0pKSkpIGluIGxldCByZXN0X3Jlc3VsdCA9IChzeW50YXhfcnVsZXNfaW5zdGFudGlhdGVfbGlzdCAodGVtcGxhdGUpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDIuMCldKSkgKGJpbmRpbmdzKSkgaW4gKHByaW1fY2FsbCBcImFwcGVuZFwiIFtleHBhbmRlZDsgcmVzdF9yZXN1bHRdKSkpKSBlbHNlIChjb25zICgoc3ludGF4X3J1bGVzX2luc3RhbnRpYXRlIChlbGVtKSAoYmluZGluZ3MpKSkgKChzeW50YXhfcnVsZXNfaW5zdGFudGlhdGVfbGlzdCAodGVtcGxhdGUpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKSkgKGJpbmRpbmdzKSkpKSkpKVxuXG4oKiBzeW50YXgtcnVsZXMtZXhwYW5kICopXG5hbmQgc3ludGF4X3J1bGVzX2V4cGFuZCBsaXRlcmFscyBydWxlcyBmb3JtID1cbiAgKGxldCBmdWxsX2Zvcm0gPSAoY29ucyAoKG1ha2Vfc3ltYm9sICgoU3RyaW5nIFwiX1wiKSkpKSAoZm9ybSkpIGluIChzeW50YXhfcnVsZXNfdHJ5X3J1bGVzIChsaXRlcmFscykgKHJ1bGVzKSAoZnVsbF9mb3JtKSkpXG5cbigqIHN5bnRheC1ydWxlcy10cnktcnVsZXMgKilcbmFuZCBzeW50YXhfcnVsZXNfdHJ5X3J1bGVzIGxpdGVyYWxzIHJ1bGVzIGZ1bGxfZm9ybSA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChydWxlcykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcInN5bnRheC1ydWxlczogbm8gcGF0dGVybiBtYXRjaGVkIGZvciBcIik7IChpbnNwZWN0IChmdWxsX2Zvcm0pKV0pKSkpKSBlbHNlIChsZXQgcnVsZSA9IChmaXJzdCAocnVsZXMpKSBpbiBsZXQgcGF0dGVybiA9IChmaXJzdCAocnVsZSkpIGluIGxldCB0ZW1wbGF0ZSA9IChudGggKHJ1bGUpICgoTnVtYmVyIDEuMCkpKSBpbiAobGV0IGJpbmRpbmdzID0gKHN5bnRheF9ydWxlc19tYXRjaCAocGF0dGVybikgKGZ1bGxfZm9ybSkgKGxpdGVyYWxzKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsIChiaW5kaW5ncykpKSkpKSkgdGhlbiAoc3ludGF4X3J1bGVzX2luc3RhbnRpYXRlICh0ZW1wbGF0ZSkgKGJpbmRpbmdzKSkgZWxzZSAoc3ludGF4X3J1bGVzX3RyeV9ydWxlcyAobGl0ZXJhbHMpICgocmVzdCAocnVsZXMpKSkgKGZ1bGxfZm9ybSkpKSkpKVxuXG4oKiBzZi1zeW50YXgtcnVsZXMgKilcbmFuZCBzZl9zeW50YXhfcnVsZXMgYXJncyBlbnYgPVxuICAobGV0IGxpdGVyYWxzID0gKGlmIHN4X3RydXRoeSAoKGxpc3RfcCAoKGZpcnN0IChhcmdzKSkpKSkgdGhlbiAoTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocykpKSB0aGVuIChzeW1ib2xfbmFtZSAocykpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFtzXSkpKSkgKHN4X3RvX2xpc3QgKGZpcnN0IChhcmdzKSkpKSkgZWxzZSAoTGlzdCBbXSkpIGluIGxldCBydWxlcyA9IChyZXN0IChhcmdzKSkgaW4gKGxldCBjbG9zdXJlID0gKGVudl9leHRlbmQgKGVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBjbG9zdXJlIChzeF90b19zdHJpbmcgKFN0cmluZyBcIl9fc3ItbGl0ZXJhbHNcIikpIGxpdGVyYWxzKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGNsb3N1cmUgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiX19zci1ydWxlc1wiKSkgcnVsZXMpKSBpbiAobWFrZV9tYWNybyAoKExpc3QgW10pKSAoKFN0cmluZyBcIl9fc3ItZm9ybVwiKSkgKChTeW1ib2wgXCJfX3N5bnRheC1ydWxlcy1ib2R5X19cIikpIChjbG9zdXJlKSAoKFN0cmluZyBcInN5bnRheC1ydWxlc1wiKSkpKSkpKVxuXG4oKiBzdGVwLXNmLWRlZmluZS1saWJyYXJ5ICopXG5hbmQgc3RlcF9zZl9kZWZpbmVfbGlicmFyeSBhcmdzIGVudiBrb250ID1cbiAgKGxldCBsaWJfc3BlYyA9IChmaXJzdCAoYXJncykpIGluIGxldCBkZWNscyA9IChyZXN0IChhcmdzKSkgaW4gKGxldCBsaWJfZW52ID0gKGVudl9leHRlbmQgKGVudikpIGluIGxldCBleHBvcnRzID0gcmVmICgoTGlzdCBbXSkpIGluIGxldCBib2R5X2Zvcm1zID0gcmVmICgoTGlzdCBbXSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBkZWNsIC0+IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAoZGVjbCkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKGRlY2wpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHN5bWJvbF9wICgoZmlyc3QgKGRlY2wpKSkpKSkpIHRoZW4gKGxldCBraW5kID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGRlY2wpKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2tpbmQ7IChTdHJpbmcgXCJleHBvcnRcIildKSkgdGhlbiAoZXhwb3J0cyA6PSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyFleHBvcnRzOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocykpKSB0aGVuIChzeW1ib2xfbmFtZSAocykpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFtzXSkpKSkgKHN4X3RvX2xpc3QgKHJlc3QgKGRlY2wpKSkpKV0pOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBba2luZDsgKFN0cmluZyBcImltcG9ydFwiKV0pKSB0aGVuIChMaXN0Lml0ZXIgKGZ1biBpbXBvcnRfc2V0IC0+IGlnbm9yZSAoKGJpbmRfaW1wb3J0X3NldCAoaW1wb3J0X3NldCkgKGxpYl9lbnYpKSkpIChzeF90b19saXN0IChyZXN0IChkZWNsKSkpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBba2luZDsgKFN0cmluZyBcImJlZ2luXCIpXSkpIHRoZW4gKGJvZHlfZm9ybXMgOj0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFshYm9keV9mb3JtczsgKHJlc3QgKGRlY2wpKV0pOyBOaWwpIGVsc2UgTmlsKSkpKSBlbHNlIE5pbCkpKSAoc3hfdG9fbGlzdCBkZWNscyk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBmb3JtIC0+IGlnbm9yZSAoKGV2YWxfZXhwciAoZm9ybSkgKGxpYl9lbnYpKSkpIChzeF90b19saXN0ICFib2R5X2Zvcm1zKTsgTmlsKSkgaW4gKGxldCBleHBvcnRfZGljdCA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIG5hbWUgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAobGliX2VudikgKG5hbWUpKSkgdGhlbiAoc3hfZGljdF9zZXRfYiBleHBvcnRfZGljdCBuYW1lIChlbnZfZ2V0IChsaWJfZW52KSAobmFtZSkpKSBlbHNlIE5pbCkpKSAoc3hfdG9fbGlzdCAhZXhwb3J0cyk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChyZWdpc3Rlcl9saWJyYXJ5IChsaWJfc3BlYykgKGV4cG9ydF9kaWN0KSkpIGluIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpKSkpKSkpKVxuXG4oKiBiaW5kLWltcG9ydC1zZXQgKilcbmFuZCBiaW5kX2ltcG9ydF9zZXQgaW1wb3J0X3NldCBlbnYgPVxuICAobGV0IGhlYWQgPSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChpbXBvcnRfc2V0KSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAoaW1wb3J0X3NldCkpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoc3ltYm9sX3AgKChmaXJzdCAoaW1wb3J0X3NldCkpKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoaW1wb3J0X3NldCkpKSkgZWxzZSBOaWwpIGluIChsZXQgbGliX3NwZWMgPSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW2hlYWQ7IChTdHJpbmcgXCJvbmx5XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcImV4Y2VwdFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW2hlYWQ7IChTdHJpbmcgXCJwcmVmaXhcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcInJlbmFtZVwiKV0pKSkpKSB0aGVuIChudGggKGltcG9ydF9zZXQpICgoTnVtYmVyIDEuMCkpKSBlbHNlIGltcG9ydF9zZXQpIGluIChsZXQgZXhwb3J0cyA9IChsaWJyYXJ5X2V4cG9ydHMgKGxpYl9zcGVjKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcIm9ubHlcIildKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gcyAtPiBpZ25vcmUgKChsZXQgaWQgPSAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHMpKSkgdGhlbiAoc3ltYm9sX25hbWUgKHMpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbc10pKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcImhhcy1rZXk/XCIgW2V4cG9ydHM7IGlkXSkpIHRoZW4gKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIGlkKSAoZ2V0IChleHBvcnRzKSAoaWQpKSkgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChyZXN0ICgocmVzdCAoaW1wb3J0X3NldCkpKSkpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbaGVhZDsgKFN0cmluZyBcInByZWZpeFwiKV0pKSB0aGVuIChsZXQgcGZ4ID0gKFN0cmluZyAoc3hfc3RyIFsobnRoIChpbXBvcnRfc2V0KSAoKE51bWJlciAyLjApKSldKSkgaW4gKExpc3QuaXRlciAoZnVuIGtleSAtPiBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoU3RyaW5nIChzeF9zdHIgW3BmeDsga2V5XSkpKSAoZ2V0IChleHBvcnRzKSAoa2V5KSkpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcImtleXNcIiBbZXhwb3J0c10pKTsgTmlsKSkgZWxzZSAoTGlzdC5pdGVyIChmdW4ga2V5IC0+IGlnbm9yZSAoKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIGtleSkgKGdldCAoZXhwb3J0cykgKGtleSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJrZXlzXCIgW2V4cG9ydHNdKSk7IE5pbCkpKSkpKVxuXG4oKiBzdGVwLXNmLWltcG9ydCAqKVxuYW5kIHN0ZXBfc2ZfaW1wb3J0IGFyZ3MgZW52IGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGxldCBpbXBvcnRfc2V0ID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHJlc3Rfc2V0cyA9IChyZXN0IChhcmdzKSkgaW4gKGxldCBsaWJfc3BlYyA9IChsZXQgaGVhZCA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKGltcG9ydF9zZXQpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChpbXBvcnRfc2V0KSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChzeW1ib2xfcCAoKGZpcnN0IChpbXBvcnRfc2V0KSkpKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChpbXBvcnRfc2V0KSkpKSBlbHNlIE5pbCkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtoZWFkOyAoU3RyaW5nIFwib25seVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW2hlYWQ7IChTdHJpbmcgXCJleGNlcHRcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtoZWFkOyAoU3RyaW5nIFwicHJlZml4XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChwcmltX2NhbGwgXCI9XCIgW2hlYWQ7IChTdHJpbmcgXCJyZW5hbWVcIildKSkpKSkgdGhlbiAobnRoIChpbXBvcnRfc2V0KSAoKE51bWJlciAxLjApKSkgZWxzZSBpbXBvcnRfc2V0KSkgaW4gKGlmIHN4X3RydXRoeSAoKGxpYnJhcnlfbG9hZGVkX3AgKGxpYl9zcGVjKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKGJpbmRfaW1wb3J0X3NldCAoaW1wb3J0X3NldCkgKGVudikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVzdF9zZXRzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAoc3RlcF9zZl9pbXBvcnQgKHJlc3Rfc2V0cykgKGVudikgKGtvbnQpKSkpIGVsc2UgKG1ha2VfY2VrX3N1c3BlbmRlZCAoKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwibGlicmFyeVwiIGxpYl9zcGVjOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJvcFwiIChTdHJpbmcgXCJpbXBvcnRcIik7IERpY3QgX2QpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaW1wb3J0X2ZyYW1lIChpbXBvcnRfc2V0KSAocmVzdF9zZXRzKSAoZW52KSkpIChrb250KSkpKSkpKSlcblxuKCogc3RlcC1zZi1wZXJmb3JtICopXG5hbmQgc3RlcF9zZl9wZXJmb3JtIGFyZ3MgZW52IGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJwZXJmb3JtIHJlcXVpcmVzIGFuIElPIHJlcXVlc3QgYXJndW1lbnRcIikpKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcGVyZm9ybV9mcmFtZSAoZW52KSkpIChrb250KSkpKSlcblxuXG4oKiBzZi1kZWZpbmUtcmVjb3JkLXR5cGUgKilcbmFuZCBzZl9kZWZpbmVfcmVjb3JkX3R5cGUgYXJncyBlbnYgPVxuICAobGV0IHR5cGVfc3ltID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGN0b3Jfc3BlYyA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgcHJlZF9zeW0gPSAobnRoIChhcmdzKSAoKE51bWJlciAyLjApKSkgaW4gbGV0IGZpZWxkX3NwZWNzID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChOdW1iZXIgMy4wKV0pIGluIChsZXQgcmF3X25hbWUgPSAoc3ltYm9sX25hbWUgKHR5cGVfc3ltKSkgaW4gKGxldCB0eXBlX25hbWUgPSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwic3RhcnRzLXdpdGg/XCIgW3Jhd19uYW1lOyAoU3RyaW5nIFwiPFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCJlbmRzLXdpdGg/XCIgW3Jhd19uYW1lOyAoU3RyaW5nIFwiPlwiKV0pKSkgdGhlbiAocHJpbV9jYWxsIFwic2xpY2VcIiBbcmF3X25hbWU7IChOdW1iZXIgMS4wKTsgKHByaW1fY2FsbCBcIi1cIiBbKGxlbiAocmF3X25hbWUpKTsgKE51bWJlciAxLjApXSldKSBlbHNlIHJhd19uYW1lKSBpbiBsZXQgY3Rvcl9uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGN0b3Jfc3BlYykpKSkgaW4gbGV0IGN0b3JfcGFyYW1zID0gKExpc3QgKExpc3QubWFwIChmdW4gcyAtPiAoc3ltYm9sX25hbWUgKHMpKSkgKHN4X3RvX2xpc3QgKHJlc3QgKGN0b3Jfc3BlYykpKSkpIGluIGxldCBwcmVkX25hbWUgPSAoc3ltYm9sX25hbWUgKHByZWRfc3ltKSkgaW4gbGV0IGZpZWxkX25hbWVzID0gKExpc3QgKExpc3QubWFwIChmdW4gZnMgLT4gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGZzKSkpKSkgKHN4X3RvX2xpc3QgZmllbGRfc3BlY3MpKSkgaW4gKGxldCBydGRfdWlkID0gKG1ha2VfcnRkICh0eXBlX25hbWUpIChmaWVsZF9uYW1lcykgKGN0b3JfcGFyYW1zKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIGN0b3JfbmFtZSkgKG1ha2VfcmVjb3JkX2NvbnN0cnVjdG9yIChydGRfdWlkKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgcHJlZF9uYW1lKSAobWFrZV9yZWNvcmRfcHJlZGljYXRlIChydGRfdWlkKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZm9yX2VhY2hfaW5kZXhlZCAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2lkeDsgZnNdIC0+IChmdW4gaWR4IGZzIC0+IChsZXQgYWNjZXNzb3JfbmFtZSA9IChzeW1ib2xfbmFtZSAoKG50aCAoZnMpICgoTnVtYmVyIDEuMCkpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyBhY2Nlc3Nvcl9uYW1lKSAobWFrZV9yZWNvcmRfYWNjZXNzb3IgKGlkeCkpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKGZzKSk7IChOdW1iZXIgMy4wKV0pKSB0aGVuIChsZXQgbXV0YXRvcl9uYW1lID0gKHN5bWJvbF9uYW1lICgobnRoIChmcykgKChOdW1iZXIgMi4wKSkpKSkgaW4gKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIG11dGF0b3JfbmFtZSkgKG1ha2VfcmVjb3JkX211dGF0b3IgKGlkeCkpKSkgZWxzZSBOaWwpKSkpIGlkeCBmcyB8IF8gLT4gTmlsKSkpIChmaWVsZF9zcGVjcykpKSBpbiBOaWwpKSkpKSkpXG5cbigqIHNmLWRlZmluZS1wcm90b2NvbCAqKVxuYW5kIHNmX2RlZmluZV9wcm90b2NvbCBhcmdzIGVudiA9XG4gIChsZXQgcHJvdG9fbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBpbiBsZXQgbWV0aG9kX3NwZWNzID0gKHJlc3QgKGFyZ3MpKSBpbiAobGV0ICgpID0gaWdub3JlICgobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKFN0cmluZyBcIipwcm90b2NvbC1yZWdpc3RyeSpcIikpIF9wcm90b2NvbF9yZWdpc3RyeV8pKSBpbiAoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKFN0cmluZyBcInNhdGlzZmllcz9cIikpIChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtwbmFtZTsgdmFsJ10gLT4gKGZ1biBwbmFtZSB2YWwnIC0+IChzYXRpc2ZpZXNfcCAocG5hbWUpICh2YWwnKSkpIHBuYW1lIHZhbCcgfCBfIC0+IE5pbCkpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIF9wcm90b2NvbF9yZWdpc3RyeV8gcHJvdG9fbmFtZSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMyBpbiBIYXNodGJsLnJlcGxhY2UgX2QgXCJpbXBsc1wiIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSk7IEhhc2h0YmwucmVwbGFjZSBfZCBcIm1ldGhvZHNcIiAoTGlzdCAoTGlzdC5tYXAgKGZ1biBzcGVjIC0+IChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCBcImFyaXR5XCIgKGxlbiAoc3BlYykpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJuYW1lXCIgKHN5bWJvbF9uYW1lICgoZmlyc3QgKHNwZWMpKSkpOyBEaWN0IF9kKSkgKHN4X3RvX2xpc3QgbWV0aG9kX3NwZWNzKSkpOyBIYXNodGJsLnJlcGxhY2UgX2QgXCJuYW1lXCIgcHJvdG9fbmFtZTsgRGljdCBfZCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gc3BlYyAtPiBpZ25vcmUgKChsZXQgbWV0aG9kX25hbWUgPSAoc3ltYm9sX25hbWUgKChmaXJzdCAoc3BlYykpKSkgaW4gbGV0IHBhcmFtcyA9IChyZXN0IChzcGVjKSkgaW4gbGV0IHBuYW1lID0gcHJvdG9fbmFtZSBpbiAobGV0IHNlbGZfc3ltID0gKGZpcnN0IChwYXJhbXMpKSBpbiBsZXQgbG9va3VwX2V4cHIgPSAoTGlzdCBbKFN5bWJvbCBcImdldFwiKTsgKExpc3QgWyhTeW1ib2wgXCJnZXRcIik7IChMaXN0IFsoU3ltYm9sIFwiZ2V0XCIpOyAoTGlzdCBbKFN5bWJvbCBcImdldFwiKTsgKFN5bWJvbCBcIipwcm90b2NvbC1yZWdpc3RyeSpcIik7IHBuYW1lXSk7IChTdHJpbmcgXCJpbXBsc1wiKV0pOyAoTGlzdCBbKFN5bWJvbCBcInR5cGUtb2ZcIik7IHNlbGZfc3ltXSldKTsgbWV0aG9kX25hbWVdKSBpbiAoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgbWV0aG9kX25hbWUpIChldmFsX2V4cHIgKChMaXN0IFsoU3ltYm9sIFwiZm5cIik7IHBhcmFtczsgKExpc3QgWyhTeW1ib2wgXCJsZXRcIik7IChMaXN0IFsoTGlzdCBbKFN5bWJvbCBcIl9pbXBsXCIpOyBsb29rdXBfZXhwcl0pXSk7IChMaXN0IFsoU3ltYm9sIFwiaWZcIik7IChMaXN0IFsoU3ltYm9sIFwibmlsP1wiKTsgKFN5bWJvbCBcIl9pbXBsXCIpXSk7IChMaXN0IFsoU3ltYm9sIFwiZXJyb3JcIik7IChTdHJpbmcgKHN4X3N0ciBbcG5hbWU7IChTdHJpbmcgXCIuXCIpOyBtZXRob2RfbmFtZTsgKFN0cmluZyBcIjogbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHR5cGVcIildKSldKTsgKGNvbnMgKChTeW1ib2wgXCJfaW1wbFwiKSkgKHBhcmFtcykpXSldKV0pKSAoZW52KSkpKSkpKSAoc3hfdG9fbGlzdCBtZXRob2Rfc3BlY3MpOyBOaWwpKSBpbiBOaWwpKSkpXG5cbigqIHNmLWltcGxlbWVudCAqKVxuYW5kIHNmX2ltcGxlbWVudCBhcmdzIGVudiA9XG4gIChsZXQgcHJvdG9fbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBpbiBsZXQgcmF3X3R5cGVfbmFtZSA9IChzeW1ib2xfbmFtZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSkgaW4gbGV0IHR5cGVfbmFtZSA9IChwcmltX2NhbGwgXCJzbGljZVwiIFtyYXdfdHlwZV9uYW1lOyAoTnVtYmVyIDEuMCk7IChwcmltX2NhbGwgXCItXCIgWyhsZW4gKHJhd190eXBlX25hbWUpKTsgKE51bWJlciAxLjApXSldKSBpbiBsZXQgbWV0aG9kX2RlZnMgPSAocmVzdCAoKHJlc3QgKGFyZ3MpKSkpIGluIChsZXQgcHJvdG8gPSAoZ2V0IChfcHJvdG9jb2xfcmVnaXN0cnlfKSAocHJvdG9fbmFtZSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKHByb3RvKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5rbm93biBwcm90b2NvbDogXCIpOyBwcm90b19uYW1lXSkpKSkpIGVsc2UgKGxldCBpbXBscyA9IChnZXQgKHByb3RvKSAoKFN0cmluZyBcImltcGxzXCIpKSkgaW4gbGV0IHR5cGVfaW1wbHMgPSAobGV0IF9vciA9IChnZXQgKGltcGxzKSAodHlwZV9uYW1lKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBtZXRob2RfZGVmIC0+IGlnbm9yZSAoKGxldCBtbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChtZXRob2RfZGVmKSkpKSBpbiBsZXQgcHJvdG9fbWV0aG9kID0gKGZpcnN0ICgoTGlzdCAoTGlzdC5maWx0ZXIgKGZ1biBtIC0+IHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGdldCAobSkgKChTdHJpbmcgXCJuYW1lXCIpKSk7IG1uYW1lXSkpKSAoc3hfdG9fbGlzdCAoZ2V0IChwcm90bykgKChTdHJpbmcgXCJtZXRob2RzXCIpKSkpKSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChwcm90b19tZXRob2QpKSkgdGhlbiAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJVbmtub3duIG1ldGhvZCBcIik7IG1uYW1lOyAoU3RyaW5nIFwiIGluIHByb3RvY29sIFwiKTsgcHJvdG9fbmFtZV0pKSkpKSBlbHNlIChsZXQgYXJpdHkgPSAoZ2V0IChwcm90b19tZXRob2QpICgoU3RyaW5nIFwiYXJpdHlcIikpKSBpbiBsZXQgcGFyYW1zID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW21ldGhvZF9kZWY7IChOdW1iZXIgMS4wKTsgYXJpdHldKSBpbiBsZXQgYm9keSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKG1ldGhvZF9kZWYpKTsgKHByaW1fY2FsbCBcIitcIiBbYXJpdHk7IChOdW1iZXIgMS4wKV0pXSkpIHRoZW4gKG50aCAobWV0aG9kX2RlZikgKGFyaXR5KSkgZWxzZSAoY29ucyAoKFN5bWJvbCBcImJlZ2luXCIpKSAoKHByaW1fY2FsbCBcInNsaWNlXCIgW21ldGhvZF9kZWY7IGFyaXR5XSkpKSkgaW4gKHN4X2RpY3Rfc2V0X2IgdHlwZV9pbXBscyBtbmFtZSAoZXZhbF9leHByICgoTGlzdCBbKFN5bWJvbCBcImZuXCIpOyBwYXJhbXM7IGJvZHldKSkgKGVudikpKSkpKSkpIChzeF90b19saXN0IG1ldGhvZF9kZWZzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgaW1wbHMgdHlwZV9uYW1lIHR5cGVfaW1wbHMpKSBpbiBOaWwpKSkpKSlcblxuKCogc2F0aXNmaWVzPyAqKVxuYW5kIHNhdGlzZmllc19wIHByb3RvX25hbWUgdmFsdWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChyZWNvcmRfcCAodmFsdWUpKSkpKSkpIHRoZW4gKEJvb2wgZmFsc2UpIGVsc2UgKGxldCBwcm90byA9IChnZXQgKF9wcm90b2NvbF9yZWdpc3RyeV8pICgoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHByb3RvX25hbWUpKSkgdGhlbiAoc3ltYm9sX25hbWUgKHByb3RvX25hbWUpKSBlbHNlIHByb3RvX25hbWUpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAocHJvdG8pKSkgdGhlbiAoQm9vbCBmYWxzZSkgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19uaWwgKChnZXQgKChnZXQgKHByb3RvKSAoKFN0cmluZyBcImltcGxzXCIpKSkpICgodHlwZV9vZiAodmFsdWUpKSkpKSkpKSkpKSkpXG5cbigqIGNoZWNrLW1hdGNoLWV4aGF1c3RpdmVuZXNzICopXG5hbmQgY2hlY2tfbWF0Y2hfZXhoYXVzdGl2ZW5lc3MgY2xhdXNlcyA9XG4gIChsZXQgd2FybmluZ3MgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IHBhdHRlcm5zID0gKExpc3QgKExpc3QubWFwIChmdW4gYyAtPiAoZmlyc3QgKGMpKSkgKHN4X3RvX2xpc3QgY2xhdXNlcykpKSBpbiBsZXQgaGFzX3dpbGRjYXJkID0gKEJvb2wgKExpc3QuZXhpc3RzIChmdW4gcCAtPiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChzeW1ib2xfcCAocCkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcDsgKEJvb2wgdHJ1ZSldKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtwOyAoQm9vbCBmYWxzZSldKSkpKSkpKSkpIChzeF90b19saXN0IHBhdHRlcm5zKSkpIGluIGxldCBoYXNfZWxzZSA9IChCb29sIChMaXN0LmV4aXN0cyAoZnVuIHAgLT4gc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtwOyAoU3RyaW5nIFwiZWxzZVwiKV0pKSkgKHN4X3RvX2xpc3QgcGF0dGVybnMpKSkgaW4gbGV0IGhhc190cnVlID0gKEJvb2wgKExpc3QuZXhpc3RzIChmdW4gcCAtPiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW3A7IChCb29sIHRydWUpXSkpKSAoc3hfdG9fbGlzdCBwYXR0ZXJucykpKSBpbiBsZXQgaGFzX2ZhbHNlID0gKEJvb2wgKExpc3QuZXhpc3RzIChmdW4gcCAtPiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW3A7IChCb29sIGZhbHNlKV0pKSkgKHN4X3RvX2xpc3QgcGF0dGVybnMpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5IChoYXNfd2lsZGNhcmQpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoaGFzX2Vsc2UpKSkpKSkgdGhlbiAod2FybmluZ3MgOj0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFshd2FybmluZ3M7IChMaXN0IFsoU3RyaW5nIFwibWF0Y2ggbWF5IGJlIG5vbi1leGhhdXN0aXZlIChubyB3aWxkY2FyZCBvciA6ZWxzZSBwYXR0ZXJuKVwiKV0pXSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGV0IF9vciA9IGhhc190cnVlIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSBoYXNfZmFsc2UpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGxldCBfYW5kID0gaGFzX3RydWUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgaGFzX2ZhbHNlKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5IChoYXNfd2lsZGNhcmQpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoaGFzX2Vsc2UpKSkpKSkpKSB0aGVuICh3YXJuaW5ncyA6PSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyF3YXJuaW5nczsgKExpc3QgWyhpZiBzeF90cnV0aHkgKGhhc190cnVlKSB0aGVuIChTdHJpbmcgXCJtYXRjaCBvbiBib29sZWFuIG1pc3NpbmcgZmFsc2UgY2FzZVwiKSBlbHNlIChTdHJpbmcgXCJtYXRjaCBvbiBib29sZWFuIG1pc3NpbmcgdHJ1ZSBjYXNlXCIpKV0pXSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAhd2FybmluZ3MpKSlcblxuKCogbWF0Y2gtZmluZC1jbGF1c2UgKilcbmFuZCBtYXRjaF9maW5kX2NsYXVzZSB2YWwnIGNsYXVzZXMgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNsYXVzZXMpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGNsYXVzZSA9IChmaXJzdCAoY2xhdXNlcykpIGluIGxldCBwYXR0ZXJuID0gKGZpcnN0IChjbGF1c2UpKSBpbiBsZXQgYm9keSA9IChudGggKGNsYXVzZSkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobWF0Y2hfcGF0dGVybiAocGF0dGVybikgKHZhbCcpIChsb2NhbCkpKSB0aGVuIChMaXN0IFtsb2NhbDsgYm9keV0pIGVsc2UgKG1hdGNoX2ZpbmRfY2xhdXNlICh2YWwnKSAoKHJlc3QgKGNsYXVzZXMpKSkgKGVudikpKSkpXG5cbigqIG1hdGNoLXBhdHRlcm4gKilcbmFuZCBtYXRjaF9wYXR0ZXJuIHBhdHRlcm4gdmFsdWUgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcGF0dGVybjsgKFN5bWJvbCBcIl9cIildKSkgdGhlbiAoQm9vbCB0cnVlKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChwYXR0ZXJuKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhmaXJzdCAocGF0dGVybikpOyAoU3ltYm9sIFwiP1wiKV0pKSkpIHRoZW4gKGxldCBwcmVkID0gKGV2YWxfZXhwciAoKG50aCAocGF0dGVybikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkgaW4gKGNla19jYWxsIChwcmVkKSAoKExpc3QgW3ZhbHVlXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAocGF0dGVybikpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoZmlyc3QgKHBhdHRlcm4pKTsgKFN5bWJvbCBcInF1b3RlXCIpXSkpKSkgdGhlbiAocHJpbV9jYWxsIFwiPVwiIFt2YWx1ZTsgKG50aCAocGF0dGVybikgKChOdW1iZXIgMS4wKSkpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHBhdHRlcm4pKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChwYXR0ZXJuKSkpIHZhbHVlKSkgaW4gKEJvb2wgdHJ1ZSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHBhdHRlcm4pKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHN5bWJvbF9wICgoZmlyc3QgKHBhdHRlcm4pKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChkaWN0X3AgKHZhbHVlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGdldCAodmFsdWUpICgoU3RyaW5nIFwiX2FkdFwiKSkpKSkpKSkgdGhlbiAobGV0IGN0b3JfbmFtZSA9IChzeW1ib2xfbmFtZSAoKGZpcnN0IChwYXR0ZXJuKSkpKSBpbiBsZXQgZmllbGRfcGF0dGVybnMgPSAocmVzdCAocGF0dGVybikpIGluIGxldCBmaWVsZHMgPSAoZ2V0ICh2YWx1ZSkgKChTdHJpbmcgXCJfZmllbGRzXCIpKSkgaW4gKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGdldCAodmFsdWUpICgoU3RyaW5nIFwiX2N0b3JcIikpKTsgY3Rvcl9uYW1lXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoZmllbGRfcGF0dGVybnMpKTsgKGxlbiAoZmllbGRzKSldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4gcGFpciAtPiBzeF90cnV0aHkgKChtYXRjaF9wYXR0ZXJuICgoZmlyc3QgKHBhaXIpKSkgKChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInppcFwiIFtmaWVsZF9wYXR0ZXJuczsgZmllbGRzXSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoZGljdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGRpY3RfcCAodmFsdWUpKSkpIHRoZW4gKEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIGsgLT4gc3hfdHJ1dGh5ICgobWF0Y2hfcGF0dGVybiAoKGdldCAocGF0dGVybikgKGspKSkgKChnZXQgKHZhbHVlKSAoaykpKSAoZW52KSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwia2V5c1wiIFtwYXR0ZXJuXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKGxpc3RfcCAodmFsdWUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgW3BhdHRlcm47IChTeW1ib2wgXCImcmVzdFwiKV0pKSkpIHRoZW4gKGxldCByZXN0X2lkeCA9IChwcmltX2NhbGwgXCJpbmRleC1vZlwiIFtwYXR0ZXJuOyAoU3ltYm9sIFwiJnJlc3RcIildKSBpbiAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAodmFsdWUpKTsgcmVzdF9pZHhdKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4gcGFpciAtPiBzeF90cnV0aHkgKChtYXRjaF9wYXR0ZXJuICgoZmlyc3QgKHBhaXIpKSkgKChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInppcFwiIFsocHJpbV9jYWxsIFwic2xpY2VcIiBbcGF0dGVybjsgKE51bWJlciAwLjApOyByZXN0X2lkeF0pOyAocHJpbV9jYWxsIFwic2xpY2VcIiBbdmFsdWU7IChOdW1iZXIgMC4wKTsgcmVzdF9pZHhdKV0pKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgcmVzdF9uYW1lID0gKG50aCAocGF0dGVybikgKChwcmltX2NhbGwgXCIrXCIgW3Jlc3RfaWR4OyAoTnVtYmVyIDEuMCldKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoc3ltYm9sX25hbWUgKHJlc3RfbmFtZSkpKSAocHJpbV9jYWxsIFwic2xpY2VcIiBbdmFsdWU7IHJlc3RfaWR4XSkpKSBpbiAoQm9vbCB0cnVlKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsaXN0X3AgKHZhbHVlKSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocGF0dGVybikpOyAobGVuICh2YWx1ZSkpXSkpKSkpKSB0aGVuIChCb29sIGZhbHNlKSBlbHNlIChsZXQgcGFpcnMgPSAocHJpbV9jYWxsIFwiemlwXCIgW3BhdHRlcm47IHZhbHVlXSkgaW4gKEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIHBhaXIgLT4gc3hfdHJ1dGh5ICgobWF0Y2hfcGF0dGVybiAoKGZpcnN0IChwYWlyKSkpICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIChzeF90b19saXN0IHBhaXJzKSkpKSkgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFtwYXR0ZXJuOyB2YWx1ZV0pKSkpKSkpKSlcblxuKCogc3RlcC1zZi1tYXRjaCAqKVxuYW5kIHN0ZXBfc2ZfbWF0Y2ggYXJncyBlbnYga29udCA9XG4gIChsZXQgdmFsJyA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGNsYXVzZXMgPSAocmVzdCAoYXJncykpIGluIChsZXQgcmVzdWx0JyA9IChtYXRjaF9maW5kX2NsYXVzZSAodmFsJykgKGNsYXVzZXMpIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChyZXN1bHQnKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJtYXRjaDogbm8gY2xhdXNlIG1hdGNoZWQgXCIpOyAoaW5zcGVjdCAodmFsJykpXSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmFpc2VfZXZhbF9mcmFtZSAoZW52KSAoKEJvb2wgZmFsc2UpKSkpIChrb250KSkpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKG50aCAocmVzdWx0JykgKChOdW1iZXIgMS4wKSkpKSAoKGZpcnN0IChyZXN1bHQnKSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1oYW5kbGVyLWJpbmQgKilcbmFuZCBzdGVwX3NmX2hhbmRsZXJfYmluZCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBoYW5kbGVyX3NwZWNzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCBoYW5kbGVycyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIHNwZWMgLT4gKExpc3QgWyh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKHNwZWMpKSkgKGVudikpKSk7ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChzcGVjKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpXSkpIChzeF90b19saXN0IGhhbmRsZXJfc3BlY3MpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGJvZHkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChib2R5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9oYW5kbGVyX2ZyYW1lIChoYW5kbGVycykgKChyZXN0IChib2R5KSkpIChlbnYpKSkgKGtvbnQpKSkpKSlcblxuKCogc3RlcC1zZi1yZXN0YXJ0LWNhc2UgKilcbmFuZCBzdGVwX3NmX3Jlc3RhcnRfY2FzZSBhcmdzIGVudiBrb250ID1cbiAgKGxldCBib2R5ID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHJlc3RhcnRfc3BlY3MgPSAocmVzdCAoYXJncykpIGluIGxldCByZXN0YXJ0cyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIHNwZWMgLT4gKExpc3QgWyhpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAoKGZpcnN0IChzcGVjKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoc3BlYykpKSkgZWxzZSAoZmlyc3QgKHNwZWMpKSk7IChudGggKHNwZWMpICgoTnVtYmVyIDEuMCkpKTsgKG50aCAoc3BlYykgKChOdW1iZXIgMi4wKSkpXSkpIChzeF90b19saXN0IHJlc3RhcnRfc3BlY3MpKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVzdGFydF9mcmFtZSAocmVzdGFydHMpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLXNpZ25hbCAqKVxuYW5kIHN0ZXBfc2Zfc2lnbmFsIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IGNvbmRpdGlvbiA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGhhbmRsZXJfZm4gPSAoa29udF9maW5kX2hhbmRsZXIgKGtvbnQpIChjb25kaXRpb24pKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChoYW5kbGVyX2ZuKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5oYW5kbGVkIGNvbmRpdGlvbjogXCIpOyAoaW5zcGVjdCAoY29uZGl0aW9uKSldKSkpKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChoYW5kbGVyX2ZuKSAoKExpc3QgW2NvbmRpdGlvbl0pKSAoZW52KSAoKExpc3QgW2NvbmRpdGlvbl0pKSAoKGtvbnRfcHVzaCAoKG1ha2Vfc2lnbmFsX3JldHVybl9mcmFtZSAoZW52KSAoa29udCkpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLWludm9rZS1yZXN0YXJ0ICopXG5hbmQgc3RlcF9zZl9pbnZva2VfcmVzdGFydCBhcmdzIGVudiBrb250ID1cbiAgKGxldCByZXN0YXJ0X25hbWUgPSAobGV0IHJuID0gKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wICgoZmlyc3QgKGFyZ3MpKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBlbHNlICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkpIGluIChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocm4pKSkgdGhlbiAoc3ltYm9sX25hbWUgKHJuKSkgZWxzZSBybikpIGluIGxldCByZXN0YXJ0X2FyZyA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGVsc2UgTmlsKSBpbiBsZXQgZm91bmQgPSAoa29udF9maW5kX3Jlc3RhcnQgKGtvbnQpIChyZXN0YXJ0X25hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChmb3VuZCkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIk5vIHJlc3RhcnQgbmFtZWQ6IFwiKTsgKGluc3BlY3QgKHJlc3RhcnRfbmFtZSkpXSkpKSkpIGVsc2UgKGxldCBlbnRyeSA9IChmaXJzdCAoZm91bmQpKSBpbiBsZXQgcmVzdGFydF9mcmFtZSA9IChudGggKGZvdW5kKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IHJlc3Rfa29udCA9IChudGggKGZvdW5kKSAoKE51bWJlciAyLjApKSkgaW4gKGxldCBwYXJhbXMgPSAobnRoIChlbnRyeSkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKG50aCAoZW50cnkpICgoTnVtYmVyIDIuMCkpKSBpbiBsZXQgcmVzdGFydF9lbnYgPSAoZW52X2V4dGVuZCAoKGdldCAocmVzdGFydF9mcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHBhcmFtcykpKSkpKSkgdGhlbiAoZW52X2JpbmQgcmVzdGFydF9lbnYgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhcmFtcykpKSByZXN0YXJ0X2FyZykgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfc3RhdGUgKGJvZHkpIChyZXN0YXJ0X2VudikgKHJlc3Rfa29udCkpKSkpKSlcblxuKCogc3RlcC1zZi1pZiAqKVxuYW5kIHN0ZXBfc2ZfaWYgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9pZl9mcmFtZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobnRoIChhcmdzKSAoKE51bWJlciAyLjApKSkgZWxzZSBOaWwpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLXdoZW4gKilcbmFuZCBzdGVwX3NmX3doZW4gYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV93aGVuX2ZyYW1lICgocmVzdCAoYXJncykpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWJlZ2luICopXG5hbmQgc3RlcF9zZl9iZWdpbiBhcmdzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9iZWdpbl9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLWxldCAqKVxuYW5kIHN0ZXBfc2ZfbGV0IGFyZ3MgZW52IGtvbnQgPVxuICBsZXQgcGFpcnMgPSByZWYgTmlsIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGFyZ3MpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfbmFtZWRfbGV0IChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAobGV0IGJpbmRpbmdzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYmluZGluZ3MpKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYm9keSkgKGxvY2FsKSAoa29udCkpIGVsc2UgKGxldCBmaXJzdF9iaW5kaW5nID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoTnVtYmVyIDIuMCldKSkpIHRoZW4gKGZpcnN0IChiaW5kaW5ncykpIGVsc2UgKExpc3QgWyhmaXJzdCAoYmluZGluZ3MpKTsgKG50aCAoYmluZGluZ3MpICgoTnVtYmVyIDEuMCkpKV0pKSBpbiBsZXQgcmVzdF9iaW5kaW5ncyA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsobGVuICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKE51bWJlciAyLjApXSkpKSB0aGVuIChyZXN0IChiaW5kaW5ncykpIGVsc2UgKGxldCBwYWlycyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5mb2xkX2xlZnQgKGZ1biBfYWNjIGkgLT4gKHBhaXJzIDo9IHN4X2FwcGVuZF9iICFwYWlycyAoTGlzdCBbKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtpOyAoTnVtYmVyIDIuMCldKSkpOyAobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCJpbmNcIiBbKHByaW1fY2FsbCBcIipcIiBbaTsgKE51bWJlciAyLjApXSldKSkpXSk7IE5pbCkpIE5pbCAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAxLjApOyAocHJpbV9jYWxsIFwiL1wiIFsobGVuIChiaW5kaW5ncykpOyAoTnVtYmVyIDIuMCldKV0pKSkpIGluICFwYWlycykpKSBpbiAobGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoZmlyc3RfYmluZGluZykpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoZmlyc3RfYmluZGluZykpKSkgZWxzZSAoZmlyc3QgKGZpcnN0X2JpbmRpbmcpKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChmaXJzdF9iaW5kaW5nKSAoKE51bWJlciAxLjApKSkpIChsb2NhbCkgKChrb250X3B1c2ggKChtYWtlX2xldF9mcmFtZSAodm5hbWUpIChyZXN0X2JpbmRpbmdzKSAoYm9keSkgKGxvY2FsKSkpIChrb250KSkpKSkpKSkpXG5cbigqIHN0ZXAtc2YtZGVmaW5lICopXG5hbmQgc3RlcF9zZl9kZWZpbmUgYXJncyBlbnYga29udCA9XG4gICgqIERlc3VnYXIgc2hvcnRoYW5kOiAoZGVmaW5lIChuYW1lIHAgLi4uKSBib2R5KSAtPiAoZGVmaW5lIG5hbWUgKGZuIChwIC4uLikgYm9keSkpICopXG4gIGxldCBhcmdzID0gbWF0Y2ggZmlyc3QgYXJncyB3aXRoXG4gICAgfCBMaXN0IChmbl9uYW1lIDo6IHBhcmFtcykgLT5cbiAgICAgIGxldCBib2R5X3BhcnRzID0gc3hfdG9fbGlzdCAocmVzdCBhcmdzKSBpblxuICAgICAgbGV0IGxhbWJkYV9leHByID0gTGlzdCAoU3ltYm9sIFwiZm5cIiA6OiBMaXN0IHBhcmFtcyA6OiBib2R5X3BhcnRzKSBpblxuICAgICAgTGlzdCBbZm5fbmFtZTsgbGFtYmRhX2V4cHJdXG4gICAgfCBfIC0+IGFyZ3NcbiAgaW5cbiAgKGxldCBuYW1lX3N5bSA9IChmaXJzdCAoYXJncykpIGluIGxldCBoYXNfZWZmZWN0cyA9IChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgNC4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImVmZmVjdHNcIildKSkpIGluIGxldCB2YWxfaWR4ID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciA0LjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiZWZmZWN0c1wiKV0pKSkpIHRoZW4gKE51bWJlciAzLjApIGVsc2UgKE51bWJlciAxLjApKSBpbiBsZXQgZWZmZWN0X2xpc3QgPSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDQuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJlZmZlY3RzXCIpXSkpKSkgdGhlbiAobnRoIChhcmdzKSAoKE51bWJlciAyLjApKSkgZWxzZSBOaWwpIGluIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoYXJncykgKHZhbF9pZHgpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2RlZmluZV9mcmFtZSAoKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSAoZW52KSAoaGFzX2VmZmVjdHMpIChlZmZlY3RfbGlzdCkpKSAoa29udCkpKSkpXG5cbigqIHN0ZXAtc2Ytc2V0ISAqKVxuYW5kIHN0ZXBfc2Zfc2V0X2IgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2Vfc2V0X2ZyYW1lICgoc3ltYm9sX25hbWUgKChmaXJzdCAoYXJncykpKSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtc2YtYW5kICopXG5hbmQgc3RlcF9zZl9hbmQgYXJncyBlbnYga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCB0cnVlKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9hbmRfZnJhbWUgKChyZXN0IChhcmdzKSkpIChlbnYpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLW9yICopXG5hbmQgc3RlcF9zZl9vciBhcmdzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9vcl9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSkpXG5cbigqIHN0ZXAtc2YtY29uZCAqKVxuYW5kIHN0ZXBfc2ZfY29uZCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBzY2hlbWVfcCA9IChjb25kX3NjaGVtZV9wIChhcmdzKSkgaW4gKGlmIHN4X3RydXRoeSAoc2NoZW1lX3ApIHRoZW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgY2xhdXNlID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHRlc3QgPSAoZmlyc3QgKGNsYXVzZSkpIGluIChpZiBzeF90cnV0aHkgKChpc19lbHNlX2NsYXVzZSAodGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoY2xhdXNlKSAoKE51bWJlciAxLjApKSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKHRlc3QpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9jb25kX2ZyYW1lIChhcmdzKSAoZW52KSAoKEJvb2wgdHJ1ZSkpKSkgKGtvbnQpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgdGVzdCA9IChmaXJzdCAoYXJncykpIGluIChpZiBzeF90cnV0aHkgKChpc19lbHNlX2NsYXVzZSAodGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICh0ZXN0KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY29uZF9mcmFtZSAoYXJncykgKGVudikgKChCb29sIGZhbHNlKSkpKSAoa29udCkpKSkpKSkpKVxuXG4oKiBzdGVwLXNmLXRocmVhZC1maXJzdCAqKVxuYW5kIHN0ZXBfc2ZfdGhyZWFkX2ZpcnN0IGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lICgocmVzdCAoYXJncykpKSAoZW52KSAoKFN0cmluZyBcImZpcnN0XCIpKSAoTmlsKSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLXRocmVhZC1sYXN0ICopXG5hbmQgc3RlcF9zZl90aHJlYWRfbGFzdCBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3RocmVhZF9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikgKChTdHJpbmcgXCJsYXN0XCIpKSAoTmlsKSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLXRocmVhZC1hcyAqKVxuYW5kIHN0ZXBfc2ZfdGhyZWFkX2FzIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IGluaXQgPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgbmFtZSA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgZm9ybXMgPSAocmVzdCAoKHJlc3QgKGFyZ3MpKSkpIGluIChtYWtlX2Nla19zdGF0ZSAoaW5pdCkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3RocmVhZF9mcmFtZSAoZm9ybXMpIChlbnYpICgoU3RyaW5nIFwiYXNcIikpIChuYW1lKSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1sYW1iZGEgKilcbmFuZCBzdGVwX3NmX2xhbWJkYSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3ZhbHVlICgoc2ZfbGFtYmRhIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSlcblxuKCogc3RlcC1zZi1zY29wZSAqKVxuYW5kIHN0ZXBfc2Zfc2NvcGUgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHJlc3RfYXJncyA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDEuMCldKSBpbiBsZXQgdmFsJyA9IHJlZiAoTmlsKSBpbiBsZXQgYm9keSA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocmVzdF9hcmdzKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKHJlc3RfYXJncykpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZXN0X2FyZ3MpKSkpOyAoU3RyaW5nIFwidmFsdWVcIildKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKCh2YWwnIDo9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChyZXN0X2FyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSk7IE5pbCkpIGluIChib2R5IDo9IChwcmltX2NhbGwgXCJzbGljZVwiIFtyZXN0X2FyZ3M7IChOdW1iZXIgMi4wKV0pOyBOaWwpKSBlbHNlIChib2R5IDo9IHJlc3RfYXJnczsgTmlsKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wICghYm9keSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKCFib2R5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9zY29wZV9hY2NfZnJhbWUgKG5hbWUpICghdmFsJykgKChyZXN0ICghYm9keSkpKSAoZW52KSkpIChrb250KSkpKSkpKVxuXG4oKiBzdGVwLXNmLXByb3ZpZGUgKilcbmFuZCBzdGVwX3NmX3Byb3ZpZGUgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgYm9keSA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAobmFtZSkgKHZhbCcpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGJvZHkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcG9wIChuYW1lKSkpIGluIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChib2R5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9wcm92aWRlX2ZyYW1lIChuYW1lKSAodmFsJykgKChyZXN0IChib2R5KSkpIChlbnYpKSkgKGtvbnQpKSkpKSkpXG5cbigqIHN0ZXAtc2YtY29udGV4dCAqKVxuYW5kIHN0ZXBfc2ZfY29udGV4dCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgZGVmYXVsdF92YWwgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBlbHNlIE5pbCkgaW4gbGV0IGZyYW1lID0gKGtvbnRfZmluZF9wcm92aWRlIChrb250KSAobmFtZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKCFfYmluZF90cmFja2luZ19yZWYpIHRoZW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgWyFfYmluZF90cmFja2luZ19yZWY7IG5hbWVdKSkpKSkpIHRoZW4gKF9iaW5kX3RyYWNraW5nX3JlZiA6PSBzeF9hcHBlbmRfYiAhX2JpbmRfdHJhY2tpbmdfcmVmIG5hbWU7IE5pbCkgZWxzZSBOaWwpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgobGV0IHN2ID0gKHNjb3BlX3BlZWsgKG5hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChzdikpKSB0aGVuIChpZiBzeF90cnV0aHkgKGZyYW1lKSB0aGVuIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInZhbHVlXCIpKSkgZWxzZSBkZWZhdWx0X3ZhbCkgZWxzZSBzdikpKSAoZW52KSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1wZWVrICopXG5hbmQgc3RlcF9zZl9wZWVrIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IG5hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCBkZWZhdWx0X3ZhbCA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGVsc2UgTmlsKSBpbiBsZXQgZnJhbWUgPSAoa29udF9maW5kX3Byb3ZpZGUgKGtvbnQpIChuYW1lKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoaWYgc3hfdHJ1dGh5IChmcmFtZSkgdGhlbiAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKChTdHJpbmcgXCJwZWVrXCIpKSkpIHRoZW4gKHN4X2FwcGx5IChlbnZfZ2V0IChlbnYpICgoU3RyaW5nIFwicGVla1wiKSkpIChMaXN0IFtuYW1lOyBkZWZhdWx0X3ZhbF0pKSBlbHNlIGRlZmF1bHRfdmFsKSkpIChlbnYpIChrb250KSkpXG5cbigqIHN0ZXAtc2YtcHJvdmlkZSEgKilcbmFuZCBzdGVwX3NmX3Byb3ZpZGVfYiBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3Byb3ZpZGVfc2V0X2ZyYW1lIChuYW1lKSAoZW52KSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1lbWl0ICopXG5hbmQgc3RlcF9zZl9lbWl0IGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IG5hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCB2YWwnID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IGZyYW1lID0gKGtvbnRfZmluZF9zY29wZV9hY2MgKGtvbnQpIChuYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoZnJhbWUpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgZnJhbWUgKFN0cmluZyBcImVtaXR0ZWRcIikgKHByaW1fY2FsbCBcImFwcGVuZFwiIFsoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbWl0dGVkXCIpKSk7IChMaXN0IFt2YWwnXSldKSkpIGluIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChlbnZfaGFzIChlbnYpICgoU3RyaW5nIFwic2NvcGUtZW1pdCFcIikpKSkgdGhlbiAoc3hfYXBwbHkgKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCJzY29wZS1lbWl0IVwiKSkpIChMaXN0IFtuYW1lOyB2YWwnXSkpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1lbWl0dGVkICopXG5hbmQgc3RlcF9zZl9lbWl0dGVkIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IG5hbWUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCBmcmFtZSA9IChrb250X2ZpbmRfc2NvcGVfYWNjIChrb250KSAobmFtZSkpIGluIChtYWtlX2Nla192YWx1ZSAoKGlmIHN4X3RydXRoeSAoZnJhbWUpIHRoZW4gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW1pdHRlZFwiKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKChTdHJpbmcgXCJlbWl0dGVkXCIpKSkpIHRoZW4gKHN4X2FwcGx5IChlbnZfZ2V0IChlbnYpICgoU3RyaW5nIFwiZW1pdHRlZFwiKSkpIChMaXN0IFtuYW1lXSkpIGVsc2UgKExpc3QgW10pKSkpIChlbnYpIChrb250KSkpXG5cbigqIHN0ZXAtc2YtcmVzZXQgKilcbmFuZCBzdGVwX3NmX3Jlc2V0IGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVzZXRfZnJhbWUgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1zaGlmdCAqKVxuYW5kIHN0ZXBfc2Zfc2hpZnQgYXJncyBlbnYga29udCA9XG4gIChsZXQga19uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGluIGxldCBib2R5ID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBjYXB0dXJlZF9yZXN1bHQgPSAoa29udF9jYXB0dXJlX3RvX3Jlc2V0IChrb250KSkgaW4gbGV0IGNhcHR1cmVkID0gKGZpcnN0IChjYXB0dXJlZF9yZXN1bHQpKSBpbiBsZXQgcmVzdF9rb250ID0gKG50aCAoY2FwdHVyZWRfcmVzdWx0KSAoKE51bWJlciAxLjApKSkgaW4gKGxldCBrID0gKG1ha2VfY2VrX2NvbnRpbnVhdGlvbiAoY2FwdHVyZWQpIChyZXN0X2tvbnQpKSBpbiAobGV0IHNoaWZ0X2VudiA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgc2hpZnRfZW52IChzeF90b19zdHJpbmcga19uYW1lKSBrKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoc2hpZnRfZW52KSAocmVzdF9rb250KSkpKSkpXG5cbigqIHN0ZXAtc2YtZGVyZWYgKilcbmFuZCBzdGVwX3NmX2RlcmVmIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfZGVyZWZfZnJhbWUgKGVudikpKSAoa29udCkpKSlcblxuKCogY2VrLWNhbGwgKilcbmFuZCBjZWtfY2FsbCBmIGFyZ3MgPVxuICAobGV0IGEgPSAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChhcmdzKSkpIHRoZW4gKExpc3QgW10pIGVsc2UgYXJncykgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoZikpKSB0aGVuIE5pbCBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKGlzX2xhbWJkYSAoZikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoaXNfY2FsbGFibGUgKGYpKSkpIHRoZW4gKGNla19ydW4gKChjb250aW51ZV93aXRoX2NhbGwgKGYpIChhKSAoKG1ha2VfZW52ICgpKSkgKGEpICgoTGlzdCBbXSkpKSkpIGVsc2UgTmlsKSkpXG5cbigqIHJlYWN0aXZlLXNoaWZ0LWRlcmVmICopXG5hbmQgcmVhY3RpdmVfc2hpZnRfZGVyZWYgc2lnJyBlbnYga29udCA9XG4gIChsZXQgc2Nhbl9yZXN1bHQgPSAoa29udF9jYXB0dXJlX3RvX3JlYWN0aXZlX3Jlc2V0IChrb250KSkgaW4gbGV0IGNhcHR1cmVkX2ZyYW1lcyA9IChmaXJzdCAoc2Nhbl9yZXN1bHQpKSBpbiBsZXQgcmVzZXRfZnJhbWUgPSAobnRoIChzY2FuX3Jlc3VsdCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCByZW1haW5pbmdfa29udCA9IChudGggKHNjYW5fcmVzdWx0KSAoKE51bWJlciAyLjApKSkgaW4gbGV0IHVwZGF0ZV9mbiA9IChnZXQgKHJlc2V0X2ZyYW1lKSAoKFN0cmluZyBcInVwZGF0ZS1mblwiKSkpIGluIChsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0IHN1YnNjcmliZXIgPSAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiBsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiBOaWwgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGQgLT4gaWdub3JlICgoY2VrX2NhbGwgKGQpIChOaWwpKSkpIChzeF90b19saXN0ICFzdWJfZGlzcG9zZXJzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN1Yl9kaXNwb3NlcnMgOj0gKExpc3QgW10pOyBOaWwpKSBpbiAobGV0IG5ld19yZXNldCA9IChtYWtlX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lIChlbnYpICh1cGRhdGVfZm4pICgoQm9vbCBmYWxzZSkpKSBpbiBsZXQgbmV3X2tvbnQgPSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW2NhcHR1cmVkX2ZyYW1lczsgKExpc3QgW25ld19yZXNldF0pOyByZW1haW5pbmdfa29udF0pIGluICh3aXRoX2lzbGFuZF9zY29wZSAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2RdIC0+IChmdW4gZCAtPiBsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiBOaWwgaW4gKHN1Yl9kaXNwb3NlcnMgOj0gc3hfYXBwZW5kX2IgIXN1Yl9kaXNwb3NlcnMgZDsgTmlsKSkgZCB8IF8gLT4gTmlsKSkpICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiAoY2VrX3J1biAoKG1ha2VfY2VrX3ZhbHVlICgoc2lnbmFsX3ZhbHVlIChzaWcnKSkpIChlbnYpIChuZXdfa29udCkpKSkpICgpKSkpKSkpKSkgKCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2lnbmFsX2FkZF9zdWJfYiAoc2lnJykgKHN1YnNjcmliZXIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHJlZ2lzdGVyX2luX3Njb3BlICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiAobGV0ICgpID0gaWdub3JlICgoc2lnbmFsX3JlbW92ZV9zdWJfYiAoc2lnJykgKHN1YnNjcmliZXIpKSkgaW4gKExpc3QuaXRlciAoZnVuIGQgLT4gaWdub3JlICgoY2VrX2NhbGwgKGQpIChOaWwpKSkpIChzeF90b19saXN0ICFzdWJfZGlzcG9zZXJzKTsgTmlsKSkpICgpKSkpKSkgaW4gKGxldCBpbml0aWFsX2tvbnQgPSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW2NhcHR1cmVkX2ZyYW1lczsgKExpc3QgW3Jlc2V0X2ZyYW1lXSk7IHJlbWFpbmluZ19rb250XSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoc2lnbmFsX3ZhbHVlIChzaWcnKSkpIChlbnYpIChpbml0aWFsX2tvbnQpKSkpKSkpKVxuXG4oKiBzdGVwLWV2YWwtY2FsbCAqKVxuYW5kIHN0ZXBfZXZhbF9jYWxsIGhlYWQgYXJncyBlbnYga29udCA9XG4gIChsZXQgaG5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChoZWFkKSkgZWxzZSBOaWwpIGluIChtYWtlX2Nla19zdGF0ZSAoaGVhZCkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2FyZ19mcmFtZSAoTmlsKSAoKExpc3QgW10pKSAoYXJncykgKGVudikgKGFyZ3MpIChobmFtZSkpKSAoa29udCkpKSkpXG5cbigqIGhvLWZvcm0tbmFtZT8gKilcbmFuZCBob19mb3JtX25hbWVfcCBuYW1lID1cbiAgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibWFwXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZpbHRlclwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJyZWR1Y2VcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwic29tZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJldmVyeT9cIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZvci1lYWNoXCIpXSkpKSkpKSlcblxuKCogaG8tZm4/ICopXG5hbmQgaG9fZm5fcCB2ID1cbiAgKGxldCBfb3IgPSAoaXNfY2FsbGFibGUgKHYpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGlzX2xhbWJkYSAodikpKVxuXG4oKiBoby1zd2FwLWFyZ3MgKilcbmFuZCBob19zd2FwX2FyZ3MgaG9fdHlwZSBldmFsZWQgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtob190eXBlOyAoU3RyaW5nIFwicmVkdWNlXCIpXSkpIHRoZW4gKGxldCBhID0gKGZpcnN0IChldmFsZWQpKSBpbiBsZXQgYiA9IChudGggKGV2YWxlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGhvX2ZuX3AgKGEpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGhvX2ZuX3AgKGIpKSkpIHRoZW4gKExpc3QgW2I7IChudGggKGV2YWxlZCkgKChOdW1iZXIgMi4wKSkpOyBhXSkgZWxzZSBldmFsZWQpKSBlbHNlIChsZXQgYSA9IChmaXJzdCAoZXZhbGVkKSkgaW4gbGV0IGIgPSAobnRoIChldmFsZWQpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChob19mbl9wIChhKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChob19mbl9wIChiKSkpKSB0aGVuIChMaXN0IFtiOyBhXSkgZWxzZSBldmFsZWQpKSlcblxuKCogaG8tc2V0dXAtZGlzcGF0Y2ggKilcbmFuZCBob19zZXR1cF9kaXNwYXRjaCBob190eXBlIGV2YWxlZCBlbnYga29udCA9XG4gIChsZXQgb3JkZXJlZCA9IChob19zd2FwX2FyZ3MgKGhvX3R5cGUpIChldmFsZWQpKSBpbiAobGV0IGYgPSAoZmlyc3QgKG9yZGVyZWQpKSBpbiAobGV0IF9tYXRjaF92YWwgPSBob190eXBlIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJtYXBcIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChvcmRlcmVkKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuIChsZXQgY29sbHMgPSAocmVzdCAob3JkZXJlZCkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChMaXN0LmV4aXN0cyAoZnVuIGMgLT4gc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYykpKSkgKHN4X3RvX2xpc3QgY29sbHMpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAobGV0IGhlYWRzID0gKExpc3QgKExpc3QubWFwIChmdW4gYyAtPiAoZmlyc3QgKGMpKSkgKHN4X3RvX2xpc3QgY29sbHMpKSkgaW4gbGV0IHRhaWxzID0gKExpc3QgKExpc3QubWFwIChmdW4gYyAtPiAocmVzdCAoYykpKSAoc3hfdG9fbGlzdCBjb2xscykpKSBpbiAoY29udGludWVfd2l0aF9jYWxsIChmKSAoaGVhZHMpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9tdWx0aV9tYXBfZnJhbWUgKGYpICh0YWlscykgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSkpKSkgZWxzZSAobGV0IGNvbGwgPSBzZXFfdG9fbGlzdCAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChMaXN0IFtdKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX21hcF9mcmFtZSAoZikgKChyZXN0IChjb2xsKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkpIHRoZW4gKGxldCBjb2xsID0gc2VxX3RvX2xpc3QgKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhOdW1iZXIgMC4wKTsgKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX21hcF9pbmRleGVkX2ZyYW1lIChmKSAoKHJlc3QgKGNvbGwpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAobGV0IGNvbGwgPSBzZXFfdG9fbGlzdCAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChMaXN0IFtdKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2ZpbHRlcl9mcmFtZSAoZikgKChyZXN0IChjb2xsKSkpICgoTGlzdCBbXSkpICgoZmlyc3QgKGNvbGwpKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAobGV0IGluaXQgPSAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGNvbGwgPSBzZXFfdG9fbGlzdCAobnRoIChvcmRlcmVkKSAoKE51bWJlciAyLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKGluaXQpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgW2luaXQ7IChmaXJzdCAoY29sbCkpXSkpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9yZWR1Y2VfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNvbWVcIildKSkgdGhlbiAobGV0IGNvbGwgPSBzZXFfdG9fbGlzdCAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX3NvbWVfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImV2ZXJ5XCIpXSkpIHRoZW4gKGxldCBjb2xsID0gc2VxX3RvX2xpc3QgKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCB0cnVlKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2V2ZXJ5X2ZyYW1lIChmKSAoKHJlc3QgKGNvbGwpKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJmb3ItZWFjaFwiKV0pKSB0aGVuIChsZXQgY29sbCA9IHNlcV90b19saXN0IChudGggKG9yZGVyZWQpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoY29sbCkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFsoZmlyc3QgKGNvbGwpKV0pKSAoZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfZm9yX2VhY2hfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5rbm93biBITyB0eXBlOiBcIik7IGhvX3R5cGVdKSkpKSkpKSkpKSkpKSkpXG5cbigqIHN0ZXAtaG8tbWFwICopXG5hbmQgc3RlcF9ob19tYXAgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcIm1hcFwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tbWFwLWluZGV4ZWQgKilcbmFuZCBzdGVwX2hvX21hcF9pbmRleGVkIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJtYXAtaW5kZXhlZFwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tZmlsdGVyICopXG5hbmQgc3RlcF9ob19maWx0ZXIgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcImZpbHRlclwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tcmVkdWNlICopXG5hbmQgc3RlcF9ob19yZWR1Y2UgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcInJlZHVjZVwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tc29tZSAqKVxuYW5kIHN0ZXBfaG9fc29tZSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwic29tZVwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tZXZlcnkgKilcbmFuZCBzdGVwX2hvX2V2ZXJ5IGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJldmVyeVwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtaG8tZm9yLWVhY2ggKilcbmFuZCBzdGVwX2hvX2Zvcl9lYWNoIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJmb3ItZWFjaFwiKSkgKChyZXN0IChhcmdzKSkpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpXG5cbigqIHN0ZXAtY29udGludWUgKilcbmFuZCBzdGVwX2NvbnRpbnVlIHN0YXRlID1cbiAgKGxldCB2YWx1ZSA9IChjZWtfdmFsdWUgKHN0YXRlKSkgaW4gbGV0IGVudiA9IChjZWtfZW52IChzdGF0ZSkpIGluIGxldCBrb250ID0gKGNla19rb250IChzdGF0ZSkpIGluIChpZiBzeF90cnV0aHkgKChrb250X2VtcHR5X3AgKGtvbnQpKSkgdGhlbiBzdGF0ZSBlbHNlIChsZXQgZnJhbWUgPSAoa29udF90b3AgKGtvbnQpKSBpbiBsZXQgcmVzdF9rID0gKGtvbnRfcG9wIChrb250KSkgaW4gbGV0IGZ0ID0gKGZyYW1lX3R5cGUgKGZyYW1lKSkgaW4gKGxldCBfbWF0Y2hfdmFsID0gZnQgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImlmXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gdmFsdWUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsICh2YWx1ZSkpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ0aGVuXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWxzZVwiKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWxzZVwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpIChyZXN0X2spKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIndoZW5cIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSB2YWx1ZSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19uaWwgKHZhbHVlKSkpKSkpKSkgdGhlbiAobGV0IGJvZHkgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJib2R5XCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYm9keSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoYm9keSkpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYm9keSkpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGJvZHkpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9iZWdpbl9mcmFtZSAoKHJlc3QgKGJvZHkpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKHJlc3RfaykpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJiZWdpblwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHJlbWFpbmluZykpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYmVnaW5fZnJhbWUgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwibGV0XCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgYm9keSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImJvZHlcIikpKSBpbiBsZXQgbG9jYWwgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYm9keSkgKGxvY2FsKSAocmVzdF9rKSkgZWxzZSAobGV0IG5leHRfYmluZGluZyA9IChmaXJzdCAocmVtYWluaW5nKSkgaW4gbGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAobmV4dF9iaW5kaW5nKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChuZXh0X2JpbmRpbmcpKSkpIGVsc2UgKGZpcnN0IChuZXh0X2JpbmRpbmcpKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChuZXh0X2JpbmRpbmcpICgoTnVtYmVyIDEuMCkpKSkgKGxvY2FsKSAoKGtvbnRfcHVzaCAoKG1ha2VfbGV0X2ZyYW1lICh2bmFtZSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGJvZHkpIChsb2NhbCkpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZGVmaW5lXCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gbGV0IGhhc19lZmZlY3RzID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiaGFzLWVmZmVjdHNcIikpKSBpbiBsZXQgZWZmZWN0X2xpc3QgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlZmZlY3QtbGlzdFwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChpc19sYW1iZGEgKHZhbHVlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGlzX25pbCAoKGxhbWJkYV9uYW1lICh2YWx1ZSkpKSkpKSB0aGVuIChzZXRfbGFtYmRhX25hbWUgdmFsdWUgKHN4X3RvX3N0cmluZyBuYW1lKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZmVudiAoc3hfdG9fc3RyaW5nIG5hbWUpIHZhbHVlKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoaGFzX2VmZmVjdHMpIHRoZW4gKGxldCBlZmZlY3RfbmFtZXMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBlIC0+IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChlKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKGUpKSBlbHNlIGUpKSAoc3hfdG9fbGlzdCBlZmZlY3RfbGlzdCkpKSBpbiBsZXQgZWZmZWN0X2FubnMgPSAoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZmVudikgKChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkpKSB0aGVuIChlbnZfZ2V0IChmZW52KSAoKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSkgZWxzZSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBlZmZlY3RfYW5ucyBuYW1lIGVmZmVjdF9uYW1lcykpIGluIChlbnZfYmluZCBmZW52IChzeF90b19zdHJpbmcgKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSBlZmZlY3RfYW5ucykpKSBlbHNlIE5pbCkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImRlZmluZS1mb3JlaWduXCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGlzX2xhbWJkYSAodmFsdWUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoaXNfbmlsICgobGFtYmRhX25hbWUgKHZhbHVlKSkpKSkpIHRoZW4gKHNldF9sYW1iZGFfbmFtZSB2YWx1ZSAoc3hfdG9fc3RyaW5nIG5hbWUpKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBmZW52IChzeF90b19zdHJpbmcgbmFtZSkgdmFsdWUpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNldFwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfc2V0IGZlbnYgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImFuZFwiKV0pKSB0aGVuIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAodmFsdWUpKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocmVtYWluaW5nKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIHJlc3RfayBlbHNlIChrb250X3B1c2ggKChtYWtlX2FuZF9mcmFtZSAoKHJlc3QgKHJlbWFpbmluZykpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpKSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm9yXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAodmFsdWUpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGVudikgKHJlc3RfaykpIGVsc2UgKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCBmYWxzZSkpIChlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocmVtYWluaW5nKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIHJlc3RfayBlbHNlIChrb250X3B1c2ggKChtYWtlX29yX2ZyYW1lICgocmVzdCAocmVtYWluaW5nKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY29uZFwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiBsZXQgc2NoZW1lX3AgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJzY2hlbWVcIikpKSBpbiAoaWYgc3hfdHJ1dGh5IChzY2hlbWVfcCkgdGhlbiAoaWYgc3hfdHJ1dGh5ICh2YWx1ZSkgdGhlbiAobGV0IGNsYXVzZSA9IChmaXJzdCAocmVtYWluaW5nKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoY2xhdXNlKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChjbGF1c2UpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICgobnRoIChjbGF1c2UpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiPT5cIildKSkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAoY2xhdXNlKSAoKE51bWJlciAyLjApKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY29uZF9hcnJvd19mcmFtZSAodmFsdWUpIChmZW52KSkpIChyZXN0X2spKSkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgobnRoIChjbGF1c2UpICgoTnVtYmVyIDEuMCkpKSkgKGZlbnYpIChyZXN0X2spKSkpIGVsc2UgKGxldCBuZXh0X2NsYXVzZXMgPSAocmVzdCAocmVtYWluaW5nKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKG5leHRfY2xhdXNlcykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCBuZXh0X2NsYXVzZSA9IChmaXJzdCAobmV4dF9jbGF1c2VzKSkgaW4gbGV0IG5leHRfdGVzdCA9IChmaXJzdCAobmV4dF9jbGF1c2UpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKG5leHRfdGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAobmV4dF9jbGF1c2UpICgoTnVtYmVyIDEuMCkpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAobmV4dF90ZXN0KSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2NvbmRfZnJhbWUgKG5leHRfY2xhdXNlcykgKGZlbnYpICgoQm9vbCB0cnVlKSkpKSAocmVzdF9rKSkpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAodmFsdWUpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChyZW1haW5pbmcpICgoTnVtYmVyIDEuMCkpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgbmV4dCA9IChwcmltX2NhbGwgXCJzbGljZVwiIFtyZW1haW5pbmc7IChOdW1iZXIgMi4wKTsgKGxlbiAocmVtYWluaW5nKSldKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFsobGVuIChuZXh0KSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCBuZXh0X3Rlc3QgPSAoZmlyc3QgKG5leHQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKG5leHRfdGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAobmV4dCkgKChOdW1iZXIgMS4wKSkpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlIChuZXh0X3Rlc3QpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY29uZF9mcmFtZSAobmV4dCkgKGZlbnYpICgoQm9vbCBmYWxzZSkpKSkgKHJlc3RfaykpKSkpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImNhc2VcIildKSkgdGhlbiAobGV0IG1hdGNoX3ZhbCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm1hdGNoLXZhbFwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKG1hdGNoX3ZhbCkpKSB0aGVuIChzZl9jYXNlX3N0ZXBfbG9vcCAodmFsdWUpIChyZW1haW5pbmcpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoc2ZfY2FzZV9zdGVwX2xvb3AgKG1hdGNoX3ZhbCkgKHJlbWFpbmluZykgKGZlbnYpIChyZXN0X2spKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInRocmVhZFwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiBsZXQgbW9kZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImV4dHJhXCIpKSkgaW4gbGV0IGJpbmRfbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgZm9ybSA9IChmaXJzdCAocmVtYWluaW5nKSkgaW4gbGV0IHJlc3RfZm9ybXMgPSAocmVzdCAocmVtYWluaW5nKSkgaW4gbGV0IG5ld19rb250ID0gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKChyZXN0IChyZW1haW5pbmcpKSkpKSB0aGVuIHJlc3RfayBlbHNlIChrb250X3B1c2ggKChtYWtlX3RocmVhZF9mcmFtZSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikgKG1vZGUpIChiaW5kX25hbWUpKSkgKHJlc3RfaykpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFttb2RlOyAoU3RyaW5nIFwiYXNcIildKSkgdGhlbiAobGV0IG5ld19lbnYgPSAoZW52X2V4dGVuZCAoZmVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBuZXdfZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChiaW5kX25hbWUpKSkgdmFsdWUpKSBpbiAobWFrZV9jZWtfc3RhdGUgKGZvcm0pIChuZXdfZW52KSAobmV3X2tvbnQpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGZvcm0pKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChmb3JtKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGZvcm0pKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGhvX2Zvcm1fbmFtZV9wICgoc3ltYm9sX25hbWUgKChmaXJzdCAoZm9ybSkpKSkpKSkpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChjb25zICgoZmlyc3QgKGZvcm0pKSkgKChjb25zICgoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyB2YWx1ZV0pKSAoKHJlc3QgKGZvcm0pKSkpKSkpIChmZW52KSAobmV3X2tvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW21vZGU7IChTdHJpbmcgXCJsYXN0XCIpXSkpIHRoZW4gKGxldCByZXN1bHQnID0gKHRocmVhZF9pbnNlcnRfYXJnX2xhc3QgKGZvcm0pICh2YWx1ZSkgKGZlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVzdF9mb3JtcykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAocmVzdWx0JykgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla192YWx1ZSAocmVzdWx0JykgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV90aHJlYWRfZnJhbWUgKHJlc3RfZm9ybXMpIChmZW52KSAobW9kZSkgKGJpbmRfbmFtZSkpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGxldCByZXN1bHQnID0gKHRocmVhZF9pbnNlcnRfYXJnIChmb3JtKSAodmFsdWUpIChmZW52KSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlc3RfZm9ybXMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lIChyZXN0X2Zvcm1zKSAoZmVudikgKG1vZGUpIChiaW5kX25hbWUpKSkgKHJlc3RfaykpKSkpKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJhcmdcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IGV2YWxlZCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImV2YWxlZFwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIGxldCByYXdfYXJncyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJhdy1hcmdzXCIpKSkgaW4gbGV0IGhuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiaGVhZC1uYW1lXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoZikpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9ICFfc3RyaWN0X3JlZiBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSBobmFtZSkpIHRoZW4gKHN0cmljdF9jaGVja19hcmdzIChobmFtZSkgKChMaXN0IFtdKSkpIGVsc2UgTmlsKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChjb250aW51ZV93aXRoX2NhbGwgKHZhbHVlKSAoKExpc3QgW10pKSAoZmVudikgKHJhd19hcmdzKSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYXJnX2ZyYW1lICh2YWx1ZSkgKChMaXN0IFtdKSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpIChyYXdfYXJncykgKGhuYW1lKSkpIChyZXN0X2spKSkpKSkgZWxzZSAobGV0IG5ld19ldmFsZWQgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2V2YWxlZDsgKExpc3QgW3ZhbHVlXSldKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gIV9zdHJpY3RfcmVmIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIGhuYW1lKSkgdGhlbiAoc3RyaWN0X2NoZWNrX2FyZ3MgKGhuYW1lKSAobmV3X2V2YWxlZCkpIGVsc2UgTmlsKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKG5ld19ldmFsZWQpIChmZW52KSAocmF3X2FyZ3MpIChyZXN0X2spKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYXJnX2ZyYW1lIChmKSAobmV3X2V2YWxlZCkgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpIChyYXdfYXJncykgKGhuYW1lKSkpIChyZXN0X2spKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkaWN0XCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgcmVzdWx0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlc3VsdHNcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgbGFzdF9yZXN1bHQgPSAobGFzdCAocmVzdWx0cykpIGluIGxldCBjb21wbGV0ZWQgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyhwcmltX2NhbGwgXCJzbGljZVwiIFtyZXN1bHRzOyAoTnVtYmVyIDAuMCk7IChwcmltX2NhbGwgXCJkZWNcIiBbKGxlbiAocmVzdWx0cykpXSldKTsgKExpc3QgWyhMaXN0IFsoZmlyc3QgKGxhc3RfcmVzdWx0KSk7IHZhbHVlXSldKV0pIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobGV0IGQgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgZCAoZmlyc3QgKHBhaXIpKSAobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpKSkgKHN4X3RvX2xpc3QgY29tcGxldGVkKTsgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChkKSAoZmVudikgKHJlc3RfaykpKSkgZWxzZSAobGV0IG5leHRfZW50cnkgPSAoZmlyc3QgKHJlbWFpbmluZykpIGluIChtYWtlX2Nla19zdGF0ZSAoKG50aCAobmV4dF9lbnRyeSkgKChOdW1iZXIgMS4wKSkpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2RpY3RfZnJhbWUgKChyZXN0IChyZW1haW5pbmcpKSkgKChwcmltX2NhbGwgXCJhcHBlbmRcIiBbY29tcGxldGVkOyAoTGlzdCBbKExpc3QgWyhmaXJzdCAobmV4dF9lbnRyeSkpXSldKV0pKSAoZmVudikpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaG8tc2V0dXBcIildKSkgdGhlbiAobGV0IGhvX3R5cGUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJoby10eXBlXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBldmFsZWQgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyhnZXQgKGZyYW1lKSAoKFN0cmluZyBcImV2YWxlZFwiKSkpOyAoTGlzdCBbdmFsdWVdKV0pIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChob19zZXR1cF9kaXNwYXRjaCAoaG9fdHlwZSkgKGV2YWxlZCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoaG9fdHlwZSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGV2YWxlZCkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyZXNldFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJkZXJlZlwiKV0pKSB0aGVuIChsZXQgdmFsJyA9IHZhbHVlIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfc2lnbmFsICh2YWwnKSkpKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsJykgKGZlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChoYXNfcmVhY3RpdmVfcmVzZXRfZnJhbWVfcCAocmVzdF9rKSkpIHRoZW4gKHJlYWN0aXZlX3NoaWZ0X2RlcmVmICh2YWwnKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKGxldCBjdHggPSAoc3hfY29udGV4dCAoKFN0cmluZyBcInN4LXJlYWN0aXZlXCIpKSAoTmlsKSkgaW4gKGlmIHN4X3RydXRoeSAoY3R4KSB0aGVuIChsZXQgZGVwX2xpc3QgPSByZWYgKChnZXQgKGN0eCkgKChTdHJpbmcgXCJkZXBzXCIpKSkpIGluIGxldCBub3RpZnlfZm4gPSAoZ2V0IChjdHgpICgoU3RyaW5nIFwibm90aWZ5XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgWyFkZXBfbGlzdDsgdmFsJ10pKSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoZGVwX2xpc3QgOj0gc3hfYXBwZW5kX2IgIWRlcF9saXN0IHZhbCc7IE5pbCkpIGluIChzaWduYWxfYWRkX3N1Yl9iICh2YWwnKSAobm90aWZ5X2ZuKSkpIGVsc2UgTmlsKSkgZWxzZSBOaWwpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoc2lnbmFsX3ZhbHVlICh2YWwnKSkpIChmZW52KSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInJlYWN0aXZlLXJlc2V0XCIpXSkpIHRoZW4gKGxldCB1cGRhdGVfZm4gPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ1cGRhdGUtZm5cIikpKSBpbiBsZXQgZmlyc3RfcCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZpcnN0LXJlbmRlclwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IHVwZGF0ZV9mbiBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKGZpcnN0X3ApKSkpKSkgdGhlbiAoY2VrX2NhbGwgKHVwZGF0ZV9mbikgKChMaXN0IFt2YWx1ZV0pKSkgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzY29wZVwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAobmFtZSkpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9zY29wZV9mcmFtZSAobmFtZSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJwcm92aWRlXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcG9wICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSkgZWxzZSAobGV0IG5ld19mcmFtZSA9IChtYWtlX3Byb3ZpZGVfZnJhbWUgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInZhbHVlXCIpKSkpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgbmV3X2ZyYW1lIChTdHJpbmcgXCJzdWJzY3JpYmVyc1wiKSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJzdWJzY3JpYmVyc1wiKSkpKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKG5ld19mcmFtZSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImJpbmRcIildKSkgdGhlbiAobGV0IHRyYWNrZWQgPSAhX2JpbmRfdHJhY2tpbmdfcmVmIGluIGxldCBib2R5ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiYm9keVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gbGV0IHByZXYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJwcmV2LXRyYWNraW5nXCIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKF9iaW5kX3RyYWNraW5nX3JlZiA6PSBwcmV2OyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgobGV0IHN1YnNjcmliZXIgPSAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZmlyZV9rb250XSAtPiAoZnVuIGZpcmVfa29udCAtPiAoY2VrX3J1biAoKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoZmVudikgKChMaXN0IFtdKSkpKSkpIGZpcmVfa29udCB8IF8gLT4gTmlsKSkgaW4gKExpc3QuaXRlciAoZnVuIG5hbWUgLT4gaWdub3JlICgobGV0IGV4aXN0aW5nID0gKGdldCAoIV9wcm92aWRlX3N1YnNjcmliZXJzX3JlZikgKG5hbWUpKSBpbiAoc3hfZGljdF9zZXRfYiAhX3Byb3ZpZGVfc3Vic2NyaWJlcnNfcmVmIG5hbWUgKHByaW1fY2FsbCBcImFwcGVuZFwiIFsoaWYgc3hfdHJ1dGh5IChleGlzdGluZykgdGhlbiBleGlzdGluZyBlbHNlIChMaXN0IFtdKSk7IChMaXN0IFtzdWJzY3JpYmVyXSldKSkpKSkgKHN4X3RvX2xpc3QgdHJhY2tlZCk7IE5pbCkpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInByb3ZpZGUtc2V0XCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gbGV0IHRhcmdldCA9IChrb250X2ZpbmRfcHJvdmlkZSAocmVzdF9rKSAobmFtZSkpIGluIChsZXQgb2xkX3ZhbCA9IChpZiBzeF90cnV0aHkgKHRhcmdldCkgdGhlbiAoZ2V0ICh0YXJnZXQpICgoU3RyaW5nIFwidmFsdWVcIikpKSBlbHNlIChzY29wZV9wZWVrIChuYW1lKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKHRhcmdldCkgdGhlbiAoc3hfZGljdF9zZXRfYiB0YXJnZXQgKFN0cmluZyBcInZhbHVlXCIpIHZhbHVlKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKG5hbWUpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3B1c2ggKG5hbWUpICh2YWx1ZSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29sZF92YWw7IHZhbHVlXSkpKSkpKSB0aGVuIChmaXJlX3Byb3ZpZGVfc3Vic2NyaWJlcnMgKG5hbWUpKSBlbHNlIE5pbCkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwic2NvcGUtYWNjXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChsZXQgbmV3X2ZyYW1lID0gKG1ha2Vfc2NvcGVfYWNjX2ZyYW1lICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIG5ld19mcmFtZSAoU3RyaW5nIFwiZW1pdHRlZFwiKSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbWl0dGVkXCIpKSkpKSBpbiBuZXdfZnJhbWUpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJtYXBcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCByZXN1bHRzID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVzdWx0c1wiKSkpIGluIGxldCBpbmRleGVkID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiaW5kZXhlZFwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGxldCBuZXdfcmVzdWx0cyA9IChwcmltX2NhbGwgXCJhcHBlbmRcIiBbcmVzdWx0czsgKExpc3QgW3ZhbHVlXSldKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChuZXdfcmVzdWx0cykgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgY2FsbF9hcmdzID0gKGlmIHN4X3RydXRoeSAoaW5kZXhlZCkgdGhlbiAoTGlzdCBbKGxlbiAobmV3X3Jlc3VsdHMpKTsgKGZpcnN0IChyZW1haW5pbmcpKV0pIGVsc2UgKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgaW4gbGV0IG5leHRfZnJhbWUgPSAoaWYgc3hfdHJ1dGh5IChpbmRleGVkKSB0aGVuIChtYWtlX21hcF9pbmRleGVkX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAobmV3X3Jlc3VsdHMpIChmZW52KSkgZWxzZSAobWFrZV9tYXBfZnJhbWUgKGYpICgocmVzdCAocmVtYWluaW5nKSkpIChuZXdfcmVzdWx0cykgKGZlbnYpKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKGNhbGxfYXJncykgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoIChuZXh0X2ZyYW1lKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiZmlsdGVyXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgcmVzdWx0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlc3VsdHNcIikpKSBpbiBsZXQgY3VycmVudF9pdGVtID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiY3VycmVudC1pdGVtXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0IG5ld19yZXN1bHRzID0gKGlmIHN4X3RydXRoeSAodmFsdWUpIHRoZW4gKHByaW1fY2FsbCBcImFwcGVuZFwiIFtyZXN1bHRzOyAoTGlzdCBbY3VycmVudF9pdGVtXSldKSBlbHNlIHJlc3VsdHMpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKG5ld19yZXN1bHRzKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFsoZmlyc3QgKHJlbWFpbmluZykpXSkpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfZmlsdGVyX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAobmV3X3Jlc3VsdHMpICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgW3ZhbHVlOyAoZmlyc3QgKHJlbWFpbmluZykpXSkpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVkdWNlX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImZvci1lYWNoXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChyZW1haW5pbmcpKV0pKSAoZmVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2Zvcl9lYWNoX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInNvbWVcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAodmFsdWUpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChyZW1haW5pbmcpKV0pKSAoZmVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX3NvbWVfZnJhbWUgKGYpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcImV2ZXJ5XCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAodmFsdWUpKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgZmFsc2UpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgdHJ1ZSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9ldmVyeV9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiaGFuZGxlclwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9oYW5kbGVyX2ZyYW1lICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmVzdGFydFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJzaWduYWwtcmV0dXJuXCIpXSkpIHRoZW4gKGxldCBzYXZlZF9rb250ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwic2F2ZWQta29udFwiKSkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHNhdmVkX2tvbnQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY29tcC10cmFjZVwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJjb25kLWFycm93XCIpXSkpIHRoZW4gKGxldCB0ZXN0X3ZhbHVlID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibWF0Y2gtdmFsXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoY29udGludWVfd2l0aF9jYWxsICh2YWx1ZSkgKChMaXN0IFt0ZXN0X3ZhbHVlXSkpIChmZW52KSAoKExpc3QgW3Rlc3RfdmFsdWVdKSkgKHJlc3RfaykpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJ3aW5kLWFmdGVyXCIpXSkpIHRoZW4gKGxldCBhZnRlcl90aHVuayA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImFmdGVyLXRodW5rXCIpKSkgaW4gbGV0IHdpbmRlcnNfbGVuID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwid2luZGVycy1sZW5cIikpKSBpbiBsZXQgYm9keV9yZXN1bHQgPSB2YWx1ZSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKCFfd2luZGVyc19yZWYpKTsgd2luZGVyc19sZW5dKSkgdGhlbiAoX3dpbmRlcnNfcmVmIDo9IChyZXN0ICghX3dpbmRlcnNfcmVmKSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAoY29udGludWVfd2l0aF9jYWxsIChhZnRlcl90aHVuaykgKChMaXN0IFtdKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV93aW5kX3JldHVybl9mcmFtZSAoYm9keV9yZXN1bHQpIChmZW52KSkpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwid2luZC1yZXR1cm5cIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImJvZHktcmVzdWx0XCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInJhaXNlLWV2YWxcIildKSkgdGhlbiAobGV0IGNvbmRpdGlvbiA9IHZhbHVlIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gbGV0IGNvbnRpbnVhYmxlX3AgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJzY2hlbWVcIikpKSBpbiBsZXQgdW53aW5kX3Jlc3VsdCA9IChrb250X3Vud2luZF90b19oYW5kbGVyIChyZXN0X2spIChjb25kaXRpb24pKSBpbiBsZXQgaGFuZGxlcl9mbiA9IChnZXQgKHVud2luZF9yZXN1bHQpICgoU3RyaW5nIFwiaGFuZGxlclwiKSkpIGluIGxldCB1bndvdW5kX2sgPSAoZ2V0ICh1bndpbmRfcmVzdWx0KSAoKFN0cmluZyBcImtvbnRcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChoYW5kbGVyX2ZuKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKF9sYXN0X2Vycm9yX2tvbnRfcmVmIDo9IHVud291bmRfazsgTmlsKSkgaW4gKGhvc3RfZXJyb3IgKChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlVuaGFuZGxlZCBleGNlcHRpb246IFwiKTsgKGluc3BlY3QgKGNvbmRpdGlvbikpXSkpKSkpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoaGFuZGxlcl9mbikgKChMaXN0IFtjb25kaXRpb25dKSkgKGZlbnYpICgoTGlzdCBbY29uZGl0aW9uXSkpICgoaWYgc3hfdHJ1dGh5IChjb250aW51YWJsZV9wKSB0aGVuIChrb250X3B1c2ggKChtYWtlX3NpZ25hbF9yZXR1cm5fZnJhbWUgKGZlbnYpICh1bndvdW5kX2spKSkgKHVud291bmRfaykpIGVsc2UgKGtvbnRfcHVzaCAoKG1ha2VfcmFpc2VfZ3VhcmRfZnJhbWUgKGZlbnYpICh1bndvdW5kX2spKSkgKHVud291bmRfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicmFpc2UtZ3VhcmRcIildKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoX2xhc3RfZXJyb3Jfa29udF9yZWYgOj0gcmVzdF9rOyBOaWwpKSBpbiAoaG9zdF9lcnJvciAoKFN0cmluZyBcImV4Y2VwdGlvbiBoYW5kbGVyIHJldHVybmVkIGZyb20gbm9uLWNvbnRpbnVhYmxlIHJhaXNlXCIpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcIm11bHRpLW1hcFwiKV0pKSB0aGVuIChsZXQgZiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IG5ld19yZXN1bHRzID0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFsoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZXN1bHRzXCIpKSk7IChMaXN0IFt2YWx1ZV0pXSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAoTGlzdC5leGlzdHMgKGZ1biBjIC0+IHN4X3RydXRoeSAoKGVtcHR5X3AgKGMpKSkpIChzeF90b19saXN0IHJlbWFpbmluZykpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKG5ld19yZXN1bHRzKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCBoZWFkcyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIGMgLT4gKGZpcnN0IChjKSkpIChzeF90b19saXN0IHJlbWFpbmluZykpKSBpbiBsZXQgdGFpbHMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBjIC0+IChyZXN0IChjKSkpIChzeF90b19saXN0IHJlbWFpbmluZykpKSBpbiAoY29udGludWVfd2l0aF9jYWxsIChmKSAoaGVhZHMpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfbXVsdGlfbWFwX2ZyYW1lIChmKSAodGFpbHMpIChuZXdfcmVzdWx0cykgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwiY2FsbGNjXCIpXSkpIHRoZW4gKGxldCBrID0gKG1ha2VfY2FsbGNjX2NvbnRpbnVhdGlvbiAocmVzdF9rKSAoKGxlbiAoIV93aW5kZXJzX3JlZikpKSkgaW4gKGNvbnRpbnVlX3dpdGhfY2FsbCAodmFsdWUpICgoTGlzdCBba10pKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpICgoTGlzdCBba10pKSAocmVzdF9rKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbX21hdGNoX3ZhbDsgKFN0cmluZyBcInZtLXJlc3VtZVwiKV0pKSB0aGVuIChsZXQgcmVzdW1lX2ZuID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIChsZXQgcmVzdWx0JyA9IChzeF9hcHBseSByZXN1bWVfZm4gKExpc3QgW3ZhbHVlXSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChkaWN0X3AgKHJlc3VsdCcpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcIl9fdm1fc3VzcGVuZGVkXCIpKSkpKSB0aGVuIChtYWtlX2Nla19zdXNwZW5kZWQgKChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwicmVxdWVzdFwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpICgoa29udF9wdXNoICgobWFrZV92bV9yZXN1bWVfZnJhbWUgKChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwicmVzdW1lXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkpKSAocmVzdF9rKSkpKSBlbHNlIChtYWtlX2Nla192YWx1ZSAocmVzdWx0JykgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSAocmVzdF9rKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicGVyZm9ybVwiKV0pKSB0aGVuIChtYWtlX2Nla19zdXNwZW5kZWQgKHZhbHVlKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW19tYXRjaF92YWw7IChTdHJpbmcgXCJpbXBvcnRcIildKSkgdGhlbiAobGV0IGltcG9ydF9zZXQgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJhcmdzXCIpKSkgaW4gbGV0IHJlbWFpbmluZ19zZXRzID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoYmluZF9pbXBvcnRfc2V0IChpbXBvcnRfc2V0KSAoZmVudikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nX3NldHMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChzdGVwX3NmX2ltcG9ydCAocmVtYWluaW5nX3NldHMpIChmZW52KSAocmVzdF9rKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtfbWF0Y2hfdmFsOyAoU3RyaW5nIFwicGFyYW1ldGVyaXplXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgY3VycmVudF9wYXJhbSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVzdWx0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlc3VsdHNcIikpKSBpbiBsZXQgYm9keSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImJvZHlcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKGN1cnJlbnRfcGFyYW0pKSkgdGhlbiAobGV0IHBhcmFtX29iaiA9IHZhbHVlIGluIGxldCB2YWxfZXhwciA9IChudGggKChmaXJzdCAocmVtYWluaW5nKSkpICgoTnVtYmVyIDEuMCkpKSBpbiAobWFrZV9jZWtfc3RhdGUgKHZhbF9leHByKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX3BhcmFtZXRlcml6ZV9mcmFtZSAocmVtYWluaW5nKSAocGFyYW1fb2JqKSAocmVzdWx0cykgKGJvZHkpIChmZW52KSkpIChyZXN0X2spKSkpKSBlbHNlIChsZXQgY29udmVydGVkX3ZhbCA9IHZhbHVlIGluIGxldCBuZXdfcmVzdWx0cyA9IChwcmltX2NhbGwgXCJhcHBlbmRcIiBbcmVzdWx0czsgKExpc3QgWyhMaXN0IFsocGFyYW1ldGVyX3VpZCAoY3VycmVudF9wYXJhbSkpOyBjb252ZXJ0ZWRfdmFsXSldKV0pIGluIGxldCByZXN0X2JpbmRpbmdzID0gKHJlc3QgKHJlbWFpbmluZykpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZXN0X2JpbmRpbmdzKSkpIHRoZW4gKGxldCBib2R5X2V4cHIgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChib2R5KSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChmaXJzdCAoYm9keSkpIGVsc2UgKGNvbnMgKChTeW1ib2wgXCJiZWdpblwiKSkgKGJvZHkpKSkgaW4gbGV0IHByb3ZpZGVfa29udCA9IChrb250X3B1c2hfcHJvdmlkZXMgKG5ld19yZXN1bHRzKSAoZmVudikgKHJlc3RfaykpIGluIChtYWtlX2Nla19zdGF0ZSAoYm9keV9leHByKSAoZmVudikgKHByb3ZpZGVfa29udCkpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0ICgoZmlyc3QgKHJlc3RfYmluZGluZ3MpKSkpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX3BhcmFtZXRlcml6ZV9mcmFtZSAocmVzdF9iaW5kaW5ncykgKE5pbCkgKG5ld19yZXN1bHRzKSAoYm9keSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKF9sYXN0X2Vycm9yX2tvbnRfcmVmIDo9IHJlc3RfazsgTmlsKSkgaW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5rbm93biBmcmFtZSB0eXBlOiBcIik7IGZ0XSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKVxuXG4oKiBjb250aW51ZS13aXRoLWNhbGwgKilcbmFuZCBjb250aW51ZV93aXRoX2NhbGwgZiBhcmdzIGVudiByYXdfYXJncyBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKHBhcmFtZXRlcl9wIChmKSkpIHRoZW4gKGxldCB1aWQgPSAocGFyYW1ldGVyX3VpZCAoZikpIGluIGxldCBmcmFtZSA9IChrb250X2ZpbmRfcHJvdmlkZSAoa29udCkgKHVpZCkpIGluIChtYWtlX2Nla192YWx1ZSAoKGlmIHN4X3RydXRoeSAoZnJhbWUpIHRoZW4gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwidmFsdWVcIikpKSBlbHNlIChwYXJhbWV0ZXJfZGVmYXVsdCAoZikpKSkgKGVudikgKGtvbnQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoY2FsbGNjX2NvbnRpbnVhdGlvbl9wIChmKSkpIHRoZW4gKGxldCBhcmcgPSAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIE5pbCBlbHNlIChmaXJzdCAoYXJncykpKSBpbiBsZXQgY2FwdHVyZWQgPSAoY2FsbGNjX2NvbnRpbnVhdGlvbl9kYXRhIChmKSkgaW4gbGV0IHdfbGVuID0gKGNhbGxjY19jb250aW51YXRpb25fd2luZGVyc19sZW4gKGYpKSBpbiAobGV0ICgpID0gaWdub3JlICgod2luZF9lc2NhcGVfdG8gKHdfbGVuKSkpIGluIChtYWtlX2Nla192YWx1ZSAoYXJnKSAoZW52KSAoY2FwdHVyZWQpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGNvbnRpbnVhdGlvbl9wIChmKSkpIHRoZW4gKGxldCBhcmcgPSAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIE5pbCBlbHNlIChmaXJzdCAoYXJncykpKSBpbiBsZXQgY29udF9kYXRhID0gKGNvbnRpbnVhdGlvbl9kYXRhIChmKSkgaW4gKGxldCBjYXB0dXJlZCA9IChnZXQgKGNvbnRfZGF0YSkgKChTdHJpbmcgXCJjYXB0dXJlZFwiKSkpIGluIChsZXQgcmVzdWx0JyA9IChjZWtfcnVuICgobWFrZV9jZWtfdmFsdWUgKGFyZykgKGVudikgKGNhcHR1cmVkKSkpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChlbnYpIChrb250KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoaXNfY2FsbGFibGUgKGYpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfY29tcG9uZW50IChmKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX2lzbGFuZCAoZikpKSkpKSkpKSkgdGhlbiAobGV0IHJlc3VsdCcgPSAoc3hfYXBwbHlfY2VrIChmKSAoYXJncykpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChpc19ldmFsX2Vycm9yIHJlc3VsdCcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwibWVzc2FnZVwiKSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmFpc2VfZXZhbF9mcmFtZSAoZW52KSAoKEJvb2wgZmFsc2UpKSkpIChrb250KSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChkaWN0X3AgKHJlc3VsdCcpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcIl9fdm1fc3VzcGVuZGVkXCIpKSkpKSB0aGVuIChtYWtlX2Nla19zdXNwZW5kZWQgKChnZXQgKHJlc3VsdCcpICgoU3RyaW5nIFwicmVxdWVzdFwiKSkpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2Vfdm1fcmVzdW1lX2ZyYW1lICgoZ2V0IChyZXN1bHQnKSAoKFN0cmluZyBcInJlc3VtZVwiKSkpKSAoZW52KSkpIChrb250KSkpKSBlbHNlIChtYWtlX2Nla192YWx1ZSAocmVzdWx0JykgKGVudikgKGtvbnQpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkgdGhlbiAobGV0IHBhcmFtcyA9IChsYW1iZGFfcGFyYW1zIChmKSkgaW4gbGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGxhbWJkYV9jbG9zdXJlIChmKSkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChiaW5kX2xhbWJkYV9wYXJhbXMgKHBhcmFtcykgKGFyZ3MpIChsb2NhbCkpKSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChhcmdzKSk7IChsZW4gKHBhcmFtcykpXSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsobGV0IF9vciA9IChsYW1iZGFfbmFtZSAoZikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoU3RyaW5nIFwibGFtYmRhXCIpKTsgKFN0cmluZyBcIiBleHBlY3RzIFwiKTsgKGxlbiAocGFyYW1zKSk7IChTdHJpbmcgXCIgYXJncywgZ290IFwiKTsgKGxlbiAoYXJncykpXSkpKSkpIGVsc2UgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhaXIpKSkgKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJ6aXBcIiBbcGFyYW1zOyBhcmdzXSkpOyBOaWwpKSBpbiAoTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIE5pbCkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwic2xpY2VcIiBbcGFyYW1zOyAobGVuIChhcmdzKSldKSk7IE5pbCkpKSBlbHNlIE5pbCkpIGluIChsZXQgaml0X3Jlc3VsdCA9IChqaXRfdHJ5X2NhbGwgKGYpIChhcmdzKSkgaW4gKGlmIHN4X3RydXRoeSAoKGppdF9za2lwX3AgKGppdF9yZXN1bHQpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChsYW1iZGFfYm9keSAoZikpKSAobG9jYWwpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoZGljdF9wIChqaXRfcmVzdWx0KSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGdldCAoaml0X3Jlc3VsdCkgKChTdHJpbmcgXCJfX3ZtX3N1c3BlbmRlZFwiKSkpKSkgdGhlbiAobWFrZV9jZWtfc3VzcGVuZGVkICgoZ2V0IChqaXRfcmVzdWx0KSAoKFN0cmluZyBcInJlcXVlc3RcIikpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3ZtX3Jlc3VtZV9mcmFtZSAoKGdldCAoaml0X3Jlc3VsdCkgKChTdHJpbmcgXCJyZXN1bWVcIikpKSkgKGVudikpKSAoa29udCkpKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKGppdF9yZXN1bHQpIChsb2NhbCkgKGtvbnQpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAoaXNfY29tcG9uZW50IChmKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChpc19pc2xhbmQgKGYpKSkpIHRoZW4gKGxldCBwYXJzZWQgPSAocGFyc2Vfa2V5d29yZF9hcmdzIChyYXdfYXJncykgKGVudikpIGluIGxldCBrd2FyZ3MgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCBjaGlsZHJlbiA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBsb2NhbCA9IChlbnZfbWVyZ2UgKChjb21wb25lbnRfY2xvc3VyZSAoZikpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSAobGV0IF9vciA9IChkaWN0X2dldCAoa3dhcmdzKSAocCkpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChjb21wb25lbnRfcGFyYW1zIChmKSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoY29tcG9uZW50X2hhc19jaGlsZHJlbiAoZikpKSB0aGVuIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCJjaGlsZHJlblwiKSkgY2hpbGRyZW4pIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgoY29tcG9uZW50X2JvZHkgKGYpKSkgKGxvY2FsKSAoKGtvbnRfcHVzaCAoKG1ha2VfY29tcF90cmFjZV9mcmFtZSAoKGNvbXBvbmVudF9uYW1lIChmKSkpICgoY29tcG9uZW50X2ZpbGUgKGYpKSkpKSAoa29udCkpKSkpKSkgZWxzZSAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJOb3QgY2FsbGFibGU6IFwiKTsgKGluc3BlY3QgKGYpKV0pKSkpKSkpKSkpKVxuXG4oKiBzZi1jYXNlLXN0ZXAtbG9vcCAqKVxuYW5kIHNmX2Nhc2Vfc3RlcF9sb29wIG1hdGNoX3ZhbCBjbGF1c2VzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKGxlbiAoY2xhdXNlcykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgdGVzdCA9IChmaXJzdCAoY2xhdXNlcykpIGluIGxldCBib2R5ID0gKG50aCAoY2xhdXNlcykgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19lbHNlX2NsYXVzZSAodGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoYm9keSkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgdGVzdF92YWwgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAodGVzdCkgKGVudikpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbWF0Y2hfdmFsOyB0ZXN0X3ZhbF0pKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoYm9keSkgKGVudikgKGtvbnQpKSBlbHNlIChzZl9jYXNlX3N0ZXBfbG9vcCAobWF0Y2hfdmFsKSAoKHByaW1fY2FsbCBcInNsaWNlXCIgW2NsYXVzZXM7IChOdW1iZXIgMi4wKV0pKSAoZW52KSAoa29udCkpKSkpKSlcblxuKCogZXZhbC1leHByLWNlayAqKVxuYW5kIGV2YWxfZXhwcl9jZWsgZXhwciBlbnYgPVxuICAoY2VrX3J1biAoKG1ha2VfY2VrX3N0YXRlIChleHByKSAoZW52KSAoKExpc3QgW10pKSkpKVxuXG4oKiB0cmFtcG9saW5lLWNlayAqKVxuYW5kIHRyYW1wb2xpbmVfY2VrIHZhbCcgPVxuICAoaWYgc3hfdHJ1dGh5ICgoaXNfdGh1bmsgKHZhbCcpKSkgdGhlbiAoZXZhbF9leHByX2NlayAoKHRodW5rX2V4cHIgKHZhbCcpKSkgKCh0aHVua19lbnYgKHZhbCcpKSkpIGVsc2UgdmFsJylcblxuKCogbWFrZS1jb3JvdXRpbmUgKilcbmFuZCBtYWtlX2Nvcm91dGluZSB0aHVuayA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNvcm91dGluZVwiOyBjZl9lbnYgPSBOaWw7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBldmFsLWV4cHIgKilcbmFuZCBldmFsX2V4cHIgZXhwciBlbnYgPVxuICAoY2VrX3J1biAoKG1ha2VfY2VrX3N0YXRlIChleHByKSAoZW52KSAoKExpc3QgW10pKSkpKVxuXG5cbigqIFdpcmUgdXAgdHJhbXBvbGluZSB0byByZXNvbHZlIHRodW5rcyB2aWEgdGhlIENFSyBtYWNoaW5lICopXG5sZXQgKCkgPSB0cmFtcG9saW5lX2ZuIDo9IChmdW4gdiAtPlxuICBtYXRjaCB2IHdpdGhcbiAgfCBUaHVuayAoZXhwciwgZW52KSAtPiBldmFsX2V4cHIgZXhwciAoRW52IGVudilcbiAgfCBfIC0+IHYpXG5cbigqIFdpcmUgdXAgdGhlIHByaW1pdGl2ZXMgdHJhbXBvbGluZSBzbyBjYWxsX2FueSBpbiBITyBmb3JtcyByZXNvbHZlcyBUaHVua3MgKilcbmxldCAoKSA9IFN4X3ByaW1pdGl2ZXMuX3N4X3RyYW1wb2xpbmVfZm4gOj0gIXRyYW1wb2xpbmVfZm5cblxuKCogT3ZlcnJpZGUgcmVjdXJzaXZlIGNla19ydW4gd2l0aCBpdGVyYXRpdmUgbG9vcC5cbiAgIE9uIGVycm9yLCBjYXB0dXJlIHRoZSBrb250IGZyb20gdGhlIGxhc3Qgc3RhdGUgZm9yIGNvbXAtdHJhY2UuICopXG5sZXQgY2VrX3J1bl9pdGVyYXRpdmUgc3RhdGUgPVxuICBsZXQgcyA9IHJlZiBzdGF0ZSBpblxuICAodHJ5XG4gICAgd2hpbGUgbm90IChtYXRjaCBjZWtfdGVybWluYWxfcCAhcyB3aXRoIEJvb2wgdHJ1ZSAtPiB0cnVlIHwgXyAtPiBmYWxzZSlcbiAgICAgICAmJiBub3QgKG1hdGNoIGNla19zdXNwZW5kZWRfcCAhcyB3aXRoIEJvb2wgdHJ1ZSAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgZG9cbiAgICAgIHMgOj0gY2VrX3N0ZXAgIXNcbiAgICBkb25lO1xuICAgIChtYXRjaCBjZWtfc3VzcGVuZGVkX3AgIXMgd2l0aFxuICAgICB8IEJvb2wgdHJ1ZSAtPiByYWlzZSAoRXZhbF9lcnJvciBcIklPIHN1c3BlbnNpb24gaW4gbm9uLUlPIGNvbnRleHRcIilcbiAgICAgfCBfIC0+IGNla192YWx1ZSAhcylcbiAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgIF9sYXN0X2Vycm9yX2tvbnRfcmVmIDo9IGNla19rb250ICFzO1xuICAgIHJhaXNlIChFdmFsX2Vycm9yIG1zZykpXG5cbigqIENvbGxlY3QgY29tcG9uZW50IHRyYWNlIGZyb20gYSBrb250IHZhbHVlICopXG5sZXQgY29sbGVjdF9jb21wX3RyYWNlIGtvbnQgPVxuICBsZXQgdHJhY2UgPSByZWYgW10gaW5cbiAgbGV0IGsgPSByZWYga29udCBpblxuICB3aGlsZSAobWF0Y2ggIWsgd2l0aCBMaXN0IChfOjpfKSAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgZG9cbiAgICAobWF0Y2ggIWsgd2l0aFxuICAgICB8IExpc3QgKGZyYW1lIDo6IHJlc3QpIC0+XG4gICAgICAgKG1hdGNoIGZyYW1lIHdpdGhcbiAgICAgICAgfCBDZWtGcmFtZSBmIHdoZW4gZi5jZl90eXBlID0gXCJjb21wLXRyYWNlXCIgLT5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGYuY2ZfbmFtZSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiP1wiIGluXG4gICAgICAgICAgbGV0IGZpbGUgPSBtYXRjaCBmLmNmX2VudiB3aXRoIFN0cmluZyBzIC0+IHMgfCBOaWwgLT4gXCJcIiB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgIHRyYWNlIDo9IChuYW1lLCBmaWxlKSA6OiAhdHJhY2VcbiAgICAgICAgfCBEaWN0IGQgd2hlbiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidHlwZVwiIHdpdGggU29tZSAoU3RyaW5nIFwiY29tcC10cmFjZVwiKSAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgLT5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcIm5hbWVcIiB3aXRoIFNvbWUgKFN0cmluZyBzKSAtPiBzIHwgXyAtPiBcIj9cIiBpblxuICAgICAgICAgIGxldCBmaWxlID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiZmlsZVwiIHdpdGggU29tZSAoU3RyaW5nIHMpIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICB0cmFjZSA6PSAobmFtZSwgZmlsZSkgOjogIXRyYWNlXG4gICAgICAgIHwgXyAtPiAoKSk7XG4gICAgICAgayA6PSBMaXN0IHJlc3RcbiAgICAgfCBfIC0+IGsgOj0gTGlzdCBbXSlcbiAgZG9uZTtcbiAgTGlzdC5yZXYgIXRyYWNlXG5cbigqIEZvcm1hdCBhIGNvbXAtdHJhY2UgaW50byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyAqKVxubGV0IGZvcm1hdF9jb21wX3RyYWNlIHRyYWNlID1cbiAgbWF0Y2ggdHJhY2Ugd2l0aFxuICB8IFtdIC0+IFwiXCJcbiAgfCBlbnRyaWVzIC0+XG4gICAgbGV0IGxpbmVzID0gTGlzdC5tYXBpIChmdW4gaSAobmFtZSwgZmlsZSkgLT5cbiAgICAgIGxldCBwcmVmaXggPSBpZiBpID0gMCB0aGVuIFwiICBpbiBcIiBlbHNlIFwiICBjYWxsZWQgZnJvbSBcIiBpblxuICAgICAgaWYgZmlsZSA9IFwiXCIgdGhlbiBwcmVmaXggXiBcIn5cIiBeIG5hbWVcbiAgICAgIGVsc2UgcHJlZml4IF4gXCJ+XCIgXiBuYW1lIF4gXCIgKFwiIF4gZmlsZSBeIFwiKVwiXG4gICAgKSBlbnRyaWVzIGluXG4gICAgXCJcblwiIF4gU3RyaW5nLmNvbmNhdCBcIlxuXCIgbGluZXNcblxuKCogRW5oYW5jZSBhbiBlcnJvciBtZXNzYWdlIHdpdGggY29tcG9uZW50IHRyYWNlICopXG5sZXQgZW5oYW5jZV9lcnJvcl93aXRoX3RyYWNlIG1zZyA9XG4gIGxldCB0cmFjZSA9IGNvbGxlY3RfY29tcF90cmFjZSAhX2xhc3RfZXJyb3Jfa29udF9yZWYgaW5cbiAgX2xhc3RfZXJyb3Jfa29udF9yZWYgOj0gTmlsO1xuICBtc2cgXiAoZm9ybWF0X2NvbXBfdHJhY2UgdHJhY2UpXG5cbigqIEhhbmQtd3JpdHRlbiBzZl9kZWZpbmVfdHlwZSDigJQgc2tpcHBlZCBmcm9tIHRyYW5zcGlsZSBiZWNhdXNlIHRoZSBzcGVjIHVzZXNcbiAgICZyZXN0IHBhcmFtcyBhbmQgZW1wdHktZGljdCBsaXRlcmFscyB0aGF0IHRoZSB0cmFuc3BpbGVyIGNhbid0IGVtaXQgY2xlYW5seS5cbiAgIEltcGxlbWVudHM6IChkZWZpbmUtdHlwZSBOYW1lIChDdG9yMSBmMSBmMikgKEN0b3IyIGYzKSAuLi4pXG4gICBDcmVhdGVzIGNvbnN0cnVjdG9yIGZucywgTmFtZT8vQ3Rvcj8gcHJlZGljYXRlcywgQ3Rvci1maWVsZCBhY2Nlc3NvcnMsXG4gICBhbmQgcmVjb3JkcyBjdG9ycyBpbiAqYWR0LXJlZ2lzdHJ5Ki4gKilcbmxldCBzZl9kZWZpbmVfdHlwZSBhcmdzIGVudl92YWwgPVxuICBsZXQgaXRlbXMgPSAobWF0Y2ggYXJncyB3aXRoIExpc3QgbCAtPiBsIHwgXyAtPiBbXSkgaW5cbiAgbGV0IHR5cGVfc3ltID0gTGlzdC5udGggaXRlbXMgMCBpblxuICBsZXQgdHlwZV9uYW1lID0gdmFsdWVfdG9fc3RyaW5nIHR5cGVfc3ltIGluXG4gIGxldCBjdG9yX3NwZWNzID0gTGlzdC50bCBpdGVtcyBpblxuICBsZXQgZW52X2hhc192IGsgPSBzeF90cnV0aHkgKGVudl9oYXMgZW52X3ZhbCAoU3RyaW5nIGspKSBpblxuICBsZXQgZW52X2JpbmRfdiBrIHYgPSBpZ25vcmUgKGVudl9iaW5kIGVudl92YWwgKFN0cmluZyBrKSB2KSBpblxuICBsZXQgZW52X2dldF92IGsgPSBlbnZfZ2V0IGVudl92YWwgKFN0cmluZyBrKSBpblxuICBpZiBub3QgKGVudl9oYXNfdiBcIiphZHQtcmVnaXN0cnkqXCIpIHRoZW5cbiAgICBlbnZfYmluZF92IFwiKmFkdC1yZWdpc3RyeSpcIiAoRGljdCAoSGFzaHRibC5jcmVhdGUgOCkpO1xuICBsZXQgcmVnaXN0cnkgPSBlbnZfZ2V0X3YgXCIqYWR0LXJlZ2lzdHJ5KlwiIGluXG4gIGxldCBjdG9yX25hbWVzID0gTGlzdC5tYXAgKGZ1biBzcGVjIC0+XG4gICAgKG1hdGNoIHNwZWMgd2l0aCBMaXN0IChzeW0gOjogXykgLT4gU3RyaW5nICh2YWx1ZV90b19zdHJpbmcgc3ltKSB8IF8gLT4gTmlsKVxuICApIGN0b3Jfc3BlY3MgaW5cbiAgKG1hdGNoIHJlZ2lzdHJ5IHdpdGggRGljdCBkIC0+IEhhc2h0YmwucmVwbGFjZSBkIHR5cGVfbmFtZSAoTGlzdCBjdG9yX25hbWVzKSB8IF8gLT4gKCkpO1xuICBlbnZfYmluZF92ICh0eXBlX25hbWUgXiBcIj9cIilcbiAgICAoTmF0aXZlRm4gKHR5cGVfbmFtZSBeIFwiP1wiLCBmdW4gcGFyZ3MgLT5cbiAgICAgIChtYXRjaCBwYXJncyB3aXRoXG4gICAgICB8IFt2XSAtPlxuICAgICAgICAobWF0Y2ggdiB3aXRoXG4gICAgICAgIHwgRGljdCBkIC0+IEJvb2wgKEhhc2h0YmwubWVtIGQgXCJfYWR0XCIgJiZcbiAgICAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiX3R5cGVcIiB3aXRoIFNvbWUgKFN0cmluZyB0KSAtPiB0ID0gdHlwZV9uYW1lIHwgXyAtPiBmYWxzZSkpXG4gICAgICAgIHwgXyAtPiBCb29sIGZhbHNlKVxuICAgICAgfCBfIC0+IEJvb2wgZmFsc2UpKSk7XG4gIExpc3QuaXRlciAoZnVuIHNwZWMgLT5cbiAgICAobWF0Y2ggc3BlYyB3aXRoXG4gICAgfCBMaXN0IChzeW0gOjogZmllbGRzKSAtPlxuICAgICAgbGV0IGNuID0gdmFsdWVfdG9fc3RyaW5nIHN5bSBpblxuICAgICAgbGV0IGZpZWxkX25hbWVzID0gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIGZpZWxkcyBpblxuICAgICAgbGV0IGFyaXR5ID0gTGlzdC5sZW5ndGggZmllbGRzIGluXG4gICAgICBlbnZfYmluZF92IGNuXG4gICAgICAgIChOYXRpdmVGbiAoY24sIGZ1biBjdG9yX2FyZ3MgLT5cbiAgICAgICAgICBpZiBMaXN0Lmxlbmd0aCBjdG9yX2FyZ3MgPD4gYXJpdHkgdGhlblxuICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiJXM6IGV4cGVjdGVkICVkIGFyZ3MsIGdvdCAlZFwiXG4gICAgICAgICAgICAgIGNuIGFyaXR5IChMaXN0Lmxlbmd0aCBjdG9yX2FyZ3MpKSlcbiAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiX2FkdFwiICAgIChCb29sIHRydWUpO1xuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJfdHlwZVwiICAgKFN0cmluZyB0eXBlX25hbWUpO1xuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJfY3RvclwiICAgKFN0cmluZyBjbik7XG4gICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcIl9maWVsZHNcIiAoTGlzdCBjdG9yX2FyZ3MpO1xuICAgICAgICAgICAgRGljdCBkXG4gICAgICAgICAgZW5kKSk7XG4gICAgICBlbnZfYmluZF92IChjbiBeIFwiP1wiKVxuICAgICAgICAoTmF0aXZlRm4gKGNuIF4gXCI/XCIsIGZ1biBwYXJncyAtPlxuICAgICAgICAgIChtYXRjaCBwYXJncyB3aXRoXG4gICAgICAgICAgfCBbdl0gLT5cbiAgICAgICAgICAgIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgRGljdCBkIC0+IEJvb2wgKEhhc2h0YmwubWVtIGQgXCJfYWR0XCIgJiZcbiAgICAgICAgICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcIl9jdG9yXCIgd2l0aCBTb21lIChTdHJpbmcgYykgLT4gYyA9IGNuIHwgXyAtPiBmYWxzZSkpXG4gICAgICAgICAgICB8IF8gLT4gQm9vbCBmYWxzZSlcbiAgICAgICAgICB8IF8gLT4gQm9vbCBmYWxzZSkpKTtcbiAgICAgIExpc3QuaXRlcmkgKGZ1biBpZHggZm5hbWUgLT5cbiAgICAgICAgZW52X2JpbmRfdiAoY24gXiBcIi1cIiBeIGZuYW1lKVxuICAgICAgICAgIChOYXRpdmVGbiAoY24gXiBcIi1cIiBeIGZuYW1lLCBmdW4gcGFyZ3MgLT5cbiAgICAgICAgICAgIChtYXRjaCBwYXJncyB3aXRoXG4gICAgICAgICAgICB8IFt2XSAtPlxuICAgICAgICAgICAgICAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICAgIHwgRGljdCBkIC0+XG4gICAgICAgICAgICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcIl9maWVsZHNcIiB3aXRoXG4gICAgICAgICAgICAgICAgfCBTb21lIChMaXN0IGZzKSAtPlxuICAgICAgICAgICAgICAgICAgaWYgaWR4IDwgTGlzdC5sZW5ndGggZnMgdGhlbiBMaXN0Lm50aCBmcyBpZHhcbiAgICAgICAgICAgICAgICAgIGVsc2UgcmFpc2UgKEV2YWxfZXJyb3IgKGNuIF4gXCItXCIgXiBmbmFtZSBeIFwiOiBpbmRleCBvdXQgb2YgYm91bmRzXCIpKVxuICAgICAgICAgICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoY24gXiBcIi1cIiBeIGZuYW1lIF4gXCI6IG5vdCBhbiBBRFRcIikpKVxuICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKGNuIF4gXCItXCIgXiBmbmFtZSBeIFwiOiBub3QgYSBkaWN0XCIpKSlcbiAgICAgICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoY24gXiBcIi1cIiBeIGZuYW1lIF4gXCI6IGV4cGVjdGVkIDEgYXJnXCIpKSkpKVxuICAgICAgKSBmaWVsZF9uYW1lc1xuICAgIHwgXyAtPiAoKSlcbiAgKSBjdG9yX3NwZWNzO1xuICBOaWxcblxuKCogUmVnaXN0ZXIgZGVmaW5lLXR5cGUgdmlhIGN1c3RvbV9zcGVjaWFsX2Zvcm1zIHNvIHRoZSBDRUsgZGlzcGF0Y2ggZmluZHMgaXQuXG4gICBUaGUgdG9wLWxldmVsIChyZWdpc3Rlci1zcGVjaWFsLWZvcm0hIC4uLikgaW4gc3BlYy9ldmFsdWF0b3Iuc3ggaXMgbm90IGFcbiAgIGRlZmluZSBhbmQgdGhlcmVmb3JlIGlzIG5vdCB0cmFuc3BpbGVkOyB3ZSB3aXJlIGl0IHVwIGhlcmUgaW5zdGVhZC4gKilcbmxldCAoKSA9IGlnbm9yZSAocmVnaXN0ZXJfc3BlY2lhbF9mb3JtIChTdHJpbmcgXCJkZWZpbmUtdHlwZVwiKVxuICAoTmF0aXZlRm4gKFwiZGVmaW5lLXR5cGVcIiwgZnVuIGNhbGxfYXJncyAtPlxuICAgIG1hdGNoIGNhbGxfYXJncyB3aXRoXG4gICAgfCBbYXJnczsgZW52XSAtPiBzZl9kZWZpbmVfdHlwZSBhcmdzIGVudlxuICAgIHwgXyAtPiBOaWwpKSlcblxuKCogTXVsdGlwbGUgdmFsdWVzIOKAlCBoZWxwZXJzIHNoYXJlZCBieSBsZXQtdmFsdWVzLCBkZWZpbmUtdmFsdWVzICopXG5sZXQgbWFrZV92YWx1ZXNfZGljdCB2cyA9XG4gIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICBIYXNodGJsLnJlcGxhY2UgZCBcIl92YWx1ZXNcIiAoQm9vbCB0cnVlKTtcbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJfbGlzdFwiIChMaXN0IHZzKTtcbiAgRGljdCBkXG5cbmxldCB2YWx1ZXNfdG9fbGlzdCByZXN1bHQgPVxuICBtYXRjaCByZXN1bHQgd2l0aFxuICB8IERpY3QgZCB3aGVuIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfdmFsdWVzXCIgd2l0aCBTb21lIChCb29sIHRydWUpIC0+IHRydWUgfCBfIC0+IGZhbHNlKSAtPlxuICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfbGlzdFwiIHdpdGggU29tZSAoTGlzdCBsKSAtPiBsIHwgXyAtPiBbcmVzdWx0XSlcbiAgfCBfIC0+IFtyZXN1bHRdXG5cbigqIChsZXQtdmFsdWVzICgoKGEgYikgZXhwcikgLi4uKSBib2R5Li4uKSAqKVxubGV0IHNmX2xldF92YWx1ZXMgYXJncyBlbnZfdmFsID1cbiAgbGV0IGl0ZW1zID0gbWF0Y2ggYXJncyB3aXRoIExpc3QgbCAtPiBsIHwgXyAtPiBbXSBpblxuICBsZXQgY2xhdXNlcyA9IG1hdGNoIExpc3QubnRoX29wdCBpdGVtcyAwIHdpdGggU29tZSAoTGlzdCBsKSAtPiBsIHwgXyAtPiBbXSBpblxuICBsZXQgYm9keSA9IGlmIExpc3QubGVuZ3RoIGl0ZW1zID4gMSB0aGVuIExpc3QudGwgaXRlbXMgZWxzZSBbXSBpblxuICBsZXQgbG9jYWxfZW52ID0gZW52X2V4dGVuZCBlbnZfdmFsIGluXG4gIExpc3QuaXRlciAoZnVuIGNsYXVzZSAtPlxuICAgIGxldCBuYW1lcyA9IChtYXRjaCBjbGF1c2Ugd2l0aCBMaXN0IChMaXN0IG5zIDo6IF8pIC0+IG5zIHwgXyAtPiBbXSkgaW5cbiAgICBsZXQgdmFsX2V4cHIgPSAobWF0Y2ggY2xhdXNlIHdpdGggTGlzdCAoXyA6OiBlIDo6IF8pIC0+IGUgfCBfIC0+IE5pbCkgaW5cbiAgICBsZXQgcmVzdWx0ID0gZXZhbF9leHByIHZhbF9leHByIGxvY2FsX2VudiBpblxuICAgIGxldCB2cyA9IHZhbHVlc190b19saXN0IHJlc3VsdCBpblxuICAgIExpc3QuaXRlcmkgKGZ1biBpZHggbmFtZSAtPlxuICAgICAgbGV0IG4gPSAobWF0Y2ggbmFtZSB3aXRoIFN5bWJvbCBzIC0+IHMgfCBTdHJpbmcgcyAtPiBzIHwgXyAtPiB2YWx1ZV90b19zdHJpbmcgbmFtZSkgaW5cbiAgICAgIGxldCB2ID0gaWYgaWR4IDwgTGlzdC5sZW5ndGggdnMgdGhlbiBMaXN0Lm50aCB2cyBpZHggZWxzZSBOaWwgaW5cbiAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWxfZW52IChTdHJpbmcgbikgdilcbiAgICApIG5hbWVzXG4gICkgY2xhdXNlcztcbiAgbGV0IGxhc3RfdmFsID0gcmVmIE5pbCBpblxuICBMaXN0Lml0ZXIgKGZ1biBlIC0+IGxhc3RfdmFsIDo9IGV2YWxfZXhwciBlIGxvY2FsX2VudikgYm9keTtcbiAgIWxhc3RfdmFsXG5cbigqIChkZWZpbmUtdmFsdWVzIChhIGIgLi4uKSBleHByKSAqKVxubGV0IHNmX2RlZmluZV92YWx1ZXMgYXJncyBlbnZfdmFsID1cbiAgbGV0IGl0ZW1zID0gbWF0Y2ggYXJncyB3aXRoIExpc3QgbCAtPiBsIHwgXyAtPiBbXSBpblxuICBsZXQgbmFtZXMgPSAobWF0Y2ggTGlzdC5udGhfb3B0IGl0ZW1zIDAgd2l0aCBTb21lIChMaXN0IGwpIC0+IGwgfCBfIC0+IFtdKSBpblxuICBsZXQgdmFsX2V4cHIgPSAobWF0Y2ggTGlzdC5udGhfb3B0IGl0ZW1zIDEgd2l0aCBTb21lIGUgLT4gZSB8IE5vbmUgLT4gTmlsKSBpblxuICBsZXQgcmVzdWx0ID0gZXZhbF9leHByIHZhbF9leHByIGVudl92YWwgaW5cbiAgbGV0IHZzID0gdmFsdWVzX3RvX2xpc3QgcmVzdWx0IGluXG4gIExpc3QuaXRlcmkgKGZ1biBpZHggbmFtZSAtPlxuICAgIGxldCBuID0gKG1hdGNoIG5hbWUgd2l0aCBTeW1ib2wgcyAtPiBzIHwgU3RyaW5nIHMgLT4gcyB8IF8gLT4gdmFsdWVfdG9fc3RyaW5nIG5hbWUpIGluXG4gICAgbGV0IHYgPSBpZiBpZHggPCBMaXN0Lmxlbmd0aCB2cyB0aGVuIExpc3QubnRoIHZzIGlkeCBlbHNlIE5pbCBpblxuICAgIGlnbm9yZSAoZW52X2JpbmQgZW52X3ZhbCAoU3RyaW5nIG4pIHYpXG4gICkgbmFtZXM7XG4gIE5pbFxuXG5sZXQgKCkgPSBpZ25vcmUgKHJlZ2lzdGVyX3NwZWNpYWxfZm9ybSAoU3RyaW5nIFwibGV0LXZhbHVlc1wiKVxuICAoTmF0aXZlRm4gKFwibGV0LXZhbHVlc1wiLCBmdW4gY2FsbF9hcmdzIC0+XG4gICAgbWF0Y2ggY2FsbF9hcmdzIHdpdGhcbiAgICB8IFthcmdzOyBlbnZdIC0+IHNmX2xldF92YWx1ZXMgYXJncyBlbnZcbiAgICB8IF8gLT4gTmlsKSkpXG5cbmxldCAoKSA9IGlnbm9yZSAocmVnaXN0ZXJfc3BlY2lhbF9mb3JtIChTdHJpbmcgXCJkZWZpbmUtdmFsdWVzXCIpXG4gIChOYXRpdmVGbiAoXCJkZWZpbmUtdmFsdWVzXCIsIGZ1biBjYWxsX2FyZ3MgLT5cbiAgICBtYXRjaCBjYWxsX2FyZ3Mgd2l0aFxuICAgIHwgW2FyZ3M7IGVudl0gLT4gc2ZfZGVmaW5lX3ZhbHVlcyBhcmdzIGVudlxuICAgIHwgXyAtPiBOaWwpKSlcblxuKCogUGhhc2UgOTogUHJvbWlzZXMg4oCUIGRlbGF5L2ZvcmNlL2RlbGF5LWZvcmNlL21ha2UtcHJvbWlzZS9wcm9taXNlPyAqKVxuXG5sZXQgbWFrZV9wcm9taXNlX2RpY3QgPyhpdGVyYXRpdmU9ZmFsc2UpIHRodW5rID1cbiAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gIEhhc2h0YmwucmVwbGFjZSBkIFwiX3Byb21pc2VcIiAoQm9vbCB0cnVlKTtcbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJmb3JjZWRcIiAoQm9vbCBmYWxzZSk7XG4gIEhhc2h0YmwucmVwbGFjZSBkIFwidGh1bmtcIiB0aHVuaztcbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2YWx1ZVwiIE5pbDtcbiAgaWYgaXRlcmF0aXZlIHRoZW4gSGFzaHRibC5yZXBsYWNlIGQgXCJfaXRlcmF0aXZlXCIgKEJvb2wgdHJ1ZSk7XG4gIERpY3QgZFxuXG5sZXQgc2ZfZGVsYXkgYXJncyBlbnZfdmFsID1cbiAgbGV0IGV4cHIgPSBtYXRjaCBhcmdzIHdpdGggTGlzdCAoZSA6OiBfKSAtPiBlIHwgXyAtPiBOaWwgaW5cbiAgbGV0IHRodW5rID0gbWFrZV9sYW1iZGEgKExpc3QgW10pIGV4cHIgZW52X3ZhbCBpblxuICBtYWtlX3Byb21pc2VfZGljdCB0aHVua1xuXG5sZXQgc2ZfZGVsYXlfZm9yY2UgYXJncyBlbnZfdmFsID1cbiAgbGV0IGV4cHIgPSBtYXRjaCBhcmdzIHdpdGggTGlzdCAoZSA6OiBfKSAtPiBlIHwgXyAtPiBOaWwgaW5cbiAgbGV0IHRodW5rID0gbWFrZV9sYW1iZGEgKExpc3QgW10pIGV4cHIgZW52X3ZhbCBpblxuICBtYWtlX3Byb21pc2VfZGljdCB+aXRlcmF0aXZlOnRydWUgdGh1bmtcblxubGV0IGlzX3Byb21pc2UgdiA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiX3Byb21pc2VcIiB3aXRoIFNvbWUgKEJvb2wgdHJ1ZSkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgcmVjIGZvcmNlX3Byb21pc2UgcCA9XG4gIGlmIG5vdCAoaXNfcHJvbWlzZSBwKSB0aGVuIHBcbiAgZWxzZSBtYXRjaCBwIHdpdGhcbiAgfCBEaWN0IGQgLT5cbiAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiZm9yY2VkXCIgd2l0aFxuICAgICB8IFNvbWUgKEJvb2wgdHJ1ZSkgLT5cbiAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidmFsdWVcIiB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBOaWwpXG4gICAgIHwgXyAtPlxuICAgICAgIGxldCB0aHVuayA9IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ0aHVua1wiIHdpdGggU29tZSB0IC0+IHQgfCBOb25lIC0+IE5pbCkgaW5cbiAgICAgICBsZXQgcmVzdWx0ID0gY2VrX2NhbGwgdGh1bmsgKExpc3QgW10pIGluXG4gICAgICAgbGV0IGl0ZXJhdGl2ZSA9IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfaXRlcmF0aXZlXCIgd2l0aCBTb21lIChCb29sIHRydWUpIC0+IHRydWUgfCBfIC0+IGZhbHNlKSBpblxuICAgICAgIGxldCBmaW5hbF92YWwgPSBpZiBpdGVyYXRpdmUgJiYgaXNfcHJvbWlzZSByZXN1bHQgdGhlbiBmb3JjZV9wcm9taXNlIHJlc3VsdCBlbHNlIHJlc3VsdCBpblxuICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiZm9yY2VkXCIgKEJvb2wgdHJ1ZSk7XG4gICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2YWx1ZVwiIGZpbmFsX3ZhbDtcbiAgICAgICBmaW5hbF92YWwpXG4gIHwgXyAtPiBwXG5cbmxldCAoKSA9IGlnbm9yZSAocmVnaXN0ZXJfc3BlY2lhbF9mb3JtIChTdHJpbmcgXCJkZWxheVwiKVxuICAoTmF0aXZlRm4gKFwiZGVsYXlcIiwgZnVuIGNhbGxfYXJncyAtPlxuICAgIG1hdGNoIGNhbGxfYXJncyB3aXRoXG4gICAgfCBbYXJnczsgZW52XSAtPiBzZl9kZWxheSBhcmdzIGVudlxuICAgIHwgXyAtPiBOaWwpKSlcblxubGV0ICgpID0gaWdub3JlIChyZWdpc3Rlcl9zcGVjaWFsX2Zvcm0gKFN0cmluZyBcImRlbGF5LWZvcmNlXCIpXG4gIChOYXRpdmVGbiAoXCJkZWxheS1mb3JjZVwiLCBmdW4gY2FsbF9hcmdzIC0+XG4gICAgbWF0Y2ggY2FsbF9hcmdzIHdpdGhcbiAgICB8IFthcmdzOyBlbnZdIC0+IHNmX2RlbGF5X2ZvcmNlIGFyZ3MgZW52XG4gICAgfCBfIC0+IE5pbCkpKVxuXG5cbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9lcXVhbCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3VwZGF0ZV9kdW1teSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMyIsImExIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9IYXNodGJsIiwiU3hfcnVudGltZSIsIlN4X3R5cGVzIiwiU3RkbGliX0xpc3QiLCJTdGRsaWIiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9BcnJheSIsIlN4X3ByaW1pdGl2ZXMiLCJ0cmFtcG9saW5lX2ZuIiwidiIsInRyYW1wb2xpbmUiLCJwcm90b2NvbF9yZWdpc3RyeSIsInNlcV90b19saXN0IiwicyIsImNoYXJzIiwiYyIsIml0ZW1zIiwiYXJyIiwiY3N0X2V2YWwiLCJtYWtlX2Nla19zdGF0ZSIsImNvbnRyb2wiLCJlbnYiLCJrb250IiwiY3N0X2NvbnRpbnVlIiwibWFrZV9jZWtfdmFsdWUiLCJ2YWx1ZSIsImNzdF9lbnYiLCJjc3RfaW9fc3VzcGVuZGVkIiwiY3N0X2tvbnQiLCJjc3RfcGhhc2UiLCJjc3RfcmVxdWVzdCIsIm1ha2VfY2VrX3N1c3BlbmRlZCIsInJlcXVlc3QiLCJkIiwiY3N0IiwiY2VrX3Rlcm1pbmFsX3AiLCJzdGF0ZSIsImFuZCIsImNla19zdXNwZW5kZWRfcCIsImNla19jb250cm9sIiwiY2VrX2VudiIsImNla19rb250IiwiY2VrX3BoYXNlIiwiY2VrX2lvX3JlcXVlc3QiLCJjc3RfdmFsdWUiLCJjZWtfdmFsdWUiLCJjc3RfaWYiLCJtYWtlX2lmX2ZyYW1lIiwidGhlbl9leHByIiwiZWxzZV9leHByIiwiY3N0X3doZW4iLCJtYWtlX3doZW5fZnJhbWUiLCJib2R5X2V4cHJzIiwiY3N0X2JlZ2luIiwibWFrZV9iZWdpbl9mcmFtZSIsInJlbWFpbmluZyIsImNzdF9sZXQiLCJtYWtlX2xldF9mcmFtZSIsIm5hbWUiLCJib2R5IiwibG9jYWwiLCJjc3RfZGVmaW5lIiwibWFrZV9kZWZpbmVfZnJhbWUiLCJoYXNfZWZmZWN0cyIsImVmZmVjdF9saXN0IiwiY3N0X2RlZmluZV9mb3JlaWduIiwibWFrZV9kZWZpbmVfZm9yZWlnbl9mcmFtZSIsInNwZWMiLCJjc3Rfc2V0IiwibWFrZV9zZXRfZnJhbWUiLCJjc3RfYXJnIiwibWFrZV9hcmdfZnJhbWUiLCJldmFsZWQiLCJyYXdfYXJncyIsImhlYWRfbmFtZSIsIm1ha2VfY2FsbF9mcmFtZSIsImFyZ3MiLCJjc3RfY29uZCIsIm1ha2VfY29uZF9mcmFtZSIsInNjaGVtZV9wIiwiY3N0X2NvbmRfYXJyb3ciLCJtYWtlX2NvbmRfYXJyb3dfZnJhbWUiLCJ0ZXN0X3ZhbHVlIiwiY3N0X2Nhc2UiLCJtYWtlX2Nhc2VfZnJhbWUiLCJtYXRjaF92YWwiLCJjc3RfdGhyZWFkIiwibWFrZV90aHJlYWRfZnJhbWUiLCJtb2RlIiwiY3N0X2xpc3QiLCJjc3RfcXVvdGUiLCJ0aHJlYWRfaW5zZXJ0X2FyZyIsImZvcm0iLCJmZW52IiwiY3N0X2FwcGVuZCIsInRocmVhZF9pbnNlcnRfYXJnX2xhc3QiLCJjc3RfbWFwIiwibWFrZV9tYXBfZnJhbWUiLCJyZXN1bHRzIiwibWFrZV9tYXBfaW5kZXhlZF9mcmFtZSIsImNzdF9tdWx0aV9tYXAiLCJtYWtlX211bHRpX21hcF9mcmFtZSIsInJlbWFpbmluZ19saXN0cyIsImNzdF9maWx0ZXIiLCJtYWtlX2ZpbHRlcl9mcmFtZSIsImN1cnJlbnRfaXRlbSIsImNzdF9yZWR1Y2UiLCJtYWtlX3JlZHVjZV9mcmFtZSIsImNzdF9mb3JfZWFjaCIsIm1ha2VfZm9yX2VhY2hfZnJhbWUiLCJjc3Rfc29tZSIsIm1ha2Vfc29tZV9mcmFtZSIsImNzdF9ldmVyeSIsIm1ha2VfZXZlcnlfZnJhbWUiLCJjc3Rfc2NvcGUiLCJtYWtlX3Njb3BlX2ZyYW1lIiwiY3N0X3Byb3ZpZGUiLCJtYWtlX3Byb3ZpZGVfZnJhbWUiLCJjc3RfYmluZCIsIm1ha2VfYmluZF9mcmFtZSIsInByZXZfdHJhY2tpbmciLCJjc3RfcHJvdmlkZV9zZXQiLCJtYWtlX3Byb3ZpZGVfc2V0X2ZyYW1lIiwiY3N0X3Njb3BlX2FjYyIsIm1ha2Vfc2NvcGVfYWNjX2ZyYW1lIiwiY3N0X3Jlc2V0IiwibWFrZV9yZXNldF9mcmFtZSIsImNzdF9kaWN0IiwibWFrZV9kaWN0X2ZyYW1lIiwiY3N0X2FuZCIsIm1ha2VfYW5kX2ZyYW1lIiwiY3N0X29yIiwibWFrZV9vcl9mcmFtZSIsImNzdF9keW5hbWljX3dpbmQiLCJtYWtlX2R5bmFtaWNfd2luZF9mcmFtZSIsInBoYXNlIiwiYm9keV90aHVuayIsImFmdGVyX3RodW5rIiwiY3N0X3JlYWN0aXZlX3Jlc2V0IiwibWFrZV9yZWFjdGl2ZV9yZXNldF9mcmFtZSIsInVwZGF0ZV9mbiIsImZpcnN0X3JlbmRlcl9wIiwiY3N0X2NhbGxjYyIsIm1ha2VfY2FsbGNjX2ZyYW1lIiwiY3N0X3dpbmRfYWZ0ZXIiLCJtYWtlX3dpbmRfYWZ0ZXJfZnJhbWUiLCJ3aW5kZXJzX2xlbiIsImNzdF93aW5kX3JldHVybiIsIm1ha2Vfd2luZF9yZXR1cm5fZnJhbWUiLCJib2R5X3Jlc3VsdCIsImNzdF9kZXJlZiIsIm1ha2VfZGVyZWZfZnJhbWUiLCJjc3RfaG9fc2V0dXAiLCJtYWtlX2hvX3NldHVwX2ZyYW1lIiwiaG9fdHlwZSIsInJlbWFpbmluZ19hcmdzIiwiZXZhbGVkX2FyZ3MiLCJjc3RfY29tcF90cmFjZSIsIm1ha2VfY29tcF90cmFjZV9mcmFtZSIsImZpbGUiLCJjc3RfZmlsZSIsImNzdF9uYW1lIiwia29udF9jb2xsZWN0X2NvbXBfdHJhY2UiLCJmcmFtZSIsImNzdF9oYW5kbGVyIiwibWFrZV9oYW5kbGVyX2ZyYW1lIiwiaGFuZGxlcnMiLCJjc3RfcmVzdGFydCIsIm1ha2VfcmVzdGFydF9mcmFtZSIsInJlc3RhcnRzIiwiY3N0X3NpZ25hbF9yZXR1cm4iLCJtYWtlX3NpZ25hbF9yZXR1cm5fZnJhbWUiLCJzYXZlZF9rb250IiwiY3N0X3JhaXNlX2V2YWwiLCJtYWtlX3JhaXNlX2V2YWxfZnJhbWUiLCJjb250aW51YWJsZV9wIiwiY3N0X3JhaXNlX2d1YXJkIiwibWFrZV9yYWlzZV9ndWFyZF9mcmFtZSIsImNzdF9wZXJmb3JtIiwibWFrZV9wZXJmb3JtX2ZyYW1lIiwiY3N0X3ZtX3Jlc3VtZSIsIm1ha2Vfdm1fcmVzdW1lX2ZyYW1lIiwicmVzdW1lX2ZuIiwiY3N0X2ltcG9ydCIsIm1ha2VfaW1wb3J0X2ZyYW1lIiwiaW1wb3J0X3NldCIsInJlbWFpbmluZ19zZXRzIiwiY3N0X3BhcmFtZXRlcml6ZSIsIm1ha2VfcGFyYW1ldGVyaXplX2ZyYW1lIiwiY3VycmVudF9wYXJhbSIsImZpbmRfbWF0Y2hpbmdfaGFuZGxlciIsImNvbmRpdGlvbiIsInBhaXIiLCJwcmVkIiwiaGFuZGxlcl9mbiIsImNzdF9mIiwia29udF9maW5kX2hhbmRsZXIiLCJtYXRjaCIsImNzdF9hZnRlcl90aHVuayIsImNzdF93aW5kZXJzX2xlbiIsIndpbmRlcnNfcmVmIiwia29udF91bndpbmRfdG9faGFuZGxlciIsInJlc3RfayIsIndpbmRfZXNjYXBlX3RvIiwidGFyZ2V0X2xlbiIsImZpbmRfbmFtZWRfcmVzdGFydCIsImVudHJ5Iiwia29udF9maW5kX3Jlc3RhcnQiLCJjc3RfdHlwZSIsImZyYW1lX3R5cGUiLCJrb250X3B1c2giLCJrb250X3RvcCIsImtvbnRfcG9wIiwia29udF9lbXB0eV9wIiwiY2FwdHVyZWQiLCJrb250X2NhcHR1cmVfdG9fcmVzZXQiLCJrIiwib3IiLCJrb250X3B1c2hfcHJvdmlkZXMiLCJwYWlycyIsImtvbnRfZmluZF9wcm92aWRlIiwia29udF9maW5kX3Njb3BlX2FjYyIsImhhc19yZWFjdGl2ZV9yZXNldF9mcmFtZV9wIiwia29udF9jYXB0dXJlX3RvX3JlYWN0aXZlX3Jlc2V0IiwiY3VzdG9tX3NwZWNpYWxfZm9ybXMiLCJyZWdpc3Rlcl9zcGVjaWFsX2Zvcm0iLCJoYW5kbGVyIiwiY3N0X2pvaW4iLCJsaWJyYXJ5X25hbWVfa2V5IiwiY3N0X2hhc19rZXkiLCJsaWJyYXJ5X3JlZ2lzdHJ5IiwibGlicmFyeV9sb2FkZWRfcCIsImNzdF9leHBvcnRzIiwibGlicmFyeV9leHBvcnRzIiwicmVnaXN0ZXJfbGlicmFyeSIsImV4cG9ydHMiLCJpb19yZWdpc3RyeSIsImlvX3JlZ2lzdGVyX2IiLCJpb19yZWdpc3RlcmVkX3AiLCJpb19sb29rdXAiLCJjc3Rfa2V5cyIsImlvX25hbWVzIiwicGFyYW0iLCJmb3JlaWduX3JlZ2lzdHJ5IiwiZm9yZWlnbl9yZWdpc3Rlcl9iIiwiZm9yZWlnbl9yZWdpc3RlcmVkX3AiLCJmb3JlaWduX2xvb2t1cCIsImZvcmVpZ25fbmFtZXMiLCJyZXN1bHQiLCJmb3JlaWduX3BhcnNlX3BhcmFtcyIsInBhcmFtX2xpc3QiLCJmb3JlaWduX3BhcnNlX2t3YXJnc19iIiwiY3N0X21ldGhvZCIsImNzdF9vYmplY3QiLCJmb3JlaWduX3Jlc29sdmVfYmluZGluZyIsImJpbmRpbmdfc3RyIiwicGFydHMiLCJtZXRob2QiLCJvYmoiLCJjc3RfYXJnc19nb3QiLCJjc3RfZ290IiwiY3N0X2V4cGVjdGVkIiwiY3N0X2FueSIsImNzdF9mb3JlaWduIiwiY3N0X3JhbmdlIiwiZm9yZWlnbl9jaGVja19hcmdzIiwicGFyYW1zIiwiaSIsInZhbCIsImV4cGVjdGVkIiwiY3N0X3Jlc3QiLCJjc3RfZmZpX2FyZ3MiLCJjc3RfYXN5bmMiLCJjc3RfZm4iLCJjc3RfZm9yZWlnbl9kaXNwYXRjaCIsImNzdF9yZXR1cm5zIiwiY3N0X3N5bmMiLCJmb3JlaWduX2J1aWxkX2xhbWJkYSIsInIiLCJjc3RfcGFyYW1zIiwic2ZfZGVmaW5lX2ZvcmVpZ24iLCJzdGVwX3NmX2RlZmluZV9mb3JlaWduIiwibGFtYmRhX2V4cHIiLCJjc3RfY29uY2F0IiwiY3N0X2hvc3RfY2FsbCIsImZvcmVpZ25fZGlzcGF0Y2giLCJiaW5kaW5nIiwicmVzb2x2ZWQiLCJvYmpfbmFtZSIsImNzdF9hcyIsImZvcmVpZ25fcGFyc2VfcGFyYW1zX2xvb3AiLCJhY2MiLCJpdGVtIiwicmVzdF9pdGVtcyIsInQiLCJjc3RfYXJncyIsImNzdF9vcCIsInN0ZXBfc2ZfaW8iLCJpb19hcmdzIiwic3RyaWN0X3JlZiIsInNldF9zdHJpY3RfYiIsInByaW1fcGFyYW1fdHlwZXNfcmVmIiwic2V0X3ByaW1fcGFyYW1fdHlwZXNfYiIsInR5cGVzIiwiY3N0X2Jvb2xlYW4iLCJjc3RfZW5kc193aXRoIiwiY3N0X2tleXdvcmQiLCJjc3RfbGFtYmRhIiwiY3N0X25pbCIsImNzdF9udW1iZXIiLCJjc3Rfc2xpY2UiLCJjc3Rfc3RyaW5nIiwiY3N0X3N5bWJvbCIsInZhbHVlX21hdGNoZXNfdHlwZV9wIiwiZXhwZWN0ZWRfdHlwZSIsImNzdF9UeXBlX2Vycm9yIiwic3RyaWN0X2NoZWNrX2FyZ3MiLCJwb3NpdGlvbmFsIiwicmVzdF90eXBlIiwicCIsImlkeCIsInBfbmFtZSIsInBfdHlwZSIsImNzdF9pbmRleF9vZiIsImJpbmRfbGFtYmRhX3BhcmFtcyIsInJlc3RfaWR4IiwicmVzdF9uYW1lIiwiY3N0X2V4cGVjdHMiLCJjc3RfemlwIiwiY2FsbF9sYW1iZGEiLCJjYWxsZXJfZW52IiwiY3N0X2NoaWxkcmVuIiwiY2FsbF9jb21wb25lbnQiLCJjb21wIiwicGFyc2VkIiwia3dhcmdzIiwiY2hpbGRyZW4iLCJjc3RfYXNzb2MiLCJjc3RfaSIsImNzdF9pbmMiLCJjc3Rfc2tpcCIsInBhcnNlX2tleXdvcmRfYXJncyIsImFyZyIsInNraXAiLCJjb25kX3NjaGVtZV9wIiwiY2xhdXNlcyIsImNzdF9lbHNlIiwiaXNfZWxzZV9jbGF1c2UiLCJ0ZXN0Iiwic2ZfbmFtZWRfbGV0IiwibG9vcF9uYW1lIiwiYmluZGluZ3MiLCJpbml0cyIsInBhaXJfaWR4IiwibG9vcF9ib2R5IiwibG9vcF9mbiIsImluaXRfdmFscyIsImUiLCJzZl9sYW1iZGEiLCJwYXJhbXNfZXhwciIsInBhcmFtX25hbWVzIiwiY3N0X2N1cnJlbnRfZmlsZSIsImNzdF9lZmZlY3RfYW5ub3RhdGlvbnMiLCJjc3RfZWZmZWN0cyIsInNmX2RlZmNvbXAiLCJuYW1lX3N5bSIsInBhcmFtc19yYXciLCJjb21wX25hbWUiLCJoYXNfY2hpbGRyZW4iLCJwYXJhbV90eXBlcyIsImFmZmluaXR5IiwiZWZmZWN0cyIsImVmZmVjdF9hbm5zIiwiZGVmY29tcF9rd2FyZyIsImtleSIsImRlZmF1bHQkIiwiZW5kIiwicGFyc2VfY29tcF9wYXJhbXMiLCJpbl9rZXkiLCJwdHlwZSIsInR5cGVfdmFsIiwic2ZfZGVmaXNsYW5kIiwiaXNsYW5kIiwiZGVmaW9fcGFyc2Vfa3dhcmdzX2IiLCJzZl9kZWZpbyIsInNmX2RlZm1hY3JvIiwicmVzdF9wYXJhbSIsIm1hYyIsImNzdF9pbl9yZXN0IiwicGFyc2VfbWFjcm9fcGFyYW1zIiwicXFfZXhwYW5kIiwidGVtcGxhdGUiLCJoZWFkIiwic3BsaWNlZCIsImNzdF9kZWMiLCJzZl9sZXRyZWMiLCJuYW1lcyIsInZhbF9leHBycyIsInZuYW1lIiwidmFsX2V4cHIiLCJ2YWx1ZXMiLCJuIiwic3RlcF9zZl9sZXRyZWMiLCJ0aGsiLCJzdGVwX3NmX2R5bmFtaWNfd2luZCIsImJlZm9yZSIsImFmdGVyIiwic2Zfc2NvcGUiLCJyZXN0Iiwic2ZfcHJvdmlkZSIsImNzdF9zcl9saXRlcmFscyIsImNzdF9zcl9ydWxlcyIsImNzdF9zeW50YXhfcnVsZXNfYm9keSIsImV4cGFuZF9tYWNybyIsImNsb3N1cmUiLCJjZWtfc3RlcF9sb29wIiwiY3N0X0lPX3N1c3BlbnNpb25faW5fbm9uX0lPX2NvIiwiY2VrX3J1biIsImZpbmFsIiwiY2VrX3Jlc3VtZSIsInN1c3BlbmRlZF9zdGF0ZSIsImNla19zdGVwIiwiY3N0X3N0YXJ0c193aXRoIiwic3RlcF9ldmFsIiwiZXhwciIsImtzIiwiZmlyc3Rfa2V5IiwicmVtYWluaW5nX2VudHJpZXMiLCJzdGVwX3NmX3JhaXNlIiwiY3N0X2d1YXJkX2siLCJjc3RfZ3VhcmRfcmVzdWx0IiwiY3N0X2NhbGxfY2MiLCJjc3RfZmlyc3QiLCJjc3RfaGFuZGxlcl9iaW5kIiwiY3N0X3JhaXNlIiwic3RlcF9zZl9ndWFyZCIsImNvdW50ZXIiLCJ2YXJfY2xhdXNlcyIsInZhciQiLCJzZW50aW5lbCIsInN0ZXBfc2ZfY2FsbGNjIiwic3RlcF9zZl9jYXNlIiwic3RlcF9zZl9sZXRfbWF0Y2giLCJwYXR0ZXJuIiwiY3N0X2RvX2xvb3AiLCJjc3RfZW1pdHRlZCIsImNzdF9tYXBfaW5kZXhlZCIsImNzdF9wZWVrIiwiY3N0X3N5bnRheF9ydWxlcyIsInJlbmRlcl9jaGVjayIsInJlbmRlcl9mbiIsInN0ZXBfZXZhbF9saXN0IiwidGVzdF9jbGF1c2UiLCJiIiwic3RlcHMiLCJrb250X2V4dHJhY3RfcHJvdmlkZXMiLCJyZXN0X2ZyYW1lcyIsImNzdF9jb250YWlucyIsInByb3ZpZGVfYmF0Y2hfZGVwdGhfcmVmIiwicHJvdmlkZV9iYXRjaF9xdWV1ZV9yZWYiLCJwcm92aWRlX3N1YnNjcmliZXJzX3JlZiIsImZpcmVfcHJvdmlkZV9zdWJzY3JpYmVycyIsInN1YnMiLCJzdWIiLCJiYXRjaF9iZWdpbl9iIiwiYmF0Y2hfZW5kX2IiLCJxdWV1ZSIsImJpbmRfdHJhY2tpbmdfcmVmIiwic3RlcF9zZl9iaW5kIiwicHJldiIsInN0ZXBfc2ZfcGFyYW1ldGVyaXplIiwiZmlyc3RfcGFpciIsInN5bnRheF9ydWxlc19tYXRjaCIsImxpdGVyYWxzIiwic3ludGF4X3J1bGVzX21hdGNoX2xpc3QiLCJwaSIsImZpIiwicGxlbiIsImZsZW4iLCJzdWJfcGF0Iiwibl9lbGxpcHNpcyIsInN1Yl9iaW5kaW5ncyIsInJlc3RfcmVzdWx0IiwibWVyZ2VkIiwiZXhpc3RpbmciLCJzdWJfcmVzdWx0Iiwic3ludGF4X3J1bGVzX2ZpbmRfdmFyIiwiZm91bmQiLCJzeW50YXhfcnVsZXNfZmluZF9hbGxfdmFycyIsInN5bnRheF9ydWxlc19pbnN0YW50aWF0ZSIsInN5bnRheF9ydWxlc19pbnN0YW50aWF0ZV9saXN0IiwiZWxlbSIsImhhc19lbGxpcHNpcyIsImFsbF92YXJzIiwiY291bnQiLCJleHBhbmRlZCIsInZhcl9uYW1lIiwic3ludGF4X3J1bGVzX2V4cGFuZCIsInJ1bGVzIiwiZnVsbF9mb3JtIiwic3ludGF4X3J1bGVzX3RyeV9ydWxlcyIsInJ1bGUiLCJzZl9zeW50YXhfcnVsZXMiLCJzdGVwX3NmX2RlZmluZV9saWJyYXJ5IiwibGliX3NwZWMiLCJkZWNscyIsImxpYl9lbnYiLCJib2R5X2Zvcm1zIiwiZGVjbCIsImtpbmQiLCJleHBvcnRfZGljdCIsImNzdF9leGNlcHQiLCJjc3Rfb25seSIsImNzdF9wcmVmaXgiLCJjc3RfcmVuYW1lIiwiYmluZF9pbXBvcnRfc2V0IiwiaWQiLCJwZngiLCJzdGVwX3NmX2ltcG9ydCIsInJlc3Rfc2V0cyIsInN0ZXBfc2ZfcGVyZm9ybSIsInNmX2RlZmluZV9yZWNvcmRfdHlwZSIsInR5cGVfc3ltIiwiY3Rvcl9zcGVjIiwicHJlZF9zeW0iLCJmaWVsZF9zcGVjcyIsInJhd19uYW1lIiwidHlwZV9uYW1lIiwiY3Rvcl9uYW1lIiwiY3Rvcl9wYXJhbXMiLCJwcmVkX25hbWUiLCJmaWVsZF9uYW1lcyIsImZzIiwicnRkX3VpZCIsImFjY2Vzc29yX25hbWUiLCJtdXRhdG9yX25hbWUiLCJjc3RfcHJvdG9jb2xfcmVnaXN0cnkiLCJjc3RfaW1wbCIsImNzdF9hcml0eSIsImNzdF9nZXQiLCJjc3RfaW1wbHMiLCJjc3RfbWV0aG9kcyIsInNmX2RlZmluZV9wcm90b2NvbCIsInByb3RvX25hbWUiLCJtZXRob2Rfc3BlY3MiLCJwbmFtZSIsIm1ldGhvZF9uYW1lIiwic2VsZl9zeW0iLCJzZl9pbXBsZW1lbnQiLCJyYXdfdHlwZV9uYW1lIiwibWV0aG9kX2RlZnMiLCJwcm90byIsImltcGxzIiwidHlwZV9pbXBscyIsIm1ldGhvZF9kZWYiLCJtbmFtZSIsIm0iLCJwcm90b19tZXRob2QiLCJhcml0eSIsInNhdGlzZmllc19wIiwid2FybmluZ3MiLCJjaGVja19tYXRjaF9leGhhdXN0aXZlbmVzcyIsInBhdHRlcm5zIiwiaGFzX3dpbGRjYXJkIiwiaGFzX2Vsc2UiLCJoYXNfdHJ1ZSIsImhhc19mYWxzZSIsIm1hdGNoX2ZpbmRfY2xhdXNlIiwiY2xhdXNlIiwiY3N0X2FkdCIsImNzdF9jdG9yIiwiY3N0X2ZpZWxkcyIsIm1hdGNoX3BhdHRlcm4iLCJmaWVsZF9wYXR0ZXJucyIsImZpZWxkcyIsInN0ZXBfc2ZfbWF0Y2giLCJzdGVwX3NmX2hhbmRsZXJfYmluZCIsImhhbmRsZXJfc3BlY3MiLCJzdGVwX3NmX3Jlc3RhcnRfY2FzZSIsInJlc3RhcnRfc3BlY3MiLCJzdGVwX3NmX3NpZ25hbCIsInN0ZXBfc2ZfaW52b2tlX3Jlc3RhcnQiLCJybiIsInJlc3RhcnRfbmFtZSIsInJlc3RhcnRfYXJnIiwicmVzdGFydF9mcmFtZSIsInJlc3Rfa29udCIsInJlc3RhcnRfZW52Iiwic3RlcF9zZl9pZiIsInN0ZXBfc2Zfd2hlbiIsInN0ZXBfc2ZfYmVnaW4iLCJzdGVwX3NmX2xldCIsImZpcnN0X2JpbmRpbmciLCJyZXN0X2JpbmRpbmdzIiwic3RlcF9zZl9kZWZpbmUiLCJmbl9uYW1lIiwiYm9keV9wYXJ0cyIsInZhbF9pZHgiLCJzdGVwX3NmX3NldF9iIiwic3RlcF9zZl9hbmQiLCJzdGVwX3NmX29yIiwic3RlcF9zZl9jb25kIiwic3RlcF9zZl90aHJlYWRfZmlyc3QiLCJjc3RfbGFzdCIsInN0ZXBfc2ZfdGhyZWFkX2xhc3QiLCJzdGVwX3NmX3RocmVhZF9hcyIsImluaXQiLCJmb3JtcyIsInN0ZXBfc2ZfbGFtYmRhIiwic3RlcF9zZl9zY29wZSIsInJlc3RfYXJncyIsInN0ZXBfc2ZfcHJvdmlkZSIsInN0ZXBfc2ZfY29udGV4dCIsImRlZmF1bHRfdmFsIiwic3YiLCJzdGVwX3NmX3BlZWsiLCJzdGVwX3NmX3Byb3ZpZGVfYiIsImNzdF9zY29wZV9lbWl0Iiwic3RlcF9zZl9lbWl0Iiwic3RlcF9zZl9lbWl0dGVkIiwic3RlcF9zZl9yZXNldCIsInN0ZXBfc2Zfc2hpZnQiLCJrX25hbWUiLCJjYXB0dXJlZF9yZXN1bHQiLCJzaGlmdF9lbnYiLCJzdGVwX3NmX2RlcmVmIiwiY2VrX2NhbGwiLCJhIiwiY3N0X3VwZGF0ZV9mbiIsInJlYWN0aXZlX3NoaWZ0X2RlcmVmIiwic2lnIiwic2Nhbl9yZXN1bHQiLCJjYXB0dXJlZF9mcmFtZXMiLCJyZXNldF9mcmFtZSIsInJlbWFpbmluZ19rb250Iiwic3Vic2NyaWJlciIsIm5ld19yZXNldCIsIm5ld19rb250IiwiaW5pdGlhbF9rb250Iiwic3RlcF9ldmFsX2NhbGwiLCJobmFtZSIsImhvX2Zvcm1fbmFtZV9wIiwiaG9fZm5fcCIsImhvX3N3YXBfYXJncyIsImhvX3NldHVwX2Rpc3BhdGNoIiwib3JkZXJlZCIsImNvbGxzIiwiaGVhZHMiLCJ0YWlscyIsImNvbGwiLCJzdGVwX2hvX21hcCIsInN0ZXBfaG9fbWFwX2luZGV4ZWQiLCJzdGVwX2hvX2ZpbHRlciIsInN0ZXBfaG9fcmVkdWNlIiwic3RlcF9ob19zb21lIiwic3RlcF9ob19ldmVyeSIsInN0ZXBfaG9fZm9yX2VhY2giLCJjc3Rfdm1fc3VzcGVuZGVkIiwiY3N0X2JvZHkiLCJjc3RfZXZhbGVkIiwiY3N0X21hdGNoX3ZhbCIsImNzdF9yZW1haW5pbmciLCJjc3RfcmVzdWx0cyIsImNzdF9yZXN1bWUiLCJjc3Rfc2NoZW1lIiwiY3N0X3N1YnNjcmliZXJzIiwibGFzdF9lcnJvcl9rb250X3JlZiIsInN0ZXBfY29udGludWUiLCJjb252ZXJ0ZWRfdmFsIiwibmV4dF9iaW5kaW5nIiwiZWZmZWN0X25hbWVzIiwibmV4dCIsIm5leHRfdGVzdCIsIm5leHRfY2xhdXNlcyIsIm5leHRfY2xhdXNlIiwiYmluZF9uYW1lIiwicmVzdF9mb3JtcyIsIm5ld19lbnYiLCJuZXdfZXZhbGVkIiwibGFzdF9yZXN1bHQiLCJjb21wbGV0ZWQiLCJuZXh0X2VudHJ5IiwiY3R4IiwiZGVwX2xpc3QiLCJub3RpZnlfZm4iLCJmaXJzdF9wIiwibmV3X2ZyYW1lIiwidHJhY2tlZCIsInRhcmdldCIsIm9sZF92YWwiLCJpbmRleGVkIiwibmV3X3Jlc3VsdHMiLCJjYWxsX2FyZ3MiLCJuZXh0X2ZyYW1lIiwidW53aW5kX3Jlc3VsdCIsInVud291bmRfayIsImJvZHlfZXhwciIsInByb3ZpZGVfa29udCIsImNvbnRpbnVlX3dpdGhfY2FsbCIsInVpZCIsIndfbGVuIiwiY29udF9kYXRhIiwiaml0X3Jlc3VsdCIsInNmX2Nhc2Vfc3RlcF9sb29wIiwidGVzdF92YWwiLCJldmFsX2V4cHJfY2VrIiwidHJhbXBvbGluZV9jZWsiLCJtYWtlX2Nvcm91dGluZSIsInRodW5rIiwiZXZhbF9leHByIiwicHJvdmlkZV9zdWJzY3JpYmVycyIsImNla19ydW5faXRlcmF0aXZlIiwiZXhuIiwibXNnIiwiY29sbGVjdF9jb21wX3RyYWNlIiwidHJhY2UiLCJmb3JtYXRfY29tcF90cmFjZSIsImxpbmVzIiwicHJlZml4IiwiZW5oYW5jZV9lcnJvcl93aXRoX3RyYWNlIiwic2ZfZGVmaW5lX3R5cGUiLCJlbnZfdmFsIiwibCIsImN0b3Jfc3BlY3MiLCJlbnZfYmluZF92IiwiY3N0X2FkdF9yZWdpc3RyeSIsInJlZ2lzdHJ5IiwiY3Rvcl9uYW1lcyIsInN5bSIsInBhcmdzIiwiY24iLCJjdG9yX2FyZ3MiLCJmbmFtZSIsImNzdF9kZWZpbmVfdHlwZSIsImNzdF92YWx1ZXMiLCJtYWtlX3ZhbHVlc19kaWN0IiwidnMiLCJ2YWx1ZXNfdG9fbGlzdCIsInNmX2xldF92YWx1ZXMiLCJsb2NhbF9lbnYiLCJucyIsImxhc3RfdmFsIiwic2ZfZGVmaW5lX3ZhbHVlcyIsImNzdF9sZXRfdmFsdWVzIiwiY3N0X2RlZmluZV92YWx1ZXMiLCJjc3RfaXRlcmF0aXZlIiwiY3N0X3Byb21pc2UiLCJjc3RfZm9yY2VkIiwiY3N0X3RodW5rIiwibWFrZV9wcm9taXNlX2RpY3QiLCJvcHQiLCJpdGVyYXRpdmUiLCJzZl9kZWxheSIsInNmX2RlbGF5X2ZvcmNlIiwiaXNfcHJvbWlzZSIsImZvcmNlX3Byb21pc2UiLCJmaW5hbF92YWwiLCJjc3RfZGVsYXkiLCJjc3RfZGVsYXlfZm9yY2UiXSwibWFw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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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QTtBQUFBLGVBQUFqRTtBQUFBQSxPQUVaO0FBQUE7QUFBQTtBQUFBLGFBQUEvcEIsTUFBQSxNQUFBdUQsT0FBQTtBQUFBLFNBQ2lCLDBCQUNQO0FBQUE7QUFBQTtBQUFBLE9BQUg7QUFBQSxNQUFHO0FBQUEsT0FBQTBxQixrQkR2c0NkO0FBQUEsR0N5c0NnQjtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQUFsRTtBQUFBQSxPQUVaO0FBQUE7QUFBQTtBQUFBLGFBQUEvcEIsTUFBQSxNQUFBdUQsT0FBQTtBQUFBLFNBQ2lCLGdDQUNQO0FBQUE7QUFBQTtBQUFBLE9BQUg7QUFBQSxNQUFHO0FBQUEsR0FBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQ3c0NqQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjU5NDQ0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF92bS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBTWCBieXRlY29kZSBWTSDigJQgc3RhY2stYmFzZWQgaW50ZXJwcmV0ZXIuXG5cbiAgICBFeGVjdXRlcyBieXRlY29kZSBwcm9kdWNlZCBieSBjb21waWxlci5zeC5cbiAgICBEZXNpZ25lZCBmb3Igc3BlZWQ6IGFycmF5LWJhc2VkIHN0YWNrLCBkaXJlY3QgZGlzcGF0Y2gsXG4gICAgbm8gYWxsb2NhdGlvbiBwZXIgc3RlcCAodW5saWtlIHRoZSBDRUsgbWFjaGluZSkuXG5cbiAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybS1uYXRpdmUgZXhlY3V0aW9uIGVuZ2luZS4gVGhlIHNhbWUgYnl0ZWNvZGVcbiAgICBydW5zIG9uIGFsbCBwbGF0Zm9ybXMgKE9DYW1sLCBKUywgV0FTTSkuXG5cbiAgICBWTSB0eXBlcyAodm1fY29kZSwgdm1fdXB2YWx1ZV9jZWxsLCB2bV9jbG9zdXJlKSBhcmUgZGVmaW5lZCBpblxuICAgIHN4X3R5cGVzLm1sIHRvIHNoYXJlIHRoZSBtdXR1YWwgcmVjdXJzaW9uIGJsb2NrIHdpdGggW3ZhbHVlXS4gKilcblxub3BlbiBTeF90eXBlc1xuXG4oKiogQ2FsbCBmcmFtZSDigJQgb25lIHBlciBmdW5jdGlvbiBpbnZvY2F0aW9uLiAqKVxudHlwZSBmcmFtZSA9IHtcbiAgY2xvc3VyZSAgIDogdm1fY2xvc3VyZTtcbiAgbXV0YWJsZSBpcCA6IGludDtcbiAgYmFzZSAgICAgIDogaW50OyAgKCogYmFzZSBpbmRleCBpbiB2YWx1ZSBzdGFjayBmb3IgbG9jYWxzICopXG4gIGxvY2FsX2NlbGxzIDogKGludCwgdm1fdXB2YWx1ZV9jZWxsKSBIYXNodGJsLnQ7ICAoKiBzbG90IOKGkiBzaGFyZWQgY2VsbCBmb3IgY2FwdHVyZWQgbG9jYWxzICopXG59XG5cbigqKiBFeGNlcHRpb24gaGFuZGxlciBlbnRyeSBvbiB0aGUgaGFuZGxlciBzdGFjay4gKilcbnR5cGUgaGFuZGxlcl9lbnRyeSA9IHtcbiAgaF9jYXRjaF9pcCAgICA6IGludDsgICAgKCogSVAgdG8ganVtcCB0byB3aGVuIGV4Y2VwdGlvbiBpcyByYWlzZWQgKilcbiAgaF9mcmFtZV9kZXB0aCA6IGludDsgICAgKCogbnVtYmVyIG9mIGZyYW1lcyB3aGVuIGhhbmRsZXIgd2FzIHB1c2hlZCAqKVxuICBoX3NwICAgICAgICAgIDogaW50OyAgICAoKiBzdGFjayBwb2ludGVyIHdoZW4gaGFuZGxlciB3YXMgcHVzaGVkICopXG4gIGhfZnJhbWUgICAgICAgOiBmcmFtZTsgICgqIHRoZSBmcmFtZSB0aGF0IHB1c2hlZCB0aGUgaGFuZGxlciAqKVxufVxuXG4oKiogVk0gc3RhdGUuICopXG50eXBlIHZtID0ge1xuICBtdXRhYmxlIHN0YWNrICA6IHZhbHVlIGFycmF5O1xuICBtdXRhYmxlIHNwICAgICA6IGludDtcbiAgbXV0YWJsZSBmcmFtZXMgOiBmcmFtZSBsaXN0O1xuICBnbG9iYWxzICAgICAgICA6IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQ7ICAoKiBsaXZlIHJlZmVyZW5jZSB0byBrZXJuZWwgZW52ICopXG4gIG11dGFibGUgcGVuZGluZ19jZWsgOiB2YWx1ZSBvcHRpb247ICAoKiBzdXNwZW5kZWQgQ0VLIHN0YXRlIGZyb20gQ29tcG9uZW50L0xhbWJkYSBjYWxsICopXG4gIG11dGFibGUgaGFuZGxlcl9zdGFjayA6IGhhbmRsZXJfZW50cnkgbGlzdDsgICgqIGV4Y2VwdGlvbiBoYW5kbGVyIHN0YWNrICopXG4gIG11dGFibGUgcmV1c2Vfc3RhY2sgOiAoZnJhbWUgbGlzdCAqIGludCkgbGlzdDsgICgqIHNhdmVkIGNhbGxfY2xvc3VyZV9yZXVzZSBjb250aW51YXRpb25zICopXG59XG5cbigqKiBSYWlzZWQgd2hlbiBPUF9QRVJGT1JNIGlzIGV4ZWN1dGVkLiBDYXJyaWVzIHRoZSBJTyByZXF1ZXN0IGRpY3RcbiAgICBhbmQgYSByZWZlcmVuY2UgdG8gdGhlIFZNICh3aGljaCBpcyBpbiBhIHJlc3VtYWJsZSBzdGF0ZTpcbiAgICBpcCBwYXN0IE9QX1BFUkZPUk0sIHN0YWNrIHJlYWR5IGZvciBhIHJlc3VsdCBwdXNoKS4gKilcbmV4Y2VwdGlvbiBWbVN1c3BlbmRlZCBvZiB2YWx1ZSAqIHZtXG5cbigqIFJlZ2lzdGVyIHRoZSBWTSBzdXNwZW5zaW9uIGNvbnZlcnRlciBzbyBzeF9ydW50aW1lLnN4X2FwcGx5X2NlayBjYW5cbiAgIGNhdGNoIFZtU3VzcGVuZGVkIGFuZCBjb252ZXJ0IGl0IHRvIENla1BlcmZvcm1SZXF1ZXN0IHdpdGhvdXQgYVxuICAgZGlyZWN0IGRlcGVuZGVuY3kgb24gdGhpcyBtb2R1bGUuICopXG5sZXQgKCkgPSBTeF90eXBlcy5fY29udmVydF92bV9zdXNwZW5zaW9uIDo9IChmdW4gZXhuIC0+XG4gIG1hdGNoIGV4biB3aXRoXG4gIHwgVm1TdXNwZW5kZWQgKHJlcXVlc3QsIF92bSkgLT4gcmFpc2UgKENla1BlcmZvcm1SZXF1ZXN0IHJlcXVlc3QpXG4gIHwgXyAtPiAoKSlcblxuXG4oKiogRm9yd2FyZCByZWZlcmVuY2UgZm9yIEpJVCBjb21waWxhdGlvbiDigJQgc2V0IGFmdGVyIGRlZmluaXRpb24uICopXG5sZXQgaml0X2NvbXBpbGVfcmVmIDogKGxhbWJkYSAtPiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50IC0+IHZtX2Nsb3N1cmUgb3B0aW9uKSByZWYgPVxuICByZWYgKGZ1biBfIF8gLT4gTm9uZSlcblxuKCogSklUIHRocmVzaG9sZCBhbmQgY291bnRlcnMgbGl2ZSBpbiBTeF90eXBlcyBzbyBwcmltaXRpdmVzIGNhbiByZWFkIHRoZW1cbiAgIHdpdGhvdXQgY3JlYXRpbmcgYSBzeF9wcmltaXRpdmVzIOKGkiBzeF92bSBkZXBlbmRlbmN5IGN5Y2xlLiAqKVxuXG4oKiogU2VudGluZWwgY2xvc3VyZSBpbmRpY2F0aW5nIEpJVCBjb21waWxhdGlvbiB3YXMgYXR0ZW1wdGVkIGFuZCBmYWlsZWQuXG4gICAgUHJldmVudHMgcmV0cnlpbmcgY29tcGlsYXRpb24gb24gZXZlcnkgY2FsbC4gKilcbmxldCBqaXRfZmFpbGVkX3NlbnRpbmVsID0ge1xuICB2bV9jb2RlID0geyB2Y19hcml0eSA9IC0xOyB2Y19yZXN0X2FyaXR5ID0gLTE7IHZjX2xvY2FscyA9IDA7IHZjX2J5dGVjb2RlID0gW3x8XTsgdmNfY29uc3RhbnRzID0gW3x8XTtcbiAgICAgICAgICAgICAgdmNfYnl0ZWNvZGVfbGlzdCA9IE5vbmU7IHZjX2NvbnN0YW50c19saXN0ID0gTm9uZSB9O1xuICB2bV91cHZhbHVlcyA9IFt8fF07IHZtX25hbWUgPSBTb21lIFwiX19qaXRfZmFpbGVkX19cIjsgdm1fZW52X3JlZiA9IEhhc2h0YmwuY3JlYXRlIDA7IHZtX2Nsb3N1cmVfZW52ID0gTm9uZVxufVxuXG5sZXQgaXNfaml0X2ZhaWxlZCBjbCA9IGNsLnZtX2NvZGUudmNfYXJpdHkgPSAtMVxuXG4oKiogQ3VycmVudCBhY3RpdmUgVk0g4oCUIGFsbG93cyBITyBwcmltaXRpdmVzIChtYXAsIGZpbHRlciwgZm9yLWVhY2gsIHNvbWUpXG4gICAgdG8gY2FsbCBWbUNsb3N1cmUgY2FsbGJhY2tzIG9uIHRoZSBzYW1lIFZNIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgIFRoaXMgaXMgY3JpdGljYWw6IGNyZWF0aW5nIGEgbmV3IFZNIHBlciBjYWxsYmFjayBsb3NlcyB0aGUgY2FsbGluZyBWTSdzXG4gICAgc3RhY2svZnJhbWUgY29udGV4dCwgY2F1c2luZyB1cHZhbHVlLWNhcHR1cmVkIGhvc3Qgb2JqZWN0cyB0byBiZWNvbWVcbiAgICBpbmFjY2Vzc2libGUuICopXG5sZXQgX2FjdGl2ZV92bSA6IHZtIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG5sZXQgY3JlYXRlIGdsb2JhbHMgPVxuICB7IHN0YWNrID0gQXJyYXkubWFrZSA0MDk2IE5pbDsgc3AgPSAwOyBmcmFtZXMgPSBbXTsgZ2xvYmFsczsgcGVuZGluZ19jZWsgPSBOb25lOyBoYW5kbGVyX3N0YWNrID0gW107IHJldXNlX3N0YWNrID0gW10gfVxuXG4oKiogU3RhY2sgb3BzIOKAlCBpbmxpbmVkIGZvciBzcGVlZC4gKilcbmxldCBwdXNoIHZtIHYgPVxuICBpZiB2bS5zcCA+PSBBcnJheS5sZW5ndGggdm0uc3RhY2sgdGhlbiBiZWdpblxuICAgIGxldCBucyA9IEFycmF5Lm1ha2UgKHZtLnNwICogMikgTmlsIGluXG4gICAgQXJyYXkuYmxpdCB2bS5zdGFjayAwIG5zIDAgdm0uc3A7XG4gICAgdm0uc3RhY2sgPC0gbnNcbiAgZW5kO1xuICB2bS5zdGFjay4odm0uc3ApIDwtIHY7XG4gIHZtLnNwIDwtIHZtLnNwICsgMVxuXG5sZXRbQGlubGluZV0gcG9wIHZtID1cbiAgdm0uc3AgPC0gdm0uc3AgLSAxO1xuICB2bS5zdGFjay4odm0uc3ApXG5cbmxldFtAaW5saW5lXSBwZWVrIHZtID0gdm0uc3RhY2suKHZtLnNwIC0gMSlcblxuKCoqIFJlYWQgb3BlcmFuZHMuICopXG5sZXRbQGlubGluZV0gcmVhZF91OCBmID1cbiAgbGV0IHYgPSBmLmNsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi5pcCkgaW5cbiAgZi5pcCA8LSBmLmlwICsgMTsgdlxuXG5sZXRbQGlubGluZV0gcmVhZF91MTYgZiA9XG4gIGxldCBsbyA9IGYuY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLmlwKSBpblxuICBsZXQgaGkgPSBmLmNsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi5pcCArIDEpIGluXG4gIGYuaXAgPC0gZi5pcCArIDI7XG4gIGxvIGxvciAoaGkgbHNsIDgpXG5cbmxldFtAaW5saW5lXSByZWFkX2kxNiBmID1cbiAgbGV0IHYgPSByZWFkX3UxNiBmIGluXG4gIGlmIHYgPj0gMzI3NjggdGhlbiB2IC0gNjU1MzYgZWxzZSB2XG5cbigqKiBXcmFwIGEgVk0gY2xvc3VyZSBhcyBhbiBTWCB2YWx1ZSAoTmF0aXZlRm4pLiAqKVxubGV0IGNsb3N1cmVfdG9fdmFsdWUgY2wgPVxuICBOYXRpdmVGbiAoXCJ2bTpcIiBeIChtYXRjaCBjbC52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiYW5vblwiKSxcbiAgICBmdW4gYXJncyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTV9DTE9TVVJFX0NBTEw6XCIgXiBTdHJpbmcuY29uY2F0IFwiLFwiIChMaXN0Lm1hcCBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBhcmdzKSkpKVxuICAoKiBQbGFjZWhvbGRlciDigJQgYWN0dWFsIGNhbGxzIGdvIHRocm91Z2ggdm1fY2FsbCBiZWxvdyAqKVxuXG4oKiogUGFyc2Uga2V5d29yZCBhcmdzIGZyb20gYW4gZXZhbHVhdGVkIGFyZ3MgbGlzdC5cbiAgICBUaGUgY29tcGlsZXIgY29udmVydHMgOmtleXdvcmQgdG8gaXRzIHN0cmluZyBuYW1lLCBzbyB3ZSBuZWVkIHRoZVxuICAgIGNvbXBvbmVudCdzIHBhcmFtIGxpc3QgdG8gaWRlbnRpZnkgd2hpY2ggc3RyaW5ncyBhcmUga2V5d29yZCBuYW1lcy5cbiAgICBSZXR1cm5zIChrd2FyZ3NfaGFzaHRibCwgY2hpbGRyZW5fbGlzdCkuICopXG5sZXQgcGFyc2Vfa2V5d29yZF9hcmdzIHBhcmFtcyBhcmdzID1cbiAgbGV0IHBhcmFtX3NldCA9IEhhc2h0YmwuY3JlYXRlIChMaXN0Lmxlbmd0aCBwYXJhbXMpIGluXG4gIExpc3QuaXRlciAoZnVuIHAgLT4gSGFzaHRibC5yZXBsYWNlIHBhcmFtX3NldCBwIHRydWUpIHBhcmFtcztcbiAgbGV0IGt3YXJncyA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgbGV0IGNoaWxkcmVuID0gcmVmIFtdIGluXG4gIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgIHwgKFN0cmluZyBrIHwgS2V5d29yZCBrKSA6OiB2IDo6IHJlc3Qgd2hlbiBIYXNodGJsLm1lbSBwYXJhbV9zZXQgayAtPlxuICAgICAgSGFzaHRibC5yZXBsYWNlIGt3YXJncyBrIHY7IGdvIHJlc3RcbiAgICB8IHYgOjogcmVzdCAtPiBjaGlsZHJlbiA6PSB2IDo6ICFjaGlsZHJlbjsgZ28gcmVzdFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgZ28gYXJncztcbiAgKGt3YXJncywgTGlzdC5yZXYgIWNoaWxkcmVuKVxuXG5sZXQgX3ZtX2NvbXBfaml0X2NvdW50ID0gcmVmIDBcbmxldCBfdm1fY29tcF9jZWtfY291bnQgPSByZWYgMFxubGV0IF92bV9pbnNuX2NvdW50ID0gcmVmIDBcbmxldCBfdm1fY2FsbF9jb3VudCA9IHJlZiAwXG5sZXQgX3ZtX2Nla19jb3VudCA9IHJlZiAwXG5sZXQgdm1fcmVzZXRfY291bnRlcnMgKCkgPSBfdm1faW5zbl9jb3VudCA6PSAwOyBfdm1fY2FsbF9jb3VudCA6PSAwOyBfdm1fY2VrX2NvdW50IDo9IDA7XG4gIF92bV9jb21wX2ppdF9jb3VudCA6PSAwOyBfdm1fY29tcF9jZWtfY291bnQgOj0gMFxubGV0IHZtX3JlcG9ydF9jb3VudGVycyAoKSA9XG4gIFByaW50Zi5lcHJpbnRmIFwiW3ZtLXBlcmZdIGluc25zPSVkIGNhbGxzPSVkIGNla19mYWxsYmFja3M9JWQgY29tcF9qaXQ9JWQgY29tcF9jZWs9JWRcXG4lIVwiXG4gICAgIV92bV9pbnNuX2NvdW50ICFfdm1fY2FsbF9jb3VudCAhX3ZtX2Nla19jb3VudCAhX3ZtX2NvbXBfaml0X2NvdW50ICFfdm1fY29tcF9jZWtfY291bnRcblxuKCoqIEdsb2JhbCBmbGFnOiB0cnVlIHdoaWxlIGEgSklUIGNvbXBpbGF0aW9uIGlzIGluIHByb2dyZXNzLlxuICAgIFByZXZlbnRzIHRoZSBKSVQgaG9vayBmcm9tIGludGVyY2VwdGluZyBjYWxscyBkdXJpbmcgY29tcGlsYXRpb24sXG4gICAgd2hpY2ggd291bGQgY2F1c2UgaW5maW5pdGUgY2FzY2FkZXMgKGNvbXBpbGluZyB0aGUgY29tcGlsZXIpLiAqKVxubGV0IF9qaXRfY29tcGlsaW5nID0gcmVmIGZhbHNlXG5cbigqKiBQdXNoIGEgVk0gY2xvc3VyZSBmcmFtZSBvbnRvIHRoZSBjdXJyZW50IFZNIOKAlCBubyBuZXcgVk0gYWxsb2NhdGlvbi5cbiAgICBUaGlzIGlzIHRoZSBmYXN0IHBhdGggZm9yIGludHJhLVZNIGNsb3N1cmUgY2FsbHMuICopXG5sZXQgcHVzaF9jbG9zdXJlX2ZyYW1lIHZtIGNsIGFyZ3MgPVxuICBsZXQgZnJhbWUgPSB7IGNsb3N1cmUgPSBjbDsgaXAgPSAwOyBiYXNlID0gdm0uc3A7IGxvY2FsX2NlbGxzID0gSGFzaHRibC5jcmVhdGUgNCB9IGluXG4gIGxldCByZXN0X2FyaXR5ID0gY2wudm1fY29kZS52Y19yZXN0X2FyaXR5IGluXG4gIGlmIHJlc3RfYXJpdHkgPj0gMCB0aGVuIGJlZ2luXG4gICAgKCogJnJlc3QgZnVuY3Rpb246IHB1c2ggcG9zaXRpb25hbCBhcmdzLCBjb2xsZWN0IHJlbWFpbmRlciBpbnRvIGEgbGlzdC5cbiAgICAgICBGb3IgKGZuIChhIGIgJnJlc3QgYykgYm9keSkgd2l0aCByZXN0X2FyaXR5PTI6XG4gICAgICAgICBzbG90czogMD1hLCAxPWIsIDI9YyAodGhlIHJlc3QgbGlzdCkgKilcbiAgICBsZXQgbmFyZ3MgPSBMaXN0Lmxlbmd0aCBhcmdzIGluXG4gICAgbGV0IHJlYyBwdXNoX2FyZ3MgaSA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+XG4gICAgICAgIGZvciBfID0gaSB0byByZXN0X2FyaXR5IC0gMSBkbyBwdXNoIHZtIE5pbCBkb25lO1xuICAgICAgICBwdXNoIHZtIChMaXN0IFtdKVxuICAgICAgfCBhIDo6IHJlbWFpbmluZyAtPlxuICAgICAgICBpZiBpIDwgcmVzdF9hcml0eSB0aGVuIChwdXNoIHZtIGE7IHB1c2hfYXJncyAoaSArIDEpIHJlbWFpbmluZylcbiAgICAgICAgZWxzZSBwdXNoIHZtIChMaXN0IChhIDo6IHJlbWFpbmluZykpXG4gICAgaW5cbiAgICBwdXNoX2FyZ3MgMCBhcmdzO1xuICAgIGxldCB1c2VkID0gKGlmIG5hcmdzID4gcmVzdF9hcml0eSB0aGVuIHJlc3RfYXJpdHkgKyAxIGVsc2UgbmFyZ3MgKyAxKSBpblxuICAgIGZvciBfID0gdXNlZCB0byBjbC52bV9jb2RlLnZjX2xvY2FscyAtIDEgZG8gcHVzaCB2bSBOaWwgZG9uZVxuICBlbmQgZWxzZSBiZWdpblxuICAgIExpc3QuaXRlciAoZnVuIGEgLT4gcHVzaCB2bSBhKSBhcmdzO1xuICAgIGZvciBfID0gTGlzdC5sZW5ndGggYXJncyB0byBjbC52bV9jb2RlLnZjX2xvY2FscyAtIDEgZG8gcHVzaCB2bSBOaWwgZG9uZVxuICBlbmQ7XG4gIHZtLmZyYW1lcyA8LSBmcmFtZSA6OiB2bS5mcmFtZXNcblxuKCoqIENvbnZlcnQgY29tcGlsZXIgb3V0cHV0IChTWCBkaWN0KSB0byBhIHZtX2NvZGUgb2JqZWN0LiAqKVxubGV0IGNvZGVfZnJvbV92YWx1ZSB2ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgKCogQWNjZXB0IGJvdGggY29tcGlsZXIgb3V0cHV0IGtleXMgKGJ5dGVjb2RlL2NvbnN0YW50cy9hcml0eSkgYW5kXG4gICAgICAgU1ggdm0tY29kZSBrZXlzICh2Yy1ieXRlY29kZS92Yy1jb25zdGFudHMvdmMtYXJpdHkpICopXG4gICAgbGV0IGZpbmQyIGsxIGsyID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIGsxIHdpdGhcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gciB8IE5vbmUgLT4gSGFzaHRibC5maW5kX29wdCBkIGsyIGluXG4gICAgbGV0IGJjX2xpc3QgPSBtYXRjaCBmaW5kMiBcImJ5dGVjb2RlXCIgXCJ2Yy1ieXRlY29kZVwiIHdpdGhcbiAgICAgIHwgU29tZSAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSAtPlxuICAgICAgICBBcnJheS5vZl9saXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gbWF0Y2ggeCB3aXRoXG4gICAgICAgICAgfCBJbnRlZ2VyIG4gLT4gbiB8IE51bWJlciBuIC0+IGludF9vZl9mbG9hdCBuIHwgXyAtPiAwKSBsKVxuICAgICAgfCBfIC0+IFt8fF1cbiAgICBpblxuICAgIGxldCBlbnRyaWVzID0gbWF0Y2ggZmluZDIgXCJjb25zdGFudHNcIiBcInZjLWNvbnN0YW50c1wiIHdpdGhcbiAgICAgIHwgU29tZSAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSAtPiBBcnJheS5vZl9saXN0IGxcbiAgICAgIHwgXyAtPiBbfHxdXG4gICAgaW5cbiAgICBsZXQgY29uc3RhbnRzID0gQXJyYXkubWFwIChmdW4gZW50cnkgLT5cbiAgICAgIG1hdGNoIGVudHJ5IHdpdGhcbiAgICAgIHwgRGljdCBlZCB3aGVuIEhhc2h0YmwubWVtIGVkIFwiYnl0ZWNvZGVcIiB8fCBIYXNodGJsLm1lbSBlZCBcInZjLWJ5dGVjb2RlXCIgLT4gZW50cnlcbiAgICAgIHwgXyAtPiBlbnRyeVxuICAgICkgZW50cmllcyBpblxuICAgIGxldCBhcml0eSA9IG1hdGNoIGZpbmQyIFwiYXJpdHlcIiBcInZjLWFyaXR5XCIgd2l0aFxuICAgICAgfCBTb21lIChJbnRlZ2VyIG4pIC0+IG4gfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IDBcbiAgICBpblxuICAgIGxldCByZXN0X2FyaXR5ID0gbWF0Y2ggZmluZDIgXCJyZXN0LWFyaXR5XCIgXCJ2Yy1yZXN0LWFyaXR5XCIgd2l0aFxuICAgICAgfCBTb21lIChJbnRlZ2VyIG4pIC0+IG4gfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IC0xXG4gICAgaW5cbiAgICAoKiBDb21wdXRlIGxvY2FscyBmcm9tIGJ5dGVjb2RlOiBzY2FuIGZvciBoaWdoZXN0IExPQ0FMX0dFVC9MT0NBTF9TRVQgc2xvdC5cbiAgICAgICBUaGUgY29tcGlsZXIncyBhcml0eSBtYXkgdW5kZXJjb3VudCB3aGVuIG5lc3RlZCBsZXRzIGFkZCBtYW55IGxvY2Fscy4gKilcbiAgICBsZXQgbWF4X2xvY2FsID0gcmVmIChhcml0eSAtIDEpIGluXG4gICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBiY19saXN0IGluXG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgICBsZXQgb3AgPSBiY19saXN0LighaSkgaW5cbiAgICAgIGlmIChvcCA9IDE2ICgqIExPQ0FMX0dFVCAqKSB8fCBvcCA9IDE3ICgqIExPQ0FMX1NFVCAqKSkgJiYgIWkgKyAxIDwgbGVuIHRoZW5cbiAgICAgICAgKGxldCBzbG90ID0gYmNfbGlzdC4oIWkgKyAxKSBpblxuICAgICAgICAgaWYgc2xvdCA+ICFtYXhfbG9jYWwgdGhlbiBtYXhfbG9jYWwgOj0gc2xvdDtcbiAgICAgICAgIGkgOj0gIWkgKyAyKVxuICAgICAgZWxzZSBpZiBvcCA9IDE4ICgqIFVQVkFMVUVfR0VUICopIHx8IG9wID0gMTkgKCogVVBWQUxVRV9TRVQgKilcbiAgICAgICAgICAgfHwgb3AgPSA4ICgqIEpVTVBfSUZfRkFMU0UgKikgfHwgb3AgPSAzMyAoKiBKVU1QX0lGX0ZBTFNFX3UxNiAqKVxuICAgICAgICAgICB8fCBvcCA9IDM0ICgqIEpVTVBfSUZfVFJVRSAqKSB0aGVuXG4gICAgICAgIGkgOj0gIWkgKyAyXG4gICAgICBlbHNlIGlmIG9wID0gMSAoKiBDT05TVCAqKSB8fCBvcCA9IDIwICgqIEdMT0JBTF9HRVQgKikgfHwgb3AgPSAyMSAoKiBHTE9CQUxfU0VUICopXG4gICAgICAgICAgIHx8IG9wID0gMzIgKCogSlVNUCAqKSB8fCBvcCA9IDUxICgqIENMT1NVUkUgKikgfHwgb3AgPSA1MiAoKiBDQUxMX1BSSU0gKilcbiAgICAgICAgICAgfHwgb3AgPSA2NCAoKiBNQUtFX0xJU1QgKikgfHwgb3AgPSA2NSAoKiBNQUtFX0RJQ1QgKikgdGhlblxuICAgICAgICBpIDo9ICFpICsgMyAgKCogdTE2IG9wZXJhbmQgKilcbiAgICAgIGVsc2VcbiAgICAgICAgaSA6PSAhaSArIDFcbiAgICBkb25lO1xuICAgIGxldCBsb2NhbHMgPSAhbWF4X2xvY2FsICsgMSArIDE2IGluICAoKiArMTYgaGVhZHJvb20gZm9yIHRlbXBvcmFyaWVzICopXG4gICAgeyB2Y19hcml0eSA9IGFyaXR5OyB2Y19yZXN0X2FyaXR5ID0gcmVzdF9hcml0eTsgdmNfbG9jYWxzID0gbG9jYWxzO1xuICAgICAgdmNfYnl0ZWNvZGUgPSBiY19saXN0OyB2Y19jb25zdGFudHMgPSBjb25zdGFudHM7XG4gICAgICB2Y19ieXRlY29kZV9saXN0ID0gTm9uZTsgdmNfY29uc3RhbnRzX2xpc3QgPSBOb25lIH1cbiAgfCBfIC0+IHsgdmNfYXJpdHkgPSAwOyB2Y19yZXN0X2FyaXR5ID0gLTE7IHZjX2xvY2FscyA9IDE2OyB2Y19ieXRlY29kZSA9IFt8fF07IHZjX2NvbnN0YW50cyA9IFt8fF07XG4gICAgICAgICAgIHZjX2J5dGVjb2RlX2xpc3QgPSBOb25lOyB2Y19jb25zdGFudHNfbGlzdCA9IE5vbmUgfVxuXG4oKiogSklULWNvbXBpbGUgYSBjb21wb25lbnQgb3IgaXNsYW5kIGJvZHkuXG4gICAgV3JhcHMgYm9keSBhcyAoZm4gKHBhcmFtMSBwYXJhbTIgLi4uIFtjaGlsZHJlbl0pIGJvZHkpIGFuZCBjb21waWxlcy5cbiAgICBSZXR1cm5zIFNvbWUgdm1fY2xvc3VyZSBvbiBzdWNjZXNzLCBOb25lIG9uIGZhaWx1cmUuICopXG5sZXQgaml0X2NvbXBpbGVfY29tcCB+bmFtZSB+cGFyYW1zIH5oYXNfY2hpbGRyZW4gfmJvZHkgfmNsb3N1cmUgZ2xvYmFscyA9XG4gIHRyeVxuICAgIGxldCBfY29tcGlsZV9mbiA9IHRyeSBIYXNodGJsLmZpbmQgZ2xvYmFscyBcImNvbXBpbGVcIlxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJKSVQ6IGNvbXBpbGVyIG5vdCBsb2FkZWRcIikgaW5cbiAgICBsZXQgcGFyYW1fbmFtZXMgPSBwYXJhbXMgQCAoaWYgaGFzX2NoaWxkcmVuIHRoZW4gW1wiY2hpbGRyZW5cIl0gZWxzZSBbXSkgaW5cbiAgICBsZXQgcGFyYW1fc3ltcyA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTeW1ib2wgcykgcGFyYW1fbmFtZXMpIGluXG4gICAgbGV0IGZuX2V4cHIgPSBMaXN0IFtTeW1ib2wgXCJmblwiOyBwYXJhbV9zeW1zOyBib2R5XSBpblxuICAgIGxldCBxdW90ZWQgPSBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyBmbl9leHByXSBpblxuICAgIGxldCBjb21waWxlX2VudiA9IFN4X3R5cGVzLmVudl9leHRlbmQgKFN4X3R5cGVzLm1ha2VfZW52ICgpKSBpblxuICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBIYXNodGJsLnJlcGxhY2UgY29tcGlsZV9lbnYuYmluZGluZ3MgKFN4X3R5cGVzLmludGVybiBrKSB2KSBnbG9iYWxzO1xuICAgIGxldCByZXN1bHQgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IFtTeW1ib2wgXCJjb21waWxlXCI7IHF1b3RlZF0pIChFbnYgY29tcGlsZV9lbnYpIGluXG4gICAgKG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgfCBEaWN0IGQgd2hlbiBIYXNodGJsLm1lbSBkIFwiYnl0ZWNvZGVcIiAtPlxuICAgICAgbGV0IG91dGVyX2NvZGUgPSBjb2RlX2Zyb21fdmFsdWUgcmVzdWx0IGluXG4gICAgICBsZXQgYmMgPSBvdXRlcl9jb2RlLnZjX2J5dGVjb2RlIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggYmMgPj0gNCAmJiBiYy4oMCkgPSA1MSAoKiBPUF9DTE9TVVJFICopIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGlkeCA9IGJjLigxKSBsb3IgKGJjLigyKSBsc2wgOCkgaW5cbiAgICAgICAgaWYgaWR4IDwgQXJyYXkubGVuZ3RoIG91dGVyX2NvZGUudmNfY29uc3RhbnRzIHRoZW5cbiAgICAgICAgICBsZXQgaW5uZXJfdmFsID0gb3V0ZXJfY29kZS52Y19jb25zdGFudHMuKGlkeCkgaW5cbiAgICAgICAgICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBpbm5lcl92YWwgaW5cbiAgICAgICAgICBTb21lIHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gW3x8XTtcbiAgICAgICAgICAgICAgICAgdm1fbmFtZSA9IFNvbWUgbmFtZTsgdm1fZW52X3JlZiA9IGdsb2JhbHM7XG4gICAgICAgICAgICAgICAgIHZtX2Nsb3N1cmVfZW52ID0gU29tZSBjbG9zdXJlIH1cbiAgICAgICAgZWxzZSBOb25lXG4gICAgICBlbmQgZWxzZSBOb25lXG4gICAgfCBfIC0+IE5vbmUpXG4gIHdpdGggZSAtPlxuICAgIFByaW50Zi5lcHJpbnRmIFwiW2ppdC1jb21wXSBGQUlMICVzOiAlc1xcbiUhXCIgbmFtZSAoUHJpbnRleGMudG9fc3RyaW5nIGUpO1xuICAgIE5vbmVcblxuKCoqIENhbGwgYW4gU1ggdmFsdWUgdmlhIENFSywgZGV0ZWN0aW5nIHN1c3BlbnNpb24gaW5zdGVhZCBvZiBlcnJvcmluZy5cbiAgICBSZXR1cm5zIHRoZSByZXN1bHQgdmFsdWUsIG9yIHJhaXNlcyBWbVN1c3BlbmRlZCBpZiBDRUsgc3VzcGVuZHMuXG4gICAgU2F2ZXMgdGhlIHN1c3BlbmRlZCBDRUsgc3RhdGUgaW4gdm0ucGVuZGluZ19jZWsgZm9yIGxhdGVyIHJlc3VtZS4gKilcbmxldCBjZWtfY2FsbF9vcl9zdXNwZW5kIHZtIGYgYXJncyA9XG4gIGluY3IgX3ZtX2Nla19jb3VudDtcbiAgKCogUmVtb3ZlZCBkZWJ1ZyB0cmFjZSAqKVxuICBsZXQgYSA9IG1hdGNoIGFyZ3Mgd2l0aCBOaWwgLT4gW10gfCBMaXN0IGwgLT4gbCB8IF8gLT4gW2FyZ3NdIGluXG4gICgqIFJlcGxhY2UgX2FjdGl2ZV92bSB3aXRoIGFuIGVtcHR5IGlzb2xhdGlvbiBWTSBzbyBjYWxsX2Nsb3N1cmVfcmV1c2VcbiAgICAgaW5zaWRlIHRoZSBDRUsgcHVzaGVzIG9udG8gYW4gZW1wdHkgZnJhbWUgc3RhY2sgcmF0aGVyIHRoYW4gdGhlIGNhbGxlcidzLlxuICAgICBXaXRob3V0IHRoaXMsIGEgVm1DbG9zdXJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgQ0VLIChlLmcuIGhzLXdhaXQpXG4gICAgIG1lcmdlcyBmcmFtZXMgd2l0aCB0aGUgY2FsbGVyJ3MgVk0gKGUuZy4gZG8tcmVwZWF0KSwgYW5kIG9uIHJlc3VtZVxuICAgICB0aGUgVk0gc2tpcHMgdGhlIENFSydzIHJlbWFpbmluZyBjb250aW51YXRpb24gKHdyb25nIG11dGF0aW9uIG9yZGVyKS5cbiAgICAgVXNpbmcgU29tZShpc29sYXRpb24pIHJhdGhlciB0aGFuIE5vbmUga2VlcHMgdGhlIGNhbGxfY2xvc3VyZV9yZXVzZVxuICAgICBcIlNvbWVcIiBwYXRoIHdoaWNoIHByZXNlcnZlcyBleGNlcHRpb24gaWRlbnRpdHkgaW4ganNfb2Zfb2NhbWwuICopXG4gIGxldCBzYXZlZF9hY3RpdmUgPSAhX2FjdGl2ZV92bSBpblxuICBfYWN0aXZlX3ZtIDo9IFNvbWUgKGNyZWF0ZSB2bS5nbG9iYWxzKTtcbiAgbGV0IHN0YXRlID0gU3hfcmVmLmNvbnRpbnVlX3dpdGhfY2FsbCBmIChMaXN0IGEpIChFbnYgKFN4X3R5cGVzLm1ha2VfZW52ICgpKSkgKExpc3QgYSkgKExpc3QgW10pIGluXG4gIGxldCBmaW5hbCA9IFN4X3JlZi5jZWtfc3RlcF9sb29wIHN0YXRlIGluXG4gIF9hY3RpdmVfdm0gOj0gc2F2ZWRfYWN0aXZlO1xuICBtYXRjaCBTeF9ydW50aW1lLmdldF92YWwgZmluYWwgKFN0cmluZyBcInBoYXNlXCIpIHdpdGhcbiAgfCBTdHJpbmcgXCJpby1zdXNwZW5kZWRcIiAtPlxuICAgIHZtLnBlbmRpbmdfY2VrIDwtIFNvbWUgZmluYWw7XG4gICAgcmFpc2UgKFZtU3VzcGVuZGVkIChTeF9ydW50aW1lLmdldF92YWwgZmluYWwgKFN0cmluZyBcInJlcXVlc3RcIiksIHZtKSlcbiAgfCBfIC0+IFN4X3JlZi5jZWtfdmFsdWUgZmluYWxcblxuKCoqIEV4ZWN1dGUgYSBjbG9zdXJlIHdpdGggYXJndW1lbnRzIOKAlCBjcmVhdGVzIGEgZnJlc2ggVk0uXG4gICAgVXNlZCBmb3IgZW50cnkgcG9pbnRzOiBKSVQgTGFtYmRhIGNhbGxzLCBtb2R1bGUgZXhlY3V0aW9uLCBjcm9zcy1ib3VuZGFyeS4gKilcbmxldCByZWMgY2FsbF9jbG9zdXJlIGNsIGFyZ3MgZ2xvYmFscyA9XG4gIGluY3IgX3ZtX2NhbGxfY291bnQ7XG4gIGxldCBwcmV2X3ZtID0gIV9hY3RpdmVfdm0gaW5cbiAgbGV0IHZtID0gY3JlYXRlIGdsb2JhbHMgaW5cbiAgX2FjdGl2ZV92bSA6PSBTb21lIHZtO1xuICBwdXNoX2Nsb3N1cmVfZnJhbWUgdm0gY2wgYXJncztcbiAgKHRyeSBydW4gdm0gd2l0aCBlIC0+IF9hY3RpdmVfdm0gOj0gcHJldl92bTsgcmFpc2UgZSk7XG4gIF9hY3RpdmVfdm0gOj0gcHJldl92bTtcbiAgcG9wIHZtXG5cbigqKiBDYWxsIGEgVm1DbG9zdXJlIG9uIHRoZSBhY3RpdmUgVk0gaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgVGhpcyBpcyB0aGUgcGF0aCB1c2VkIGJ5IEhPIHByaW1pdGl2ZXMgKG1hcCwgZmlsdGVyLCBmb3ItZWFjaCwgc29tZSkgc29cbiAgICBjYWxsYmFja3MgcnVuIG9uIHRoZSBzYW1lIFZNLCBhdm9pZGluZyBwZXItY2FsbCBWTSBhbGxvY2F0aW9uIG92ZXJoZWFkLiAqKVxuYW5kIGNhbGxfY2xvc3VyZV9yZXVzZSBjbCBhcmdzID1cbiAgbWF0Y2ggIV9hY3RpdmVfdm0gd2l0aFxuICB8IFNvbWUgdm0gLT5cbiAgICBsZXQgc2F2ZWRfc3AgPSB2bS5zcCBpblxuICAgIHB1c2hfY2xvc3VyZV9mcmFtZSB2bSBjbCBhcmdzO1xuICAgIGxldCBzYXZlZF9mcmFtZXMgPSBMaXN0LnRsIHZtLmZyYW1lcyBpblxuICAgIHZtLmZyYW1lcyA8LSBbTGlzdC5oZCB2bS5mcmFtZXNdO1xuICAgICh0cnkgcnVuIHZtXG4gICAgIHdpdGhcbiAgICAgfCBWbVN1c3BlbmRlZCBfIGFzIGUgLT5cbiAgICAgICAoKiBJTyBzdXNwZW5zaW9uOiBzYXZlIHRoZSBjYWxsZXIncyBjb250aW51YXRpb24gb24gdGhlIHJldXNlIHN0YWNrLlxuICAgICAgICAgIERPTidUIG1lcmdlIGZyYW1lcyDigJQgdGhhdCBjb3JydXB0cyB0aGUgZnJhbWUgY2hhaW4gd2l0aCBuZXN0ZWRcbiAgICAgICAgICBjbG9zdXJlcy4gT24gcmVzdW1lLCByZXN0b3JlX3JldXNlIGluIHJlc3VtZV92bSBwcm9jZXNzZXMgdGhlc2VcbiAgICAgICAgICBpbiBpbm5lcm1vc3QtZmlyc3Qgb3JkZXIgYWZ0ZXIgdGhlIGNhbGxiYWNrIGZpbmlzaGVzLiAqKVxuICAgICAgIHZtLnJldXNlX3N0YWNrIDwtIChzYXZlZF9mcmFtZXMsIHNhdmVkX3NwKSA6OiB2bS5yZXVzZV9zdGFjaztcbiAgICAgICByYWlzZSBlXG4gICAgIHwgZSAtPlxuICAgICAgIHZtLmZyYW1lcyA8LSBzYXZlZF9mcmFtZXM7XG4gICAgICAgdm0uc3AgPC0gc2F2ZWRfc3A7XG4gICAgICAgcmFpc2UgZSk7XG4gICAgdm0uZnJhbWVzIDwtIHNhdmVkX2ZyYW1lcztcbiAgICBwb3Agdm1cbiAgfCBOb25lIC0+XG4gICAgY2FsbF9jbG9zdXJlIGNsIGFyZ3MgY2wudm1fZW52X3JlZlxuXG4oKiogQ2FsbCBhIHZhbHVlIGFzIGEgZnVuY3Rpb24g4oCUIGRpc3BhdGNoIGJ5IHR5cGUuXG4gICAgVm1DbG9zdXJlOiBwdXNoZXMgZnJhbWUgb24gY3VycmVudCBWTSAoZmFzdCBpbnRyYS1WTSBwYXRoKS5cbiAgICBMYW1iZGE6IHRyaWVzIEpJVCB0aGVuIGZhbGxzIGJhY2sgdG8gQ0VLLlxuICAgIE5hdGl2ZUZuOiBjYWxscyBkaXJlY3RseS4gKilcbmFuZCB2bV9jYWxsIHZtIGYgYXJncyA9XG4gIG1hdGNoIGYgd2l0aFxuICB8IFZtQ2xvc3VyZSBjbCAtPlxuICAgICgqIEZhc3QgcGF0aDogcHVzaCBmcmFtZSBvbiBjdXJyZW50IFZNIOKAlCBubyBhbGxvY2F0aW9uLCBlbmFibGVzIFRDTyAqKVxuICAgIHB1c2hfY2xvc3VyZV9mcmFtZSB2bSBjbCBhcmdzXG4gIHwgTmF0aXZlRm4gKF9uYW1lLCBmbikgLT5cbiAgICBsZXQgcmVzdWx0ID0gZm4gYXJncyBpblxuICAgIHB1c2ggdm0gcmVzdWx0XG4gIHwgTGFtYmRhIGwgLT5cbiAgICAobWF0Y2ggbC5sX2NvbXBpbGVkIHdpdGhcbiAgICAgfCBTb21lIGNsIHdoZW4gbm90IChpc19qaXRfZmFpbGVkIGNsKSAtPlxuICAgICAgICgqIENhY2hlZCBieXRlY29kZSDigJQgcHVzaCBmcmFtZSBvbiBjdXJyZW50IFZNICopXG4gICAgICAgcHVzaF9jbG9zdXJlX2ZyYW1lIHZtIGNsIGFyZ3NcbiAgICAgfCBTb21lIF8gLT5cbiAgICAgICBwdXNoIHZtIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtIGYgKExpc3QgYXJncykpXG4gICAgIHwgTm9uZSAtPlxuICAgICAgIGlmIGwubF9uYW1lIDw+IE5vbmVcbiAgICAgICB0aGVuIGJlZ2luXG4gICAgICAgICBsLmxfY2FsbF9jb3VudCA8LSBsLmxfY2FsbF9jb3VudCArIDE7XG4gICAgICAgICBpZiBsLmxfY2FsbF9jb3VudCA+PSAhU3hfdHlwZXMuaml0X3RocmVzaG9sZCAmJiAhU3hfdHlwZXMuaml0X2J1ZGdldCA+IDAgdGhlbiBiZWdpblxuICAgICAgICAgICBsLmxfY29tcGlsZWQgPC0gU29tZSBqaXRfZmFpbGVkX3NlbnRpbmVsO1xuICAgICAgICAgICBtYXRjaCAhaml0X2NvbXBpbGVfcmVmIGwgdm0uZ2xvYmFscyB3aXRoXG4gICAgICAgICAgIHwgU29tZSBjbCAtPlxuICAgICAgICAgICAgIGluY3IgU3hfdHlwZXMuaml0X2NvbXBpbGVkX2NvdW50O1xuICAgICAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIGNsO1xuICAgICAgICAgICAgICgqIFBoYXNlIDIgTFJVOiB0cmFjayB0aGlzIGNvbXBpbGVkIGxhbWJkYTsgaWYgY2FjaGUgZXhjZWVkcyBidWRnZXQsXG4gICAgICAgICAgICAgICAgZXZpY3QgdGhlIG9sZGVzdCBieSBjbGVhcmluZyBpdHMgbF9jb21waWxlZCBzbG90LiAqKVxuICAgICAgICAgICAgIFF1ZXVlLmFkZCAobC5sX3VpZCwgTGFtYmRhIGwpIFN4X3R5cGVzLmppdF9jYWNoZV9xdWV1ZTtcbiAgICAgICAgICAgICB3aGlsZSBRdWV1ZS5sZW5ndGggU3hfdHlwZXMuaml0X2NhY2hlX3F1ZXVlID4gIVN4X3R5cGVzLmppdF9idWRnZXQgZG9cbiAgICAgICAgICAgICAgIChtYXRjaCBRdWV1ZS5wb3AgU3hfdHlwZXMuaml0X2NhY2hlX3F1ZXVlIHdpdGhcbiAgICAgICAgICAgICAgICB8IChfLCBMYW1iZGEgZXZfbCkgLT4gZXZfbC5sX2NvbXBpbGVkIDwtIE5vbmU7IGluY3IgU3hfdHlwZXMuaml0X2V2aWN0ZWRfY291bnRcbiAgICAgICAgICAgICAgICB8IF8gLT4gKCkpXG4gICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICBwdXNoX2Nsb3N1cmVfZnJhbWUgdm0gY2wgYXJnc1xuICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICBpbmNyIFN4X3R5cGVzLmppdF9za2lwcGVkX2NvdW50O1xuICAgICAgICAgICAgIHB1c2ggdm0gKGNla19jYWxsX29yX3N1c3BlbmQgdm0gZiAoTGlzdCBhcmdzKSlcbiAgICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgIGluY3IgU3hfdHlwZXMuaml0X3RocmVzaG9sZF9za2lwcGVkX2NvdW50O1xuICAgICAgICAgICBwdXNoIHZtIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtIGYgKExpc3QgYXJncykpXG4gICAgICAgICBlbmRcbiAgICAgICBlbmRcbiAgICAgICBlbHNlXG4gICAgICAgICBwdXNoIHZtIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtIGYgKExpc3QgYXJncykpKVxuICB8IENvbXBvbmVudCBjIC0+XG4gICAgbGV0IChrd2FyZ3MsIGNoaWxkcmVuKSA9IHBhcnNlX2tleXdvcmRfYXJncyBjLmNfcGFyYW1zIGFyZ3MgaW5cbiAgICAoKiBHZXQgb3IgY29tcGlsZSB0aGUgY29tcG9uZW50IGJvZHkgKilcbiAgICBsZXQgY29tcGlsZWQgPSBtYXRjaCBjLmNfY29tcGlsZWQgd2l0aFxuICAgICAgfCBTb21lIGNsIHdoZW4gbm90IChpc19qaXRfZmFpbGVkIGNsKSAtPiBTb21lIGNsXG4gICAgICB8IFNvbWUgXyAtPiBOb25lXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgYy5jX2NvbXBpbGVkIDwtIFNvbWUgaml0X2ZhaWxlZF9zZW50aW5lbDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGppdF9jb21waWxlX2NvbXAgfm5hbWU6Yy5jX25hbWUgfnBhcmFtczpjLmNfcGFyYW1zXG4gICAgICAgICAgfmhhc19jaGlsZHJlbjpjLmNfaGFzX2NoaWxkcmVuIH5ib2R5OmMuY19ib2R5XG4gICAgICAgICAgfmNsb3N1cmU6Yy5jX2Nsb3N1cmUgdm0uZ2xvYmFscyBpblxuICAgICAgICAobWF0Y2ggcmVzdWx0IHdpdGggU29tZSBjbCAtPiBjLmNfY29tcGlsZWQgPC0gU29tZSBjbCB8IE5vbmUgLT4gKCkpO1xuICAgICAgICByZXN1bHRcbiAgICBpblxuICAgIChtYXRjaCBjb21waWxlZCB3aXRoXG4gICAgIHwgU29tZSBjbCAtPlxuICAgICAgIGluY3IgX3ZtX2NvbXBfaml0X2NvdW50O1xuICAgICAgICgqIEJ1aWxkIHBvc2l0aW9uYWwgYXJnczoga2V5d29yZCBwYXJhbXMgaW4gb3JkZXIsIHRoZW4gY2hpbGRyZW4gKilcbiAgICAgICBsZXQgY2FsbF9hcmdzID0gTGlzdC5tYXAgKGZ1biBwIC0+XG4gICAgICAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGt3YXJncyBwIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IE5pbFxuICAgICAgICkgYy5jX3BhcmFtcyBpblxuICAgICAgIGxldCBjYWxsX2FyZ3MgPSBpZiBjLmNfaGFzX2NoaWxkcmVuXG4gICAgICAgICB0aGVuIGNhbGxfYXJncyBAIFtMaXN0IGNoaWxkcmVuXVxuICAgICAgICAgZWxzZSBjYWxsX2FyZ3MgaW5cbiAgICAgICAodHJ5IHB1c2ggdm0gKGNhbGxfY2xvc3VyZSBjbCBjYWxsX2FyZ3MgY2wudm1fZW52X3JlZilcbiAgICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAgaW5jciBfdm1fY2VrX2NvdW50OyBpbmNyIF92bV9jb21wX2Nla19jb3VudDtcbiAgICAgICAgICBwdXNoIHZtIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtIGYgKExpc3QgYXJncykpKVxuICAgICB8IE5vbmUgLT5cbiAgICAgICBpbmNyIF92bV9jZWtfY291bnQ7IGluY3IgX3ZtX2NvbXBfY2VrX2NvdW50O1xuICAgICAgIHB1c2ggdm0gKGNla19jYWxsX29yX3N1c3BlbmQgdm0gZiAoTGlzdCBhcmdzKSkpXG4gIHwgSXNsYW5kIGkgLT5cbiAgICBsZXQgKGt3YXJncywgY2hpbGRyZW4pID0gcGFyc2Vfa2V5d29yZF9hcmdzIGkuaV9wYXJhbXMgYXJncyBpblxuICAgIGxldCBjb21waWxlZCA9IG1hdGNoIGkuaV9jb21waWxlZCB3aXRoXG4gICAgICB8IFNvbWUgY2wgd2hlbiBub3QgKGlzX2ppdF9mYWlsZWQgY2wpIC0+IFNvbWUgY2xcbiAgICAgIHwgU29tZSBfIC0+IE5vbmVcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICBpLmlfY29tcGlsZWQgPC0gU29tZSBqaXRfZmFpbGVkX3NlbnRpbmVsO1xuICAgICAgICBsZXQgcmVzdWx0ID0gaml0X2NvbXBpbGVfY29tcCB+bmFtZTppLmlfbmFtZSB+cGFyYW1zOmkuaV9wYXJhbXNcbiAgICAgICAgICB+aGFzX2NoaWxkcmVuOmkuaV9oYXNfY2hpbGRyZW4gfmJvZHk6aS5pX2JvZHlcbiAgICAgICAgICB+Y2xvc3VyZTppLmlfY2xvc3VyZSB2bS5nbG9iYWxzIGluXG4gICAgICAgIChtYXRjaCByZXN1bHQgd2l0aCBTb21lIGNsIC0+IGkuaV9jb21waWxlZCA8LSBTb21lIGNsIHwgTm9uZSAtPiAoKSk7XG4gICAgICAgIHJlc3VsdFxuICAgIGluXG4gICAgKG1hdGNoIGNvbXBpbGVkIHdpdGhcbiAgICAgfCBTb21lIGNsIC0+XG4gICAgICAgaW5jciBfdm1fY29tcF9qaXRfY291bnQ7XG4gICAgICAgbGV0IGNhbGxfYXJncyA9IExpc3QubWFwIChmdW4gcCAtPlxuICAgICAgICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBrd2FyZ3MgcCB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBOaWxcbiAgICAgICApIGkuaV9wYXJhbXMgaW5cbiAgICAgICBsZXQgY2FsbF9hcmdzID0gaWYgaS5pX2hhc19jaGlsZHJlblxuICAgICAgICAgdGhlbiBjYWxsX2FyZ3MgQCBbTGlzdCBjaGlsZHJlbl1cbiAgICAgICAgIGVsc2UgY2FsbF9hcmdzIGluXG4gICAgICAgKHRyeSBwdXNoIHZtIChjYWxsX2Nsb3N1cmUgY2wgY2FsbF9hcmdzIGNsLnZtX2Vudl9yZWYpXG4gICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgIGluY3IgX3ZtX2Nla19jb3VudDsgaW5jciBfdm1fY29tcF9jZWtfY291bnQ7XG4gICAgICAgICAgcHVzaCB2bSAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bSBmIChMaXN0IGFyZ3MpKSlcbiAgICAgfCBOb25lIC0+XG4gICAgICAgaW5jciBfdm1fY2VrX2NvdW50OyBpbmNyIF92bV9jb21wX2Nla19jb3VudDtcbiAgICAgICBwdXNoIHZtIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtIGYgKExpc3QgYXJncykpKVxuICB8IF8gLT5cbiAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJWTTogbm90IGNhbGxhYmxlOiBcIiBeIFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIGYpKVxuXG4oKiogTWFpbiBleGVjdXRpb24gbG9vcCDigJQgaXRlcmF0aXZlIChubyBPQ2FtbCBzdGFjayBncm93dGgpLlxuICAgIFZtQ2xvc3VyZSBjYWxscyBwdXNoIGZyYW1lczsgdGhlIGxvb3AgcGlja3MgdGhlbSB1cC5cbiAgICBPUF9UQUlMX0NBTEwgKyBWbUNsb3N1cmUgPSB0cnVlIFRDTzogZHJvcCBmcmFtZSwgcHVzaCBuZXcsIGxvb3AuICopXG5hbmQgcnVuIHZtID1cbiAgd2hpbGUgdm0uZnJhbWVzIDw+IFtdIGRvXG4gICAgbWF0Y2ggdm0uZnJhbWVzIHdpdGhcbiAgICB8IFtdIC0+ICgpICAoKiBndWFyZCBoYW5kbGVkIGJ5IHdoaWxlIGNvbmRpdGlvbiAqKVxuICAgIHwgZnJhbWUgOjogcmVzdF9mcmFtZXMgLT5cbiAgICAgIGxldCBiYyA9IGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZSBpblxuICAgICAgbGV0IGNvbnN0cyA9IGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMgaW5cbiAgICAgIGlmIGZyYW1lLmlwID49IEFycmF5Lmxlbmd0aCBiYyB0aGVuIGJlZ2luXG4gICAgICAgICgqIEJ5dGVjb2RlIGV4aGF1c3RlZCB3aXRob3V0IGV4cGxpY2l0IFJFVFVSTiDigJQgcG9wIGZyYW1lIGxpa2UgUkVUVVJOICopXG4gICAgICAgIGxldCBmbl9uYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgIFByaW50Zi5lcHJpbnRmIFwiW3ZtXSBXQVJOOiBieXRlY29kZSBleGhhdXN0ZWQgd2l0aG91dCBSRVRVUk4gaW4gJXMgKGJhc2U9JWQgc3A9JWQgZnJhbWVzPSVkKVxcbiUhXCJcbiAgICAgICAgICBmbl9uYW1lIGZyYW1lLmJhc2Ugdm0uc3AgKExpc3QubGVuZ3RoIHJlc3RfZnJhbWVzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlmIHZtLnNwID4gZnJhbWUuYmFzZSB0aGVuIHBvcCB2bSBlbHNlIE5pbCBpblxuICAgICAgICB2bS5mcmFtZXMgPC0gcmVzdF9mcmFtZXM7XG4gICAgICAgIHZtLnNwIDwtIGZyYW1lLmJhc2U7XG4gICAgICAgIGlmIHJlc3RfZnJhbWVzIDw+IFtdIHRoZW4gcHVzaCB2bSByZXN1bHRcbiAgICAgICAgKCogSWYgbm8gbW9yZSBmcmFtZXMsIHJlc3VsdCBzdGF5cyBvbiBzdGFjayBmb3IgY2FsbF9jbG9zdXJlIHRvIHBvcCAqKVxuICAgICAgZW5kXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBzYXZlZF9pcCA9IGZyYW1lLmlwIGluXG4gICAgICAgIGxldCBvcCA9IGJjLihmcmFtZS5pcCkgaW5cbiAgICAgICAgZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyAxO1xuICAgICAgICBpbmNyIF92bV9pbnNuX2NvdW50O1xuICAgICAgICAoKiBDaGVjayB0aW1lb3V0IOKAlCBjb21wYXJlIFZNIGluc3RydWN0aW9uIGNvdW50IGFnYWluc3Qgc3RlcCBsaW1pdCAqKVxuICAgICAgICBpZiAhX3ZtX2luc25fY291bnQgbGFuZCAweEZGRkYgPSAwICYmICFTeF9yZWYuc3RlcF9saW1pdCA+IDBcbiAgICAgICAgICAgJiYgIV92bV9pbnNuX2NvdW50ID4gIVN4X3JlZi5zdGVwX2xpbWl0IHRoZW5cbiAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciBcIlRJTUVPVVQ6IHN0ZXAgbGltaXQgZXhjZWVkZWRcIik7XG4gICAgICAgICh0cnkgbWF0Y2ggb3Agd2l0aFxuICAgICAgICAoKiAtLS0tIENvbnN0YW50cyAtLS0tICopXG4gICAgICAgIHwgMSAoKiBPUF9DT05TVCAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGlmIGlkeCA+PSBBcnJheS5sZW5ndGggY29uc3RzIHRoZW5cbiAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIlZNOiBDT05TVCBpbmRleCAlZCBvdXQgb2YgYm91bmRzIChwb29sIHNpemUgJWQpXCJcbiAgICAgICAgICAgICAgaWR4IChBcnJheS5sZW5ndGggY29uc3RzKSkpO1xuICAgICAgICAgIHB1c2ggdm0gY29uc3RzLihpZHgpXG4gICAgICAgIHwgMiAoKiBPUF9OSUwgKikgICAtPiBwdXNoIHZtIE5pbFxuICAgICAgICB8IDMgKCogT1BfVFJVRSAqKSAgLT4gcHVzaCB2bSAoQm9vbCB0cnVlKVxuICAgICAgICB8IDQgKCogT1BfRkFMU0UgKikgLT4gcHVzaCB2bSAoQm9vbCBmYWxzZSlcbiAgICAgICAgfCA1ICgqIE9QX1BPUCAqKSAgIC0+IGlnbm9yZSAocG9wIHZtKVxuICAgICAgICB8IDYgKCogT1BfRFVQICopICAgLT4gcHVzaCB2bSAocGVlayB2bSlcbiAgICAgICAgfCA3ICgqIE9QX1NXQVAgKikgIC0+XG4gICAgICAgICAgbGV0IGEgPSBwb3Agdm0gaW4gbGV0IGIgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIGE7IHB1c2ggdm0gYlxuXG4gICAgICAgICgqIC0tLS0gVmFyaWFibGUgYWNjZXNzIC0tLS0gKilcbiAgICAgICAgfCAxNiAoKiBPUF9MT0NBTF9HRVQgKikgLT5cbiAgICAgICAgICBsZXQgc2xvdCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgdiA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZnJhbWUubG9jYWxfY2VsbHMgc2xvdCB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgY2VsbCAtPiBjZWxsLnV2X3ZhbHVlXG4gICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgbGV0IGlkeCA9IGZyYW1lLmJhc2UgKyBzbG90IGluXG4gICAgICAgICAgICAgIGlmIGlkeCA+PSB2bS5zcCB0aGVuXG4gICAgICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICAgICAgICBcIlZNOiBMT0NBTF9HRVQgc2xvdD0lZCBiYXNlPSVkIHNwPSVkIG91dCBvZiBib3VuZHNcIiBzbG90IGZyYW1lLmJhc2Ugdm0uc3ApKTtcbiAgICAgICAgICAgICAgdm0uc3RhY2suKGlkeClcbiAgICAgICAgICBpblxuICAgICAgICAgIHB1c2ggdm0gdlxuICAgICAgICB8IDE3ICgqIE9QX0xPQ0FMX1NFVCAqKSAtPlxuICAgICAgICAgIGxldCBzbG90ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGxldCB2ID0gcGVlayB2bSBpblxuICAgICAgICAgICgqIFdyaXRlIHRvIHNoYXJlZCBjZWxsIGlmIGNhcHR1cmVkLCBlbHNlIHRvIHN0YWNrICopXG4gICAgICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZnJhbWUubG9jYWxfY2VsbHMgc2xvdCB3aXRoXG4gICAgICAgICAgIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWUgPC0gdlxuICAgICAgICAgICB8IE5vbmUgLT4gdm0uc3RhY2suKGZyYW1lLmJhc2UgKyBzbG90KSA8LSB2KVxuICAgICAgICB8IDE4ICgqIE9QX1VQVkFMVUVfR0VUICopIC0+XG4gICAgICAgICAgbGV0IGlkeCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBpZiBpZHggPj0gQXJyYXkubGVuZ3RoIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMgdGhlblxuICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICAgIFwiVk06IFVQVkFMVUVfR0VUIGlkeD0lZCBvdXQgb2YgYm91bmRzIChoYXZlICVkKVwiIGlkeFxuICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMpKSk7XG4gICAgICAgICAgcHVzaCB2bSBmcmFtZS5jbG9zdXJlLnZtX3VwdmFsdWVzLihpZHgpLnV2X3ZhbHVlXG4gICAgICAgIHwgMTkgKCogT1BfVVBWQUxVRV9TRVQgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGlkeCkudXZfdmFsdWUgPC0gcGVlayB2bVxuICAgICAgICB8IDIwICgqIE9QX0dMT0JBTF9HRVQgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAoKiBDaGVjayBjbG9zdXJlIGVudiBmaXJzdCAobWF0Y2hlcyBPUF9HTE9CQUxfU0VUIHByaW9yaXR5KSAqKVxuICAgICAgICAgIGxldCBpZCA9IFN4X3R5cGVzLmludGVybiBuYW1lIGluXG4gICAgICAgICAgbGV0IGZvdW5kX2luX2VudiA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fY2xvc3VyZV9lbnYgd2l0aFxuICAgICAgICAgICAgfCBTb21lIGVudiAtPlxuICAgICAgICAgICAgICBsZXQgcmVjIGVudl9sb29rdXAgZSA9XG4gICAgICAgICAgICAgICAgdHJ5IFNvbWUgKEhhc2h0YmwuZmluZCBlLmJpbmRpbmdzIGlkKVxuICAgICAgICAgICAgICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgICAgICAgICAgICBtYXRjaCBlLnBhcmVudCB3aXRoIFNvbWUgcCAtPiBlbnZfbG9va3VwIHAgfCBOb25lIC0+IE5vbmVcbiAgICAgICAgICAgICAgaW4gZW52X2xvb2t1cCBlbnZcbiAgICAgICAgICAgIHwgTm9uZSAtPiBOb25lXG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQgdiA9IG1hdGNoIGZvdW5kX2luX2VudiB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgdiAtPiB2XG4gICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICAgICB0cnkgU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIG5hbWVcbiAgICAgICAgICAgICAgICB3aXRoIF8gLT5cbiAgICAgICAgICAgICAgICAgICgqIFRyeSByZXNvbHZlIGhvb2sg4oCUIGxvYWRzIHRoZSBsaWJyYXJ5IHRoYXQgZXhwb3J0cyB0aGlzIHN5bWJvbCAqKVxuICAgICAgICAgICAgICAgICAgKHRyeVxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZV9mbiA9IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIFwiX19yZXNvbHZlLXN5bWJvbFwiIGluXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZSAoU3hfcnVudGltZS5zeF9jYWxsIHJlc29sdmVfZm4gW1N0cmluZyBuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIHRyeSBIYXNodGJsLmZpbmQgdm0uZ2xvYmFscyBuYW1lXG4gICAgICAgICAgICAgICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSlcbiAgICAgICAgICAgICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSkpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBwdXNoIHZtIHZcbiAgICAgICAgfCAyMSAoKiBPUF9HTE9CQUxfU0VUICopIC0+XG4gICAgICAgICAgbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgbGV0IG5hbWUgPSBtYXRjaCBjb25zdHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgKCogV3JpdGUgdG8gY2xvc3VyZSBlbnYgaWYgdGhlIG5hbWUgZXhpc3RzIHRoZXJlIChtdXRhYmxlIGNsb3N1cmUgdmFycykgKilcbiAgICAgICAgICBsZXQgd3JpdHRlbiA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fY2xvc3VyZV9lbnYgd2l0aFxuICAgICAgICAgICAgfCBTb21lIGVudiAtPlxuICAgICAgICAgICAgICBsZXQgaWQgPSBTeF90eXBlcy5pbnRlcm4gbmFtZSBpblxuICAgICAgICAgICAgICBsZXQgcmVjIGZpbmRfZW52IGUgPVxuICAgICAgICAgICAgICAgIGlmIEhhc2h0YmwubWVtIGUuYmluZGluZ3MgaWQgdGhlblxuICAgICAgICAgICAgICAgICAgKEhhc2h0YmwucmVwbGFjZSBlLmJpbmRpbmdzIGlkIChwZWVrIHZtKTsgdHJ1ZSlcbiAgICAgICAgICAgICAgICBlbHNlIG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGZpbmRfZW52IHAgfCBOb25lIC0+IGZhbHNlXG4gICAgICAgICAgICAgIGluIGZpbmRfZW52IGVudlxuICAgICAgICAgICAgfCBOb25lIC0+IGZhbHNlXG4gICAgICAgICAgaW5cbiAgICAgICAgICBpZiBub3Qgd3JpdHRlbiB0aGVuIGJlZ2luXG4gICAgICAgICAgICBsZXQgdiA9IHBlZWsgdm0gaW5cbiAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSB2bS5nbG9iYWxzIG5hbWUgdjtcbiAgICAgICAgICAgIChtYXRjaCAhU3hfdHlwZXMuX3ZtX2dsb2JhbF9zZXRfaG9vayB3aXRoIFNvbWUgZiAtPiBmIG5hbWUgdiB8IE5vbmUgLT4gKCkpXG4gICAgICAgICAgZW5kXG5cbiAgICAgICAgKCogLS0tLSBDb250cm9sIGZsb3cgLS0tLSAqKVxuICAgICAgICB8IDMyICgqIE9QX0pVTVAgKikgLT5cbiAgICAgICAgICBsZXQgb2Zmc2V0ID0gcmVhZF9pMTYgZnJhbWUgaW5cbiAgICAgICAgICBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuICAgICAgICB8IDMzICgqIE9QX0pVTVBfSUZfRkFMU0UgKikgLT5cbiAgICAgICAgICBsZXQgb2Zmc2V0ID0gcmVhZF9pMTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIGlmIG5vdCAoc3hfdHJ1dGh5IHYpIHRoZW4gZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyBvZmZzZXRcbiAgICAgICAgfCAzNCAoKiBPUF9KVU1QX0lGX1RSVUUgKikgLT5cbiAgICAgICAgICBsZXQgb2Zmc2V0ID0gcmVhZF9pMTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIGlmIHN4X3RydXRoeSB2IHRoZW4gZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyBvZmZzZXRcblxuICAgICAgICAoKiAtLS0tIEV4Y2VwdGlvbiBoYW5kbGluZyAtLS0tICopXG4gICAgICAgIHwgMzUgKCogT1BfUFVTSF9IQU5ETEVSICopIC0+XG4gICAgICAgICAgbGV0IGNhdGNoX29mZnNldCA9IHJlYWRfaTE2IGZyYW1lIGluXG4gICAgICAgICAgbGV0IGVudHJ5ID0ge1xuICAgICAgICAgICAgaF9jYXRjaF9pcCA9IGZyYW1lLmlwICsgY2F0Y2hfb2Zmc2V0O1xuICAgICAgICAgICAgaF9mcmFtZV9kZXB0aCA9IExpc3QubGVuZ3RoIHZtLmZyYW1lcztcbiAgICAgICAgICAgIGhfc3AgPSB2bS5zcDtcbiAgICAgICAgICAgIGhfZnJhbWUgPSBmcmFtZTtcbiAgICAgICAgICB9IGluXG4gICAgICAgICAgdm0uaGFuZGxlcl9zdGFjayA8LSBlbnRyeSA6OiB2bS5oYW5kbGVyX3N0YWNrXG4gICAgICAgIHwgMzYgKCogT1BfUE9QX0hBTkRMRVIgKikgLT5cbiAgICAgICAgICAobWF0Y2ggdm0uaGFuZGxlcl9zdGFjayB3aXRoXG4gICAgICAgICAgIHwgXyA6OiByZXN0IC0+IHZtLmhhbmRsZXJfc3RhY2sgPC0gcmVzdFxuICAgICAgICAgICB8IFtdIC0+ICgpKVxuICAgICAgICB8IDM3ICgqIE9QX1JBSVNFICopIC0+XG4gICAgICAgICAgbGV0IGV4bl92YWwgPSBwb3Agdm0gaW5cbiAgICAgICAgICAobWF0Y2ggdm0uaGFuZGxlcl9zdGFjayB3aXRoXG4gICAgICAgICAgIHwgZW50cnkgOjogcmVzdCAtPlxuICAgICAgICAgICAgIHZtLmhhbmRsZXJfc3RhY2sgPC0gcmVzdDtcbiAgICAgICAgICAgICAoKiBVbndpbmQgZnJhbWVzIHRvIHRoZSBoYW5kbGVyJ3MgZGVwdGggKilcbiAgICAgICAgICAgICB3aGlsZSBMaXN0Lmxlbmd0aCB2bS5mcmFtZXMgPiBlbnRyeS5oX2ZyYW1lX2RlcHRoIGRvXG4gICAgICAgICAgICAgICBtYXRjaCB2bS5mcmFtZXMgd2l0aFxuICAgICAgICAgICAgICAgfCBfIDo6IGZzIC0+IHZtLmZyYW1lcyA8LSBmc1xuICAgICAgICAgICAgICAgfCBbXSAtPiAoKVxuICAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICAgKCogUmVzdG9yZSBzdGFjayBwb2ludGVyIGFuZCBqdW1wIHRvIGNhdGNoICopXG4gICAgICAgICAgICAgdm0uc3AgPC0gZW50cnkuaF9zcDtcbiAgICAgICAgICAgICBlbnRyeS5oX2ZyYW1lLmlwIDwtIGVudHJ5LmhfY2F0Y2hfaXA7XG4gICAgICAgICAgICAgcHVzaCB2bSBleG5fdmFsXG4gICAgICAgICAgIHwgW10gLT5cbiAgICAgICAgICAgICAoKiBObyBoYW5kbGVyIOKAlCByYWlzZSBPQ2FtbCBleGNlcHRpb24gZm9yIENFSyB0byBjYXRjaCAqKVxuICAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIlVuaGFuZGxlZCBleGNlcHRpb246ICVzXCJcbiAgICAgICAgICAgICAgIChTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBleG5fdmFsKSkpKVxuXG4gICAgICAgICgqIC0tLS0gRnVuY3Rpb24gY2FsbHMgLS0tLSAqKVxuICAgICAgICB8IDQ4ICgqIE9QX0NBTEwgKikgLT5cbiAgICAgICAgICBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgYXJncyA9IEFycmF5LmluaXQgYXJnYyAoZnVuIF8gLT4gcG9wIHZtKSBpblxuICAgICAgICAgIGxldCBmID0gcG9wIHZtIGluXG4gICAgICAgICAgbGV0IGFyZ3NfbGlzdCA9IExpc3QucmV2IChBcnJheS50b19saXN0IGFyZ3MpIGluXG4gICAgICAgICAgdm1fY2FsbCB2bSBmIGFyZ3NfbGlzdFxuICAgICAgICAgICgqIExvb3AgY29udGludWVzIOKAlCBpZiBWbUNsb3N1cmUsIG5ldyBmcmFtZSBydW5zIG5leHQgaXRlcmF0aW9uICopXG4gICAgICAgIHwgNDkgKCogT1BfVEFJTF9DQUxMICopIC0+XG4gICAgICAgICAgbGV0IGFyZ2MgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5pbml0IGFyZ2MgKGZ1biBfIC0+IHBvcCB2bSkgaW5cbiAgICAgICAgICBsZXQgZiA9IHBvcCB2bSBpblxuICAgICAgICAgIGxldCBhcmdzX2xpc3QgPSBMaXN0LnJldiAoQXJyYXkudG9fbGlzdCBhcmdzKSBpblxuICAgICAgICAgICgqIERyb3AgY3VycmVudCBmcmFtZSwgcmV1c2Ugc3RhY2sgc3BhY2Ug4oCUIHRydWUgVENPIGZvciBWbUNsb3N1cmUgKilcbiAgICAgICAgICB2bS5mcmFtZXMgPC0gcmVzdF9mcmFtZXM7XG4gICAgICAgICAgdm0uc3AgPC0gZnJhbWUuYmFzZTtcbiAgICAgICAgICB2bV9jYWxsIHZtIGYgYXJnc19saXN0XG4gICAgICAgIHwgNTAgKCogT1BfUkVUVVJOICopIC0+XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHBvcCB2bSBpblxuICAgICAgICAgIHZtLmZyYW1lcyA8LSByZXN0X2ZyYW1lcztcbiAgICAgICAgICB2bS5zcCA8LSBmcmFtZS5iYXNlO1xuICAgICAgICAgIHB1c2ggdm0gcmVzdWx0XG4gICAgICAgICAgKCogTG9vcCBjb250aW51ZXMgd2l0aCBjYWxsZXIgZnJhbWUgKilcbiAgICAgICAgfCA1MSAoKiBPUF9DTE9TVVJFICopIC0+XG4gICAgICAgICAgbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgaWYgaWR4ID49IEFycmF5Lmxlbmd0aCBjb25zdHMgdGhlblxuICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiVk06IENMT1NVUkUgaWR4ICVkID49IGNvbnN0cyAlZFwiIGlkeCAoQXJyYXkubGVuZ3RoIGNvbnN0cykpKTtcbiAgICAgICAgICBsZXQgY29kZV92YWwgPSBjb25zdHMuKGlkeCkgaW5cbiAgICAgICAgICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBjb2RlX3ZhbCBpblxuICAgICAgICAgICgqIFJlYWQgdXB2YWx1ZSBkZXNjcmlwdG9ycyBmcm9tIGJ5dGVjb2RlICopXG4gICAgICAgICAgbGV0IHV2X2NvdW50ID0gbWF0Y2ggY29kZV92YWwgd2l0aFxuICAgICAgICAgICAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInVwdmFsdWUtY291bnRcIiB3aXRoXG4gICAgICAgICAgICAgICAgfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IDApXG4gICAgICAgICAgICB8IF8gLT4gMFxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHVwdmFsdWVzID0gQXJyYXkuaW5pdCB1dl9jb3VudCAoZnVuIF8gLT5cbiAgICAgICAgICAgIGxldCBpc19sb2NhbCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBpbmRleCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGlmIGlzX2xvY2FsID0gMSB0aGVuIGJlZ2luXG4gICAgICAgICAgICAgICgqIENhcHR1cmUgZnJvbSBlbmNsb3NpbmcgZnJhbWUncyBsb2NhbCBzbG90LlxuICAgICAgICAgICAgICAgICBDcmVhdGUgYSBzaGFyZWQgY2VsbCDigJQgYm90aCBwYXJlbnQgYW5kIGNsb3N1cmVcbiAgICAgICAgICAgICAgICAgcmVhZC93cml0ZSB0aHJvdWdoIHRoaXMgY2VsbC4gKilcbiAgICAgICAgICAgICAgbGV0IGNlbGwgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIGluZGV4IHdpdGhcbiAgICAgICAgICAgICAgICB8IFNvbWUgZXhpc3RpbmcgLT4gZXhpc3RpbmcgICgqIHJldXNlIGV4aXN0aW5nIGNlbGwgKilcbiAgICAgICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICAgIGxldCBjID0geyB1dl92YWx1ZSA9IHZtLnN0YWNrLihmcmFtZS5iYXNlICsgaW5kZXgpIH0gaW5cbiAgICAgICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBmcmFtZS5sb2NhbF9jZWxscyBpbmRleCBjO1xuICAgICAgICAgICAgICAgICAgY1xuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICBjZWxsXG4gICAgICAgICAgICBlbmQgZWxzZVxuICAgICAgICAgICAgICAoKiBDYXB0dXJlIGZyb20gZW5jbG9zaW5nIGZyYW1lJ3MgdXB2YWx1ZSDigJQgYWxyZWFkeSBhIHNoYXJlZCBjZWxsICopXG4gICAgICAgICAgICAgIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGluZGV4KVxuICAgICAgICAgICkgaW5cbiAgICAgICAgICBsZXQgY2wgPSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IHVwdmFsdWVzOyB2bV9uYW1lID0gTm9uZTtcbiAgICAgICAgICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSB2bS5nbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IGZyYW1lLmNsb3N1cmUudm1fY2xvc3VyZV9lbnYgfSBpblxuICAgICAgICAgIHB1c2ggdm0gKFZtQ2xvc3VyZSBjbClcbiAgICAgICAgfCA1MiAoKiBPUF9DQUxMX1BSSU0gKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICBsZXQgYXJncyA9IExpc3QuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIHw+IExpc3QucmV2IGluXG4gICAgICAgICAgKCogUmVzb2x2ZSB0aHVua3Mg4oCUIHRoZSBDRUsgZXZhbHVhdG9yIGRvZXMgdGhpcyBhdXRvbWF0aWNhbGx5XG4gICAgICAgICAgICAgdmlhIHRyYW1wb2xpbmUsIGJ1dCB0aGUgVk0gbXVzdCBkbyBpdCBleHBsaWNpdGx5IGJlZm9yZVxuICAgICAgICAgICAgIHBhc3NpbmcgYXJncyB0byBwcmltaXRpdmVzLiAqKVxuICAgICAgICAgIGxldCBhcmdzID0gTGlzdC5tYXAgKGZ1biB2IC0+XG4gICAgICAgICAgICBtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgVGh1bmsgXyAtPiAhU3hfcHJpbWl0aXZlcy5fc3hfdHJhbXBvbGluZV9mbiB2XG4gICAgICAgICAgICB8IF8gLT4gdikgYXJncyBpblxuICAgICAgICAgIGxldCByZXN1bHQgPVxuICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICgqIFNpbmdsZSBsb29rdXA6IHZtLmdsb2JhbHMgaXMgdGhlIHNvbGUgc291cmNlIG9mIHRydXRoLlxuICAgICAgICAgICAgICAgICBQcmltaXRpdmVzIGFyZSBzZWVkZWQgaW50byB2bS5nbG9iYWxzIGF0IGluaXQgYXMgTmF0aXZlRm4gdmFsdWVzLlxuICAgICAgICAgICAgICAgICBPUF9ERUZJTkUgYW5kIHJlZ2lzdGVyTmF0aXZlIG5hdHVyYWxseSBvdmVycmlkZSB0aGVtLiAqKVxuICAgICAgICAgICAgICBsZXQgZm5fdmFsID0gdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICAgICAoKiBGYWxsYmFjayB0byBTeF9wcmltaXRpdmVzIOKAlCBwcmltaXRpdmVzIHJlZ2lzdGVyZWQgQUZURVIgSklUXG4gICAgICAgICAgICAgICAgICAgc2V0dXAgKGUuZy4gaG9zdC1nbG9iYWwsIGhvc3QtZ2V0IHJlZ2lzdGVyZWQgaW5zaWRlIHRoZSB0ZXN0XG4gICAgICAgICAgICAgICAgICAgcnVubmVyJ3MgYmluZC9yZWdpc3RlciBwYXRoKSBhcmUgbm90IGluIHZtLmdsb2JhbHMuICopXG4gICAgICAgICAgICAgICAgdHJ5IFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBuYW1lXG4gICAgICAgICAgICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJWTTogdW5rbm93biBwcmltaXRpdmUgXCIgXiBuYW1lKSlcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgKG1hdGNoIGZuX3ZhbCB3aXRoXG4gICAgICAgICAgICAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYXJnc1xuICAgICAgICAgICAgICAgfCBWbUNsb3N1cmUgXyB8IExhbWJkYSBfIHwgQ29tcG9uZW50IF8gfCBJc2xhbmQgXyAtPlxuICAgICAgICAgICAgICAgICBTeF9yZWYuY2VrX2NhbGwgZm5fdmFsIChMaXN0IGFyZ3MpXG4gICAgICAgICAgICAgICB8IF8gLT4gTmlsKVxuICAgICAgICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCIlcyAoaW4gQ0FMTF9QUklNIFxcXCIlc1xcXCIgd2l0aCAlZCBhcmdzKVwiXG4gICAgICAgICAgICAgICAgbXNnIG5hbWUgYXJnYykpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBwdXNoIHZtIHJlc3VsdFxuXG4gICAgICAgICgqIC0tLS0gQ29sbGVjdGlvbnMgLS0tLSAqKVxuICAgICAgICB8IDY0ICgqIE9QX0xJU1QgKikgLT5cbiAgICAgICAgICBsZXQgY291bnQgPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBpdGVtcyA9IExpc3QuaW5pdCBjb3VudCAoZnVuIF8gLT4gcG9wIHZtKSB8PiBMaXN0LnJldiBpblxuICAgICAgICAgIHB1c2ggdm0gKExpc3QgaXRlbXMpXG4gICAgICAgIHwgNjUgKCogT1BfRElDVCAqKSAtPlxuICAgICAgICAgIGxldCBjb3VudCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSBjb3VudCBpblxuICAgICAgICAgIGZvciBfID0gMSB0byBjb3VudCBkb1xuICAgICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIGxldCBrID0gcG9wIHZtIGluXG4gICAgICAgICAgICBsZXQga2V5ID0gbWF0Y2ggayB3aXRoIFN0cmluZyBzIC0+IHMgfCBLZXl3b3JkIHMgLT4gcyB8IF8gLT4gU3hfcnVudGltZS52YWx1ZV90b19zdHIgayBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQga2V5IHZcbiAgICAgICAgICBkb25lO1xuICAgICAgICAgIHB1c2ggdm0gKERpY3QgZClcblxuICAgICAgICAoKiAtLS0tIFN0cmluZyBvcHMgLS0tLSAqKVxuICAgICAgICB8IDE0NCAoKiBPUF9TVFJfQ09OQ0FUICopIC0+XG4gICAgICAgICAgbGV0IGNvdW50ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGxldCBwYXJ0cyA9IExpc3QuaW5pdCBjb3VudCAoZnVuIF8gLT4gcG9wIHZtKSB8PiBMaXN0LnJldiBpblxuICAgICAgICAgIGxldCBzID0gU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBwYXJ0cykgaW5cbiAgICAgICAgICBwdXNoIHZtIChTdHJpbmcgcylcblxuICAgICAgICAoKiAtLS0tIERlZmluZSAtLS0tICopXG4gICAgICAgIHwgMTI4ICgqIE9QX0RFRklORSAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggY29uc3RzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgIGxldCB2ID0gcGVlayB2bSBpblxuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSB2bS5nbG9iYWxzIG5hbWUgdjtcbiAgICAgICAgICAobWF0Y2ggIVN4X3R5cGVzLl92bV9nbG9iYWxfc2V0X2hvb2sgd2l0aFxuICAgICAgICAgICB8IFNvbWUgZiAtPiBmIG5hbWUgdiB8IE5vbmUgLT4gKCkpXG5cbiAgICAgICAgKCogLS0tLSBJbmxpbmUgcHJpbWl0aXZlcyAtLS0tXG4gICAgICAgICAgIEZhc3QgcGF0aCBmb3IgY29tbW9uIHR5cGVzOyBmYWxsYmFjayB0byBhY3R1YWwgcHJpbWl0aXZlXG4gICAgICAgICAgIGZvciBlZGdlIGNhc2VzICh0eXBlIGNvZXJjaW9uLCB0aHVua3MsIFJhd0hUTUwsIGV0Yy4pXG4gICAgICAgICAgIHRvIGd1YXJhbnRlZSBiZWhhdmlvcmFsIHBhcml0eSB3aXRoIENBTExfUFJJTS4gKilcbiAgICAgICAgfCAxNjAgKCogT1BfQUREICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCArLiB5KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiK1wiKSBbYTsgYl0pXG4gICAgICAgIHwgMTYxICgqIE9QX1NVQiAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggLS4geSlcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIi1cIikgW2E7IGJdKVxuICAgICAgICB8IDE2MiAoKiBPUF9NVUwgKikgLT5cbiAgICAgICAgICBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4ICouIHkpXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCIqXCIpIFthOyBiXSlcbiAgICAgICAgfCAxNjMgKCogT1BfRElWICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCAvLiB5KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiL1wiKSBbYTsgYl0pXG4gICAgICAgIHwgMTY0ICgqIE9QX0VRICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtICgoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIj1cIikgW2E7IGJdKVxuICAgICAgICB8IDE2NSAoKiBPUF9MVCAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBCb29sICh4IDwgeSlcbiAgICAgICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IEJvb2wgKHggPCB5KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiPFwiKSBbYTsgYl0pXG4gICAgICAgIHwgMTY2ICgqIE9QX0dUICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IEJvb2wgKHggPiB5KVxuICAgICAgICAgICAgfCBTdHJpbmcgeCwgU3RyaW5nIHkgLT4gQm9vbCAoeCA+IHkpXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCI+XCIpIFthOyBiXSlcbiAgICAgICAgfCAxNjcgKCogT1BfTk9UICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChCb29sIChub3QgKHN4X3RydXRoeSB2KSkpXG4gICAgICAgIHwgMTY4ICgqIE9QX0xFTiAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICB8IExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBJbnRlZ2VyIChMaXN0Lmxlbmd0aCBsKVxuICAgICAgICAgICAgfCBTdHJpbmcgcyAtPiBJbnRlZ2VyIChTdHJpbmcubGVuZ3RoIHMpXG4gICAgICAgICAgICB8IERpY3QgZCAtPiBJbnRlZ2VyIChIYXNodGJsLmxlbmd0aCBkKVxuICAgICAgICAgICAgfCBOaWwgLT4gSW50ZWdlciAwXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCJsZW5cIikgW3ZdKVxuICAgICAgICB8IDE2OSAoKiBPUF9GSVJTVCAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICB8IExpc3QgKHggOjogXykgfCBMaXN0UmVmIHsgY29udGVudHMgPSB4IDo6IF8gfSAtPiB4XG4gICAgICAgICAgICB8IExpc3QgW10gfCBMaXN0UmVmIHsgY29udGVudHMgPSBbXSB9IHwgTmlsIC0+IE5pbFxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiZmlyc3RcIikgW3ZdKVxuICAgICAgICB8IDE3MCAoKiBPUF9SRVNUICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgTGlzdCAoXyA6OiB4cykgfCBMaXN0UmVmIHsgY29udGVudHMgPSBfIDo6IHhzIH0gLT4gTGlzdCB4c1xuICAgICAgICAgICAgfCBMaXN0IFtdIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gW10gfSB8IE5pbCAtPiBMaXN0IFtdXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCJyZXN0XCIpIFt2XSlcbiAgICAgICAgfCAxNzEgKCogT1BfTlRIICopIC0+XG4gICAgICAgICAgbGV0IG4gPSBwb3Agdm0gYW5kIGNvbGwgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBjb2xsLCBuIHdpdGhcbiAgICAgICAgICAgIHwgKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSksIE51bWJlciBmIC0+XG4gICAgICAgICAgICAgICh0cnkgTGlzdC5udGggbCAoaW50X29mX2Zsb2F0IGYpIHdpdGggXyAtPiBOaWwpXG4gICAgICAgICAgICB8IFN0cmluZyBzLCBOdW1iZXIgZiAtPlxuICAgICAgICAgICAgICBsZXQgaSA9IGludF9vZl9mbG9hdCBmIGluXG4gICAgICAgICAgICAgIGlmIGkgPj0gMCAmJiBpIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW4gU3RyaW5nIChTdHJpbmcubWFrZSAxIHMuW2ldKVxuICAgICAgICAgICAgICBlbHNlIE5pbFxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwibnRoXCIpIFtjb2xsOyBuXSlcbiAgICAgICAgfCAxNzIgKCogT1BfQ09OUyAqKSAtPlxuICAgICAgICAgIGxldCBjb2xsID0gcG9wIHZtIGFuZCB4ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggY29sbCB3aXRoXG4gICAgICAgICAgICB8IExpc3QgbCAtPiBMaXN0ICh4IDo6IGwpXG4gICAgICAgICAgICB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBMaXN0ICh4IDo6IGwpXG4gICAgICAgICAgICB8IE5pbCAtPiBMaXN0IFt4XVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiY29uc1wiKSBbeDsgY29sbF0pXG4gICAgICAgIHwgMTczICgqIE9QX05FRyAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4IC0+IE51bWJlciAoLS54KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiLVwiKSBbdl0pXG4gICAgICAgIHwgMTc0ICgqIE9QX0lOQyAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4IC0+IE51bWJlciAoeCArLiAxLjApXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCJpbmNcIikgW3ZdKVxuICAgICAgICB8IDE3NSAoKiBPUF9ERUMgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBOdW1iZXIgeCAtPiBOdW1iZXIgKHggLS4gMS4wKVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiZGVjXCIpIFt2XSlcblxuICAgICAgICAoKiAtLS0tIElPIFN1c3BlbnNpb24gLS0tLSAqKVxuICAgICAgICB8IDExMiAoKiBPUF9QRVJGT1JNICopIC0+XG4gICAgICAgICAgbGV0IHJlcXVlc3QgPSBwb3Agdm0gaW5cbiAgICAgICAgICByYWlzZSAoVm1TdXNwZW5kZWQgKHJlcXVlc3QsIHZtKSlcblxuICAgICAgICB8IG9wY29kZSAtPlxuICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIlZNOiB1bmtub3duIG9wY29kZSAlZCBhdCBpcD0lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlIChmcmFtZS5pcCAtIDEpKSlcbiAgICAgICAgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IG1zZyAtPlxuICAgICAgICAgIGxldCBmbl9uYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICBcIlZNOiAlcyBhdCBpcD0lZCBvcD0lZCBpbiAlcyAoYmFzZT0lZCBzcD0lZCBiY19sZW49JWQgY29uc3RzPSVkKVwiXG4gICAgICAgICAgICBtc2cgc2F2ZWRfaXAgb3AgZm5fbmFtZSBmcmFtZS5iYXNlIHZtLnNwXG4gICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGJjKSAoQXJyYXkubGVuZ3RoIGNvbnN0cykpKSlcbiAgICAgIGVuZFxuICBkb25lXG5cbigqKiBSZXN1bWUgYSBzdXNwZW5kZWQgVk0gYnkgcHVzaGluZyB0aGUgSU8gcmVzdWx0IGFuZCBjb250aW51aW5nLlxuICAgIE1heSByYWlzZSBWbVN1c3BlbmRlZCBhZ2FpbiBpZiB0aGUgVk0gaGl0cyBhbm90aGVyIE9QX1BFUkZPUk0uXG5cbiAgICBBZnRlciB0aGUgY2FsbGJhY2sgZmluaXNoZXMsIHJlc3RvcmVzIGFueSBjYWxsX2Nsb3N1cmVfcmV1c2VcbiAgICBjb250aW51YXRpb25zIHNhdmVkIG9uIHZtLnJldXNlX3N0YWNrIChpbm5lcm1vc3QgZmlyc3QpLiAqKVxubGV0IHJlc3VtZV92bSB2bSByZXN1bHQgPVxuICAobWF0Y2ggdm0ucGVuZGluZ19jZWsgd2l0aFxuICAgfCBTb21lIGNla19zdGF0ZSAtPlxuICAgICB2bS5wZW5kaW5nX2NlayA8LSBOb25lO1xuICAgICBsZXQgZmluYWwgPSBTeF9yZWYuY2VrX3Jlc3VtZSBjZWtfc3RhdGUgcmVzdWx0IGluXG4gICAgIChtYXRjaCBTeF9ydW50aW1lLmdldF92YWwgZmluYWwgKFN0cmluZyBcInBoYXNlXCIpIHdpdGhcbiAgICAgIHwgU3RyaW5nIFwiaW8tc3VzcGVuZGVkXCIgLT5cbiAgICAgICAgdm0ucGVuZGluZ19jZWsgPC0gU29tZSBmaW5hbDtcbiAgICAgICAgcmFpc2UgKFZtU3VzcGVuZGVkIChTeF9ydW50aW1lLmdldF92YWwgZmluYWwgKFN0cmluZyBcInJlcXVlc3RcIiksIHZtKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBwdXNoIHZtIChTeF9yZWYuY2VrX3ZhbHVlIGZpbmFsKSlcbiAgIHwgTm9uZSAtPlxuICAgICBwdXNoIHZtIHJlc3VsdCk7XG4gICh0cnkgcnVuIHZtXG4gICB3aXRoXG4gICB8IFZtU3VzcGVuZGVkIF8gYXMgZSAtPlxuICAgICAoKiBSZS1zdXNwZW5zaW9uIGR1cmluZyByZXN1bWU6IHRoZSBWTSBoaXQgYW5vdGhlciBwZXJmb3JtLiAqKVxuICAgICByYWlzZSBlXG4gICB8IEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICgqIEVycm9yIGR1cmluZyByZXN1bWVkIGV4ZWN1dGlvbi4gSWYgdGhlIFZNIGhhcyBhIGhhbmRsZXIgb24gaXRzXG4gICAgICAgIGhhbmRsZXJfc3RhY2ssIGRpc3BhdGNoIHRvIGl0IChzYW1lIGFzIE9QX1JBSVNFKS4gVGhpcyBlbmFibGVzXG4gICAgICAgIHRyeS9jYXRjaCBhY3Jvc3MgYXN5bmMgcGVyZm9ybS9yZXN1bWUgYm91bmRhcmllcyDigJQgdGhlIGhhbmRsZXJcbiAgICAgICAgd2FzIHB1c2hlZCBiZWZvcmUgdGhlIHBlcmZvcm0gYW5kIHN1cnZpdmVzIG9uIHRoZSB2bSBzdHJ1Y3QuICopXG4gICAgIChtYXRjaCB2bS5oYW5kbGVyX3N0YWNrIHdpdGhcbiAgICAgIHwgZW50cnkgOjogcmVzdCAtPlxuICAgICAgICB2bS5oYW5kbGVyX3N0YWNrIDwtIHJlc3Q7XG4gICAgICAgIHdoaWxlIExpc3QubGVuZ3RoIHZtLmZyYW1lcyA+IGVudHJ5LmhfZnJhbWVfZGVwdGggZG9cbiAgICAgICAgICBtYXRjaCB2bS5mcmFtZXMgd2l0aCBfIDo6IGZzIC0+IHZtLmZyYW1lcyA8LSBmcyB8IFtdIC0+ICgpXG4gICAgICAgIGRvbmU7XG4gICAgICAgIHZtLnNwIDwtIGVudHJ5Lmhfc3A7XG4gICAgICAgIGVudHJ5LmhfZnJhbWUuaXAgPC0gZW50cnkuaF9jYXRjaF9pcDtcbiAgICAgICAgcHVzaCB2bSAoU3RyaW5nIG1zZyk7XG4gICAgICAgIHJ1biB2bVxuICAgICAgfCBbXSAtPiByYWlzZSAoRXZhbF9lcnJvciBtc2cpKSk7XG4gICgqIENsZWFyIHJldXNlX3N0YWNrIOKAlCBhbnkgZW50cmllcyBoZXJlIGFyZSBzdGFsZSBmcm9tIHRoZSBvcmlnaW5hbFxuICAgICBzdXNwZW5zaW9uIGFuZCBkb24ndCBhcHBseSB0byB0aGUgY3VycmVudCBzdGF0ZS4gVGhlIFZNIGp1c3RcbiAgICAgY29tcGxldGVkIGl0cyBleGVjdXRpb24gc3VjY2Vzc2Z1bGx5LiAqKVxuICB2bS5yZXVzZV9zdGFjayA8LSBbXTtcbiAgKCogUmVzdG9yZSBjYWxsX2Nsb3N1cmVfcmV1c2UgY29udGludWF0aW9ucyBzYXZlZCBkdXJpbmcgc3VzcGVuc2lvbi5cbiAgICAgcmV1c2Vfc3RhY2sgaXMgaW4gY2F0Y2ggb3JkZXIgKG91dGVybW9zdCBmaXJzdCBmcm9tIHByZXBlbmQpIOKAlFxuICAgICByZXZlcnNlIHRvIGdldCBpbm5lcm1vc3QgZmlyc3QsIG1hdGNoaW5nIGNhbGxiYWNr4oaSY2FsbGVyIHVud2luZGluZy4gKilcbiAgbGV0IHJlYyByZXN0b3JlX3JldXNlIHBlbmRpbmcgPVxuICAgIG1hdGNoIHBlbmRpbmcgd2l0aFxuICAgIHwgW10gLT4gKClcbiAgICB8IChzYXZlZF9mcmFtZXMsIF9zYXZlZF9zcCkgOjogcmVzdCAtPlxuICAgICAgbGV0IGNhbGxiYWNrX3Jlc3VsdCA9IHBvcCB2bSBpblxuICAgICAgdm0uZnJhbWVzIDwtIHNhdmVkX2ZyYW1lcztcbiAgICAgIHB1c2ggdm0gY2FsbGJhY2tfcmVzdWx0O1xuICAgICAgKHRyeVxuICAgICAgICBydW4gdm07XG4gICAgICAgICgqIENoZWNrIGZvciBuZXcgcmV1c2UgZW50cmllcyBhZGRlZCBieSBuZXN0ZWQgY2FsbF9jbG9zdXJlX3JldXNlICopXG4gICAgICAgIGxldCBuZXdfcGVuZGluZyA9IExpc3QucmV2IHZtLnJldXNlX3N0YWNrIGluXG4gICAgICAgIHZtLnJldXNlX3N0YWNrIDwtIFtdO1xuICAgICAgICByZXN0b3JlX3JldXNlIChuZXdfcGVuZGluZyBAIHJlc3QpXG4gICAgICB3aXRoIFZtU3VzcGVuZGVkIF8gYXMgZSAtPlxuICAgICAgICAoKiBSZS1zdXNwZW5zaW9uOiBzYXZlIHVucHJvY2Vzc2VkIGVudHJpZXMgYmFjayBmb3IgbmV4dCByZXN1bWUuXG4gICAgICAgICAgIHJlc3QgaXMgaW5uZXJtb3N0LWZpcnN0OyB2bS5yZXVzZV9zdGFjayBpcyBvdXRlcm1vc3QtZmlyc3QuXG4gICAgICAgICAgIENvbWJpbmUgc28gbmV4dCByZXN1bWUncyByZXZlcnNhbCB5aWVsZHM6IG5ld19pbm5lciwgb2xkX2lubmVy4oaSb3V0ZXIuICopXG4gICAgICAgIHZtLnJldXNlX3N0YWNrIDwtIChMaXN0LnJldiByZXN0KSBAIHZtLnJldXNlX3N0YWNrO1xuICAgICAgICByYWlzZSBlKVxuICBpblxuICBsZXQgcGVuZGluZyA9IExpc3QucmV2IHZtLnJldXNlX3N0YWNrIGluXG4gIHZtLnJldXNlX3N0YWNrIDwtIFtdO1xuICByZXN0b3JlX3JldXNlIHBlbmRpbmc7XG4gIHBvcCB2bVxuXG4oKiogRXhlY3V0ZSBhIGNvbXBpbGVkIG1vZHVsZSAodG9wLWxldmVsIGJ5dGVjb2RlKS4gKilcbmxldCBleGVjdXRlX21vZHVsZSBjb2RlIGdsb2JhbHMgPVxuICBsZXQgY2wgPSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IFt8fF07IHZtX25hbWUgPSBTb21lIFwibW9kdWxlXCI7IHZtX2Vudl9yZWYgPSBnbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IE5vbmUgfSBpblxuICBsZXQgdm0gPSBjcmVhdGUgZ2xvYmFscyBpblxuICBsZXQgZnJhbWUgPSB7IGNsb3N1cmUgPSBjbDsgaXAgPSAwOyBiYXNlID0gMDsgbG9jYWxfY2VsbHMgPSBIYXNodGJsLmNyZWF0ZSA0IH0gaW5cbiAgZm9yIF8gPSAwIHRvIGNvZGUudmNfbG9jYWxzIC0gMSBkbyBwdXNoIHZtIE5pbCBkb25lO1xuICB2bS5mcmFtZXMgPC0gW2ZyYW1lXTtcbiAgcnVuIHZtO1xuICBwb3Agdm1cblxuKCoqIEV4ZWN1dGUgbW9kdWxlLCBjYXRjaGluZyBWbVN1c3BlbmRlZCBsb2NhbGx5IChzYW1lIGNvbXBpbGF0aW9uIHVuaXQpLlxuICAgIFJldHVybnMgW09rIHJlc3VsdF0gb3IgW0Vycm9yIChyZXF1ZXN0LCB2bSldIGZvciBpbXBvcnQgc3VzcGVuc2lvbi5cbiAgICBOZWVkZWQgYmVjYXVzZSBqc19vZl9vY2FtbCBjYW4ndCBjYXRjaCBleGNlcHRpb25zIGFjcm9zcyBtb2R1bGUgYm91bmRhcmllcy4gKilcbmxldCBleGVjdXRlX21vZHVsZV9zYWZlIGNvZGUgZ2xvYmFscyA9XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBleGVjdXRlX21vZHVsZSBjb2RlIGdsb2JhbHMgaW5cbiAgICBPayByZXN1bHRcbiAgd2l0aCBWbVN1c3BlbmRlZCAocmVxdWVzdCwgdm0pIC0+XG4gICAgRXJyb3IgKHJlcXVlc3QsIHZtKVxuXG5cbigqKiB7MSBMYXp5IEpJVCBjb21waWxhdGlvbn0gKilcblxuKCoqIENvbXBpbGUgYSBsYW1iZGEgb3IgY29tcG9uZW50IGJvZHkgdG8gYnl0ZWNvZGUgdXNpbmcgdGhlIFNYIGNvbXBpbGVyLlxuICAgIEludm9rZXMgW2NvbXBpbGVdIGZyb20gc3BlYy9jb21waWxlci5zeCB2aWEgdGhlIENFSyBtYWNoaW5lLlxuICAgIFJldHVybnMgYSBbdm1fY2xvc3VyZV0gcmVhZHkgZm9yIGV4ZWN1dGlvbiwgb3IgW05vbmVdIG9uIGZhaWx1cmVcbiAgICAoc2FmZSBmYWxsYmFjayB0byBDRUsgaW50ZXJwcmV0YXRpb24pLlxuXG4gICAgVGhlIGNvbXBpbGF0aW9uIGNvc3QgaXMgYSBzaW5nbGUgQ0VLIGV2YWx1YXRpb24gb2YgdGhlIGNvbXBpbGVyIOKAlFxuICAgIG1pY3Jvc2Vjb25kcyBwZXIgZnVuY3Rpb24uIFRoZSByZXN1bHQgaXMgY2FjaGVkIGluIHRoZSBsYW1iZGEvY29tcG9uZW50XG4gICAgcmVjb3JkIHNvIHN1YnNlcXVlbnQgY2FsbHMgZ28gc3RyYWlnaHQgdG8gdGhlIFZNLiAqKVxuKCogRnVuY3Rpb25zIHdob3NlIEpJVCBieXRlY29kZSBpcyBrbm93biBicm9rZW4gKHNlZSBwcm9qZWN0X2ppdF9ieXRlY29kZV9idWcpOlxuICAgcGFyc2VyIGNvbWJpbmF0b3JzIGRyb3AgaW50ZXJtZWRpYXRlIHJlc3VsdHMsIHRoZSBoeXBlcnNjcmlwdCBwYXJzZS9jb21waWxlXG4gICBzdGFjayBjb3JydXB0cyBBU1RzIHdoZW4gY29tcGlsZWQsIGFuZCB0ZXN0LW9yY2hlc3RyYXRpb24gaGVscGVycyBoYXZlXG4gICBjYWxsLWNvdW50L2FyZy1zaGFwZSBtaXNtYXRjaGVzIHZzIENFSy4gVGhlc2UgbXVzdCBydW4gdW5kZXIgQ0VLLiAqKVxubGV0IF9qaXRfaXNfYnJva2VuX25hbWUgbiA9XG4gICgqIFBhcnNlciBjb21iaW5hdG9ycyAqKVxuICBuID0gXCJwYXJzZS1iaW5kXCIgfHwgbiA9IFwic2VxXCIgfHwgbiA9IFwic2VxMlwiIHx8IG4gPSBcIm1hbnlcIiB8fCBuID0gXCJtYW55MVwiXG4gIHx8IG4gPSBcInNhdGlzZnlcIiB8fCBuID0gXCJmbWFwXCIgfHwgbiA9IFwiYWx0XCIgfHwgbiA9IFwiYWx0MlwiXG4gIHx8IG4gPSBcInNraXAtbGVmdFwiIHx8IG4gPSBcInNraXAtcmlnaHRcIiB8fCBuID0gXCJza2lwLW1hbnlcIiB8fCBuID0gXCJvcHRpb25hbFwiXG4gIHx8IG4gPSBcImJldHdlZW5cIiB8fCBuID0gXCJzZXAtYnlcIiB8fCBuID0gXCJzZXAtYnkxXCIgfHwgbiA9IFwicGFyc2UtY2hhclwiXG4gIHx8IG4gPSBcInBhcnNlLXN0cmluZ1wiIHx8IG4gPSBcImxhenktcGFyc2VyXCIgfHwgbiA9IFwibGFiZWxcIlxuICB8fCBuID0gXCJub3QtZm9sbG93ZWQtYnlcIiB8fCBuID0gXCJsb29rLWFoZWFkXCJcbiAgKCogSHlwZXJzY3JpcHQgb3JjaGVzdHJhdG9ycyDigJQgY2FsbCBwYXJzZXIgY29tYmluYXRvcnMgKilcbiAgfHwgbiA9IFwiaHMtdG9rZW5pemVcIiB8fCBuID0gXCJocy1wYXJzZVwiIHx8IG4gPSBcImhzLWNvbXBpbGVcIlxuICB8fCBuID0gXCJocy10by1zeFwiIHx8IG4gPSBcImhzLXRvLXN4LWZyb20tc291cmNlXCJcbiAgKCogVGVzdCBvcmNoZXN0cmF0aW9uIGhlbHBlcnMgKilcbiAgfHwgbiA9IFwiZXZhbC1oc1wiIHx8IG4gPSBcImV2YWwtaHMtaW5uZXJcIiB8fCBuID0gXCJldmFsLWhzLXdpdGgtbWVcIlxuICB8fCBuID0gXCJydW4taHMtZml4dHVyZVwiXG4gICgqIExhcmdlIHRvcC1sZXZlbCBmdW5jdGlvbnMgd2hvc2UgSklUIGNvbXBpbGUgZXhjZWVkcyB0aGUgNXMgdGVzdFxuICAgICBkZWFkbGluZSDigJQgdHctcmVzb2x2ZS1zdHlsZSwgdHctcmVzb2x2ZS1sYXlvdXQsIGdyYXBocWwgcGFyc2UuICopXG4gIHx8IG4gPSBcInR3LXJlc29sdmUtc3R5bGVcIiB8fCBuID0gXCJ0dy1yZXNvbHZlLWxheW91dFwiXG4gIHx8IG4gPSBcImdxbC13cz9cIiB8fCBuID0gXCJncWwtcGFyc2UtdG9rZW5zXCIgfHwgbiA9IFwiZ3FsLWV4ZWN1dGUtb3BlcmF0aW9uXCJcbiAgKCogSHlwZXJzY3JpcHQgbG9vcCBydW50aW1lOiB1c2VzIGBndWFyZGAgdG8gY2F0Y2ggaHMtYnJlYWsvaHMtY29udGludWVcbiAgICAgZXhjZXB0aW9ucy4gSklULWNvbXBpbGVkIGd1YXJkIGRyb3BzIHRoZSBleGNlcHRpb24gaGFuZGxlciBzdWNoIHRoYXRcbiAgICAgYnJlYWsgcHJvcGFnYXRlcyBvdXQgb2YgdGhlIGNsaWNrIGhhbmRsZXIgaW5zdGVhZCBvZiBleGl0aW5nIHRoZSBsb29wLlxuICAgICBTZWUgaHMtdXBzdHJlYW0tcmVwZWF0L2hzLXVwc3RyZWFtLXB1dCB0ZXN0cy4gKilcbiAgfHwgbiA9IFwiaHMtcmVwZWF0LXRpbWVzXCIgfHwgbiA9IFwiaHMtcmVwZWF0LWZvcmV2ZXJcIlxuICB8fCBuID0gXCJocy1yZXBlYXQtd2hpbGVcIiB8fCBuID0gXCJocy1yZXBlYXQtdW50aWxcIlxuICB8fCBuID0gXCJocy1mb3ItZWFjaFwiIHx8IG4gPSBcImhzLXB1dCFcIlxuXG5sZXQgaml0X2NvbXBpbGVfbGFtYmRhIChsIDogbGFtYmRhKSBnbG9iYWxzID1cbiAgbGV0IGZuX25hbWUgPSBtYXRjaCBsLmxfbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIjxhbm9uPlwiIGluXG4gIGlmICFfaml0X2NvbXBpbGluZyB0aGVuIChcbiAgICAoKiBBbHJlYWR5IGNvbXBpbGluZyDigJQgcHJldmVudCBjYXNjYWRlLiBUaGUgQ0VLIHdpbGwgaGFuZGxlIHRoaXMgY2FsbC4gKilcbiAgICBOb25lXG4gICkgZWxzZSBpZiBMaXN0Lm1lbSBcIiZrZXlcIiBsLmxfcGFyYW1zIHx8IExpc3QubWVtIFwiOmFzXCIgbC5sX3BhcmFtcyB0aGVuIChcbiAgICAoKiAma2V5LzphcyByZXF1aXJlIGNvbXBsZXggcnVudGltZSBhcmd1bWVudCBwcm9jZXNzaW5nIHRoYXQgdGhlIGNvbXBpbGVyXG4gICAgICAgZG9lc24ndCBlbWl0LiBUaGVzZSBmdW5jdGlvbnMgbXVzdCBydW4gdmlhIENFSy4gKilcbiAgICBOb25lXG4gICkgZWxzZSBpZiBsLmxfbmFtZSA9IE5vbmUgfHwgbC5sX2Nsb3N1cmUuU3hfdHlwZXMucGFyZW50IDw+IE5vbmUgdGhlbiAoXG4gICAgKCogQW5vbnltb3VzIG9yIG5lc3RlZCBsYW1iZGFzOiBza2lwIEpJVC4gTmVzdGVkIGRlZmluZXMgZ2V0IHJlLWNyZWF0ZWRcbiAgICAgICBvbiBlYWNoIG91dGVyIGNhbGwsIHNvIHBlci1jYWxsIGNvbXBpbGUgY29zdCBpcyBwdXJlIG92ZXJoZWFkLiAqKVxuICAgIE5vbmVcbiAgKSBlbHNlIGlmIF9qaXRfaXNfYnJva2VuX25hbWUgZm5fbmFtZSB0aGVuIChcbiAgICBOb25lXG4gICkgZWxzZVxuICB0cnlcbiAgICBfaml0X2NvbXBpbGluZyA6PSB0cnVlO1xuICAgIGxldCBjb21waWxlX2ZuID0gdHJ5IEhhc2h0YmwuZmluZCBnbG9iYWxzIFwiY29tcGlsZVwiXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiAoX2ppdF9jb21waWxpbmcgOj0gZmFsc2U7IHJhaXNlIChFdmFsX2Vycm9yIFwiSklUOiBjb21waWxlciBub3QgbG9hZGVkXCIpKSBpblxuICAgIGxldCBwYXJhbV9zeW1zID0gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN5bWJvbCBzKSBsLmxfcGFyYW1zKSBpblxuICAgIGxldCBmbl9leHByID0gTGlzdCBbU3ltYm9sIFwiZm5cIjsgcGFyYW1fc3ltczsgbC5sX2JvZHldIGluXG4gICAgbGV0IHF1b3RlZCA9IExpc3QgW1N5bWJvbCBcInF1b3RlXCI7IGZuX2V4cHJdIGluXG4gICAgKCogRmFzdCBwYXRoOiBpZiBjb21waWxlIGhhcyBieXRlY29kZSwgY2FsbCBpdCBkaXJlY3RseSB2aWEgdGhlIFZNLlxuICAgICAgIEFsbCBoZWxwZXIgY2FsbHMgKGNvbXBpbGUtZXhwciwgZW1pdC1ieXRlLCBldGMuKSBoYXBwZW4gaW5zaWRlIHRoZVxuICAgICAgIHNhbWUgVk0gZXhlY3V0aW9uIOKAlCBubyBwZXItY2FsbCBWTSBhbGxvY2F0aW9uIG92ZXJoZWFkLiAqKVxuICAgIGxldCByZXN1bHQgPSBtYXRjaCBjb21waWxlX2ZuIHdpdGhcbiAgICB8IExhbWJkYSB7IGxfY29tcGlsZWQgPSBTb21lIGNsOyBfIH0gd2hlbiBub3QgKGlzX2ppdF9mYWlsZWQgY2wpIC0+XG4gICAgICBjYWxsX2Nsb3N1cmUgY2wgW2ZuX2V4cHJdIGdsb2JhbHNcbiAgICB8IF8gLT5cbiAgICAgIGlnbm9yZSBjb21waWxlX2ZuO1xuICAgICAgbGV0IGNvbXBpbGVfZW52ID0gU3hfdHlwZXMuZW52X2V4dGVuZCAoU3hfdHlwZXMubWFrZV9lbnYgKCkpIGluXG4gICAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT4gSGFzaHRibC5yZXBsYWNlIGNvbXBpbGVfZW52LmJpbmRpbmdzIChTeF90eXBlcy5pbnRlcm4gaykgdikgZ2xvYmFscztcbiAgICAgIFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgW1N5bWJvbCBcImNvbXBpbGVcIjsgcXVvdGVkXSkgKEVudiBjb21waWxlX2VudilcbiAgICBpblxuICAgIF9qaXRfY29tcGlsaW5nIDo9IGZhbHNlO1xuICAgICgqIE1lcmdlIGNsb3N1cmUgYmluZGluZ3MgaW50byBlZmZlY3RpdmVfZ2xvYmFscyBzbyBHTE9CQUxfR0VUIHJlc29sdmVzXG4gICAgICAgdmFyaWFibGVzIGZyb20gbGV0L2RlZmluZSBibG9ja3MuIFRoZSBjb21waWxlciBlbWl0cyBHTE9CQUxfR0VUIGZvclxuICAgICAgIGZyZWUgdmFyaWFibGVzOyB0aGUgVk0gcmVzb2x2ZXMgdGhlbSBmcm9tIHZtX2Vudl9yZWYuICopXG4gICAgbGV0IGVmZmVjdGl2ZV9nbG9iYWxzID1cbiAgICAgIGlmIEhhc2h0YmwubGVuZ3RoIGwubF9jbG9zdXJlLlN4X3R5cGVzLmJpbmRpbmdzID4gMCB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBtZXJnZWQgPSBIYXNodGJsLmNvcHkgZ2xvYmFscyBpblxuICAgICAgICBsZXQgcmVjIG1lcmdlX2VudiBlbnYgPVxuICAgICAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGlkIHYgLT5cbiAgICAgICAgICAgIGxldCBuYW1lID0gU3hfdHlwZXMudW5pbnRlcm4gaWQgaW5cbiAgICAgICAgICAgIGlmIG5vdCAoSGFzaHRibC5tZW0gbWVyZ2VkIG5hbWUpIHRoZW5cbiAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIG1lcmdlZCBuYW1lIHYpIGVudi5TeF90eXBlcy5iaW5kaW5ncztcbiAgICAgICAgICBtYXRjaCBlbnYuU3hfdHlwZXMucGFyZW50IHdpdGggU29tZSBwIC0+IG1lcmdlX2VudiBwIHwgTm9uZSAtPiAoKVxuICAgICAgICBpblxuICAgICAgICBtZXJnZV9lbnYgbC5sX2Nsb3N1cmU7XG4gICAgICAgIG1lcmdlZFxuICAgICAgZW5kIGVsc2UgZ2xvYmFsc1xuICAgIGluXG4gICAgKG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgfCBEaWN0IGQgd2hlbiBIYXNodGJsLm1lbSBkIFwiYnl0ZWNvZGVcIiB8fCBIYXNodGJsLm1lbSBkIFwidmMtYnl0ZWNvZGVcIiAtPlxuICAgICAgbGV0IG91dGVyX2NvZGUgPSBjb2RlX2Zyb21fdmFsdWUgcmVzdWx0IGluXG4gICAgICBsZXQgYmMgPSBvdXRlcl9jb2RlLnZjX2J5dGVjb2RlIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggYmMgPj0gNCAmJiBiYy4oMCkgPSA1MSAoKiBPUF9DTE9TVVJFICopIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGlkeCA9IGJjLigxKSBsb3IgKGJjLigyKSBsc2wgOCkgaW5cbiAgICAgICAgaWYgaWR4IDwgQXJyYXkubGVuZ3RoIG91dGVyX2NvZGUudmNfY29uc3RhbnRzIHRoZW5cbiAgICAgICAgICBsZXQgaW5uZXJfdmFsID0gb3V0ZXJfY29kZS52Y19jb25zdGFudHMuKGlkeCkgaW5cbiAgICAgICAgICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBpbm5lcl92YWwgaW5cbiAgICAgICAgICBTb21lIHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gW3x8XTtcbiAgICAgICAgICAgICAgICAgdm1fbmFtZSA9IGwubF9uYW1lOyB2bV9lbnZfcmVmID0gZWZmZWN0aXZlX2dsb2JhbHM7IHZtX2Nsb3N1cmVfZW52ID0gU29tZSBsLmxfY2xvc3VyZSB9XG4gICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIEZBSUwgJXM6IGNsb3N1cmUgaW5kZXggJWQgb3V0IG9mIGJvdW5kcyAocG9vbD0lZClcXG4lIVwiXG4gICAgICAgICAgICBmbl9uYW1lIGlkeCAoQXJyYXkubGVuZ3RoIG91dGVyX2NvZGUudmNfY29uc3RhbnRzKTtcbiAgICAgICAgICBOb25lXG4gICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgKHRyeVxuICAgICAgICAgIGxldCB2YWx1ZSA9IGV4ZWN1dGVfbW9kdWxlIG91dGVyX2NvZGUgZ2xvYmFscyBpblxuICAgICAgICAgIFByaW50Zi5lcHJpbnRmIFwiW2ppdF0gUkVTT0xWRUQgJXM6ICVzIChiY1swXT0lZClcXG4lIVwiXG4gICAgICAgICAgICBmbl9uYW1lICh0eXBlX29mIHZhbHVlKSAoaWYgQXJyYXkubGVuZ3RoIGJjID4gMCB0aGVuIGJjLigwKSBlbHNlIC0xKTtcbiAgICAgICAgICBOb25lXG4gICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgIFByaW50Zi5lcHJpbnRmIFwiW2ppdF0gU0tJUCAlczogbm9uLWNsb3N1cmUgZXhlY3V0aW9uIGZhaWxlZCAoYmNbMF09JWQsIGxlbj0lZClcXG4lIVwiXG4gICAgICAgICAgICBmbl9uYW1lIChpZiBBcnJheS5sZW5ndGggYmMgPiAwIHRoZW4gYmMuKDApIGVsc2UgLTEpIChBcnJheS5sZW5ndGggYmMpO1xuICAgICAgICAgIE5vbmUpXG4gICAgICBlbmRcbiAgICB8IF8gLT5cbiAgICAgIFByaW50Zi5lcHJpbnRmIFwiW2ppdF0gRkFJTCAlczogY29tcGlsZXIgcmV0dXJuZWQgJXNcXG4lIVwiIGZuX25hbWUgKHR5cGVfb2YgcmVzdWx0KTtcbiAgICAgIE5vbmUpXG4gIHdpdGggZSAtPlxuICAgIF9qaXRfY29tcGlsaW5nIDo9IGZhbHNlO1xuICAgIFByaW50Zi5lcHJpbnRmIFwiW2ppdF0gRkFJTCAlczogJXNcXG4lIVwiIGZuX25hbWUgKFByaW50ZXhjLnRvX3N0cmluZyBlKTtcbiAgICBOb25lXG5cbigqIFdpcmUgdXAgZm9yd2FyZCByZWZlcmVuY2VzICopXG5sZXQgKCkgPSBqaXRfY29tcGlsZV9yZWYgOj0gaml0X2NvbXBpbGVfbGFtYmRhXG5sZXQgKCkgPSBfdm1fY2FsbF9jbG9zdXJlX3JlZiA6PSAoZnVuIGNsIGFyZ3MgLT4gY2FsbF9jbG9zdXJlX3JldXNlIGNsIGFyZ3MpXG5sZXQgKCkgPSBfdm1fc3VzcGVuc2lvbl90b19kaWN0IDo9IChmdW4gZXhuIC0+XG4gIG1hdGNoIGV4biB3aXRoXG4gIHwgVm1TdXNwZW5kZWQgKHJlcXVlc3QsIHZtKSAtPlxuICAgICgqIFNuYXBzaG90IHBlbmRpbmdfY2VrIGFuZCByZXVzZV9zdGFjayBOT1cg4oCUIGEgbmVzdGVkIGNla19jYWxsX29yX3N1c3BlbmRcbiAgICAgICBvbiB0aGUgc2FtZSBWTSBtYXkgb3ZlcndyaXRlIHRoZW0gYmVmb3JlIG91ciByZXN1bWUgZnVuY3Rpb24gaXMgY2FsbGVkLiAqKVxuICAgIGxldCBzYXZlZF9jZWsgPSB2bS5wZW5kaW5nX2NlayBpblxuICAgIGxldCBzYXZlZF9yZXVzZSA9IHZtLnJldXNlX3N0YWNrIGluXG4gICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAzIGluXG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJfX3ZtX3N1c3BlbmRlZFwiIChCb29sIHRydWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwicmVxdWVzdFwiIHJlcXVlc3Q7XG4gICAgSGFzaHRibC5yZXBsYWNlIGQgXCJyZXN1bWVcIiAoTmF0aXZlRm4gKFwidm0tcmVzdW1lXCIsIGZ1biBhcmdzIC0+XG4gICAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICAgIHwgW3Jlc3VsdF0gLT5cbiAgICAgICAgKCogUmVzdG9yZSBzYXZlZCBzdGF0ZSBiZWZvcmUgcmVzdW1pbmcg4oCUIG1heSBoYXZlIGJlZW4gb3ZlcndyaXR0ZW5cbiAgICAgICAgICAgYnkgYSBuZXN0ZWQgc3VzcGVuc2lvbiBvbiB0aGUgc2FtZSBWTS4gKilcbiAgICAgICAgdm0ucGVuZGluZ19jZWsgPC0gc2F2ZWRfY2VrO1xuICAgICAgICB2bS5yZXVzZV9zdGFjayA8LSBzYXZlZF9yZXVzZTtcbiAgICAgICAgKHRyeSByZXN1bWVfdm0gdm0gcmVzdWx0XG4gICAgICAgICB3aXRoIGV4bjIgLT5cbiAgICAgICAgICAgbWF0Y2ggIV92bV9zdXNwZW5zaW9uX3RvX2RpY3QgZXhuMiB3aXRoXG4gICAgICAgICAgIHwgU29tZSBtYXJrZXIgLT4gbWFya2VyXG4gICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBleG4yKVxuICAgICAgfCBfIC0+IE5pbCkpO1xuICAgIFNvbWUgKERpY3QgZClcbiAgfCBfIC0+IE5vbmUpXG4oKiBIb29rOiB3aGVuIGV2YWxfZXhwciAoY2VrX3J1bl9pdGVyYXRpdmUpIGVuY291bnRlcnMgYSBDRUsgc3VzcGVuc2lvbixcbiAgIGNvbnZlcnQgaXQgdG8gVm1TdXNwZW5kZWQgc28gaXQgcHJvcGFnYXRlcyB0byB0aGUgb3V0ZXIgaGFuZGxlclxuICAgKHZhbHVlX3RvX2pzIHdyYXBwZXIsIF9kcml2ZUFzeW5jLCBldGMuKS4gV2l0aG91dCB0aGlzLCBwZXJmb3JtXG4gICBpbnNpZGUgbmVzdGVkIGV2YWxfZXhwciBjYWxscyAoZXZlbnQgaGFuZGxlciDihpIgdHJhbXBvbGluZSDihpIgZXZhbF9leHByKVxuICAgZ2V0cyBzd2FsbG93ZWQgYXMgXCJJTyBzdXNwZW5zaW9uIGluIG5vbi1JTyBjb250ZXh0XCIuICopXG5sZXQgKCkgPSBfY2VrX2lvX3N1c3BlbmRfaG9vayA6PSBTb21lIChmdW4gc3VzcGVuZGVkX3N0YXRlIC0+XG4gIGxldCByZXF1ZXN0ID0gU3hfcmVmLmNla19pb19yZXF1ZXN0IHN1c3BlbmRlZF9zdGF0ZSBpblxuICBsZXQgdm0gPSBjcmVhdGUgIV9kZWZhdWx0X3ZtX2dsb2JhbHMgaW5cbiAgdm0ucGVuZGluZ19jZWsgPC0gU29tZSBzdXNwZW5kZWRfc3RhdGU7XG4gICgqIFRyYW5zZmVyIHJldXNlX3N0YWNrIGZyb20gdGhlIGFjdGl2ZSBWTSBzbyByZXN1bWVfdm0gY2FuIHJlc3RvcmVcbiAgICAgY2FsbGVyIGZyYW1lcyBzYXZlZCBieSBjYWxsX2Nsb3N1cmVfcmV1c2UgZHVyaW5nIHRoZSBzdXNwZW5zaW9uIGNoYWluLiAqKVxuICAobWF0Y2ggIV9hY3RpdmVfdm0gd2l0aFxuICAgfCBTb21lIGFjdGl2ZSB3aGVuIGFjdGl2ZS5yZXVzZV9zdGFjayA8PiBbXSAtPlxuICAgICB2bS5yZXVzZV9zdGFjayA8LSBhY3RpdmUucmV1c2Vfc3RhY2s7XG4gICAgIGFjdGl2ZS5yZXVzZV9zdGFjayA8LSBbXVxuICAgfCBfIC0+ICgpKTtcbiAgcmFpc2UgKFZtU3VzcGVuZGVkIChyZXF1ZXN0LCB2bSkpKVxuXG5sZXQgKCkgPSBfY2VrX2V2YWxfbGFtYmRhX3JlZiA6PSAoZnVuIGYgYXJncyAtPlxuICBsZXQgc3RhdGUgPSBTeF9yZWYuY29udGludWVfd2l0aF9jYWxsIGYgKExpc3QgYXJncykgKEVudiAobWFrZV9lbnYgKCkpKSAoTGlzdCBhcmdzKSAoTGlzdCBbXSkgaW5cbiAgbGV0IGZpbmFsID0gU3hfcmVmLmNla19zdGVwX2xvb3Agc3RhdGUgaW5cbiAgbWF0Y2ggU3hfcnVudGltZS5nZXRfdmFsIGZpbmFsIChTdHJpbmcgXCJwaGFzZVwiKSB3aXRoXG4gIHwgU3RyaW5nIFwiaW8tc3VzcGVuZGVkXCIgLT5cbiAgICAoKiBDcmVhdGUgYSBzdHViIFZNIHRvIGNhcnJ5IHRoZSBzdXNwZW5kZWQgQ0VLIHN0YXRlLlxuICAgICAgIHJlc3VtZV92bSB3aWxsOiBjZWtfcmVzdW1lIOKGkiBwdXNoIHJlc3VsdCDihpIgcnVuIChuby1vcCwgbm8gZnJhbWVzKSDihpIgcG9wICopXG4gICAgbGV0IHZtID0gY3JlYXRlIChIYXNodGJsLmNyZWF0ZSAwKSBpblxuICAgIHZtLnBlbmRpbmdfY2VrIDwtIFNvbWUgZmluYWw7XG4gICAgKCogVHJhbnNmZXIgcmV1c2Vfc3RhY2sgZnJvbSBhY3RpdmUgVk0gKilcbiAgICAobWF0Y2ggIV9hY3RpdmVfdm0gd2l0aFxuICAgICB8IFNvbWUgYWN0aXZlIHdoZW4gYWN0aXZlLnJldXNlX3N0YWNrIDw+IFtdIC0+XG4gICAgICAgdm0ucmV1c2Vfc3RhY2sgPC0gYWN0aXZlLnJldXNlX3N0YWNrO1xuICAgICAgIGFjdGl2ZS5yZXVzZV9zdGFjayA8LSBbXVxuICAgICB8IF8gLT4gKCkpO1xuICAgIHJhaXNlIChWbVN1c3BlbmRlZCAoU3hfcnVudGltZS5nZXRfdmFsIGZpbmFsIChTdHJpbmcgXCJyZXF1ZXN0XCIpLCB2bSkpXG4gIHwgXyAtPiBTeF9yZWYuY2VrX3ZhbHVlIGZpbmFsKVxuXG5cbigqKiB7MSBEZWJ1Z2dpbmcgLyBpbnRyb3NwZWN0aW9ufSAqKVxuXG4oKiogTWFwIG9wY29kZSBpbnRlZ2VyIHRvIGh1bWFuLXJlYWRhYmxlIG5hbWUuICopXG5sZXQgb3Bjb2RlX25hbWUgPSBmdW5jdGlvblxuICB8IDEgLT4gXCJDT05TVFwiIHwgMiAtPiBcIk5JTFwiIHwgMyAtPiBcIlRSVUVcIiB8IDQgLT4gXCJGQUxTRVwiXG4gIHwgNSAtPiBcIlBPUFwiIHwgNiAtPiBcIkRVUFwiIHwgNyAtPiBcIlNXQVBcIlxuICB8IDE2IC0+IFwiTE9DQUxfR0VUXCIgfCAxNyAtPiBcIkxPQ0FMX1NFVFwiXG4gIHwgMTggLT4gXCJVUFZBTFVFX0dFVFwiIHwgMTkgLT4gXCJVUFZBTFVFX1NFVFwiXG4gIHwgMjAgLT4gXCJHTE9CQUxfR0VUXCIgfCAyMSAtPiBcIkdMT0JBTF9TRVRcIlxuICB8IDMyIC0+IFwiSlVNUFwiIHwgMzMgLT4gXCJKVU1QX0lGX0ZBTFNFXCIgfCAzNCAtPiBcIkpVTVBfSUZfVFJVRVwiXG4gIHwgMzUgLT4gXCJQVVNIX0hBTkRMRVJcIiB8IDM2IC0+IFwiUE9QX0hBTkRMRVJcIiB8IDM3IC0+IFwiUkFJU0VcIlxuICB8IDQ4IC0+IFwiQ0FMTFwiIHwgNDkgLT4gXCJUQUlMX0NBTExcIiB8IDUwIC0+IFwiUkVUVVJOXCJcbiAgfCA1MSAtPiBcIkNMT1NVUkVcIiB8IDUyIC0+IFwiQ0FMTF9QUklNXCJcbiAgfCA2NCAtPiBcIkxJU1RcIiB8IDY1IC0+IFwiRElDVFwiXG4gIHwgMTI4IC0+IFwiREVGSU5FXCJcbiAgfCAxNDQgLT4gXCJTVFJfQ09OQ0FUXCJcbiAgfCAxNjAgLT4gXCJBRERcIiB8IDE2MSAtPiBcIlNVQlwiIHwgMTYyIC0+IFwiTVVMXCIgfCAxNjMgLT4gXCJESVZcIlxuICB8IDE2NCAtPiBcIkVRXCIgfCAxNjUgLT4gXCJMVFwiIHwgMTY2IC0+IFwiR1RcIiB8IDE2NyAtPiBcIk5PVFwiXG4gIHwgMTY4IC0+IFwiTEVOXCIgfCAxNjkgLT4gXCJGSVJTVFwiIHwgMTcwIC0+IFwiUkVTVFwiIHwgMTcxIC0+IFwiTlRIXCJcbiAgfCAxNzIgLT4gXCJDT05TXCIgfCAxNzMgLT4gXCJORUdcIiB8IDE3NCAtPiBcIklOQ1wiIHwgMTc1IC0+IFwiREVDXCJcbiAgfCBuIC0+IFByaW50Zi5zcHJpbnRmIFwiVU5LTk9XTl8lZFwiIG5cblxuKCoqIE51bWJlciBvZiBleHRyYSBvcGVyYW5kIGJ5dGVzIGNvbnN1bWVkIGJ5IGVhY2ggb3Bjb2RlLlxuICAgIFJldHVybnMgKGZvcm1hdCwgdG90YWxfYnl0ZXMpIHdoZXJlIGZvcm1hdCBkZXNjcmliZXMgdGhlIG9wZXJhbmQgdHlwZXMuICopXG5sZXQgb3Bjb2RlX29wZXJhbmRfc2l6ZSA9IGZ1bmN0aW9uXG4gIHwgMSAoKiBDT05TVCAqKSB8IDIwICgqIEdMT0JBTF9HRVQgKikgfCAyMSAoKiBHTE9CQUxfU0VUICopXG4gIHwgNjQgKCogTElTVCAqKSB8IDY1ICgqIERJQ1QgKikgfCAxMjggKCogREVGSU5FICopIC0+IDIgICgqIHUxNiAqKVxuICB8IDE2ICgqIExPQ0FMX0dFVCAqKSB8IDE3ICgqIExPQ0FMX1NFVCAqKVxuICB8IDE4ICgqIFVQVkFMVUVfR0VUICopIHwgMTkgKCogVVBWQUxVRV9TRVQgKilcbiAgfCA0OCAoKiBDQUxMICopIHwgNDkgKCogVEFJTF9DQUxMICopXG4gIHwgMTQ0ICgqIFNUUl9DT05DQVQgKikgLT4gMSAgKCogdTggKilcbiAgfCAzMiAoKiBKVU1QICopIHwgMzMgKCogSlVNUF9JRl9GQUxTRSAqKSB8IDM0ICgqIEpVTVBfSUZfVFJVRSAqKVxuICB8IDM1ICgqIFBVU0hfSEFORExFUiAqKSAtPiAyICAoKiBpMTYgKilcbiAgfCA1MSAoKiBDTE9TVVJFICopIC0+IDIgICgqIHUxNiBmb3IgY29uc3RhbnQgaW5kZXg7IHVwdmFsdWUgZGVzY3JpcHRvcnMgZm9sbG93IGR5bmFtaWNhbGx5ICopXG4gIHwgNTIgKCogQ0FMTF9QUklNICopIC0+IDMgICgqIHUxNiArIHU4ICopXG4gIHwgXyAtPiAwICAoKiBubyBvcGVyYW5kICopXG5cbigqKiBUcmFjZSBhIHNpbmdsZSBleGVjdXRpb24g4oCUIGNvbXBpbGUgKyBydW4sIGNvbGxlY3RpbmcgdHJhY2UgZW50cmllcy5cbiAgICBFYWNoIGVudHJ5IGlzIGEgZGljdCB3aXRoIDpvcGNvZGUsIDpzdGFjaywgOmRlcHRoLiAqKVxubGV0IHRyYWNlX3J1biBzcmMgZ2xvYmFscyA9XG4gICgqIENvbXBpbGUgKilcbiAgbGV0IGNvbXBpbGVfZm4gPSB0cnkgSGFzaHRibC5maW5kIGdsb2JhbHMgXCJjb21waWxlXCJcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRyYWNlOiBjb21waWxlciBub3QgbG9hZGVkXCIpIGluXG4gIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gIGxldCBleHByID0gbWF0Y2ggZXhwcnMgd2l0aCBbZV0gLT4gZSB8IF8gLT4gTGlzdCAoU3ltYm9sIFwiZG9cIiA6OiBleHBycykgaW5cbiAgbGV0IHF1b3RlZCA9IExpc3QgW1N5bWJvbCBcInF1b3RlXCI7IGV4cHJdIGluXG4gIGxldCBjb2RlX3ZhbCA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgW2NvbXBpbGVfZm47IHF1b3RlZF0pIChFbnYgKG1ha2VfZW52ICgpKSkgaW5cbiAgbGV0IGNvZGUgPSBjb2RlX2Zyb21fdmFsdWUgY29kZV92YWwgaW5cbiAgbGV0IGNsID0geyB2bV9jb2RlID0gY29kZTsgdm1fdXB2YWx1ZXMgPSBbfHxdOyB2bV9uYW1lID0gU29tZSBcInRyYWNlXCI7XG4gICAgICAgICAgICAgdm1fZW52X3JlZiA9IGdsb2JhbHM7IHZtX2Nsb3N1cmVfZW52ID0gTm9uZSB9IGluXG4gIGxldCB2bSA9IGNyZWF0ZSBnbG9iYWxzIGluXG4gIGxldCBmcmFtZTAgPSB7IGNsb3N1cmUgPSBjbDsgaXAgPSAwOyBiYXNlID0gMDsgbG9jYWxfY2VsbHMgPSBIYXNodGJsLmNyZWF0ZSA0IH0gaW5cbiAgZm9yIF8gPSAwIHRvIGNvZGUudmNfbG9jYWxzIC0gMSBkbyBwdXNoIHZtIE5pbCBkb25lO1xuICB2bS5mcmFtZXMgPC0gW2ZyYW1lMF07XG4gICgqIFJ1biB3aXRoIHRyYWNpbmcgKilcbiAgbGV0IHRyYWNlID0gcmVmIFtdIGluXG4gIGxldCBtYXhfc3RlcHMgPSAxMDAwMCBpblxuICBsZXQgc3RlcHMgPSByZWYgMCBpblxuICAodHJ5XG4gICAgd2hpbGUgdm0uZnJhbWVzIDw+IFtdICYmICFzdGVwcyA8IG1heF9zdGVwcyBkb1xuICAgICAgbWF0Y2ggdm0uZnJhbWVzIHdpdGhcbiAgICAgIHwgW10gLT4gKClcbiAgICAgIHwgZnJhbWUgOjogXyAtPlxuICAgICAgICBsZXQgYmMgPSBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUgaW5cbiAgICAgICAgaWYgZnJhbWUuaXAgPj0gQXJyYXkubGVuZ3RoIGJjIHRoZW5cbiAgICAgICAgICB2bS5mcmFtZXMgPC0gW11cbiAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgIGxldCBvcCA9IGJjLihmcmFtZS5pcCkgaW5cbiAgICAgICAgICAoKiBTbmFwc2hvdCBzdGFjayB0b3AgNSAqKVxuICAgICAgICAgIGxldCBzdGFja19zbmFwID0gTGlzdC5pbml0IChtaW4gNSB2bS5zcCkgKGZ1biBpIC0+XG4gICAgICAgICAgICBsZXQgdiA9IHZtLnN0YWNrLih2bS5zcCAtIDEgLSBpKSBpblxuICAgICAgICAgICAgU3RyaW5nIChTeF90eXBlcy5pbnNwZWN0IHYpKSBpblxuICAgICAgICAgIGxldCBlbnRyeSA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZW50cnkgXCJvcGNvZGVcIiAoU3RyaW5nIChvcGNvZGVfbmFtZSBvcCkpO1xuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcInN0YWNrXCIgKExpc3Qgc3RhY2tfc25hcCk7XG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGVudHJ5IFwiZGVwdGhcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgKExpc3QubGVuZ3RoIHZtLmZyYW1lcykpKTtcbiAgICAgICAgICB0cmFjZSA6PSBEaWN0IGVudHJ5IDo6ICF0cmFjZTtcbiAgICAgICAgICBpbmNyIHN0ZXBzO1xuICAgICAgICAgICgqIEV4ZWN1dGUgb25lIHN0ZXAg4oCUIHVzZSB0aGUgbWFpbiBydW4gbG9vcCBmb3IgMSBzdGVwLlxuICAgICAgICAgICAgIFdlIGRvIHRoaXMgYnkgc2F2aW5nIHRoZSBzdGF0ZSBhbmQgcnVubmluZyB0aGUgb3JpZ2luYWwgZGlzcGF0Y2guICopXG4gICAgICAgICAgbGV0IHNhdmVkX2lwID0gZnJhbWUuaXAgaW5cbiAgICAgICAgICBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIDE7XG4gICAgICAgICAgbGV0IHJlc3RfZnJhbWVzID0gTGlzdC50bCB2bS5mcmFtZXMgaW5cbiAgICAgICAgICAodHJ5IG1hdGNoIG9wIHdpdGhcbiAgICAgICAgICB8IDEgLT4gbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluIHB1c2ggdm0gZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2NvbnN0YW50cy4oaWR4KVxuICAgICAgICAgIHwgMiAtPiBwdXNoIHZtIE5pbFxuICAgICAgICAgIHwgMyAtPiBwdXNoIHZtIChCb29sIHRydWUpXG4gICAgICAgICAgfCA0IC0+IHB1c2ggdm0gKEJvb2wgZmFsc2UpXG4gICAgICAgICAgfCA1IC0+IGlnbm9yZSAocG9wIHZtKVxuICAgICAgICAgIHwgNiAtPiBwdXNoIHZtIChwZWVrIHZtKVxuICAgICAgICAgIHwgNyAtPiBsZXQgYSA9IHBvcCB2bSBpbiBsZXQgYiA9IHBvcCB2bSBpbiBwdXNoIHZtIGE7IHB1c2ggdm0gYlxuICAgICAgICAgIHwgMTYgLT4gbGV0IHNsb3QgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgdiA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZnJhbWUubG9jYWxfY2VsbHMgc2xvdCB3aXRoXG4gICAgICAgICAgICAgIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWVcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHZtLnN0YWNrLihmcmFtZS5iYXNlICsgc2xvdCkgaW5cbiAgICAgICAgICAgIHB1c2ggdm0gdlxuICAgICAgICAgIHwgMTcgLT4gbGV0IHNsb3QgPSByZWFkX3U4IGZyYW1lIGluIGxldCB2ID0gcGVlayB2bSBpblxuICAgICAgICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZnJhbWUubG9jYWxfY2VsbHMgc2xvdCB3aXRoXG4gICAgICAgICAgICAgfCBTb21lIGNlbGwgLT4gY2VsbC51dl92YWx1ZSA8LSB2XG4gICAgICAgICAgICAgfCBOb25lIC0+IHZtLnN0YWNrLihmcmFtZS5iYXNlICsgc2xvdCkgPC0gdilcbiAgICAgICAgICB8IDE4IC0+IGxldCBpZHggPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICBwdXNoIHZtIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGlkeCkudXZfdmFsdWVcbiAgICAgICAgICB8IDE5IC0+IGxldCBpZHggPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICBmcmFtZS5jbG9zdXJlLnZtX3VwdmFsdWVzLihpZHgpLnV2X3ZhbHVlIDwtIHBlZWsgdm1cbiAgICAgICAgICB8IDIwIC0+IGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IG5hbWUgPSBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgICAgbGV0IHYgPSB0cnkgSGFzaHRibC5maW5kIHZtLmdsb2JhbHMgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgICB0cnkgU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIG5hbWUgd2l0aCBfIC0+XG4gICAgICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk0gdW5kZWZpbmVkOiBcIiBeIG5hbWUpKSBpblxuICAgICAgICAgICAgcHVzaCB2bSB2XG4gICAgICAgICAgfCAyMSAtPiBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2NvbnN0YW50cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSB2bS5nbG9iYWxzIG5hbWUgKHBlZWsgdm0pXG4gICAgICAgICAgfCAzMiAtPiBsZXQgb2Zmc2V0ID0gcmVhZF9pMTYgZnJhbWUgaW4gZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyBvZmZzZXRcbiAgICAgICAgICB8IDMzIC0+IGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpbiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgaWYgbm90IChzeF90cnV0aHkgdikgdGhlbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuICAgICAgICAgIHwgMzQgLT4gbGV0IG9mZnNldCA9IHJlYWRfaTE2IGZyYW1lIGluIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgb2Zmc2V0XG4gICAgICAgICAgfCAzNSAtPiBsZXQgY2F0Y2hfb2Zmc2V0ID0gcmVhZF9pMTYgZnJhbWUgaW5cbiAgICAgICAgICAgIHZtLmhhbmRsZXJfc3RhY2sgPC0geyBoX2NhdGNoX2lwID0gZnJhbWUuaXAgKyBjYXRjaF9vZmZzZXQ7XG4gICAgICAgICAgICAgIGhfZnJhbWVfZGVwdGggPSBMaXN0Lmxlbmd0aCB2bS5mcmFtZXM7IGhfc3AgPSB2bS5zcDtcbiAgICAgICAgICAgICAgaF9mcmFtZSA9IGZyYW1lIH0gOjogdm0uaGFuZGxlcl9zdGFja1xuICAgICAgICAgIHwgMzYgLT4gKG1hdGNoIHZtLmhhbmRsZXJfc3RhY2sgd2l0aCBfIDo6IHIgLT4gdm0uaGFuZGxlcl9zdGFjayA8LSByIHwgW10gLT4gKCkpXG4gICAgICAgICAgfCAzNyAtPiBsZXQgZXhuX3ZhbCA9IHBvcCB2bSBpblxuICAgICAgICAgICAgKG1hdGNoIHZtLmhhbmRsZXJfc3RhY2sgd2l0aFxuICAgICAgICAgICAgIHwgZW50cnkgOjogcmVzdCAtPlxuICAgICAgICAgICAgICAgdm0uaGFuZGxlcl9zdGFjayA8LSByZXN0O1xuICAgICAgICAgICAgICAgd2hpbGUgTGlzdC5sZW5ndGggdm0uZnJhbWVzID4gZW50cnkuaF9mcmFtZV9kZXB0aCBkb1xuICAgICAgICAgICAgICAgICBtYXRjaCB2bS5mcmFtZXMgd2l0aCBfIDo6IGZzIC0+IHZtLmZyYW1lcyA8LSBmcyB8IFtdIC0+ICgpIGRvbmU7XG4gICAgICAgICAgICAgICB2bS5zcCA8LSBlbnRyeS5oX3NwOyBlbnRyeS5oX2ZyYW1lLmlwIDwtIGVudHJ5LmhfY2F0Y2hfaXA7XG4gICAgICAgICAgICAgICBwdXNoIHZtIGV4bl92YWxcbiAgICAgICAgICAgICB8IFtdIC0+IHZtLmZyYW1lcyA8LSBbXSlcbiAgICAgICAgICB8IDQ4IC0+IGxldCBhcmdjID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5pbml0IGFyZ2MgKGZ1biBfIC0+IHBvcCB2bSkgaW5cbiAgICAgICAgICAgIGxldCBmID0gcG9wIHZtIGluXG4gICAgICAgICAgICB2bV9jYWxsIHZtIGYgKExpc3QucmV2IChBcnJheS50b19saXN0IGFyZ3MpKVxuICAgICAgICAgIHwgNDkgLT4gbGV0IGFyZ2MgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgYXJncyA9IEFycmF5LmluaXQgYXJnYyAoZnVuIF8gLT4gcG9wIHZtKSBpblxuICAgICAgICAgICAgbGV0IGYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHZtLmZyYW1lcyA8LSByZXN0X2ZyYW1lczsgdm0uc3AgPC0gZnJhbWUuYmFzZTtcbiAgICAgICAgICAgIHZtX2NhbGwgdm0gZiAoTGlzdC5yZXYgKEFycmF5LnRvX2xpc3QgYXJncykpXG4gICAgICAgICAgfCA1MCAtPiBsZXQgcmVzdWx0ID0gcG9wIHZtIGluXG4gICAgICAgICAgICB2bS5mcmFtZXMgPC0gcmVzdF9mcmFtZXM7IHZtLnNwIDwtIGZyYW1lLmJhc2U7IHB1c2ggdm0gcmVzdWx0XG4gICAgICAgICAgfCA1MSAtPiAoKiBDTE9TVVJFIOKAlCBza2lwIGZvciB0cmFjZSwganVzdCBhZHZhbmNlIHBhc3QgdXB2YWx1ZSBkZXNjcmlwdG9ycyAqKVxuICAgICAgICAgICAgbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgY29kZV92YWwyID0gZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2NvbnN0YW50cy4oaWR4KSBpblxuICAgICAgICAgICAgbGV0IHV2X2NvdW50ID0gbWF0Y2ggY29kZV92YWwyIHdpdGhcbiAgICAgICAgICAgICAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInVwdmFsdWUtY291bnRcIiB3aXRoXG4gICAgICAgICAgICAgICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBpbnRfb2ZfZmxvYXQgbiB8IF8gLT4gMClcbiAgICAgICAgICAgICAgfCBfIC0+IDAgaW5cbiAgICAgICAgICAgIGxldCB1cHZhbHVlcyA9IEFycmF5LmluaXQgdXZfY291bnQgKGZ1biBfIC0+XG4gICAgICAgICAgICAgIGxldCBpc19sb2NhbCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgICBpZiBpc19sb2NhbCA9IDEgdGhlbiBiZWdpblxuICAgICAgICAgICAgICAgIGxldCBjZWxsID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBmcmFtZS5sb2NhbF9jZWxscyBpbmRleCB3aXRoXG4gICAgICAgICAgICAgICAgICB8IFNvbWUgZXhpc3RpbmcgLT4gZXhpc3RpbmdcbiAgICAgICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgICBsZXQgYyA9IHsgdXZfdmFsdWUgPSB2bS5zdGFjay4oZnJhbWUuYmFzZSArIGluZGV4KSB9IGluXG4gICAgICAgICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBmcmFtZS5sb2NhbF9jZWxscyBpbmRleCBjOyBjIGluXG4gICAgICAgICAgICAgICAgY2VsbFxuICAgICAgICAgICAgICBlbmQgZWxzZSBmcmFtZS5jbG9zdXJlLnZtX3VwdmFsdWVzLihpbmRleClcbiAgICAgICAgICAgICkgaW5cbiAgICAgICAgICAgIGxldCBpbm5lcl9jb2RlID0gY29kZV9mcm9tX3ZhbHVlIGNvZGVfdmFsMiBpblxuICAgICAgICAgICAgbGV0IGMgPSB7IHZtX2NvZGUgPSBpbm5lcl9jb2RlOyB2bV91cHZhbHVlcyA9IHVwdmFsdWVzOyB2bV9uYW1lID0gTm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgdm1fZW52X3JlZiA9IHZtLmdsb2JhbHM7IHZtX2Nsb3N1cmVfZW52ID0gZnJhbWUuY2xvc3VyZS52bV9jbG9zdXJlX2VudiB9IGluXG4gICAgICAgICAgICBwdXNoIHZtIChWbUNsb3N1cmUgYylcbiAgICAgICAgICB8IDUyIC0+IGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpbiBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2NvbnN0YW50cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAgIGxldCBhcmdzID0gTGlzdC5pbml0IGFyZ2MgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICAgIGxldCBmbl92YWwgPSB0cnkgU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIG5hbWUgd2l0aCBfIC0+XG4gICAgICAgICAgICAgIHRyeSBIYXNodGJsLmZpbmQgdm0uZ2xvYmFscyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk06IHVua25vd24gcHJpbWl0aXZlIFwiIF4gbmFtZSkpIGluXG4gICAgICAgICAgICAobWF0Y2ggZm5fdmFsIHdpdGggTmF0aXZlRm4gKF8sIGZuKSAtPiBwdXNoIHZtIChmbiBhcmdzKSB8IF8gLT4gcHVzaCB2bSBOaWwpXG4gICAgICAgICAgfCA2NCAtPiBsZXQgY291bnQgPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gTGlzdC5pbml0IGNvdW50IChmdW4gXyAtPiBwb3Agdm0pIHw+IExpc3QucmV2IGluXG4gICAgICAgICAgICBwdXNoIHZtIChMaXN0IGl0ZW1zKVxuICAgICAgICAgIHwgNjUgLT4gbGV0IGNvdW50ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgY291bnQgaW5cbiAgICAgICAgICAgIGZvciBfID0gMSB0byBjb3VudCBkbyBsZXQgdiA9IHBvcCB2bSBpbiBsZXQgayA9IHBvcCB2bSBpblxuICAgICAgICAgICAgICBsZXQga2V5ID0gbWF0Y2ggayB3aXRoIFN0cmluZyBzIC0+IHMgfCBLZXl3b3JkIHMgLT4gcyB8IF8gLT4gU3hfcnVudGltZS52YWx1ZV90b19zdHIgayBpblxuICAgICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBrZXkgdiBkb25lO1xuICAgICAgICAgICAgcHVzaCB2bSAoRGljdCBkKVxuICAgICAgICAgIHwgMTI4IC0+IGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IG5hbWUgPSBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHZtLmdsb2JhbHMgbmFtZSAocGVlayB2bSlcbiAgICAgICAgICB8IDE0NCAtPiBsZXQgY291bnQgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgcGFydHMgPSBMaXN0LmluaXQgY291bnQgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKFN0cmluZyAoU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBwYXJ0cykpKVxuICAgICAgICAgIHwgMTYwIC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCArLiB5KSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTYxIC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCAtLiB5KSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTYyIC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCAqLiB5KSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTYzIC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCAvLiB5KSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTY0IC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluIHB1c2ggdm0gKEJvb2wgKGEgPSBiKSlcbiAgICAgICAgICB8IDE2NSAtPiBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoIE51bWJlciB4LCBOdW1iZXIgeSAtPiBCb29sICh4IDwgeSkgfCBfIC0+IEJvb2wgZmFsc2UpXG4gICAgICAgICAgfCAxNjYgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gQm9vbCAoeCA+IHkpIHwgXyAtPiBCb29sIGZhbHNlKVxuICAgICAgICAgIHwgMTY3IC0+IGxldCB2ID0gcG9wIHZtIGluIHB1c2ggdm0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5IHYpKSlcbiAgICAgICAgICB8IDE2OCAtPiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICAgIHwgTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChMaXN0Lmxlbmd0aCBsKSlcbiAgICAgICAgICAgICAgfCBTdHJpbmcgcyAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSlcbiAgICAgICAgICAgICAgfCBfIC0+IE51bWJlciAwLjApXG4gICAgICAgICAgfCAxNjkgLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aCBMaXN0ICh4IDo6IF8pIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0geCA6OiBfIH0gLT4geCB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTcwIC0+IGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgICAgfCBMaXN0IChfIDo6IHhzKSB8IExpc3RSZWYgeyBjb250ZW50cyA9IF8gOjogeHMgfSAtPiBMaXN0IHhzIHwgXyAtPiBMaXN0IFtdKVxuICAgICAgICAgIHwgMTcxIC0+IGxldCBuID0gcG9wIHZtIGFuZCBjb2xsID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBjb2xsLCBuIHdpdGhcbiAgICAgICAgICAgICAgfCAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSwgTnVtYmVyIGYgLT5cbiAgICAgICAgICAgICAgICAodHJ5IExpc3QubnRoIGwgKGludF9vZl9mbG9hdCBmKSB3aXRoIF8gLT4gTmlsKSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTcyIC0+IGxldCBjb2xsID0gcG9wIHZtIGFuZCB4ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBjb2xsIHdpdGggTGlzdCBsIC0+IExpc3QgKHggOjogbCkgfCBfIC0+IExpc3QgW3hdKVxuICAgICAgICAgIHwgMTczIC0+IGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGggTnVtYmVyIHggLT4gTnVtYmVyICgtLngpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNzQgLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aCBOdW1iZXIgeCAtPiBOdW1iZXIgKHggKy4gMS4wKSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgMTc1IC0+IGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGggTnVtYmVyIHggLT4gTnVtYmVyICh4IC0uIDEuMCkgfCBfIC0+IE5pbClcbiAgICAgICAgICB8IF8gLT4gKClcbiAgICAgICAgICB3aXRoIGUgLT5cbiAgICAgICAgICAgIGxldCBfID0gZSBpblxuICAgICAgICAgICAgaWdub3JlIHNhdmVkX2lwO1xuICAgICAgICAgICAgKCogT24gZXJyb3IgZHVyaW5nIHRyYWNlLCBqdXN0IHN0b3AgKilcbiAgICAgICAgICAgIHZtLmZyYW1lcyA8LSBbXSlcbiAgICAgICAgZW5kXG4gICAgZG9uZVxuICB3aXRoIF8gLT4gKCkpO1xuICBMaXN0IChMaXN0LnJldiAhdHJhY2UpXG5cbigqKiBEaXNhc3NlbWJsZSBhIHZtX2NvZGUgaW50byBhIGxpc3Qgb2YgaW5zdHJ1Y3Rpb24gZGljdHMuICopXG5sZXQgZGlzYXNzZW1ibGUgKGNvZGUgOiB2bV9jb2RlKSA9XG4gIGxldCBiYyA9IGNvZGUudmNfYnl0ZWNvZGUgaW5cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBiYyBpblxuICBsZXQgY29uc3RzID0gY29kZS52Y19jb25zdGFudHMgaW5cbiAgbGV0IGluc3RycyA9IHJlZiBbXSBpblxuICBsZXQgaXAgPSByZWYgMCBpblxuICB3aGlsZSAhaXAgPCBsZW4gZG9cbiAgICBsZXQgb2Zmc2V0ID0gIWlwIGluXG4gICAgbGV0IG9wID0gYmMuKCFpcCkgaW5cbiAgICBpcCA6PSAhaXAgKyAxO1xuICAgIGxldCBuYW1lID0gb3Bjb2RlX25hbWUgb3AgaW5cbiAgICBsZXQgb3BlcmFuZHMgPSByZWYgW10gaW5cbiAgICAobWF0Y2ggb3Agd2l0aFxuICAgIHwgMSAoKiBDT05TVCAqKSB8IDIwICgqIEdMT0JBTF9HRVQgKikgfCAyMSAoKiBHTE9CQUxfU0VUICopXG4gICAgfCAxMjggKCogREVGSU5FICopIC0+XG4gICAgICBpZiAhaXAgKyAxIDwgbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxvID0gYmMuKCFpcCkgaW4gbGV0IGhpID0gYmMuKCFpcCArIDEpIGluXG4gICAgICAgIGxldCBpZHggPSBsbyBsb3IgKGhpIGxzbCA4KSBpblxuICAgICAgICBpcCA6PSAhaXAgKyAyO1xuICAgICAgICBsZXQgY29uc3Rfc3RyID0gaWYgaWR4IDwgQXJyYXkubGVuZ3RoIGNvbnN0c1xuICAgICAgICAgIHRoZW4gU3hfdHlwZXMuaW5zcGVjdCBjb25zdHMuKGlkeCkgZWxzZSBcIj9cIiBpblxuICAgICAgICBvcGVyYW5kcyA6PSBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaWR4KTsgU3RyaW5nIGNvbnN0X3N0cl1cbiAgICAgIGVuZFxuICAgIHwgNjQgKCogTElTVCAqKSB8IDY1ICgqIERJQ1QgKikgfCA1MSAoKiBDTE9TVVJFICopIC0+XG4gICAgICBpZiAhaXAgKyAxIDwgbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxvID0gYmMuKCFpcCkgaW4gbGV0IGhpID0gYmMuKCFpcCArIDEpIGluXG4gICAgICAgIGxldCBpZHggPSBsbyBsb3IgKGhpIGxzbCA4KSBpblxuICAgICAgICBpcCA6PSAhaXAgKyAyO1xuICAgICAgICBvcGVyYW5kcyA6PSBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaWR4KV07XG4gICAgICAgICgqIEZvciBDTE9TVVJFLCBza2lwIHVwdmFsdWUgZGVzY3JpcHRvcnMgKilcbiAgICAgICAgaWYgb3AgPSA1MSAmJiBpZHggPCBBcnJheS5sZW5ndGggY29uc3RzIHRoZW4gYmVnaW5cbiAgICAgICAgICBsZXQgdXZfY291bnQgPSBtYXRjaCBjb25zdHMuKGlkeCkgd2l0aFxuICAgICAgICAgICAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInVwdmFsdWUtY291bnRcIiB3aXRoXG4gICAgICAgICAgICAgICAgfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IDApXG4gICAgICAgICAgICB8IF8gLT4gMCBpblxuICAgICAgICAgIGlwIDo9ICFpcCArIHV2X2NvdW50ICogMlxuICAgICAgICBlbmRcbiAgICAgIGVuZFxuICAgIHwgMTYgKCogTE9DQUxfR0VUICopIHwgMTcgKCogTE9DQUxfU0VUICopXG4gICAgfCAxOCAoKiBVUFZBTFVFX0dFVCAqKSB8IDE5ICgqIFVQVkFMVUVfU0VUICopXG4gICAgfCA0OCAoKiBDQUxMICopIHwgNDkgKCogVEFJTF9DQUxMICopXG4gICAgfCAxNDQgKCogU1RSX0NPTkNBVCAqKSAtPlxuICAgICAgaWYgIWlwIDwgbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IHYgPSBiYy4oIWlwKSBpbiBpcCA6PSAhaXAgKyAxO1xuICAgICAgICBvcGVyYW5kcyA6PSBbTnVtYmVyIChmbG9hdF9vZl9pbnQgdildXG4gICAgICBlbmRcbiAgICB8IDMyICgqIEpVTVAgKikgfCAzMyAoKiBKVU1QX0lGX0ZBTFNFICopIHwgMzQgKCogSlVNUF9JRl9UUlVFICopIC0+XG4gICAgICBpZiAhaXAgKyAxIDwgbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxvID0gYmMuKCFpcCkgaW4gbGV0IGhpID0gYmMuKCFpcCArIDEpIGluXG4gICAgICAgIGxldCByYXcgPSBsbyBsb3IgKGhpIGxzbCA4KSBpblxuICAgICAgICBsZXQgc2lnbmVkID0gaWYgcmF3ID49IDMyNzY4IHRoZW4gcmF3IC0gNjU1MzYgZWxzZSByYXcgaW5cbiAgICAgICAgaXAgOj0gIWlwICsgMjtcbiAgICAgICAgb3BlcmFuZHMgOj0gW051bWJlciAoZmxvYXRfb2ZfaW50IHNpZ25lZCldXG4gICAgICBlbmRcbiAgICB8IDUyICgqIENBTExfUFJJTSAqKSAtPlxuICAgICAgaWYgIWlwICsgMiA8IGxlbiB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBsbyA9IGJjLighaXApIGluIGxldCBoaSA9IGJjLighaXAgKyAxKSBpblxuICAgICAgICBsZXQgaWR4ID0gbG8gbG9yIChoaSBsc2wgOCkgaW5cbiAgICAgICAgbGV0IGFyZ2MgPSBiYy4oIWlwICsgMikgaW5cbiAgICAgICAgaXAgOj0gIWlwICsgMztcbiAgICAgICAgbGV0IHByaW1fbmFtZSA9IGlmIGlkeCA8IEFycmF5Lmxlbmd0aCBjb25zdHNcbiAgICAgICAgICB0aGVuIChtYXRjaCBjb25zdHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIj9cIikgZWxzZSBcIj9cIiBpblxuICAgICAgICBvcGVyYW5kcyA6PSBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaWR4KTsgU3RyaW5nIHByaW1fbmFtZTsgTnVtYmVyIChmbG9hdF9vZl9pbnQgYXJnYyldXG4gICAgICBlbmRcbiAgICB8IF8gLT4gKCkpO1xuICAgIGxldCBlbnRyeSA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZW50cnkgXCJvZmZzZXRcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgb2Zmc2V0KSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIGVudHJ5IFwib3Bjb2RlXCIgKFN0cmluZyBuYW1lKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZW50cnkgXCJvcGVyYW5kc1wiIChMaXN0ICFvcGVyYW5kcyk7XG4gICAgaW5zdHJzIDo9IERpY3QgZW50cnkgOjogIWluc3Ryc1xuICBkb25lO1xuICBsZXQgcmVzdWx0ID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICBIYXNodGJsLnJlcGxhY2UgcmVzdWx0IFwiYXJpdHlcIiAoTnVtYmVyIChmbG9hdF9vZl9pbnQgY29kZS52Y19hcml0eSkpO1xuICBIYXNodGJsLnJlcGxhY2UgcmVzdWx0IFwibnVtX2xvY2Fsc1wiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjb2RlLnZjX2xvY2FscykpO1xuICBIYXNodGJsLnJlcGxhY2UgcmVzdWx0IFwiY29uc3RhbnRzXCIgKExpc3QgKEFycmF5LnRvX2xpc3QgKEFycmF5Lm1hcCAoZnVuIHYgLT4gU3RyaW5nIChTeF90eXBlcy5pbnNwZWN0IHYpKSBjb25zdHMpKSk7XG4gIEhhc2h0YmwucmVwbGFjZSByZXN1bHQgXCJieXRlY29kZVwiIChMaXN0IChMaXN0LnJldiAhaW5zdHJzKSk7XG4gIERpY3QgcmVzdWx0XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiY2FtbF9jYWxsNCIsImEzIiwiY2FtbF9jYWxsNSIsImE0IiwiY2FtbF9jYWxsOCIsImE1IiwiYTYiLCJhNyIsImR1bW15IiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9IYXNodGJsIiwiU3hfdHlwZXMiLCJTdGRsaWJfUXVldWUiLCJTdGRsaWIiLCJTeF9ydW50aW1lIiwiU3hfcHJpbWl0aXZlcyIsIlN0ZGxpYl9QcmludGYiLCJTeF9yZWYiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0FycmF5IiwiU3hfcGFyc2VyIiwiU3RkbGliX1ByaW50ZXhjIiwiVm1TdXNwZW5kZWQiLCJleG4iLCJyZXF1ZXN0Iiwiaml0X2NvbXBpbGVfcmVmIiwicGFyYW0iLCJqaXRfZmFpbGVkX3NlbnRpbmVsIiwiaXNfaml0X2ZhaWxlZCIsImNsIiwiY3JlYXRlIiwiZ2xvYmFscyIsInB1c2giLCJ2bSIsInYiLCJucyIsInBvcCIsInBlZWsiLCJyZWFkX3U4IiwicmVhZF91MTYiLCJsbyIsImhpIiwicmVhZF9pMTYiLCJjbG9zdXJlX3RvX3ZhbHVlIiwibWF0Y2giLCJhcmdzIiwibiIsInBhcnNlX2tleXdvcmRfYXJncyIsInBhcmFtcyIsInBhcmFtX3NldCIsInAiLCJrd2FyZ3MiLCJjaGlsZHJlbiIsImsiLCJyZXN0Iiwidm1fY29tcF9qaXRfY291bnQiLCJ2bV9jb21wX2Nla19jb3VudCIsInZtX2luc25fY291bnQiLCJ2bV9jYWxsX2NvdW50Iiwidm1fY2VrX2NvdW50Iiwidm1fcmVzZXRfY291bnRlcnMiLCJ2bV9yZXBvcnRfY291bnRlcnMiLCJwdXNoX2Nsb3N1cmVfZnJhbWUiLCJmcmFtZSIsInJlc3RfYXJpdHkiLCJuYXJncyIsImkiLCJyZW1haW5pbmciLCJhIiwiZm9yJCIsInVzZWQiLCJjc3RfYXJpdHkiLCJjc3RfYnl0ZWNvZGUiLCJjc3RfY29uc3RhbnRzIiwiY3N0X3ZjX2J5dGVjb2RlIiwiY29kZV9mcm9tX3ZhbHVlIiwiZCIsImZpbmQyIiwiazEiLCJrMiIsInIiLCJsIiwieCIsImJjX2xpc3QiLCJlbnRyaWVzIiwiY29uc3RhbnRzIiwiZW50cnkiLCJlZCIsImFyaXR5IiwibGVuIiwibWF4X2xvY2FsIiwibG9jYWxzIiwib3AiLCJzbG90IiwiY3N0IiwiY3N0X0pJVF9jb21waWxlcl9ub3RfbG9hZGVkIiwiY3N0X2NvbXBpbGUiLCJjc3RfZm4iLCJjc3RfcXVvdGUiLCJqaXRfY29tcGlsZV9jb21wIiwibmFtZSIsImhhc19jaGlsZHJlbiIsImJvZHkiLCJjbG9zdXJlIiwicGFyYW1fbmFtZXMiLCJwYXJhbV9zeW1zIiwicyIsImZuX2V4cHIiLCJjb21waWxlX2VudiIsInJlc3VsdCIsIm91dGVyX2NvZGUiLCJiYyIsImlkeCIsImlubmVyX3ZhbCIsImNvZGUiLCJlIiwiY3N0X2lvX3N1c3BlbmRlZCIsImNzdF9waGFzZSIsImNzdF9yZXF1ZXN0IiwiYWN0aXZlX3ZtIiwiY2VrX2NhbGxfb3Jfc3VzcGVuZCIsInNhdmVkX2FjdGl2ZSIsInN0YXRlIiwiZmluYWwiLCJjYWxsX2Nsb3N1cmUiLCJwcmV2X3ZtIiwiY2FsbF9jbG9zdXJlX3JldXNlIiwic2F2ZWRfc3AiLCJzYXZlZF9mcmFtZXMiLCJ2bV9jYWxsIiwiZXZfbCIsImMiLCJjb21waWxlZCIsImNhbGxfYXJncyIsImZuIiwiY3N0X2Jhc2UiLCJjc3RfYXRfaXAiLCJjc3Rfc3AiLCJjc3RfVk1fdW5kZWZpbmVkIiwiY3N0X1ZNX3Vua25vd25fcHJpbWl0aXZlIiwiY3N0X3VwdmFsdWVfY291bnQiLCJydW4iLCJyZXN0X2ZyYW1lcyIsImNvbnN0cyIsImZuX25hbWUiLCJzYXZlZF9pcCIsInN3aXRjaGVyIiwiY291bnQiLCJwYXJ0cyIsImIiLCJ5IiwieHMiLCJjb2xsIiwiY2VsbCIsImlkIiwiZW52IiwiZm91bmRfaW5fZW52IiwicmVzb2x2ZV9mbiIsIndyaXR0ZW4iLCJvZmZzZXQiLCJjYXRjaF9vZmZzZXQiLCJleG5fdmFsIiwiZnMiLCJhcmdjIiwiYXJnc19saXN0IiwiY29kZV92YWwiLCJ1dl9jb3VudCIsInVwdmFsdWVzIiwiaXNfbG9jYWwiLCJpbmRleCIsImV4aXN0aW5nIiwiZm5fdmFsIiwibXNnIiwiaXRlbXMiLCJrZXkiLCJyZXN1bWVfdm0iLCJjZWtfc3RhdGUiLCJyZXN0b3JlX3JldXNlIiwicGVuZGluZyIsImNhbGxiYWNrX3Jlc3VsdCIsIm5ld19wZW5kaW5nIiwiZXhlY3V0ZV9tb2R1bGUiLCJleGVjdXRlX21vZHVsZV9zYWZlIiwiaml0X2lzX2Jyb2tlbl9uYW1lIiwiY3N0X2ppdF9GQUlMIiwiaml0X2NvbXBpbGluZyIsImppdF9jb21waWxlX2xhbWJkYSIsImNvbXBpbGVfZm4iLCJtZXJnZWQiLCJlZmZlY3RpdmVfZ2xvYmFscyIsInZhbHVlIiwic2F2ZWRfY2VrIiwic2F2ZWRfcmV1c2UiLCJleG4yIiwibWFya2VyIiwic3VzcGVuZGVkX3N0YXRlIiwiYWN0aXZlIiwib3Bjb2RlX25hbWUiLCJvcGNvZGVfb3BlcmFuZF9zaXplIiwiY3N0X29wY29kZSIsInRyYWNlX3J1biIsInNyYyIsImV4cHJzIiwiZXhwciIsInF1b3RlZCIsImZyYW1lMCIsInRyYWNlIiwic3RlcHMiLCJzdGFja19zbmFwIiwiY29kZV92YWwyIiwiaW5uZXJfY29kZSIsImRpc2Fzc2VtYmxlIiwiaXAiLCJpbnN0cnMi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TSxZQUFqQjtBQUFBO0FBQUEsWUFBQUEsWUFEUDtBQUFBLFdBQUFKLGFBRXNDLHVDQUFBRixPQUFBO0FBQUE7QUFBQTtBQUFBLE1BcUJ4QztBQUFBO0FBQUEsUUFBQWxMLElBQ1U7QUFBQSxRQUFBb0wsYUFzQlo7QUFBQSxRQUFBRixPQUFBO0FBQUE7QUFBQSxXQUFBRSxhQXZCRSxVQUFBRixPQUFBO0FBQUE7QUFBQSxTQUFBOUgsUUF1QlU7QUFBQSxLQUNaO0FBQUEsS0FDQTtBQUFBLEtBQ0E7QUFBQSxLQUFpRDtBQUFBO0FBQUE7QUFBQSxRQUFBdUIsU0FHdEM7QUFBQSxJQUNiO0FBQUEsSUFDQTtBQUFBO0FBQUE7QUFBQSxPQUN3RDtBQUFBLHdCQUFBM0UsR0FBNEIsdUNBQW9CO0FBQUEsU0FBL0Q7QUFBQSxJQUF6QztBQUFBLFlBQ3dDO0FBQUEsSUFBeEM7QUFBQSxJQUEyRDtBQUFBLEdBQ2hEO0FBQUEsR0EzMkN1RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURuRXBGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NjI3MTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3ZtX3JlZi5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIHN4X3ZtX3JlZi5tbCDigJQgQXV0by1nZW5lcmF0ZWQgZnJvbSBsaWIvdm0uc3ggKilcbigqIERvIG5vdCBlZGl0IOKAlCByZWdlbmVyYXRlIHdpdGg6IHB5dGhvbjMgaG9zdHMvb2NhbWwvYm9vdHN0cmFwX3ZtLnB5ICopXG5cbltAQEB3YXJuaW5nIFwiLTI2LTI3LTM5XCJdXG5cbm9wZW4gU3hfdHlwZXNcbm9wZW4gU3hfcnVudGltZVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBGb3J3YXJkIHJlZmVyZW5jZXMgZm9yIENFSyBpbnRlcm9wXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCBjZWtfY2FsbCA9IFN4X3JlZi5jZWtfY2FsbFxubGV0IGV2YWxfZXhwciA9IFN4X3JlZi5ldmFsX2V4cHJcbmxldCB0cmFtcG9saW5lIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBUaHVuayAoZXhwciwgZW52KSAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBlbnYpXG4gIHwgb3RoZXIgLT4gb3RoZXJcblxuKCogU1ggTGlzdCDihpIgT0NhbWwgbGlzdCAqKVxubGV0IHRvX29jYW1sX2xpc3QgdiA9IG1hdGNoIHYgd2l0aCBMaXN0IGwgLT4gbCB8IE5pbCAtPiBbXSB8IF8gLT4gW3ZdXG5cbigqIHN0ciBhcyBOYXRpdmVGbiB2YWx1ZSDigJQgdHJhbnNwaWxlZCBjb2RlIHBhc3NlcyBpdCB0byBzeF9hcHBseSAqKVxubGV0IHN0ciA9IE5hdGl2ZUZuIChcInN0clwiLCBmdW4gYXJncyAtPiBTdHJpbmcgKHN4X3N0ciBhcmdzKSlcblxuKCogUHJpbWl0aXZlIGNhbGwgZGlzcGF0Y2gg4oCUIHRyYW5zcGlsZWQgY29kZSB1c2VzIHRoaXMgZm9yIENBTExfUFJJTSAqKVxubGV0IGNhbGxfcHJpbWl0aXZlIG5hbWUgYXJncyA9XG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nIG5hbWUgaW5cbiAgcHJpbV9jYWxsIG4gKHRvX29jYW1sX2xpc3QgYXJncylcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUHJlYW1ibGU6IDQ4IG5hdGl2ZSBPQ2FtbCBmdW5jdGlvbnMgZm9yIFZNIHR5cGUgYWNjZXNzLlxuICAgVGhlc2UgYXJlIFNLSVBQRUQgZnJvbSB0cmFuc3BpbGF0aW9uIOKAlCB0aGUgdHJhbnNwaWxlZCBsb2dpY1xuICAgZnVuY3Rpb25zIGNhbGwgdGhlbSBmb3IgYWxsIHR5cGUgY29uc3RydWN0aW9uIGFuZCBmaWVsZCBhY2Nlc3MuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqIC0tLSBVbndyYXAgaGVscGVycyAtLS0gKilcbmxldCB1bndyYXBfdm0gdiA9IG1hdGNoIHYgd2l0aCBWbU1hY2hpbmUgbSAtPiBtIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5vdCBhIHZtXCIpXG5sZXQgdW53cmFwX2ZyYW1lIHYgPSBtYXRjaCB2IHdpdGggVm1GcmFtZSBmIC0+IGYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgZnJhbWVcIilcbmxldCB1bndyYXBfY2xvc3VyZSB2ID0gbWF0Y2ggdiB3aXRoIFZtQ2xvc3VyZSBjIC0+IGMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgY2xvc3VyZVwiKVxuXG4oKiAtLS0gVXB2YWx1ZSBjZWxscyAoaW50ZXJuYWwgdG8gcHJlYW1ibGUg4oCUIG5ldmVyIFNYIHZhbHVlcykgLS0tICopXG5sZXQgX21ha2VfdXZfY2VsbCB2IDogdm1fdXB2YWx1ZV9jZWxsID0geyB1dl92YWx1ZSA9IHYgfVxubGV0IF91dl9nZXQgKGMgOiB2bV91cHZhbHVlX2NlbGwpID0gYy51dl92YWx1ZVxubGV0IF91dl9zZXQgKGMgOiB2bV91cHZhbHVlX2NlbGwpIHYgPSBjLnV2X3ZhbHVlIDwtIHZcblxuKCogU1gtZmFjaW5nIHN0dWJzIChpbiBza2lwIHNldCwgbmV2ZXIgY2FsbGVkIGZyb20gdHJhbnNwaWxlZCBjb2RlKSAqKVxubGV0IG1ha2VfdXB2YWx1ZV9jZWxsIHYgPSBOaWxcbmxldCB1dl9nZXQgXyA9IE5pbFxubGV0IHV2X3NldF9iIF8gXyA9IE5pbFxuXG4oKiAtLS0gVk0gY29kZSBjb25zdHJ1Y3Rpb24gLS0tICopXG5sZXQgY29kZV9mcm9tX3ZhbHVlIHYgPSBTeF92bS5jb2RlX2Zyb21fdmFsdWUgdlxuXG5sZXQgbWFrZV92bV9jb2RlIGFyaXR5IGxvY2FscyBieXRlY29kZSBjb25zdGFudHMgPVxuICAoKiBCdWlsZCBhIERpY3QgdGhhdCBjb2RlX2Zyb21fdmFsdWUgY2FuIHBhcnNlICopXG4gIGxldCBkID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICBIYXNodGJsLnJlcGxhY2UgZCBcImFyaXR5XCIgYXJpdHk7XG4gIEhhc2h0YmwucmVwbGFjZSBkIFwiYnl0ZWNvZGVcIiBieXRlY29kZTtcbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJjb25zdGFudHNcIiBjb25zdGFudHM7XG4gIERpY3QgZFxuXG4oKiAtLS0gVk0gY2xvc3VyZSAtLS0gKilcbmxldCBtYWtlX3ZtX2Nsb3N1cmUgY29kZSB1cHZhbHVlcyBuYW1lIGdsb2JhbHMgY2xvc3VyZV9lbnYgPVxuICBsZXQgdXYgPSBtYXRjaCB1cHZhbHVlcyB3aXRoXG4gICAgfCBMaXN0IGwgLT4gQXJyYXkub2ZfbGlzdCAoTGlzdC5tYXAgKGZ1biB2IC0+IHsgdXZfdmFsdWUgPSB2IH0pIGwpXG4gICAgfCBfIC0+IFt8fF0gaW5cbiAgVm1DbG9zdXJlIHsgdm1fY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBjb2RlO1xuICAgICAgICAgICAgICB2bV91cHZhbHVlcyA9IHV2O1xuICAgICAgICAgICAgICB2bV9uYW1lID0gKG1hdGNoIG5hbWUgd2l0aCBTdHJpbmcgcyAtPiBTb21lIHMgfCBOaWwgLT4gTm9uZSB8IF8gLT4gTm9uZSk7XG4gICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSAobWF0Y2ggZ2xvYmFscyB3aXRoIERpY3QgZCAtPiBkIHwgXyAtPiBIYXNodGJsLmNyZWF0ZSAwKTtcbiAgICAgICAgICAgICAgdm1fY2xvc3VyZV9lbnYgPSAobWF0Y2ggY2xvc3VyZV9lbnYgd2l0aCBFbnYgZSAtPiBTb21lIGUgfCBfIC0+IE5vbmUpIH1cblxuKCogLS0tIFZNIGZyYW1lIC0tLSAqKVxubGV0IG1ha2Vfdm1fZnJhbWUgY2xvc3VyZSBiYXNlID1cbiAgbGV0IGNsID0gdW53cmFwX2Nsb3N1cmUgY2xvc3VyZSBpblxuICBWbUZyYW1lIHsgdmZfY2xvc3VyZSA9IGNsOyB2Zl9pcCA9IDA7XG4gICAgICAgICAgICB2Zl9iYXNlID0gdmFsX3RvX2ludCBiYXNlO1xuICAgICAgICAgICAgdmZfbG9jYWxfY2VsbHMgPSBIYXNodGJsLmNyZWF0ZSA0IH1cblxuKCogLS0tIFZNIG1hY2hpbmUgLS0tICopXG5sZXQgbWFrZV92bSBnbG9iYWxzID1cbiAgbGV0IGcgPSBtYXRjaCBnbG9iYWxzIHdpdGggRGljdCBkIC0+IGQgfCBfIC0+IEhhc2h0YmwuY3JlYXRlIDAgaW5cbiAgVm1NYWNoaW5lIHsgdm1fc3RhY2sgPSBBcnJheS5tYWtlIDQwOTYgTmlsOyB2bV9zcCA9IDA7XG4gICAgICAgICAgICAgIHZtX2ZyYW1lcyA9IFtdOyB2bV9nbG9iYWxzID0gZzsgdm1fcGVuZGluZ19jZWsgPSBOb25lIH1cblxuKCogLS0tIFN0YWNrIG9wcyAtLS0gKilcbmxldCB2bV9wdXNoIHZtX3ZhbCB2ID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIGlmIG0udm1fc3AgPj0gQXJyYXkubGVuZ3RoIG0udm1fc3RhY2sgdGhlbiBiZWdpblxuICAgIGxldCBucyA9IEFycmF5Lm1ha2UgKG0udm1fc3AgKiAyKSBOaWwgaW5cbiAgICBBcnJheS5ibGl0IG0udm1fc3RhY2sgMCBucyAwIG0udm1fc3A7XG4gICAgbS52bV9zdGFjayA8LSBuc1xuICBlbmQ7XG4gIG0udm1fc3RhY2suKG0udm1fc3ApIDwtIHY7XG4gIG0udm1fc3AgPC0gbS52bV9zcCArIDE7XG4gIE5pbFxuXG5sZXQgdm1fcG9wIHZtX3ZhbCA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBtLnZtX3NwIDwtIG0udm1fc3AgLSAxO1xuICBtLnZtX3N0YWNrLihtLnZtX3NwKVxuXG5sZXQgdm1fcGVlayB2bV92YWwgPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgbS52bV9zdGFjay4obS52bV9zcCAtIDEpXG5cbigqIC0tLSBGcmFtZSBvcGVyYW5kIHJlYWRpbmcgLS0tICopXG5sZXQgZnJhbWVfcmVhZF91OCBmcmFtZV92YWwgPVxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgbGV0IHYgPSBmLnZmX2Nsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi52Zl9pcCkgaW5cbiAgZi52Zl9pcCA8LSBmLnZmX2lwICsgMTtcbiAgTnVtYmVyIChmbG9hdF9vZl9pbnQgdilcblxubGV0IGZyYW1lX3JlYWRfdTE2IGZyYW1lX3ZhbCA9XG4gIGxldCBmID0gdW53cmFwX2ZyYW1lIGZyYW1lX3ZhbCBpblxuICBsZXQgbG8gPSBmLnZmX2Nsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi52Zl9pcCkgaW5cbiAgbGV0IGhpID0gZi52Zl9jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUuKGYudmZfaXAgKyAxKSBpblxuICBmLnZmX2lwIDwtIGYudmZfaXAgKyAyO1xuICBOdW1iZXIgKGZsb2F0X29mX2ludCAobG8gbG9yIChoaSBsc2wgOCkpKVxuXG5sZXQgZnJhbWVfcmVhZF9pMTYgZnJhbWVfdmFsID1cbiAgbGV0IGYgPSB1bndyYXBfZnJhbWUgZnJhbWVfdmFsIGluXG4gIGxldCBsbyA9IGYudmZfY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLnZmX2lwKSBpblxuICBsZXQgaGkgPSBmLnZmX2Nsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZS4oZi52Zl9pcCArIDEpIGluXG4gIGYudmZfaXAgPC0gZi52Zl9pcCArIDI7XG4gIGxldCB2ID0gbG8gbG9yIChoaSBsc2wgOCkgaW5cbiAgTnVtYmVyIChmbG9hdF9vZl9pbnQgKGlmIHYgPj0gMzI3NjggdGhlbiB2IC0gNjU1MzYgZWxzZSB2KSlcblxuKCogLS0tIExvY2FsIHZhcmlhYmxlIGFjY2VzcyAtLS0gKilcbmxldCBmcmFtZV9sb2NhbF9nZXQgdm1fdmFsIGZyYW1lX3ZhbCBzbG90ID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIGxldCBmID0gdW53cmFwX2ZyYW1lIGZyYW1lX3ZhbCBpblxuICBsZXQgaWR4ID0gZi52Zl9iYXNlICsgdmFsX3RvX2ludCBzbG90IGluXG4gICgqIENoZWNrIGZvciBzaGFyZWQgdXB2YWx1ZSBjZWxsICopXG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZi52Zl9sb2NhbF9jZWxscyAodmFsX3RvX2ludCBzbG90KSB3aXRoXG4gIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWVcbiAgfCBOb25lIC0+IG0udm1fc3RhY2suKGlkeClcblxubGV0IGZyYW1lX2xvY2FsX3NldCB2bV92YWwgZnJhbWVfdmFsIHNsb3QgdiA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgbGV0IHMgPSB2YWxfdG9faW50IHNsb3QgaW5cbiAgKCogSWYgc2xvdCBoYXMgYSBzaGFyZWQgY2VsbCwgd3JpdGUgdGhyb3VnaCBjZWxsICopXG4gIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGYudmZfbG9jYWxfY2VsbHMgcyB3aXRoXG4gICB8IFNvbWUgY2VsbCAtPiBjZWxsLnV2X3ZhbHVlIDwtIHZcbiAgIHwgTm9uZSAtPiBtLnZtX3N0YWNrLihmLnZmX2Jhc2UgKyBzKSA8LSB2KTtcbiAgTmlsXG5cbigqIC0tLSBVcHZhbHVlIGFjY2VzcyAtLS0gKilcbmxldCBmcmFtZV91cHZhbHVlX2dldCBmcmFtZV92YWwgaWR4ID1cbiAgbGV0IGYgPSB1bndyYXBfZnJhbWUgZnJhbWVfdmFsIGluXG4gIGYudmZfY2xvc3VyZS52bV91cHZhbHVlcy4odmFsX3RvX2ludCBpZHgpLnV2X3ZhbHVlXG5cbmxldCBmcmFtZV91cHZhbHVlX3NldCBmcmFtZV92YWwgaWR4IHYgPVxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgZi52Zl9jbG9zdXJlLnZtX3VwdmFsdWVzLih2YWxfdG9faW50IGlkeCkudXZfdmFsdWUgPC0gdjtcbiAgTmlsXG5cbigqIC0tLSBGaWVsZCBhY2Nlc3NvcnMgLS0tICopXG5sZXQgZnJhbWVfaXAgZiA9IGxldCBmciA9IHVud3JhcF9mcmFtZSBmIGluIE51bWJlciAoZmxvYXRfb2ZfaW50IGZyLnZmX2lwKVxubGV0IGZyYW1lX3NldF9pcF9iIGYgdiA9IGxldCBmciA9IHVud3JhcF9mcmFtZSBmIGluIGZyLnZmX2lwIDwtIHZhbF90b19pbnQgdjsgTmlsXG5sZXQgZnJhbWVfYmFzZSBmID0gbGV0IGZyID0gdW53cmFwX2ZyYW1lIGYgaW4gTnVtYmVyIChmbG9hdF9vZl9pbnQgZnIudmZfYmFzZSlcbmxldCBmcmFtZV9jbG9zdXJlIGYgPSBsZXQgZnIgPSB1bndyYXBfZnJhbWUgZiBpbiBWbUNsb3N1cmUgZnIudmZfY2xvc3VyZVxuXG5sZXQgY2xvc3VyZV9jb2RlIGNsID0gbGV0IGMgPSB1bndyYXBfY2xvc3VyZSBjbCBpblxuICAoKiBSZXR1cm4gYXMgRGljdCBmb3IgY29kZV9ieXRlY29kZS9jb2RlX2NvbnN0YW50cy9jb2RlX2xvY2FscyAqKVxuICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgSGFzaHRibC5yZXBsYWNlIGQgXCJ2Yy1ieXRlY29kZVwiIChMaXN0IChBcnJheS50b19saXN0IChBcnJheS5tYXAgKGZ1biBpIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpKSBjLnZtX2NvZGUudmNfYnl0ZWNvZGUpKSk7XG4gIEhhc2h0YmwucmVwbGFjZSBkIFwidmMtY29uc3RhbnRzXCIgKExpc3QgKEFycmF5LnRvX2xpc3QgYy52bV9jb2RlLnZjX2NvbnN0YW50cykpO1xuICBIYXNodGJsLnJlcGxhY2UgZCBcInZjLWFyaXR5XCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGMudm1fY29kZS52Y19hcml0eSkpO1xuICBIYXNodGJsLnJlcGxhY2UgZCBcInZjLWxvY2Fsc1wiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjLnZtX2NvZGUudmNfbG9jYWxzKSk7XG4gIERpY3QgZFxuXG5sZXQgY2xvc3VyZV91cHZhbHVlcyBjbCA9IGxldCBjID0gdW53cmFwX2Nsb3N1cmUgY2wgaW5cbiAgTGlzdCAoQXJyYXkudG9fbGlzdCAoQXJyYXkubWFwIChmdW4gY2VsbCAtPiBjZWxsLnV2X3ZhbHVlKSBjLnZtX3VwdmFsdWVzKSlcblxubGV0IGNsb3N1cmVfZW52IGNsID0gbWF0Y2ggY2wgd2l0aFxuICB8IFZtQ2xvc3VyZSBjIC0+IChtYXRjaCBjLnZtX2Nsb3N1cmVfZW52IHdpdGggU29tZSBlIC0+IEVudiBlIHwgTm9uZSAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcblxubGV0IGNvZGVfYnl0ZWNvZGUgY29kZSA9IGdldF92YWwgY29kZSAoU3RyaW5nIFwidmMtYnl0ZWNvZGVcIilcbmxldCBjb2RlX2NvbnN0YW50cyBjb2RlID0gZ2V0X3ZhbCBjb2RlIChTdHJpbmcgXCJ2Yy1jb25zdGFudHNcIilcbmxldCBjb2RlX2xvY2FscyBjb2RlID0gZ2V0X3ZhbCBjb2RlIChTdHJpbmcgXCJ2Yy1sb2NhbHNcIilcblxubGV0IHZtX3NwIHYgPSBsZXQgbSA9IHVud3JhcF92bSB2IGluIE51bWJlciAoZmxvYXRfb2ZfaW50IG0udm1fc3ApXG5sZXQgdm1fc2V0X3NwX2IgdiBzID0gbGV0IG0gPSB1bndyYXBfdm0gdiBpbiBtLnZtX3NwIDwtIHZhbF90b19pbnQgczsgTmlsXG5sZXQgdm1fc3RhY2sgdiA9IGxldCBfbSA9IHVud3JhcF92bSB2IGluIE5pbCAgKCogb3BhcXVlIOKAlCB1c2Ugdm1fcHVzaC9wb3AgKilcbmxldCB2bV9zZXRfc3RhY2tfYiB2IF9zID0gTmlsXG5sZXQgdm1fZnJhbWVzIHYgPSBsZXQgbSA9IHVud3JhcF92bSB2IGluIExpc3QgKExpc3QubWFwIChmdW4gZiAtPiBWbUZyYW1lIGYpIG0udm1fZnJhbWVzKVxubGV0IHZtX3NldF9mcmFtZXNfYiB2IGZzID0gbGV0IG0gPSB1bndyYXBfdm0gdiBpblxuICBtLnZtX2ZyYW1lcyA8LSAobWF0Y2ggZnMgd2l0aFxuICAgIHwgTGlzdCBsIC0+IExpc3QubWFwIHVud3JhcF9mcmFtZSBsXG4gICAgfCBfIC0+IFtdKTtcbiAgTmlsXG5sZXQgdm1fZ2xvYmFsc19yZWYgdiA9IGxldCBtID0gdW53cmFwX3ZtIHYgaW4gRGljdCBtLnZtX2dsb2JhbHNcblxuKCogLS0tIEdsb2JhbCB2YXJpYWJsZSBhY2Nlc3MgLS0tICopXG5sZXQgdm1fZ2xvYmFsX2dldCB2bV92YWwgZnJhbWVfdmFsIG5hbWUgPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgbGV0IG4gPSB2YWx1ZV90b19zdHJpbmcgbmFtZSBpblxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgKCogQ2hlY2sgY2xvc3VyZSBlbnYgZmlyc3QgKG1hdGNoZXMgdm1fZ2xvYmFsX3NldCBwcmlvcml0eSkgKilcbiAgbGV0IGZvdW5kX2luX2VudiA9IG1hdGNoIGYudmZfY2xvc3VyZS52bV9jbG9zdXJlX2VudiB3aXRoXG4gICAgfCBTb21lIGVudiAtPlxuICAgICAgbGV0IGlkID0gaW50ZXJuIG4gaW5cbiAgICAgIGxldCByZWMgZmluZF9lbnYgZSA9XG4gICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZS5iaW5kaW5ncyBpZCB3aXRoXG4gICAgICAgIHwgU29tZSB2IC0+IFNvbWUgdlxuICAgICAgICB8IE5vbmUgLT4gKG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGZpbmRfZW52IHAgfCBOb25lIC0+IE5vbmUpXG4gICAgICBpbiBmaW5kX2VudiBlbnZcbiAgICB8IE5vbmUgLT4gTm9uZVxuICBpblxuICBtYXRjaCBmb3VuZF9pbl9lbnYgd2l0aFxuICB8IFNvbWUgdiAtPiB2XG4gIHwgTm9uZSAtPlxuICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgbS52bV9nbG9iYWxzIG4gd2l0aFxuICAgIHwgU29tZSB2IC0+IHZcbiAgICB8IE5vbmUgLT5cbiAgICAgIHRyeSBwcmltX2NhbGwgbiBbXSB3aXRoIF8gLT5cbiAgICAgIG1hdGNoICFfc3ltYm9sX3Jlc29sdmVfaG9vayB3aXRoXG4gICAgICB8IFNvbWUgaG9vayAtPlxuICAgICAgICAobWF0Y2ggaG9vayBuIHdpdGhcbiAgICAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbikpKVxuICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuKSlcblxubGV0IHZtX2dsb2JhbF9zZXQgdm1fdmFsIGZyYW1lX3ZhbCBuYW1lIHYgPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgbGV0IG4gPSB2YWx1ZV90b19zdHJpbmcgbmFtZSBpblxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgKCogV3JpdGUgdG8gY2xvc3VyZSBlbnYgaWYgbmFtZSBleGlzdHMgdGhlcmUgKilcbiAgbGV0IHdyaXR0ZW4gPSBtYXRjaCBmLnZmX2Nsb3N1cmUudm1fY2xvc3VyZV9lbnYgd2l0aFxuICAgIHwgU29tZSBlbnYgLT5cbiAgICAgIGxldCBpZCA9IGludGVybiBuIGluXG4gICAgICBsZXQgcmVjIGZpbmRfZW52IGUgPVxuICAgICAgICBpZiBIYXNodGJsLm1lbSBlLmJpbmRpbmdzIGlkIHRoZW5cbiAgICAgICAgICAoSGFzaHRibC5yZXBsYWNlIGUuYmluZGluZ3MgaWQgdjsgdHJ1ZSlcbiAgICAgICAgZWxzZSBtYXRjaCBlLnBhcmVudCB3aXRoIFNvbWUgcCAtPiBmaW5kX2VudiBwIHwgTm9uZSAtPiBmYWxzZVxuICAgICAgaW4gZmluZF9lbnYgZW52XG4gICAgfCBOb25lIC0+IGZhbHNlXG4gIGluXG4gIGlmIG5vdCB3cml0dGVuIHRoZW4gYmVnaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgbS52bV9nbG9iYWxzIG4gdjtcbiAgICAobWF0Y2ggIV92bV9nbG9iYWxfc2V0X2hvb2sgd2l0aCBTb21lIGYgLT4gZiBuIHYgfCBOb25lIC0+ICgpKVxuICBlbmQ7XG4gIE5pbFxuXG4oKiAtLS0gRnJhbWUgcHVzaCAtLS0gKilcbmxldCB2bV9wdXNoX2ZyYW1lIHZtX3ZhbCBjbG9zdXJlX3ZhbCBhcmdzID1cbiAgbGV0IG0gPSB1bndyYXBfdm0gdm1fdmFsIGluXG4gIGxldCBjbCA9IHVud3JhcF9jbG9zdXJlIGNsb3N1cmVfdmFsIGluXG4gIGxldCBmID0geyB2Zl9jbG9zdXJlID0gY2w7IHZmX2lwID0gMDsgdmZfYmFzZSA9IG0udm1fc3A7IHZmX2xvY2FsX2NlbGxzID0gSGFzaHRibC5jcmVhdGUgNCB9IGluXG4gIGxldCBhcmdfbGlzdCA9IHRvX29jYW1sX2xpc3QgYXJncyBpblxuICBMaXN0Lml0ZXIgKGZ1biBhIC0+XG4gICAgbS52bV9zdGFjay4obS52bV9zcCkgPC0gYTsgbS52bV9zcCA8LSBtLnZtX3NwICsgMVxuICApIGFyZ19saXN0O1xuICAoKiBQYWQgcmVtYWluaW5nIGxvY2FscyAqKVxuICBmb3IgXyA9IExpc3QubGVuZ3RoIGFyZ19saXN0IHRvIGNsLnZtX2NvZGUudmNfbG9jYWxzIC0gMSBkb1xuICAgIG0udm1fc3RhY2suKG0udm1fc3ApIDwtIE5pbDsgbS52bV9zcCA8LSBtLnZtX3NwICsgMVxuICBkb25lO1xuICBtLnZtX2ZyYW1lcyA8LSBmIDo6IG0udm1fZnJhbWVzO1xuICBOaWxcblxuKCogLS0tIENsb3N1cmUgdHlwZSBjaGVjayAtLS0gKilcbmxldCB2bV9jbG9zdXJlX3AgdiA9IG1hdGNoIHYgd2l0aCBWbUNsb3N1cmUgXyAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2VcblxuKCogLS0tIENsb3N1cmUgY3JlYXRpb24gKHVwdmFsdWUgY2FwdHVyZSkgLS0tICopXG5sZXQgdm1fY3JlYXRlX2Nsb3N1cmUgdm1fdmFsIGZyYW1lX3ZhbCBjb2RlX3ZhbCA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgZiA9IHVud3JhcF9mcmFtZSBmcmFtZV92YWwgaW5cbiAgbGV0IHV2X2NvdW50ID0gbWF0Y2ggY29kZV92YWwgd2l0aFxuICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ1cHZhbHVlLWNvdW50XCIgd2l0aFxuICAgICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBpbnRfb2ZfZmxvYXQgbiB8IF8gLT4gMClcbiAgICB8IF8gLT4gMFxuICBpblxuICBsZXQgdXB2YWx1ZXMgPSBBcnJheS5pbml0IHV2X2NvdW50IChmdW4gXyAtPlxuICAgIGxldCBpc19sb2NhbCA9IGxldCB2ID0gZi52Zl9jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUuKGYudmZfaXApIGluIGYudmZfaXAgPC0gZi52Zl9pcCArIDE7IHYgaW5cbiAgICBsZXQgaW5kZXggPSBsZXQgdiA9IGYudmZfY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLnZmX2lwKSBpbiBmLnZmX2lwIDwtIGYudmZfaXAgKyAxOyB2IGluXG4gICAgaWYgaXNfbG9jYWwgPSAxIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZi52Zl9sb2NhbF9jZWxscyBpbmRleCB3aXRoXG4gICAgICB8IFNvbWUgZXhpc3RpbmcgLT4gZXhpc3RpbmdcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICBsZXQgYyA9IHsgdXZfdmFsdWUgPSBtLnZtX3N0YWNrLihmLnZmX2Jhc2UgKyBpbmRleCkgfSBpblxuICAgICAgICBIYXNodGJsLnJlcGxhY2UgZi52Zl9sb2NhbF9jZWxscyBpbmRleCBjO1xuICAgICAgICBjXG4gICAgZW5kIGVsc2VcbiAgICAgIGYudmZfY2xvc3VyZS52bV91cHZhbHVlcy4oaW5kZXgpXG4gICkgaW5cbiAgbGV0IGNvZGUgPSBjb2RlX2Zyb21fdmFsdWUgY29kZV92YWwgaW5cbiAgVm1DbG9zdXJlIHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gdXB2YWx1ZXM7IHZtX25hbWUgPSBOb25lO1xuICAgICAgICAgICAgICB2bV9lbnZfcmVmID0gbS52bV9nbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IGYudmZfY2xvc3VyZS52bV9jbG9zdXJlX2VudiB9XG5cbigqIC0tLSBKSVQgc2VudGluZWwgLS0tICopXG5sZXQgX2ppdF9mYWlsZWRfc2VudGluZWwgPSB7XG4gIHZtX2NvZGUgPSB7IHZjX2FyaXR5ID0gLTE7IHZjX3Jlc3RfYXJpdHkgPSAtMTsgdmNfbG9jYWxzID0gMDsgdmNfYnl0ZWNvZGUgPSBbfHxdOyB2Y19jb25zdGFudHMgPSBbfHxdO1xuICAgICAgICAgICAgICB2Y19ieXRlY29kZV9saXN0ID0gTm9uZTsgdmNfY29uc3RhbnRzX2xpc3QgPSBOb25lIH07XG4gIHZtX3VwdmFsdWVzID0gW3x8XTsgdm1fbmFtZSA9IFNvbWUgXCJfX2ppdF9mYWlsZWRfX1wiOyB2bV9lbnZfcmVmID0gSGFzaHRibC5jcmVhdGUgMDsgdm1fY2xvc3VyZV9lbnYgPSBOb25lXG59XG5sZXQgX2lzX2ppdF9mYWlsZWQgY2wgPSBjbC52bV9jb2RlLnZjX2FyaXR5ID0gLTFcblxuKCogLS0tIExhbWJkYSBhY2Nlc3NvcnMgLS0tICopXG5sZXQgaXNfbGFtYmRhIHYgPSBtYXRjaCB2IHdpdGggTGFtYmRhIF8gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlXG5sZXQgbGFtYmRhX2NvbXBpbGVkIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBMYW1iZGEgbCAtPiAobWF0Y2ggbC5sX2NvbXBpbGVkIHdpdGggU29tZSBjIC0+IFZtQ2xvc3VyZSBjIHwgTm9uZSAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcbmxldCBsYW1iZGFfc2V0X2NvbXBpbGVkX2IgdiBjID0gbWF0Y2ggdiB3aXRoXG4gIHwgTGFtYmRhIGwgLT4gKG1hdGNoIGMgd2l0aFxuICAgIHwgVm1DbG9zdXJlIGNsIC0+IGwubF9jb21waWxlZCA8LSBTb21lIGNsOyBOaWxcbiAgICB8IFN0cmluZyBcImppdC1mYWlsZWRcIiAtPiBsLmxfY29tcGlsZWQgPC0gU29tZSBfaml0X2ZhaWxlZF9zZW50aW5lbDsgTmlsXG4gICAgfCBfIC0+IGwubF9jb21waWxlZCA8LSBOb25lOyBOaWwpXG4gIHwgXyAtPiBOaWxcbmxldCBsYW1iZGFfbmFtZSB2ID0gbWF0Y2ggdiB3aXRoXG4gIHwgTGFtYmRhIGwgLT4gKG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IFN0cmluZyBuIHwgTm9uZSAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcblxuKCogLS0tIENFSyBjYWxsIHdpdGggc3VzcGVuc2lvbiBhd2FyZW5lc3MgLS0tICopXG5sZXQgY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bV92YWwgZiBhcmdzID1cbiAgbGV0IGEgPSB0b19vY2FtbF9saXN0IGFyZ3MgaW5cbiAgbGV0IHN0YXRlID0gU3hfcmVmLmNvbnRpbnVlX3dpdGhfY2FsbCBmIChMaXN0IGEpIChFbnYgKFN4X3R5cGVzLm1ha2VfZW52ICgpKSkgKExpc3QgYSkgKExpc3QgW10pIGluXG4gIGxldCBmaW5hbCA9IFN4X3JlZi5jZWtfc3RlcF9sb29wIHN0YXRlIGluXG4gIG1hdGNoIGdldF92YWwgZmluYWwgKFN0cmluZyBcInBoYXNlXCIpIHdpdGhcbiAgfCBTdHJpbmcgXCJpby1zdXNwZW5kZWRcIiAtPlxuICAgIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICAgIG0udm1fcGVuZGluZ19jZWsgPC0gU29tZSBmaW5hbDtcbiAgICByYWlzZSAoU3hfdm0uVm1TdXNwZW5kZWQgKGdldF92YWwgZmluYWwgKFN0cmluZyBcInJlcXVlc3RcIiksIFN4X3ZtLmNyZWF0ZSBtLnZtX2dsb2JhbHMpKVxuICB8IF8gLT4gU3hfcmVmLmNla192YWx1ZSBmaW5hbFxuXG4oKiAtLS0gRW52IHdhbGtpbmcgKGZvciBnbG9iYWwgdmFyaWFibGUgcmVzb2x1dGlvbikgLS0tICopXG5sZXQgcmVjIGVudl93YWxrIGVudiBuYW1lID1cbiAgbWF0Y2ggZW52IHdpdGhcbiAgfCBFbnYgZSAtPlxuICAgIGxldCBpZCA9IGludGVybiAodmFsdWVfdG9fc3RyaW5nIG5hbWUpIGluXG4gICAgbGV0IHJlYyBmaW5kIGUgPVxuICAgICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBlLmJpbmRpbmdzIGlkIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgIHwgTm9uZSAtPiAobWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gZmluZCBwIHwgTm9uZSAtPiBOaWwpXG4gICAgaW4gZmluZCBlXG4gIHwgTmlsIC0+IE5pbFxuICB8IF8gLT4gTmlsXG5cbmxldCBlbnZfd2Fsa19zZXRfYiBlbnYgbmFtZSB2YWx1ZSA9XG4gIG1hdGNoIGVudiB3aXRoXG4gIHwgRW52IGUgLT5cbiAgICBsZXQgaWQgPSBpbnRlcm4gKHZhbHVlX3RvX3N0cmluZyBuYW1lKSBpblxuICAgIGxldCByZWMgZmluZCBlID1cbiAgICAgIGlmIEhhc2h0YmwubWVtIGUuYmluZGluZ3MgaWQgdGhlblxuICAgICAgICAoSGFzaHRibC5yZXBsYWNlIGUuYmluZGluZ3MgaWQgdmFsdWU7IHRydWUpXG4gICAgICBlbHNlIG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGZpbmQgcCB8IE5vbmUgLT4gZmFsc2VcbiAgICBpblxuICAgIGlmIGZpbmQgZSB0aGVuIE5pbCBlbHNlIE5pbFxuICB8IF8gLT4gTmlsXG5cbigqIC0tLSBBY3RpdmUgVk0gdHJhY2tpbmcgKG1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlKSAtLS0gKilcbmxldCBfYWN0aXZlX3ZtIDogdm1fbWFjaGluZSBvcHRpb24gcmVmID0gcmVmIE5vbmVcblxuKCogRm9yd2FyZCByZWYg4oCUIHJlc29sdmVkIGFmdGVyIHRyYW5zcGlsZWQgbGV0IHJlYyBibG9jayAqKVxubGV0IF92bV9ydW5fZm4gOiAodmFsdWUgLT4gdmFsdWUpIHJlZiA9IHJlZiAoZnVuIF8gLT4gTmlsKVxubGV0IF92bV9jYWxsX2ZuIDogKHZhbHVlIC0+IHZhbHVlIC0+IHZhbHVlIC0+IHZhbHVlKSByZWYgPSByZWYgKGZ1biBfIF8gXyAtPiBOaWwpXG5cbigqIHZtLWNhbGwtY2xvc3VyZTogY3JlYXRlcyBmcmVzaCBWTSwgcnVucyBjbG9zdXJlLCByZXR1cm5zIHJlc3VsdCAqKVxubGV0IHZtX2NhbGxfY2xvc3VyZSBjbG9zdXJlX3ZhbCBhcmdzIGdsb2JhbHMgPVxuICBsZXQgY2wgPSB1bndyYXBfY2xvc3VyZSBjbG9zdXJlX3ZhbCBpblxuICBsZXQgcHJldl92bSA9ICFfYWN0aXZlX3ZtIGluXG4gIGxldCBnID0gbWF0Y2ggZ2xvYmFscyB3aXRoIERpY3QgZCAtPiBkIHwgXyAtPiBIYXNodGJsLmNyZWF0ZSAwIGluXG4gIGxldCBtID0geyB2bV9zdGFjayA9IEFycmF5Lm1ha2UgNDA5NiBOaWw7IHZtX3NwID0gMDtcbiAgICAgICAgICAgIHZtX2ZyYW1lcyA9IFtdOyB2bV9nbG9iYWxzID0gZzsgdm1fcGVuZGluZ19jZWsgPSBOb25lIH0gaW5cbiAgbGV0IHZtX3ZhbCA9IFZtTWFjaGluZSBtIGluXG4gIF9hY3RpdmVfdm0gOj0gU29tZSBtO1xuICBpZ25vcmUgKHZtX3B1c2hfZnJhbWUgdm1fdmFsIGNsb3N1cmVfdmFsIGFyZ3MpO1xuICAodHJ5IGlnbm9yZSAoIV92bV9ydW5fZm4gdm1fdmFsKSB3aXRoIGUgLT4gX2FjdGl2ZV92bSA6PSBwcmV2X3ZtOyByYWlzZSBlKTtcbiAgX2FjdGl2ZV92bSA6PSBwcmV2X3ZtO1xuICB2bV9wb3Agdm1fdmFsXG5cbigqIC0tLSBKSVQgZGlzcGF0Y2ggKHBsYXRmb3JtLXNwZWNpZmljKSAtLS0gKilcbmxldCB0cnlfaml0X2NhbGwgdm1fdmFsIGYgYXJncyA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBtYXRjaCBmIHdpdGhcbiAgfCBMYW1iZGEgbCAtPlxuICAgIChtYXRjaCBsLmxfY29tcGlsZWQgd2l0aFxuICAgICB8IFNvbWUgY2wgd2hlbiBub3QgKF9pc19qaXRfZmFpbGVkIGNsKSAtPlxuICAgICAgICh0cnkgdm1fcHVzaCB2bV92YWwgKHZtX2NhbGxfY2xvc3VyZSAoVm1DbG9zdXJlIGNsKSBhcmdzIChEaWN0IGNsLnZtX2Vudl9yZWYpKVxuICAgICAgICB3aXRoIF8gLT4gdm1fcHVzaCB2bV92YWwgKGNla19jYWxsX29yX3N1c3BlbmQgdm1fdmFsIGYgYXJncykpXG4gICAgIHwgU29tZSBfIC0+XG4gICAgICAgdm1fcHVzaCB2bV92YWwgKGNla19jYWxsX29yX3N1c3BlbmQgdm1fdmFsIGYgYXJncylcbiAgICAgfCBOb25lIC0+XG4gICAgICAgaWYgbC5sX25hbWUgPD4gTm9uZSB0aGVuIGJlZ2luXG4gICAgICAgICBsLmxfY29tcGlsZWQgPC0gU29tZSBfaml0X2ZhaWxlZF9zZW50aW5lbDtcbiAgICAgICAgIG1hdGNoICFTeF92bS5qaXRfY29tcGlsZV9yZWYgbCBtLnZtX2dsb2JhbHMgd2l0aFxuICAgICAgICAgfCBTb21lIGNsIC0+XG4gICAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIGNsO1xuICAgICAgICAgICAodHJ5IHZtX3B1c2ggdm1fdmFsICh2bV9jYWxsX2Nsb3N1cmUgKFZtQ2xvc3VyZSBjbCkgYXJncyAoRGljdCBjbC52bV9lbnZfcmVmKSlcbiAgICAgICAgICAgIHdpdGggXyAtPiB2bV9wdXNoIHZtX3ZhbCAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bV92YWwgZiBhcmdzKSlcbiAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICB2bV9wdXNoIHZtX3ZhbCAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bV92YWwgZiBhcmdzKVxuICAgICAgIGVuZCBlbHNlXG4gICAgICAgICB2bV9wdXNoIHZtX3ZhbCAoY2VrX2NhbGxfb3Jfc3VzcGVuZCB2bV92YWwgZiBhcmdzKSlcbiAgfCBfIC0+IHZtX3B1c2ggdm1fdmFsIChjZWtfY2FsbF9vcl9zdXNwZW5kIHZtX3ZhbCBmIGFyZ3MpXG5cbigqIC0tLSBDb2xsZWN0aW9uIGhlbHBlcnMgLS0tICopXG5sZXQgY29sbGVjdF9uX2Zyb21fc3RhY2sgdm1fdmFsIG4gPVxuICBsZXQgbSA9IHVud3JhcF92bSB2bV92YWwgaW5cbiAgbGV0IGNvdW50ID0gdmFsX3RvX2ludCBuIGluXG4gIGxldCByZXN1bHQgPSByZWYgW10gaW5cbiAgZm9yIF8gPSAxIHRvIGNvdW50IGRvXG4gICAgbS52bV9zcCA8LSBtLnZtX3NwIC0gMTtcbiAgICByZXN1bHQgOj0gbS52bV9zdGFjay4obS52bV9zcCkgOjogIXJlc3VsdFxuICBkb25lO1xuICBMaXN0ICFyZXN1bHRcblxubGV0IGNvbGxlY3Rfbl9wYWlycyB2bV92YWwgbiA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgY291bnQgPSB2YWxfdG9faW50IG4gaW5cbiAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSBjb3VudCBpblxuICBmb3IgXyA9IDEgdG8gY291bnQgZG9cbiAgICBtLnZtX3NwIDwtIG0udm1fc3AgLSAxO1xuICAgIGxldCB2ID0gbS52bV9zdGFjay4obS52bV9zcCkgaW5cbiAgICBtLnZtX3NwIDwtIG0udm1fc3AgLSAxO1xuICAgIGxldCBrID0gdmFsdWVfdG9fc3RyaW5nIG0udm1fc3RhY2suKG0udm1fc3ApIGluXG4gICAgSGFzaHRibC5yZXBsYWNlIGQgayB2XG4gIGRvbmU7XG4gIERpY3QgZFxuXG5sZXQgcGFkX25fbmlscyB2bV92YWwgbiA9XG4gIGxldCBtID0gdW53cmFwX3ZtIHZtX3ZhbCBpblxuICBsZXQgY291bnQgPSB2YWxfdG9faW50IG4gaW5cbiAgZm9yIF8gPSAxIHRvIGNvdW50IGRvXG4gICAgbS52bV9zdGFjay4obS52bV9zcCkgPC0gTmlsO1xuICAgIG0udm1fc3AgPC0gbS52bV9zcCArIDFcbiAgZG9uZTtcbiAgTmlsXG5cblxuKCogPT09IFRyYW5zcGlsZWQgZnJvbSBsaWIvdm0uc3ggPT09ICopXG4oKiB2bS1jYWxsICopXG5sZXQgcmVjIHZtX2NhbGwgdm0gZiBhcmdzID1cbiAgKGlmIHN4X3RydXRoeSAoKHZtX2Nsb3N1cmVfcCAoZikpKSB0aGVuICh2bV9wdXNoX2ZyYW1lICh2bSkgKGYpIChhcmdzKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpIHRoZW4gKHRyeV9qaXRfY2FsbCAodm0pIChmKSAoYXJncykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoZikpOyAoU3RyaW5nIFwiY29tcG9uZW50XCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChmKSk7IChTdHJpbmcgXCJpc2xhbmRcIildKSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKGNla19jYWxsX29yX3N1c3BlbmQgKHZtKSAoZikgKGFyZ3MpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX2NhbGxhYmxlIChmKSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKHN4X2FwcGx5IGYgYXJncykpKSBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlZNOiBub3QgY2FsbGFibGU6IFwiKTsgKHR5cGVfb2YgKGYpKV0pKSkpKSkpKSlcblxuKCogdm0tcmVzb2x2ZS1oby1mb3JtICopXG5hbmQgdm1fcmVzb2x2ZV9ob19mb3JtIHZtIG5hbWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZm9yLWVhY2hcIildKSkgdGhlbiAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZjsgY29sbF0gLT4gKGZ1biBmIGNvbGwgLT4gKExpc3QuaXRlciAoZnVuIHggLT4gaWdub3JlICgodm1fY2FsbF9leHRlcm5hbCAodm0pIChmKSAoKExpc3QgW3hdKSkpKSkgKHN4X3RvX2xpc3QgY29sbCk7IE5pbCkpIGYgY29sbCB8IF8gLT4gTmlsKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibWFwXCIpXSkpIHRoZW4gKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2Y7IGNvbGxdIC0+IChmdW4gZiBjb2xsIC0+IChMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gKHZtX2NhbGxfZXh0ZXJuYWwgKHZtKSAoZikgKChMaXN0IFt4XSkpKSkgKHN4X3RvX2xpc3QgY29sbCkpKSkgZiBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXAtaW5kZXhlZFwiKV0pKSB0aGVuIChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtmOyBjb2xsXSAtPiAoZnVuIGYgY29sbCAtPiAoTGlzdCAoTGlzdC5tYXBpIChmdW4gaSB4IC0+IGxldCBpID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkgaW4gKHZtX2NhbGxfZXh0ZXJuYWwgKHZtKSAoZikgKChMaXN0IFtpOyB4XSkpKSkgKHN4X3RvX2xpc3QgY29sbCkpKSkgZiBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZjsgY29sbF0gLT4gKGZ1biBmIGNvbGwgLT4gKExpc3QgKExpc3QuZmlsdGVyIChmdW4geCAtPiBzeF90cnV0aHkgKCh2bV9jYWxsX2V4dGVybmFsICh2bSkgKGYpICgoTGlzdCBbeF0pKSkpKSAoc3hfdG9fbGlzdCBjb2xsKSkpKSBmIGNvbGwgfCBfIC0+IE5pbCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInJlZHVjZVwiKV0pKSB0aGVuIChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtmOyBpbml0OyBjb2xsXSAtPiAoZnVuIGYgaW5pdCBjb2xsIC0+IChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+ICh2bV9jYWxsX2V4dGVybmFsICh2bSkgKGYpICgoTGlzdCBbYWNjOyB4XSkpKSkgaW5pdCAoc3hfdG9fbGlzdCBjb2xsKSkpIGYgaW5pdCBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJzb21lXCIpXSkpIHRoZW4gKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2Y7IGNvbGxdIC0+IChmdW4gZiBjb2xsIC0+IChCb29sIChMaXN0LmV4aXN0cyAoZnVuIHggLT4gc3hfdHJ1dGh5ICgodm1fY2FsbF9leHRlcm5hbCAodm0pIChmKSAoKExpc3QgW3hdKSkpKSkgKHN4X3RvX2xpc3QgY29sbCkpKSkgZiBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJldmVyeT9cIildKSkgdGhlbiAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gbWF0Y2ggX2FyZ3Mgd2l0aCBbZjsgY29sbF0gLT4gKGZ1biBmIGNvbGwgLT4gKEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIHggLT4gc3hfdHJ1dGh5ICgodm1fY2FsbF9leHRlcm5hbCAodm0pIChmKSAoKExpc3QgW3hdKSkpKSkgKHN4X3RvX2xpc3QgY29sbCkpKSkgZiBjb2xsIHwgXyAtPiBOaWwpKSBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlZNIHVuZGVmaW5lZDogXCIpOyBuYW1lXSkpKSkpKSkpKSkpKVxuXG4oKiB2bS1jYWxsLWV4dGVybmFsICopXG5hbmQgdm1fY2FsbF9leHRlcm5hbCB2bSBmIGFyZ3MgPVxuICAoaWYgc3hfdHJ1dGh5ICgodm1fY2xvc3VyZV9wIChmKSkpIHRoZW4gKHZtX2NhbGxfY2xvc3VyZSAoZikgKGFyZ3MpICgodm1fZ2xvYmFsc19yZWYgKHZtKSkpKSBlbHNlIChjZWtfY2FsbCAoZikgKGFyZ3MpKSlcblxuKCogdm0tcnVuICopXG5hbmQgdm1fcnVuIHZtID1cbiAgKGxldCAoKSA9IGlnbm9yZSAoKFN0cmluZyBcIkV4ZWN1dGUgYnl0ZWNvZGUgdW50aWwgYWxsIGZyYW1lcyBhcmUgY29uc3VtZWQuXCIpKSBpbiAobGV0IHJlYyBsb29wID0gKGZ1biAoKSAtPiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wICgodm1fZnJhbWVzICh2bSkpKSkpKSkpKSB0aGVuIChsZXQgZnJhbWUgPSAoZmlyc3QgKCh2bV9mcmFtZXMgKHZtKSkpKSBpbiBsZXQgcmVzdF9mcmFtZXMgPSAocmVzdCAoKHZtX2ZyYW1lcyAodm0pKSkpIGluIChsZXQgYmMgPSAoY29kZV9ieXRlY29kZSAoKGNsb3N1cmVfY29kZSAoKGZyYW1lX2Nsb3N1cmUgKGZyYW1lKSkpKSkpIGluIGxldCBjb25zdHMgPSAoY29kZV9jb25zdGFudHMgKChjbG9zdXJlX2NvZGUgKChmcmFtZV9jbG9zdXJlIChmcmFtZSkpKSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbKGZyYW1lX2lwIChmcmFtZSkpOyAobGVuIChiYykpXSkpIHRoZW4gKHZtX3NldF9mcmFtZXNfYiAodm0pICgoTGlzdCBbXSkpKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKCh2bV9zdGVwICh2bSkgKGZyYW1lKSAocmVzdF9mcmFtZXMpIChiYykgKGNvbnN0cykpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsICgoZ2V0ICgodm1fZ2xvYmFsc19yZWYgKHZtKSkpICgoU3RyaW5nIFwiX19pb19yZXF1ZXN0XCIpKSkpKSkgdGhlbiAobG9vcCAoKSkgZWxzZSBOaWwpKSkpKSBlbHNlIE5pbCkpIGluIChsb29wICgpKSkpXG5cbigqIHZtLXN0ZXAgKilcbmFuZCB2bV9zdGVwIHZtIGZyYW1lIHJlc3RfZnJhbWVzIGJjIGNvbnN0cyA9XG4gIChsZXQgb3AgPSAoZnJhbWVfcmVhZF91OCAoZnJhbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxLjApXSkpIHRoZW4gKGxldCBpZHggPSAoZnJhbWVfcmVhZF91MTYgKGZyYW1lKSkgaW4gKHZtX3B1c2ggKHZtKSAoKG50aCAoY29uc3RzKSAoaWR4KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAyLjApXSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoTmlsKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAzLjApXSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKEJvb2wgdHJ1ZSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDQuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgoQm9vbCBmYWxzZSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDUuMCldKSkgdGhlbiAodm1fcG9wICh2bSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNi4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKCh2bV9wZWVrICh2bSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNi4wKV0pKSB0aGVuIChsZXQgc2xvdCA9IChmcmFtZV9yZWFkX3U4IChmcmFtZSkpIGluICh2bV9wdXNoICh2bSkgKChmcmFtZV9sb2NhbF9nZXQgKHZtKSAoZnJhbWUpIChzbG90KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNy4wKV0pKSB0aGVuIChsZXQgc2xvdCA9IChmcmFtZV9yZWFkX3U4IChmcmFtZSkpIGluIChmcmFtZV9sb2NhbF9zZXQgKHZtKSAoZnJhbWUpIChzbG90KSAoKHZtX3BlZWsgKHZtKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxOC4wKV0pKSB0aGVuIChsZXQgaWR4ID0gKGZyYW1lX3JlYWRfdTggKGZyYW1lKSkgaW4gKHZtX3B1c2ggKHZtKSAoKGZyYW1lX3VwdmFsdWVfZ2V0IChmcmFtZSkgKGlkeCkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMTkuMCldKSkgdGhlbiAobGV0IGlkeCA9IChmcmFtZV9yZWFkX3U4IChmcmFtZSkpIGluIChmcmFtZV91cHZhbHVlX3NldCAoZnJhbWUpIChpZHgpICgodm1fcGVlayAodm0pKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDIwLjApXSkpIHRoZW4gKGxldCBpZHggPSAoZnJhbWVfcmVhZF91MTYgKGZyYW1lKSkgaW4gbGV0IG5hbWUgPSAobnRoIChjb25zdHMpIChpZHgpKSBpbiAodm1fcHVzaCAodm0pICgodm1fZ2xvYmFsX2dldCAodm0pIChmcmFtZSkgKG5hbWUpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDIxLjApXSkpIHRoZW4gKGxldCBpZHggPSAoZnJhbWVfcmVhZF91MTYgKGZyYW1lKSkgaW4gbGV0IG5hbWUgPSAobnRoIChjb25zdHMpIChpZHgpKSBpbiAodm1fZ2xvYmFsX3NldCAodm0pIChmcmFtZSkgKG5hbWUpICgodm1fcGVlayAodm0pKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDMyLjApXSkpIHRoZW4gKGxldCBvZmZzZXQgPSAoZnJhbWVfcmVhZF9pMTYgKGZyYW1lKSkgaW4gKGZyYW1lX3NldF9pcF9iIChmcmFtZSkgKChwcmltX2NhbGwgXCIrXCIgWyhmcmFtZV9pcCAoZnJhbWUpKTsgb2Zmc2V0XSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAzMy4wKV0pKSB0aGVuIChsZXQgb2Zmc2V0ID0gKGZyYW1lX3JlYWRfaTE2IChmcmFtZSkpIGluIGxldCB2ID0gKHZtX3BvcCAodm0pKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKHYpKSkpKSB0aGVuIChmcmFtZV9zZXRfaXBfYiAoZnJhbWUpICgocHJpbV9jYWxsIFwiK1wiIFsoZnJhbWVfaXAgKGZyYW1lKSk7IG9mZnNldF0pKSkgZWxzZSBOaWwpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDM0LjApXSkpIHRoZW4gKGxldCBvZmZzZXQgPSAoZnJhbWVfcmVhZF9pMTYgKGZyYW1lKSkgaW4gbGV0IHYgPSAodm1fcG9wICh2bSkpIGluIChpZiBzeF90cnV0aHkgKHYpIHRoZW4gKGZyYW1lX3NldF9pcF9iIChmcmFtZSkgKChwcmltX2NhbGwgXCIrXCIgWyhmcmFtZV9pcCAoZnJhbWUpKTsgb2Zmc2V0XSkpKSBlbHNlIE5pbCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNDguMCldKSkgdGhlbiAobGV0IGFyZ2MgPSAoZnJhbWVfcmVhZF91OCAoZnJhbWUpKSBpbiBsZXQgYXJncyA9IChjb2xsZWN0X25fZnJvbV9zdGFjayAodm0pIChhcmdjKSkgaW4gbGV0IGYgPSAodm1fcG9wICh2bSkpIGluICh2bV9jYWxsICh2bSkgKGYpIChhcmdzKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNDkuMCldKSkgdGhlbiAobGV0IGFyZ2MgPSAoZnJhbWVfcmVhZF91OCAoZnJhbWUpKSBpbiBsZXQgYXJncyA9IChjb2xsZWN0X25fZnJvbV9zdGFjayAodm0pIChhcmdjKSkgaW4gbGV0IGYgPSAodm1fcG9wICh2bSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKCh2bV9zZXRfZnJhbWVzX2IgKHZtKSAocmVzdF9mcmFtZXMpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHZtX3NldF9zcF9iICh2bSkgKChmcmFtZV9iYXNlIChmcmFtZSkpKSkpIGluICh2bV9jYWxsICh2bSkgKGYpIChhcmdzKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciA1MC4wKV0pKSB0aGVuIChsZXQgcmVzdWx0JyA9ICh2bV9wb3AgKHZtKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHZtX3NldF9mcmFtZXNfYiAodm0pIChyZXN0X2ZyYW1lcykpKSBpbiAobGV0ICgpID0gaWdub3JlICgodm1fc2V0X3NwX2IgKHZtKSAoKGZyYW1lX2Jhc2UgKGZyYW1lKSkpKSkgaW4gKHZtX3B1c2ggKHZtKSAocmVzdWx0JykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNTEuMCldKSkgdGhlbiAobGV0IGlkeCA9IChmcmFtZV9yZWFkX3UxNiAoZnJhbWUpKSBpbiBsZXQgY29kZV92YWwgPSAobnRoIChjb25zdHMpIChpZHgpKSBpbiAobGV0IGNsID0gKHZtX2NyZWF0ZV9jbG9zdXJlICh2bSkgKGZyYW1lKSAoY29kZV92YWwpKSBpbiAodm1fcHVzaCAodm0pIChjbCkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciA1Mi4wKV0pKSB0aGVuIChsZXQgaWR4ID0gKGZyYW1lX3JlYWRfdTE2IChmcmFtZSkpIGluIGxldCBhcmdjID0gKGZyYW1lX3JlYWRfdTggKGZyYW1lKSkgaW4gbGV0IG5hbWUgPSAobnRoIChjb25zdHMpIChpZHgpKSBpbiBsZXQgYXJncyA9IChjb2xsZWN0X25fZnJvbV9zdGFjayAodm0pIChhcmdjKSkgaW4gKHZtX3B1c2ggKHZtKSAoKGNhbGxfcHJpbWl0aXZlIChuYW1lKSAoYXJncykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNjQuMCldKSkgdGhlbiAobGV0IGNvdW50ID0gKGZyYW1lX3JlYWRfdTE2IChmcmFtZSkpIGluIGxldCBpdGVtcyA9IChjb2xsZWN0X25fZnJvbV9zdGFjayAodm0pIChjb3VudCkpIGluICh2bV9wdXNoICh2bSkgKGl0ZW1zKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgNjUuMCldKSkgdGhlbiAobGV0IGNvdW50ID0gKGZyYW1lX3JlYWRfdTE2IChmcmFtZSkpIGluIGxldCBkID0gKGNvbGxlY3Rfbl9wYWlycyAodm0pIChjb3VudCkpIGluICh2bV9wdXNoICh2bSkgKGQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNDQuMCldKSkgdGhlbiAobGV0IGNvdW50ID0gKGZyYW1lX3JlYWRfdTggKGZyYW1lKSkgaW4gbGV0IHBhcnRzID0gKGNvbGxlY3Rfbl9mcm9tX3N0YWNrICh2bSkgKGNvdW50KSkgaW4gKHZtX3B1c2ggKHZtKSAoKHN4X2FwcGx5IHN0ciBwYXJ0cykpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxMjguMCldKSkgdGhlbiAobGV0IGlkeCA9IChmcmFtZV9yZWFkX3UxNiAoZnJhbWUpKSBpbiBsZXQgbmFtZSA9IChudGggKGNvbnN0cykgKGlkeCkpIGluIChzeF9kaWN0X3NldF9iICh2bV9nbG9iYWxzX3JlZiAodm0pKSBuYW1lICh2bV9wZWVrICh2bSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjAuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiK1wiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjEuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiLVwiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjIuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiKlwiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjMuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiL1wiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjQuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiPVwiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjUuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiPFwiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjYuMCldKSkgdGhlbiAobGV0IGIgPSAodm1fcG9wICh2bSkpIGluIGxldCBhID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiPlwiIFthOyBiXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjcuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgoQm9vbCAobm90IChzeF90cnV0aHkgKCh2bV9wb3AgKHZtKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNjguMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgobGVuICgodm1fcG9wICh2bSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE2OS4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKChmaXJzdCAoKHZtX3BvcCAodm0pKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNzAuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgocmVzdCAoKHZtX3BvcCAodm0pKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNzEuMCldKSkgdGhlbiAobGV0IG4gPSAodm1fcG9wICh2bSkpIGluIGxldCBjb2xsID0gKHZtX3BvcCAodm0pKSBpbiAodm1fcHVzaCAodm0pICgobnRoIChjb2xsKSAobikpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMTcyLjApXSkpIHRoZW4gKGxldCBjb2xsID0gKHZtX3BvcCAodm0pKSBpbiBsZXQgeCA9ICh2bV9wb3AgKHZtKSkgaW4gKHZtX3B1c2ggKHZtKSAoKGNvbnMgKHgpIChjb2xsKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxNzMuMCldKSkgdGhlbiAodm1fcHVzaCAodm0pICgocHJpbV9jYWxsIFwiLVwiIFsoTnVtYmVyIDAuMCk7ICh2bV9wb3AgKHZtKSldKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbb3A7IChOdW1iZXIgMTc0LjApXSkpIHRoZW4gKHZtX3B1c2ggKHZtKSAoKHByaW1fY2FsbCBcImluY1wiIFsodm1fcG9wICh2bSkpXSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW29wOyAoTnVtYmVyIDE3NS4wKV0pKSB0aGVuICh2bV9wdXNoICh2bSkgKChwcmltX2NhbGwgXCJkZWNcIiBbKHZtX3BvcCAodm0pKV0pKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtvcDsgKE51bWJlciAxMTIuMCldKSkgdGhlbiAobGV0IHJlcXVlc3QgPSAodm1fcG9wICh2bSkpIGluIChzeF9kaWN0X3NldF9iICh2bV9nbG9iYWxzX3JlZiAodm0pKSAoU3RyaW5nIFwiX19pb19yZXF1ZXN0XCIpIHJlcXVlc3QpKSBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlZNOiB1bmtub3duIG9wY29kZSBcIik7IG9wXSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpXG5cblxuXG4oKiBXaXJlIGZvcndhcmQgcmVmZXJlbmNlcyB0byB0cmFuc3BpbGVkIGZ1bmN0aW9ucyAqKVxubGV0ICgpID0gX3ZtX3J1bl9mbiA6PSB2bV9ydW5cbmxldCAoKSA9IF92bV9jYWxsX2ZuIDo9IHZtX2NhbGxcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUHVibGljIEFQSSDigJQgbWF0Y2hlcyBTeF92bSBpbnRlcmZhY2UgZm9yIGRyb3AtaW4gcmVwbGFjZW1lbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCoqIEJ1aWxkIGEgc3VzcGVuc2lvbiBkaWN0IGZyb20gX19pb19yZXF1ZXN0IGluIGdsb2JhbHMuICopXG5sZXQgY2hlY2tfaW9fc3VzcGVuc2lvbiBnbG9iYWxzIHZtX3ZhbCA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZ2xvYmFscyBcIl9faW9fcmVxdWVzdFwiIHdpdGhcbiAgfCBTb21lIHJlcSB3aGVuIHN4X3RydXRoeSByZXEgLT5cbiAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcInN1c3BlbmRlZFwiIChCb29sIHRydWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwib3BcIiAoU3RyaW5nIFwiaW1wb3J0XCIpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBkIFwicmVxdWVzdFwiIHJlcTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZCBcInZtXCIgdm1fdmFsO1xuICAgIFNvbWUgKERpY3QgZClcbiAgfCBfIC0+IE5vbmVcblxuKCoqIEV4ZWN1dGUgYSBjb21waWxlZCBtb2R1bGUg4oCUIGVudHJ5IHBvaW50IGZvciBsb2FkLXN4YmMsIGNvbXBpbGUtYmxvYi5cbiAgICBSZXR1cm5zIHRoZSByZXN1bHQgdmFsdWUsIG9yIGEgc3VzcGVuc2lvbiBkaWN0IGlmIE9QX1BFUkZPUk0gZmlyZWQuICopXG5sZXQgZXhlY3V0ZV9tb2R1bGUgKGNvZGUgOiB2bV9jb2RlKSAoZ2xvYmFscyA6IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQpID1cbiAgbGV0IGNsID0geyB2bV9jb2RlID0gY29kZTsgdm1fdXB2YWx1ZXMgPSBbfHxdOyB2bV9uYW1lID0gU29tZSBcIm1vZHVsZVwiO1xuICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSBnbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IE5vbmUgfSBpblxuICBsZXQgbSA9IHsgdm1fc3RhY2sgPSBBcnJheS5tYWtlIDQwOTYgTmlsOyB2bV9zcCA9IDA7XG4gICAgICAgICAgICB2bV9mcmFtZXMgPSBbXTsgdm1fZ2xvYmFscyA9IGdsb2JhbHM7IHZtX3BlbmRpbmdfY2VrID0gTm9uZSB9IGluXG4gIGxldCB2bV92YWwgPSBWbU1hY2hpbmUgbSBpblxuICBsZXQgZnJhbWUgPSB7IHZmX2Nsb3N1cmUgPSBjbDsgdmZfaXAgPSAwOyB2Zl9iYXNlID0gMDsgdmZfbG9jYWxfY2VsbHMgPSBIYXNodGJsLmNyZWF0ZSA0IH0gaW5cbiAgZm9yIF8gPSAwIHRvIGNvZGUudmNfbG9jYWxzIC0gMSBkb1xuICAgIG0udm1fc3RhY2suKG0udm1fc3ApIDwtIE5pbDsgbS52bV9zcCA8LSBtLnZtX3NwICsgMVxuICBkb25lO1xuICBtLnZtX2ZyYW1lcyA8LSBbZnJhbWVdO1xuICBpZ25vcmUgKHZtX3J1biB2bV92YWwpO1xuICBtYXRjaCBjaGVja19pb19zdXNwZW5zaW9uIGdsb2JhbHMgdm1fdmFsIHdpdGhcbiAgfCBTb21lIHN1c3BlbnNpb24gLT4gc3VzcGVuc2lvblxuICB8IE5vbmUgLT4gdm1fcG9wIHZtX3ZhbFxuXG4oKiogUmVzdW1lIGEgc3VzcGVuZGVkIG1vZHVsZS4gQ2xlYXJzIF9faW9fcmVxdWVzdCwgcHVzaGVzIG5pbCwgcmUtcnVucy4gKilcbmxldCByZXN1bWVfbW9kdWxlIChzdXNwZW5kZWQgOiB2YWx1ZSkgPVxuICBtYXRjaCBzdXNwZW5kZWQgd2l0aFxuICB8IERpY3QgZCAtPlxuICAgIGxldCB2bV92YWwgPSBIYXNodGJsLmZpbmQgZCBcInZtXCIgaW5cbiAgICBsZXQgZ2xvYmFscyA9IG1hdGNoIHZtX3ZhbCB3aXRoXG4gICAgICB8IFZtTWFjaGluZSBtIC0+IG0udm1fZ2xvYmFsc1xuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVzdW1lX21vZHVsZTogZXhwZWN0ZWQgVm1NYWNoaW5lXCIpIGluXG4gICAgSGFzaHRibC5yZXBsYWNlIGdsb2JhbHMgXCJfX2lvX3JlcXVlc3RcIiBOaWw7XG4gICAgaWdub3JlICh2bV9wdXNoIHZtX3ZhbCBOaWwpO1xuICAgIGlnbm9yZSAodm1fcnVuIHZtX3ZhbCk7XG4gICAgKG1hdGNoIGNoZWNrX2lvX3N1c3BlbnNpb24gZ2xvYmFscyB2bV92YWwgd2l0aFxuICAgICB8IFNvbWUgc3VzcGVuc2lvbiAtPiBzdXNwZW5zaW9uXG4gICAgIHwgTm9uZSAtPiB2bV9wb3Agdm1fdmFsKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZXN1bWVfbW9kdWxlOiBleHBlY3RlZCBzdXNwZW5zaW9uIGRpY3RcIilcblxuKCoqIEV4ZWN1dGUgYSBjbG9zdXJlIHdpdGggYXJncyDigJQgZW50cnkgcG9pbnQgZm9yIEpJVCBMYW1iZGEgY2FsbHMuICopXG5sZXQgY2FsbF9jbG9zdXJlIChjbCA6IHZtX2Nsb3N1cmUpIChhcmdzIDogdmFsdWUgbGlzdCkgKGdsb2JhbHMgOiAoc3RyaW5nLCB2YWx1ZSkgSGFzaHRibC50KSA9XG4gIHZtX2NhbGxfY2xvc3VyZSAoVm1DbG9zdXJlIGNsKSAoTGlzdCBhcmdzKSAoRGljdCBnbG9iYWxzKVxuXG4oKiogUmVleHBvcnQgY29kZV9mcm9tX3ZhbHVlIGZvciBjYWxsZXJzICopXG5sZXQgY29kZV9mcm9tX3ZhbHVlID0gY29kZV9mcm9tX3ZhbHVlXG5cbigqKiBSZWV4cG9ydCBqaXQgcmVmcyAqKVxubGV0IGppdF9jb21waWxlX3JlZiA9IFN4X3ZtLmppdF9jb21waWxlX3JlZlxubGV0IGppdF9mYWlsZWRfc2VudGluZWwgPSBfaml0X2ZhaWxlZF9zZW50aW5lbFxubGV0IGlzX2ppdF9mYWlsZWQgPSBfaXNfaml0X2ZhaWxlZFxuXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfSGFzaHRibCIsIlN4X3R5cGVzIiwiU3hfcnVudGltZSIsIlN0ZGxpYl9MaXN0IiwiU3hfdm0iLCJTeF9yZWYiLCJTdGRsaWJfQXJyYXkiLCJTdGRsaWIiLCJjZWtfY2FsbCIsImV2YWxfZXhwciIsInRyYW1wb2xpbmUiLCJ2IiwiZW52IiwiZXhwciIsInRvX29jYW1sX2xpc3QiLCJsIiwic3RyIiwiYXJncyIsImNhbGxfcHJpbWl0aXZlIiwibmFtZSIsIm4iLCJ1bndyYXBfdm0iLCJtIiwidW53cmFwX2ZyYW1lIiwidW53cmFwX2Nsb3N1cmUiLCJjIiwibWFrZV91dl9jZWxsIiwidXZfZ2V0IiwidXZfc2V0IiwibWFrZV91cHZhbHVlX2NlbGwiLCJwYXJhbSIsInV2X3NldF9iIiwiY29kZV9mcm9tX3ZhbHVlIiwibWFrZV92bV9jb2RlIiwiYXJpdHkiLCJsb2NhbHMiLCJieXRlY29kZSIsImNvbnN0YW50cyIsImQiLCJtYWtlX3ZtX2Nsb3N1cmUiLCJjb2RlIiwidXB2YWx1ZXMiLCJnbG9iYWxzIiwiY2xvc3VyZV9lbnYiLCJ1diIsImUiLCJzIiwibWFrZV92bV9mcmFtZSIsImNsb3N1cmUiLCJiYXNlIiwiY2wiLCJtYWtlX3ZtIiwiZyIsInZtX3B1c2giLCJ2bV92YWwiLCJucyIsInZtX3BvcCIsInZtX3BlZWsiLCJmcmFtZV9yZWFkX3U4IiwiZnJhbWVfdmFsIiwiZnJhbWVfcmVhZF91MTYiLCJsbyIsImhpIiwiZnJhbWVfcmVhZF9pMTYiLCJmcmFtZV9sb2NhbF9nZXQiLCJzbG90IiwiaWR4IiwibWF0Y2giLCJjZWxsIiwiZnJhbWVfbG9jYWxfc2V0IiwiZnJhbWVfdXB2YWx1ZV9nZXQiLCJmcmFtZV91cHZhbHVlX3NldCIsImZyYW1lX2lwIiwiZnIiLCJmcmFtZV9zZXRfaXBfYiIsImZyYW1lX2Jhc2UiLCJmcmFtZV9jbG9zdXJlIiwiY3N0X3ZjX2J5dGVjb2RlIiwiY3N0X3ZjX2NvbnN0YW50cyIsImNzdF92Y19sb2NhbHMiLCJjbG9zdXJlX2NvZGUiLCJpIiwiY2xvc3VyZV91cHZhbHVlcyIsImNvZGVfYnl0ZWNvZGUiLCJjb2RlX2NvbnN0YW50cyIsImNvZGVfbG9jYWxzIiwidm1fc3AiLCJ2bV9zZXRfc3BfYiIsInZtX3N0YWNrIiwidm1fc2V0X3N0YWNrX2IiLCJ2bV9mcmFtZXMiLCJ2bV9zZXRfZnJhbWVzX2IiLCJmcyIsInZtX2dsb2JhbHNfcmVmIiwiY3N0X1ZNX3VuZGVmaW5lZCIsInZtX2dsb2JhbF9nZXQiLCJpZCIsImZvdW5kX2luX2VudiIsInAiLCJleG4iLCJob29rIiwidm1fZ2xvYmFsX3NldCIsIndyaXR0ZW4iLCJ2bV9wdXNoX2ZyYW1lIiwiY2xvc3VyZV92YWwiLCJhcmdfbGlzdCIsImEiLCJmb3IkIiwidm1fY2xvc3VyZV9wIiwidm1fY3JlYXRlX2Nsb3N1cmUiLCJjb2RlX3ZhbCIsInV2X2NvdW50IiwiaXNfbG9jYWwiLCJpbmRleCIsImV4aXN0aW5nIiwiaml0X2ZhaWxlZF9zZW50aW5lbCIsImlzX2ppdF9mYWlsZWQiLCJpc19sYW1iZGEiLCJsYW1iZGFfY29tcGlsZWQiLCJsYW1iZGFfc2V0X2NvbXBpbGVkX2IiLCJsYW1iZGFfbmFtZSIsImNzdF9yZXF1ZXN0IiwiY2VrX2NhbGxfb3Jfc3VzcGVuZCIsInN0YXRlIiwiZmluYWwiLCJlbnZfd2FsayIsImVudl93YWxrX3NldF9iIiwidmFsdWUiLCJ2bV9ydW5fZm4iLCJ2bV9jYWxsX2ZuIiwiYWN0aXZlX3ZtIiwidm1fY2FsbF9jbG9zdXJlIiwicHJldl92bSIsInRyeV9qaXRfY2FsbCIsImNvbGxlY3Rfbl9mcm9tX3N0YWNrIiwiY291bnQiLCJyZXN1bHQiLCJjb2xsZWN0X25fcGFpcnMiLCJrIiwicGFkX25fbmlscyIsImNzdCIsInZtX2NhbGwiLCJ2bSIsIm9yIiwidm1fcmVzb2x2ZV9ob19mb3JtIiwiY29sbCIsIngiLCJpbml0IiwiYWNjIiwidm1fY2FsbF9leHRlcm5hbCIsImNzdF9pb19yZXF1ZXN0Iiwidm1fcnVuIiwiZnJhbWUiLCJyZXN0X2ZyYW1lcyIsImJjIiwiY29uc3RzIiwidm1fc3RlcCIsIm9wIiwib2Zmc2V0IiwiYXJnYyIsIml0ZW1zIiwicGFydHMiLCJiIiwicmVxdWVzdCIsImNzdF92bSIsImNoZWNrX2lvX3N1c3BlbnNpb24iLCJyZXEiLCJleGVjdXRlX21vZHVsZSIsInN1c3BlbnNpb24iLCJyZXN1bWVfbW9kdWxlIiwic3VzcGVuZGVkIiwiY2FsbF9jbG9zdXJlIiwiaml0X2NvbXBpbGVfcmVmIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLFlBQUFDLFdBQUFDO0FBQUFBLElDY21CO0FBQUEsU0FBQUMsTUFBQSxNQUFBQyxPQUFBO0FBQUEsS0FDTSw4Q0FD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QTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR4U3BGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NjQwNDQsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3JlbmRlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIHN4X3JlbmRlci5tbCDigJQgQXV0by1nZW5lcmF0ZWQgZnJvbSBzcGVjL3JlbmRlci5zeCArIHdlYi9hZGFwdGVyLWh0bWwuc3ggKilcbigqIERvIG5vdCBlZGl0IOKAlCByZWdlbmVyYXRlIHdpdGg6IHB5dGhvbjMgaG9zdHMvb2NhbWwvYm9vdHN0cmFwX3JlbmRlci5weSAqKVxuXG5bQEBAd2FybmluZyBcIi0yNi0yN1wiXVxuXG5vcGVuIFN4X3R5cGVzXG5vcGVuIFN4X3J1bnRpbWVcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogUGxhdGZvcm0gYmluZGluZ3Mg4oCUIG5hdGl2ZSBPQ2FtbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHR5cGUgYWNjZXNzICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgZXZhbF9leHByIGV4cHIgZW52ID0gU3hfcmVmLmV2YWxfZXhwciBleHByIGVudlxubGV0IGNvbmRfc2NoZW1lX3AgPSBTeF9yZWYuY29uZF9zY2hlbWVfcFxuXG4oKiBQcmltaXRpdmUgd3JhcHBlcnMgbmVlZGVkIGFzIGRpcmVjdCBPQ2FtbCBmdW5jdGlvbnMgKilcbmxldCByYXdfaHRtbF9jb250ZW50IHYgPSBtYXRjaCB2IHdpdGggUmF3SFRNTCBzIC0+IFN0cmluZyBzIHwgXyAtPiBTdHJpbmcgXCJcIlxubGV0IG1ha2VfcmF3X2h0bWwgdiA9IG1hdGNoIHYgd2l0aCBTdHJpbmcgcyAtPiBSYXdIVE1MIHMgfCBfIC0+IE5pbFxubGV0IHNjb3BlX2VtaXQgdjEgdjIgPSBwcmltX2NhbGwgXCJzY29wZS1lbWl0IVwiIFt2MTsgdjJdXG5sZXQgaW5pdCB2ID0gcHJpbV9jYWxsIFwiaW5pdFwiIFt2XVxubGV0IGRpY3RfaGFzIGEgYiA9IHByaW1fY2FsbCBcImRpY3QtaGFzP1wiIFthOyBiXVxubGV0IGRpY3RfZ2V0IGEgYiA9IHByaW1fY2FsbCBcImRpY3QtZ2V0XCIgW2E7IGJdXG5sZXQgaXNfY29tcG9uZW50IHYgPSBwcmltX2NhbGwgXCJjb21wb25lbnQ/XCIgW3ZdXG5sZXQgaXNfaXNsYW5kIHYgPSBwcmltX2NhbGwgXCJpc2xhbmQ/XCIgW3ZdXG5sZXQgaXNfbWFjcm8gdiA9IHByaW1fY2FsbCBcIm1hY3JvP1wiIFt2XVxubGV0IGlzX2xhbWJkYSB2ID0gcHJpbV9jYWxsIFwibGFtYmRhP1wiIFt2XVxubGV0IGlzX25pbCB2ID0gcHJpbV9jYWxsIFwibmlsP1wiIFt2XVxuXG4oKiBGb3J3YXJkIHJlZnMgZm9yIHdlYi1zcGVjaWZpYyByZW5kZXJlcnMg4oCUIHNldCBpbiBGSVhVUFMgb3IgYnkgY2FsbGVyICopXG5sZXQgcmVuZGVyX2h0bWxfbGFrZV9yZWYgOiAodmFsdWUgLT4gdmFsdWUgLT4gdmFsdWUpIHJlZiA9IHJlZiAoZnVuIF8gXyAtPiBTdHJpbmcgXCJcIilcbmxldCByZW5kZXJfaHRtbF9tYXJzaF9yZWYgOiAodmFsdWUgLT4gdmFsdWUgLT4gdmFsdWUpIHJlZiA9IHJlZiAoZnVuIF8gXyAtPiBTdHJpbmcgXCJcIilcbmxldCByZW5kZXJfaHRtbF9pc2xhbmRfcmVmIDogKHZhbHVlIC0+IHZhbHVlIC0+IHZhbHVlIC0+IHZhbHVlKSByZWYgPSByZWYgKGZ1biBfIF8gXyAtPiBTdHJpbmcgXCJcIilcblxubGV0IHJlbmRlcl9odG1sX2xha2UgYXJncyBlbnYgPSAhcmVuZGVyX2h0bWxfbGFrZV9yZWYgYXJncyBlbnZcbmxldCByZW5kZXJfaHRtbF9tYXJzaCBhcmdzIGVudiA9ICFyZW5kZXJfaHRtbF9tYXJzaF9yZWYgYXJncyBlbnZcbmxldCByZW5kZXJfaHRtbF9pc2xhbmQgY29tcCBhcmdzIGVudiA9ICFyZW5kZXJfaHRtbF9pc2xhbmRfcmVmIGNvbXAgYXJncyBlbnZcbmxldCBjZWtfY2FsbCA9IFN4X3JlZi5jZWtfY2FsbFxuXG5sZXQgdHJhbXBvbGluZSB2ID0gbWF0Y2ggdiB3aXRoXG4gIHwgVGh1bmsgKGV4cHIsIGVudikgLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZW52KVxuICB8IG90aGVyIC0+IG90aGVyXG5cbmxldCBleHBhbmRfbWFjcm8gbSBhcmdzX3ZhbCBfZW52ID0gbWF0Y2ggbSB3aXRoXG4gIHwgTWFjcm8gbWFjIC0+XG4gICAgbGV0IGFyZ3MgPSBtYXRjaCBhcmdzX3ZhbCB3aXRoIExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBsIHwgXyAtPiBbXSBpblxuICAgIGxldCBsb2NhbCA9IGVudl9leHRlbmQgKEVudiBtYWMubV9jbG9zdXJlKSBpblxuICAgIGxldCByZWMgYmluZF9wYXJhbXMgcHMgYXMnID0gbWF0Y2ggcHMsIGFzJyB3aXRoXG4gICAgICB8IFtdLCByZXN0IC0+XG4gICAgICAgIChtYXRjaCBtYWMubV9yZXN0X3BhcmFtIHdpdGhcbiAgICAgICAgIHwgU29tZSBycCAtPiBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIChTdHJpbmcgcnApIChMaXN0IHJlc3QpKVxuICAgICAgICAgfCBOb25lIC0+ICgpKVxuICAgICAgfCBwIDo6IHBzX3Jlc3QsIGEgOjogYXNfcmVzdCAtPlxuICAgICAgICBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHAgYSk7XG4gICAgICAgIGJpbmRfcGFyYW1zIHBzX3Jlc3QgYXNfcmVzdFxuICAgICAgfCBfIDo6IF8sIFtdIC0+XG4gICAgICAgIExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlIChlbnZfYmluZCBsb2NhbCBwIE5pbCkpIChMaXN0LnJldiBwcylcbiAgICBpblxuICAgIGJpbmRfcGFyYW1zIChMaXN0Lm1hcCAoZnVuIHAgLT4gU3RyaW5nIHApIG1hYy5tX3BhcmFtcykgYXJncztcbiAgICBTeF9yZWYuZXZhbF9leHByIG1hYy5tX2JvZHkgbG9jYWxcbiAgfCBfIC0+IE5pbFxuXG4oKiogdHJ5LWNhdGNoOiB3cmFwcyBhIHRyeSBib2R5IGZuIGFuZCBjYXRjaCBoYW5kbGVyIGZuLlxuICAgIE1hcHMgdG8gT0NhbWwgZXhjZXB0aW9uIGhhbmRsaW5nLiAqKVxubGV0IHRyeV9jYXRjaCB0cnlfZm4gY2F0Y2hfZm4gPVxuICB0cnkgc3hfY2FsbCB0cnlfZm4gW11cbiAgd2l0aFxuICB8IFN4X3ZtLlZtU3VzcGVuZGVkIF8gYXMgZSAtPiByYWlzZSBlXG4gIHwgRXZhbF9lcnJvciBtc2cgLT4gc3hfY2FsbCBjYXRjaF9mbiBbU3RyaW5nIG1zZ11cbiAgfCBlIC0+IHN4X2NhbGwgY2F0Y2hfZm4gW1N0cmluZyAoUHJpbnRleGMudG9fc3RyaW5nIGUpXVxuXG4oKiogc2V0LXJlbmRlci1hY3RpdmUhIOKAlCBuby1vcCBvbiBPQ2FtbCAoYWx3YXlzIGFjdGl2ZSkuICopXG5sZXQgc2V0X3JlbmRlcl9hY3RpdmVfYiBfdiA9IE5pbFxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBQZXJmb3JtYW5jZS1jcml0aWNhbDogbmF0aXZlIEJ1ZmZlci1iYXNlZCBIVE1MIGVzY2FwaW5nICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBUYWcgcmVnaXN0cmllcyDigJQgbmF0aXZlIHN0cmluZyBsaXN0cyBmb3IgY2FsbGVycywgdmFsdWUgTGlzdHMgZm9yIFNYICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IGJvb2xlYW5fYXR0cnNfc2V0ID0gW1xuICBcImFzeW5jXCI7IFwiYXV0b2ZvY3VzXCI7IFwiYXV0b3BsYXlcIjsgXCJjaGVja2VkXCI7IFwiY29udHJvbHNcIjsgXCJkZWZhdWx0XCI7XG4gIFwiZGVmZXJcIjsgXCJkaXNhYmxlZFwiOyBcImZvcm1ub3ZhbGlkYXRlXCI7IFwiaGlkZGVuXCI7IFwiaW5lcnRcIjsgXCJpc21hcFwiO1xuICBcImxvb3BcIjsgXCJtdWx0aXBsZVwiOyBcIm11dGVkXCI7IFwibm9tb2R1bGVcIjsgXCJub3ZhbGlkYXRlXCI7IFwib3BlblwiO1xuICBcInBsYXlzaW5saW5lXCI7IFwicmVhZG9ubHlcIjsgXCJyZXF1aXJlZFwiOyBcInJldmVyc2VkXCI7IFwic2VsZWN0ZWRcIlxuXVxubGV0IGlzX2Jvb2xlYW5fYXR0ciBuYW1lID0gTGlzdC5tZW0gbmFtZSBib29sZWFuX2F0dHJzX3NldFxuXG5sZXQgaHRtbF90YWdzX2xpc3QgPSBbXG4gIFwiaHRtbFwiOyBcImhlYWRcIjsgXCJib2R5XCI7IFwidGl0bGVcIjsgXCJtZXRhXCI7IFwibGlua1wiOyBcInNjcmlwdFwiOyBcInN0eWxlXCI7IFwibm9zY3JpcHRcIjtcbiAgXCJoZWFkZXJcIjsgXCJuYXZcIjsgXCJtYWluXCI7IFwic2VjdGlvblwiOyBcImFydGljbGVcIjsgXCJhc2lkZVwiOyBcImZvb3RlclwiO1xuICBcImgxXCI7IFwiaDJcIjsgXCJoM1wiOyBcImg0XCI7IFwiaDVcIjsgXCJoNlwiOyBcImhncm91cFwiO1xuICBcImRpdlwiOyBcInBcIjsgXCJibG9ja3F1b3RlXCI7IFwicHJlXCI7IFwiZmlndXJlXCI7IFwiZmlnY2FwdGlvblwiOyBcImFkZHJlc3NcIjsgXCJoclwiO1xuICBcInVsXCI7IFwib2xcIjsgXCJsaVwiOyBcImRsXCI7IFwiZHRcIjsgXCJkZFwiOyBcIm1lbnVcIjsgXCJkZXRhaWxzXCI7IFwic3VtbWFyeVwiOyBcImRpYWxvZ1wiO1xuICBcImFcIjsgXCJzcGFuXCI7IFwiZW1cIjsgXCJzdHJvbmdcIjsgXCJzbWFsbFwiOyBcImJcIjsgXCJpXCI7IFwidVwiOyBcInNcIjsgXCJzdWJcIjsgXCJzdXBcIjtcbiAgXCJtYXJrXCI7IFwiYWJiclwiOyBcImNpdGVcIjsgXCJjb2RlXCI7IFwia2JkXCI7IFwic2FtcFwiOyBcInZhclwiOyBcInRpbWVcIjsgXCJiclwiOyBcIndiclwiO1xuICBcInRhYmxlXCI7IFwidGhlYWRcIjsgXCJ0Ym9keVwiOyBcInRmb290XCI7IFwidHJcIjsgXCJ0aFwiOyBcInRkXCI7IFwiY2FwdGlvblwiOyBcImNvbGdyb3VwXCI7IFwiY29sXCI7XG4gIFwiZm9ybVwiOyBcImlucHV0XCI7IFwidGV4dGFyZWFcIjsgXCJzZWxlY3RcIjsgXCJvcHRpb25cIjsgXCJvcHRncm91cFwiOyBcImJ1dHRvblwiOyBcImxhYmVsXCI7XG4gIFwiZmllbGRzZXRcIjsgXCJsZWdlbmRcIjsgXCJkYXRhbGlzdFwiOyBcIm91dHB1dFwiO1xuICBcImltZ1wiOyBcInZpZGVvXCI7IFwiYXVkaW9cIjsgXCJzb3VyY2VcIjsgXCJwaWN0dXJlXCI7IFwiY2FudmFzXCI7IFwiaWZyYW1lXCI7XG4gIFwic3ZnXCI7IFwicGF0aFwiOyBcImNpcmNsZVwiOyBcInJlY3RcIjsgXCJsaW5lXCI7IFwicG9seWxpbmVcIjsgXCJwb2x5Z29uXCI7IFwiZWxsaXBzZVwiO1xuICBcImdcIjsgXCJkZWZzXCI7IFwidXNlXCI7IFwidGV4dFwiOyBcInRzcGFuXCI7IFwiY2xpcFBhdGhcIjsgXCJtYXNrXCI7IFwicGF0dGVyblwiO1xuICBcImxpbmVhckdyYWRpZW50XCI7IFwicmFkaWFsR3JhZGllbnRcIjsgXCJzdG9wXCI7IFwiZmlsdGVyXCI7XG4gIFwiZmVHYXVzc2lhbkJsdXJcIjsgXCJmZU9mZnNldFwiOyBcImZlQmxlbmRcIjsgXCJmZUNvbG9yTWF0cml4XCI7IFwiZmVDb21wb3NpdGVcIjtcbiAgXCJmZU1lcmdlXCI7IFwiZmVNZXJnZU5vZGVcIjsgXCJmZVR1cmJ1bGVuY2VcIjsgXCJmZUNvbXBvbmVudFRyYW5zZmVyXCI7XG4gIFwiZmVGdW5jUlwiOyBcImZlRnVuY0dcIjsgXCJmZUZ1bmNCXCI7IFwiZmVGdW5jQVwiOyBcImZlRGlzcGxhY2VtZW50TWFwXCI7IFwiZmVGbG9vZFwiO1xuICBcImZlSW1hZ2VcIjsgXCJmZU1vcnBob2xvZ3lcIjsgXCJmZVNwZWN1bGFyTGlnaHRpbmdcIjsgXCJmZURpZmZ1c2VMaWdodGluZ1wiO1xuICBcImZlUG9pbnRMaWdodFwiOyBcImZlU3BvdExpZ2h0XCI7IFwiZmVEaXN0YW50TGlnaHRcIjtcbiAgXCJhbmltYXRlXCI7IFwiYW5pbWF0ZVRyYW5zZm9ybVwiOyBcImZvcmVpZ25PYmplY3RcIjsgXCJ0ZW1wbGF0ZVwiOyBcInNsb3RcIlxuXVxubGV0IGh0bWxfdGFncyA9IGh0bWxfdGFnc19saXN0ICAoKiBjYWxsZXJzIGV4cGVjdCBzdHJpbmcgbGlzdCAqKVxubGV0IGh0bWxfdGFnc192YWwgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGh0bWxfdGFnc19saXN0KVxuXG5sZXQgdm9pZF9lbGVtZW50c19saXN0ID0gW1xuICBcImFyZWFcIjsgXCJiYXNlXCI7IFwiYnJcIjsgXCJjb2xcIjsgXCJlbWJlZFwiOyBcImhyXCI7IFwiaW1nXCI7IFwiaW5wdXRcIjtcbiAgXCJsaW5rXCI7IFwibWV0YVwiOyBcInBhcmFtXCI7IFwic291cmNlXCI7IFwidHJhY2tcIjsgXCJ3YnJcIlxuXVxubGV0IHZvaWRfZWxlbWVudHMgPSB2b2lkX2VsZW1lbnRzX2xpc3QgICgqIGNhbGxlcnMgZXhwZWN0IHN0cmluZyBsaXN0ICopXG5sZXQgdm9pZF9lbGVtZW50c192YWwgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIHZvaWRfZWxlbWVudHNfbGlzdClcblxubGV0IGJvb2xlYW5fYXR0cnMgPSBib29sZWFuX2F0dHJzX3NldCAgKCogY2FsbGVycyBleHBlY3Qgc3RyaW5nIGxpc3QgKilcbmxldCBib29sZWFuX2F0dHJzX3ZhbCA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgYm9vbGVhbl9hdHRyc19zZXQpXG5cbigqIE5hdGl2ZSBlc2NhcGUgZm9yIGludGVybmFsIHVzZSDigJQgcmV0dXJucyByYXcgT0NhbWwgc3RyaW5nICopXG5sZXQgZXNjYXBlX2h0bWxfcmF3IHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBTdHJpbmcuaXRlciAoZnVuY3Rpb25cbiAgICB8ICcmJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImYW1wO1wiXG4gICAgfCAnPCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJmx0O1wiXG4gICAgfCAnPicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJmd0O1wiXG4gICAgfCAnXCInIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZxdW90O1wiXG4gICAgfCBjIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4oKiBlc2NhcGVfaHRtbDogbmF0aXZlIHN0cmluZyAtPiBzdHJpbmcgZm9yIGNhbGxlcnMgKilcbmxldCBlc2NhcGVfaHRtbCA9IGVzY2FwZV9odG1sX3Jhd1xuXG4oKiBlc2NhcGVfaHRtbF92YWwgLyBlc2NhcGVfYXR0cl92YWwg4oCUIHRha2UgYSB2YWx1ZSwgcmV0dXJuIFN0cmluZyB2YWx1ZSAoZm9yIHRyYW5zcGlsZWQgY29kZSkgKilcbmxldCBlc2NhcGVfaHRtbF92YWwgdiA9XG4gIGxldCBzID0gbWF0Y2ggdiB3aXRoIFN0cmluZyBzIC0+IHMgfCB2IC0+IHZhbHVlX3RvX3N0cmluZyB2IGluXG4gIFN0cmluZyAoZXNjYXBlX2h0bWxfcmF3IHMpXG5cbmxldCBlc2NhcGVfYXR0cl92YWwgdiA9IGVzY2FwZV9odG1sX3ZhbCB2XG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFBlcmZvcm1hbmNlLWNyaXRpY2FsOiBuYXRpdmUgYXR0cmlidXRlIHJlbmRlcmluZyAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCByZW5kZXJfYXR0cnMgYXR0cnMgPSBtYXRjaCBhdHRycyB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICAgIGlmIGlzX2Jvb2xlYW5fYXR0ciBrIHRoZW4gYmVnaW5cbiAgICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiBiZWdpblxuICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnO1xuICAgICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBrXG4gICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2UgaWYgdiA8PiBOaWwgdGhlbiBiZWdpblxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcgJztcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGs7XG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIj1cXFwiXCI7XG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoZXNjYXBlX2h0bWxfcmF3ICh2YWx1ZV90b19zdHJpbmcgdikpO1xuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIidcbiAgICAgIGVuZCkgZDtcbiAgICBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gIHwgXyAtPiBTdHJpbmcgXCJcIlxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBGb3J3YXJkIHJlZiDigJQgdXNlZCBieSBzZXR1cF9yZW5kZXJfZW52IGFuZCBidWZmZXIgcmVuZGVyZXIgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCByZW5kZXJfdG9faHRtbF9yZWYgOiAodmFsdWUgLT4gdmFsdWUgLT4gdmFsdWUpIHJlZiA9XG4gIHJlZiAoZnVuIF9leHByIF9lbnYgLT4gU3RyaW5nIFwiXCIpXG5cbigqIHNjb3BlLWVtaXR0ZWQgaXMgYSBwcmltIGFsaWFzICopXG5sZXQgc2NvcGVfZW1pdHRlZCBuYW1lID0gcHJpbV9jYWxsIFwic2NvcGUtZW1pdHRlZFwiIFtuYW1lXVxuXG4oKiBSRU5ERVJfSFRNTF9GT1JNUyDigJQgbGlzdCBvZiBzcGVjaWFsIGZvcm0gbmFtZXMgaGFuZGxlZCBieSBkaXNwYXRjaC1odG1sLWZvcm0gKilcbmxldCByZW5kZXJfaHRtbF9mb3JtcyA9IExpc3QgW1xuICBTdHJpbmcgXCJpZlwiOyBTdHJpbmcgXCJ3aGVuXCI7IFN0cmluZyBcImNvbmRcIjsgU3RyaW5nIFwiY2FzZVwiO1xuICBTdHJpbmcgXCJsZXRcIjsgU3RyaW5nIFwibGV0KlwiOyBTdHJpbmcgXCJsZXRyZWNcIjtcbiAgU3RyaW5nIFwiYmVnaW5cIjsgU3RyaW5nIFwiZG9cIjtcbiAgU3RyaW5nIFwiZGVmaW5lXCI7IFN0cmluZyBcImRlZmNvbXBcIjsgU3RyaW5nIFwiZGVmbWFjcm9cIjsgU3RyaW5nIFwiZGVmaXNsYW5kXCI7XG4gIFN0cmluZyBcImRlZnBhZ2VcIjsgU3RyaW5nIFwiZGVmaGFuZGxlclwiOyBTdHJpbmcgXCJkZWZxdWVyeVwiOyBTdHJpbmcgXCJkZWZhY3Rpb25cIjtcbiAgU3RyaW5nIFwiZGVmcmVsYXRpb25cIjsgU3RyaW5nIFwiZGVmdHlwZVwiOyBTdHJpbmcgXCJkZWZlZmZlY3RcIjsgU3RyaW5nIFwiZGVmc3R5bGVcIjtcbiAgU3RyaW5nIFwibWFwXCI7IFN0cmluZyBcIm1hcC1pbmRleGVkXCI7IFN0cmluZyBcImZpbHRlclwiOyBTdHJpbmcgXCJmb3ItZWFjaFwiO1xuICBTdHJpbmcgXCJzY29wZVwiOyBTdHJpbmcgXCJwcm92aWRlXCJcbl1cblxuXG4oKiA9PT0gVHJhbnNwaWxlZCBmcm9tIHJlbmRlciBzcGVjICsgYWRhcHRlciA9PT0gKilcbigqICpkZWZpbml0aW9uLWZvcm0tZXh0ZW5zaW9ucyogKilcbmxldCByZWMgX2RlZmluaXRpb25fZm9ybV9leHRlbnNpb25zXyA9XG4gIChMaXN0IFtdKVxuXG4oKiBkZWZpbml0aW9uLWZvcm0/ICopXG5hbmQgZGVmaW5pdGlvbl9mb3JtX3AgbmFtZSA9XG4gIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZmluZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJkZWZjb21wXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZmlzbGFuZFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJkZWZtYWNyb1wiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJkZWZzdHlsZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJkZWZ0eXBlXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZmVmZmVjdFwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgW19kZWZpbml0aW9uX2Zvcm1fZXh0ZW5zaW9uc187IG5hbWVdKSkpKSkpKSlcblxuKCogcGFyc2UtZWxlbWVudC1hcmdzICopXG5hbmQgcGFyc2VfZWxlbWVudF9hcmdzIGFyZ3MgZW52ID1cbiAgKGxldCBhdHRycyA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gbGV0IGNoaWxkcmVuID0gcmVmICgoTGlzdCBbXSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0LmZvbGRfbGVmdCAoZnVuIHN0YXRlIGFyZyAtPiAobGV0IHNraXAgPSAoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJza2lwXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoc2tpcCkgdGhlbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJza2lwXCIpOyAoQm9vbCBmYWxzZSk7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKV0pXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoYXJnKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIjxcIiBbKHByaW1fY2FsbCBcImluY1wiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSldKTsgKGxlbiAoYXJncykpXSkpKSB0aGVuIChsZXQgdmFsJyA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKHByaW1fY2FsbCBcImluY1wiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSldKSkpKSAoZW52KSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBhdHRycyAoa2V5d29yZF9uYW1lIChhcmcpKSB2YWwnKSkgaW4gKHByaW1fY2FsbCBcImFzc29jXCIgW3N0YXRlOyAoU3RyaW5nIFwic2tpcFwiKTsgKEJvb2wgdHJ1ZSk7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKV0pXSkpKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChjaGlsZHJlbiA6PSBzeF9hcHBlbmRfYiAhY2hpbGRyZW4gYXJnOyBOaWwpKSBpbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKV0pXSkpKSkpKSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwiaVwiKSkgKE51bWJlciAwLjApOyBIYXNodGJsLnJlcGxhY2UgX2QgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwic2tpcFwiKSkgKEJvb2wgZmFsc2UpOyAgRGljdCBfZCkgKHN4X3RvX2xpc3QgYXJncykpKSBpbiAoTGlzdCBbYXR0cnM7ICFjaGlsZHJlbl0pKSlcblxuKCogZXZhbC1jb25kICopXG5hbmQgZXZhbF9jb25kIGNsYXVzZXMgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKGNvbmRfc2NoZW1lX3AgKGNsYXVzZXMpKSkgdGhlbiAoZXZhbF9jb25kX3NjaGVtZSAoY2xhdXNlcykgKGVudikpIGVsc2UgKGV2YWxfY29uZF9jbG9qdXJlIChjbGF1c2VzKSAoZW52KSkpXG5cbigqIGV2YWwtY29uZC1zY2hlbWUgKilcbmFuZCBldmFsX2NvbmRfc2NoZW1lIGNsYXVzZXMgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNsYXVzZXMpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGNsYXVzZSA9IChmaXJzdCAoY2xhdXNlcykpIGluIGxldCB0ZXN0ID0gKGZpcnN0IChjbGF1c2UpKSBpbiBsZXQgYm9keSA9IChudGggKGNsYXVzZSkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19lbHNlX2NsYXVzZSAodGVzdCkpKSB0aGVuIGJvZHkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAodGVzdCkgKGVudikpKSkpIHRoZW4gYm9keSBlbHNlIChldmFsX2NvbmRfc2NoZW1lICgocmVzdCAoY2xhdXNlcykpKSAoZW52KSkpKSkpXG5cbigqIGV2YWwtY29uZC1jbG9qdXJlICopXG5hbmQgZXZhbF9jb25kX2Nsb2p1cmUgY2xhdXNlcyBlbnYgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFsobGVuIChjbGF1c2VzKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuIE5pbCBlbHNlIChsZXQgdGVzdCA9IChmaXJzdCAoY2xhdXNlcykpIGluIGxldCBib2R5ID0gKG50aCAoY2xhdXNlcykgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19lbHNlX2NsYXVzZSAodGVzdCkpKSB0aGVuIGJvZHkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAodGVzdCkgKGVudikpKSkpIHRoZW4gYm9keSBlbHNlIChldmFsX2NvbmRfY2xvanVyZSAoKHByaW1fY2FsbCBcInNsaWNlXCIgW2NsYXVzZXM7IChOdW1iZXIgMi4wKV0pKSAoZW52KSkpKSkpXG5cbigqIHByb2Nlc3MtYmluZGluZ3MgKilcbmFuZCBwcm9jZXNzX2JpbmRpbmdzIGJpbmRpbmdzIGVudiA9XG4gIChsZXQgbG9jYWwgPSAoZW52X2V4dGVuZCAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocGFpcikpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChwYWlyKSk7IChOdW1iZXIgMi4wKV0pKSkgdGhlbiAobGV0IG5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChwYWlyKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChwYWlyKSkpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbKGZpcnN0IChwYWlyKSldKSkpIGluIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIG5hbWUpICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpIChsb2NhbCkpKSkpKSBlbHNlIE5pbCkpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncyk7IE5pbCkpIGluIGxvY2FsKSlcblxuKCogaXMtcmVuZGVyLWV4cHI/ICopXG5hbmQgaXNfcmVuZGVyX2V4cHJfcCBleHByID1cbiAgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChleHByKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpKSkpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoZW1wdHlfcCAoZXhwcikpKSkgdGhlbiAoQm9vbCBmYWxzZSkgZWxzZSAobGV0IGggPSAoZmlyc3QgKGV4cHIpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChoKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkpKSkpIHRoZW4gKEJvb2wgZmFsc2UpIGVsc2UgKGxldCBuID0gKHN5bWJvbF9uYW1lIChoKSkgaW4gKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuOyAoU3RyaW5nIFwiPD5cIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuOyAoU3RyaW5nIFwicmF3IVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCJzdGFydHMtd2l0aD9cIiBbbjsgKFN0cmluZyBcIn5cIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwic3RhcnRzLXdpdGg/XCIgW247IChTdHJpbmcgXCJodG1sOlwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbaHRtbF90YWdzX3ZhbDsgbl0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPlwiIFsocHJpbV9jYWxsIFwiaW5kZXgtb2ZcIiBbbjsgKFN0cmluZyBcIi1cIildKTsgKE51bWJlciAwLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoZXhwcikpOyAoTnVtYmVyIDEuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkpKSkpKSkpKSkpKVxuXG4oKiBtZXJnZS1zcHJlYWQtYXR0cnMgKilcbmFuZCBtZXJnZV9zcHJlYWRfYXR0cnMgdGFyZ2V0IHNwcmVhZF9kaWN0ID1cbiAgKExpc3QuaXRlciAoZnVuIGtleSAtPiBpZ25vcmUgKChsZXQgdmFsJyA9IChkaWN0X2dldCAoc3ByZWFkX2RpY3QpIChrZXkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtrZXk7IChTdHJpbmcgXCJjbGFzc1wiKV0pKSB0aGVuIChsZXQgZXhpc3RpbmcgPSAoZGljdF9nZXQgKHRhcmdldCkgKChTdHJpbmcgXCJjbGFzc1wiKSkpIGluIChzeF9kaWN0X3NldF9iIHRhcmdldCAoU3RyaW5nIFwiY2xhc3NcIikgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gZXhpc3RpbmcgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtleGlzdGluZzsgKFN0cmluZyBcIlwiKV0pKSkpKSkpIHRoZW4gKFN0cmluZyAoc3hfc3RyIFtleGlzdGluZzsgKFN0cmluZyBcIiBcIik7IHZhbCddKSkgZWxzZSB2YWwnKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBba2V5OyAoU3RyaW5nIFwic3R5bGVcIildKSkgdGhlbiAobGV0IGV4aXN0aW5nID0gKGRpY3RfZ2V0ICh0YXJnZXQpICgoU3RyaW5nIFwic3R5bGVcIikpKSBpbiAoc3hfZGljdF9zZXRfYiB0YXJnZXQgKFN0cmluZyBcInN0eWxlXCIpIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IGV4aXN0aW5nIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhpc3Rpbmc7IChTdHJpbmcgXCJcIildKSkpKSkpKSB0aGVuIChTdHJpbmcgKHN4X3N0ciBbZXhpc3Rpbmc7IChTdHJpbmcgXCI7XCIpOyB2YWwnXSkpIGVsc2UgdmFsJykpKSBlbHNlIChzeF9kaWN0X3NldF9iIHRhcmdldCBrZXkgdmFsJykpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwia2V5c1wiIFtzcHJlYWRfZGljdF0pKTsgTmlsKVxuXG4oKiByZW5kZXItdG8taHRtbCAqKVxuYW5kIHJlbmRlcl90b19odG1sIGV4cHIgZW52ID1cbiAgKGxldCAoKSA9IGlnbm9yZSAoKHNldF9yZW5kZXJfYWN0aXZlX2IgKChCb29sIHRydWUpKSkpIGluIChsZXQgX21hdGNoX3ZhbCA9ICh0eXBlX29mIChleHByKSkgaW4gKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibmlsXCIpIHRoZW4gKFN0cmluZyBcIlwiKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInN0cmluZ1wiKSB0aGVuIChlc2NhcGVfaHRtbF92YWwgKGV4cHIpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcIm51bWJlclwiKSB0aGVuIChTdHJpbmcgKHN4X3N0ciBbZXhwcl0pKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImJvb2xlYW5cIikgdGhlbiAoaWYgc3hfdHJ1dGh5IChleHByKSB0aGVuIChTdHJpbmcgXCJ0cnVlXCIpIGVsc2UgKFN0cmluZyBcImZhbHNlXCIpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImxpc3RcIikgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoZXhwcikpKSB0aGVuIChTdHJpbmcgXCJcIikgZWxzZSAocmVuZGVyX2xpc3RfdG9faHRtbCAoZXhwcikgKGVudikpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcInN5bWJvbFwiKSB0aGVuIChyZW5kZXJfdmFsdWVfdG9faHRtbCAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGV4cHIpIChlbnYpKSkpKSAoZW52KSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJrZXl3b3JkXCIpIHRoZW4gKGVzY2FwZV9odG1sX3ZhbCAoKGtleXdvcmRfbmFtZSAoZXhwcikpKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJyYXctaHRtbFwiKSB0aGVuIChyYXdfaHRtbF9jb250ZW50IChleHByKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJzcHJlYWRcIikgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfZW1pdCAoKFN0cmluZyBcImVsZW1lbnQtYXR0cnNcIikpICgoc3ByZWFkX2F0dHJzIChleHByKSkpKSkgaW4gKFN0cmluZyBcIlwiKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJ0aHVua1wiKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKHRodW5rX2V4cHIgKGV4cHIpKSkgKCh0aHVua19lbnYgKGV4cHIpKSkpIGVsc2UgKHJlbmRlcl92YWx1ZV90b19odG1sICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZXhwcikgKGVudikpKSkpIChlbnYpKSkpKSkpKSkpKSkpKVxuXG4oKiByZW5kZXItdmFsdWUtdG8taHRtbCAqKVxuYW5kIHJlbmRlcl92YWx1ZV90b19odG1sIHZhbCcgZW52ID1cbiAgKGxldCBfbWF0Y2hfdmFsID0gKHR5cGVfb2YgKHZhbCcpKSBpbiAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJuaWxcIikgdGhlbiAoU3RyaW5nIFwiXCIpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3RyaW5nXCIpIHRoZW4gKGVzY2FwZV9odG1sX3ZhbCAodmFsJykpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibnVtYmVyXCIpIHRoZW4gKFN0cmluZyAoc3hfc3RyIFt2YWwnXSkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwiYm9vbGVhblwiKSB0aGVuIChpZiBzeF90cnV0aHkgKHZhbCcpIHRoZW4gKFN0cmluZyBcInRydWVcIikgZWxzZSAoU3RyaW5nIFwiZmFsc2VcIikpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibGlzdFwiKSB0aGVuIChyZW5kZXJfbGlzdF90b19odG1sICh2YWwnKSAoZW52KSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJyYXctaHRtbFwiKSB0aGVuIChyYXdfaHRtbF9jb250ZW50ICh2YWwnKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJzcHJlYWRcIikgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfZW1pdCAoKFN0cmluZyBcImVsZW1lbnQtYXR0cnNcIikpICgoc3ByZWFkX2F0dHJzICh2YWwnKSkpKSkgaW4gKFN0cmluZyBcIlwiKSkgZWxzZSAoaWYgX21hdGNoX3ZhbCA9IChTdHJpbmcgXCJ0aHVua1wiKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKHRodW5rX2V4cHIgKHZhbCcpKSkgKCh0aHVua19lbnYgKHZhbCcpKSkpIGVsc2UgKGVzY2FwZV9odG1sX3ZhbCAoKFN0cmluZyAoc3hfc3RyIFt2YWwnXSkpKSkpKSkpKSkpKSlcblxuKCogcmVuZGVyLWh0bWwtZm9ybT8gKilcbmFuZCByZW5kZXJfaHRtbF9mb3JtX3AgbmFtZSA9XG4gIChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbcmVuZGVyX2h0bWxfZm9ybXM7IG5hbWVdKVxuXG4oKiByZW5kZXItbGlzdC10by1odG1sICopXG5hbmQgcmVuZGVyX2xpc3RfdG9faHRtbCBleHByIGVudiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChleHByKSkpIHRoZW4gKFN0cmluZyBcIlwiKSBlbHNlIChsZXQgaGVhZCA9IChmaXJzdCAoZXhwcikpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGhlYWQpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSkpKSkgdGhlbiAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biB4IC0+IChyZW5kZXJfdmFsdWVfdG9faHRtbCAoeCkgKGVudikpKSAoc3hfdG9fbGlzdCBleHByKSkpXSkgZWxzZSAobGV0IG5hbWUgPSAoc3ltYm9sX25hbWUgKGhlYWQpKSBpbiBsZXQgYXJncyA9IChyZXN0IChleHByKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIjw+XCIpXSkpIHRoZW4gKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4geCAtPiAocmVuZGVyX3RvX2h0bWwgKHgpIChlbnYpKSkgKHN4X3RvX2xpc3QgYXJncykpKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInJhdyFcIildKSkgdGhlbiAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biB4IC0+IChTdHJpbmcgKHN4X3N0ciBbKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKHgpIChlbnYpKSkpXSkpKSAoc3hfdG9fbGlzdCBhcmdzKSkpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibGFrZVwiKV0pKSB0aGVuIChyZW5kZXJfaHRtbF9sYWtlIChhcmdzKSAoZW52KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibWFyc2hcIildKSkgdGhlbiAocmVuZGVyX2h0bWxfbWFyc2ggKGFyZ3MpIChlbnYpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJlcnJvci1ib3VuZGFyeVwiKV0pKSB0aGVuIChsZXQgaGFzX2ZhbGxiYWNrID0gKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDEuMCldKSBpbiAobGV0IGJvZHlfZXhwcnMgPSAoaWYgc3hfdHJ1dGh5IChoYXNfZmFsbGJhY2spIHRoZW4gKHJlc3QgKGFyZ3MpKSBlbHNlIGFyZ3MpIGluIGxldCBmYWxsYmFja19leHByID0gKGlmIHN4X3RydXRoeSAoaGFzX2ZhbGxiYWNrKSB0aGVuIChmaXJzdCAoYXJncykpIGVsc2UgTmlsKSBpbiAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCI8ZGl2IGRhdGEtc3gtYm91bmRhcnk9XFxcInRydWVcXFwiPlwiKTsgKHRyeV9jYXRjaCAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IChmdW4gKCkgLT4gKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4geCAtPiAocmVuZGVyX3RvX2h0bWwgKHgpIChlbnYpKSkgKHN4X3RvX2xpc3QgYm9keV9leHBycykpKV0pKSAoKSkpKSAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2Vycl0gLT4gKGZ1biBlcnIgLT4gKGxldCBzYWZlX2VyciA9IChwcmltX2NhbGwgXCJyZXBsYWNlXCIgWyhwcmltX2NhbGwgXCJyZXBsYWNlXCIgWyhTdHJpbmcgKHN4X3N0ciBbZXJyXSkpOyAoU3RyaW5nIFwiPFwiKTsgKFN0cmluZyBcIiZsdDtcIildKTsgKFN0cmluZyBcIj5cIik7IChTdHJpbmcgXCImZ3Q7XCIpXSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gZmFsbGJhY2tfZXhwciBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19uaWwgKGZhbGxiYWNrX2V4cHIpKSkpKSkpKSB0aGVuICh0cnlfY2F0Y2ggKChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiAoZnVuICgpIC0+IChyZW5kZXJfdG9faHRtbCAoKExpc3QgWyh0cmFtcG9saW5lICgoZXZhbF9leHByIChmYWxsYmFja19leHByKSAoZW52KSkpKTsgZXJyOyBOaWxdKSkgKGVudikpKSAoKSkpKSAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2UyXSAtPiAoZnVuIGUyIC0+IChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIjxkaXYgY2xhc3M9XFxcInN4LXJlbmRlci1lcnJvclxcXCIgc3R5bGU9XFxcImNvbG9yOnJlZDtmb250LXNpemU6MC44NzVyZW07cGFkZGluZzowLjVyZW07Ym9yZGVyOjFweCBzb2xpZCByZWQ7Ym9yZGVyLXJhZGl1czowLjI1cmVtO21hcmdpbjowLjVyZW0gMDtcXFwiPlJlbmRlciBlcnJvcjogXCIpOyBzYWZlX2VycjsgKFN0cmluZyBcIjwvZGl2PlwiKV0pKSkgZTIgfCBfIC0+IE5pbCkpKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCI8ZGl2IGNsYXNzPVxcXCJzeC1yZW5kZXItZXJyb3JcXFwiIHN0eWxlPVxcXCJjb2xvcjpyZWQ7Zm9udC1zaXplOjAuODc1cmVtO3BhZGRpbmc6MC41cmVtO2JvcmRlcjoxcHggc29saWQgcmVkO2JvcmRlci1yYWRpdXM6MC4yNXJlbTttYXJnaW46MC41cmVtIDA7XFxcIj5SZW5kZXIgZXJyb3I6IFwiKTsgc2FmZV9lcnI7IChTdHJpbmcgXCI8L2Rpdj5cIildKSkpKSkgZXJyIHwgXyAtPiBOaWwpKSkpOyAoU3RyaW5nIFwiPC9kaXY+XCIpXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJwb3J0YWxcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInByb21pc2UtZGVsYXllZFwiKV0pKSkgdGhlbiAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biB4IC0+IChyZW5kZXJfdG9faHRtbCAoeCkgKGVudikpKSAoc3hfdG9fbGlzdCBhcmdzKSkpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiY29udGFpbnM/XCIgW2h0bWxfdGFnc192YWw7IG5hbWVdKSkgdGhlbiAocmVuZGVyX2h0bWxfZWxlbWVudCAobmFtZSkgKGFyZ3MpIChlbnYpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCJzdGFydHMtd2l0aD9cIiBbbmFtZTsgKFN0cmluZyBcIn5cIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoZW52X2hhcyAoZW52KSAobmFtZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChpc19pc2xhbmQgKChlbnZfZ2V0IChlbnYpIChuYW1lKSkpKSkpKSB0aGVuIChyZW5kZXJfaHRtbF9pc2xhbmQgKChlbnZfZ2V0IChlbnYpIChuYW1lKSkpIChhcmdzKSAoZW52KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwic3RhcnRzLXdpdGg/XCIgW25hbWU7IChTdHJpbmcgXCJ+XCIpXSkpIHRoZW4gKGxldCB2YWwnID0gKGVudl9nZXQgKGVudikgKG5hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfY29tcG9uZW50ICh2YWwnKSkpIHRoZW4gKHJlbmRlcl9odG1sX2NvbXBvbmVudCAodmFsJykgKGFyZ3MpIChlbnYpKSBlbHNlIChpZiBzeF90cnV0aHkgKChpc19tYWNybyAodmFsJykpKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKGV4cGFuZF9tYWNybyAodmFsJykgKGFyZ3MpIChlbnYpKSkgKGVudikpIGVsc2UgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiPCEtLSB1bmtub3duIGNvbXBvbmVudDogXCIpOyBuYW1lOyAoU3RyaW5nIFwiIC0tPlwiKV0pKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChyZW5kZXJfaHRtbF9mb3JtX3AgKG5hbWUpKSkgdGhlbiAoZGlzcGF0Y2hfaHRtbF9mb3JtIChuYW1lKSAoZXhwcikgKGVudikpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGVudl9oYXMgKGVudikgKG5hbWUpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoaXNfbWFjcm8gKChlbnZfZ2V0IChlbnYpIChuYW1lKSkpKSkpIHRoZW4gKHJlbmRlcl90b19odG1sICgoZXhwYW5kX21hY3JvICgoZW52X2dldCAoZW52KSAobmFtZSkpKSAoYXJncykgKGVudikpKSAoZW52KSkgZWxzZSAocmVuZGVyX3ZhbHVlX3RvX2h0bWwgKCh0cmFtcG9saW5lICgoZXZhbF9leHByIChleHByKSAoZW52KSkpKSkgKGVudikpKSkpKSkpKSkpKSkpKSkpXG5cbigqIGRpc3BhdGNoLWh0bWwtZm9ybSAqKVxuYW5kIGRpc3BhdGNoX2h0bWxfZm9ybSBuYW1lIGV4cHIgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImlmXCIpXSkpIHRoZW4gKGxldCBjb25kX3ZhbCA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIChpZiBzeF90cnV0aHkgKGNvbmRfdmFsKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKG50aCAoZXhwcikgKChOdW1iZXIgMi4wKSkpKSAoZW52KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChleHByKSk7IChOdW1iZXIgMy4wKV0pKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKG50aCAoZXhwcikgKChOdW1iZXIgMy4wKSkpKSAoZW52KSkgZWxzZSAoU3RyaW5nIFwiXCIpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIndoZW5cIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKCh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpKSkpKSkgdGhlbiAoU3RyaW5nIFwiXCIpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoZXhwcikpOyAoTnVtYmVyIDMuMCldKSkgdGhlbiAocmVuZGVyX3RvX2h0bWwgKChudGggKGV4cHIpICgoTnVtYmVyIDIuMCkpKSkgKGVudikpIGVsc2UgKHByaW1fY2FsbCBcImpvaW5cIiBbKFN0cmluZyBcIlwiKTsgKExpc3QgKExpc3QubWFwIChmdW4gaSAtPiAocmVuZGVyX3RvX2h0bWwgKChudGggKGV4cHIpIChpKSkpIChlbnYpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMi4wKTsgKGxlbiAoZXhwcikpXSkpKSldKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImNvbmRcIildKSkgdGhlbiAobGV0IGJyYW5jaCA9IChldmFsX2NvbmQgKChyZXN0IChleHByKSkpIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5IChicmFuY2gpIHRoZW4gKHJlbmRlcl90b19odG1sIChicmFuY2gpIChlbnYpKSBlbHNlIChTdHJpbmcgXCJcIikpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJjYXNlXCIpXSkpIHRoZW4gKHJlbmRlcl90b19odG1sICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZXhwcikgKGVudikpKSkpIChlbnYpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJsZXRyZWNcIildKSkgdGhlbiAobGV0IGJpbmRpbmdzID0gKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKHByaW1fY2FsbCBcInNsaWNlXCIgW2V4cHI7IChOdW1iZXIgMi4wKV0pIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChsZXQgcG5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChwYWlyKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChwYWlyKSkpKSBlbHNlIChTdHJpbmcgKHN4X3N0ciBbKGZpcnN0IChwYWlyKSldKSkpIGluIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHBuYW1lKSBOaWwpKSkpIChzeF90b19saXN0IGJpbmRpbmdzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgobGV0IHBuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocGFpcikpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAocGFpcikpKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgWyhmaXJzdCAocGFpcikpXSkpKSBpbiAoZW52X3NldCBsb2NhbCAoc3hfdG9fc3RyaW5nIHBuYW1lKSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSAobG9jYWwpKSkpKSkpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncyk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+XCIgWyhsZW4gKGJvZHkpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKExpc3QuaXRlciAoZnVuIGUgLT4gaWdub3JlICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGxvY2FsKSkpKSkpIChzeF90b19saXN0IChpbml0IChib2R5KSkpOyBOaWwpIGVsc2UgTmlsKSkgaW4gKHJlbmRlcl90b19odG1sICgobGFzdCAoYm9keSkpKSAobG9jYWwpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJsZXRcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImxldCpcIildKSkpIHRoZW4gKGxldCBsb2NhbCA9IChwcm9jZXNzX2JpbmRpbmdzICgobnRoIChleHByKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChleHByKSk7IChOdW1iZXIgMy4wKV0pKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKG50aCAoZXhwcikgKChOdW1iZXIgMi4wKSkpKSAobG9jYWwpKSBlbHNlIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIGkgLT4gKHJlbmRlcl90b19odG1sICgobnRoIChleHByKSAoaSkpKSAobG9jYWwpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMi4wKTsgKGxlbiAoZXhwcikpXSkpKSldKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiYmVnaW5cIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRvXCIpXSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGV4cHIpKTsgKE51bWJlciAyLjApXSkpIHRoZW4gKHJlbmRlcl90b19odG1sICgobnRoIChleHByKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSBlbHNlIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIGkgLT4gKHJlbmRlcl90b19odG1sICgobnRoIChleHByKSAoaSkpKSAoZW52KSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFsoTnVtYmVyIDEuMCk7IChsZW4gKGV4cHIpKV0pKSkpXSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGRlZmluaXRpb25fZm9ybV9wIChuYW1lKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGV4cHIpIChlbnYpKSkpKSBpbiAoU3RyaW5nIFwiXCIpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXBcIildKSkgdGhlbiAobGV0IGYgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgY29sbCA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAyLjApKSkpIChlbnYpKSkpIGluIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIGl0ZW0gLT4gKGlmIHN4X3RydXRoeSAoKGlzX2xhbWJkYSAoZikpKSB0aGVuIChyZW5kZXJfbGFtYmRhX2h0bWwgKGYpICgoTGlzdCBbaXRlbV0pKSAoZW52KSkgZWxzZSAocmVuZGVyX3RvX2h0bWwgKChzeF9hcHBseSBmIChMaXN0IFtpdGVtXSkpKSAoZW52KSkpKSAoc3hfdG9fbGlzdCBjb2xsKSkpXSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkpIHRoZW4gKGxldCBmID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IGNvbGwgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMi4wKSkpKSAoZW52KSkpKSBpbiAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXBpIChmdW4gaSBpdGVtIC0+IGxldCBpID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX2xhbWJkYSAoZikpKSB0aGVuIChyZW5kZXJfbGFtYmRhX2h0bWwgKGYpICgoTGlzdCBbaTsgaXRlbV0pKSAoZW52KSkgZWxzZSAocmVuZGVyX3RvX2h0bWwgKChzeF9hcHBseSBmIChMaXN0IFtpOyBpdGVtXSkpKSAoZW52KSkpKSAoc3hfdG9fbGlzdCBjb2xsKSkpXSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZpbHRlclwiKV0pKSB0aGVuIChyZW5kZXJfdG9faHRtbCAoKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGV4cHIpIChlbnYpKSkpKSAoZW52KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZm9yLWVhY2hcIildKSkgdGhlbiAobGV0IGYgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoZXhwcikgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgY29sbCA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAyLjApKSkpIChlbnYpKSkpIGluIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIGl0ZW0gLT4gKGlmIHN4X3RydXRoeSAoKGlzX2xhbWJkYSAoZikpKSB0aGVuIChyZW5kZXJfbGFtYmRhX2h0bWwgKGYpICgoTGlzdCBbaXRlbV0pKSAoZW52KSkgZWxzZSAocmVuZGVyX3RvX2h0bWwgKChzeF9hcHBseSBmIChMaXN0IFtpdGVtXSkpKSAoZW52KSkpKSAoc3hfdG9fbGlzdCBjb2xsKSkpXSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInNjb3BlXCIpXSkpIHRoZW4gKGxldCBzY29wZV9uYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGV4cHIpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IHJlc3RfYXJncyA9IChwcmltX2NhbGwgXCJzbGljZVwiIFtleHByOyAoTnVtYmVyIDIuMCldKSBpbiBsZXQgc2NvcGVfdmFsID0gcmVmIChOaWwpIGluIGxldCBib2R5X2V4cHJzID0gcmVmIChOaWwpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChyZXN0X2FyZ3MpKTsgKE51bWJlciAyLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocmVzdF9hcmdzKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgoZmlyc3QgKHJlc3RfYXJncykpKSk7IChTdHJpbmcgXCJ2YWx1ZVwiKV0pKSkpIHRoZW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3ZhbCA6PSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAocmVzdF9hcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpOyBOaWwpKSBpbiAoYm9keV9leHBycyA6PSAocHJpbV9jYWxsIFwic2xpY2VcIiBbcmVzdF9hcmdzOyAoTnVtYmVyIDIuMCldKTsgTmlsKSkgZWxzZSAoYm9keV9leHBycyA6PSByZXN0X2FyZ3M7IE5pbCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAoc2NvcGVfbmFtZSkgKCFzY29wZV92YWwpKSkgaW4gKGxldCByZXN1bHQnID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoIWJvZHlfZXhwcnMpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKHJlbmRlcl90b19odG1sICgoZmlyc3QgKCFib2R5X2V4cHJzKSkpIChlbnYpKSBlbHNlIChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIGUgLT4gKHJlbmRlcl90b19odG1sIChlKSAoZW52KSkpIChzeF90b19saXN0ICFib2R5X2V4cHJzKSkpXSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKHNjb3BlX25hbWUpKSkgaW4gcmVzdWx0JykpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInByb3ZpZGVcIildKSkgdGhlbiAobGV0IHByb3ZfbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIGxldCBwcm92X3ZhbCA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChleHByKSAoKE51bWJlciAyLjApKSkpIChlbnYpKSkpIGluIGxldCBib2R5X3N0YXJ0ID0gKE51bWJlciAzLjApIGluIGxldCBib2R5X2NvdW50ID0gKHByaW1fY2FsbCBcIi1cIiBbKGxlbiAoZXhwcikpOyAoTnVtYmVyIDMuMCldKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAocHJvdl9uYW1lKSAocHJvdl92YWwpKSkgaW4gKGxldCByZXN1bHQnID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbYm9keV9jb3VudDsgKE51bWJlciAxLjApXSkpIHRoZW4gKHJlbmRlcl90b19odG1sICgobnRoIChleHByKSAoYm9keV9zdGFydCkpKSAoZW52KSkgZWxzZSAocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBpIC0+IChyZW5kZXJfdG9faHRtbCAoKG50aCAoZXhwcikgKGkpKSkgKGVudikpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbYm9keV9zdGFydDsgKHByaW1fY2FsbCBcIitcIiBbYm9keV9zdGFydDsgYm9keV9jb3VudF0pXSkpKSldKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAocHJvdl9uYW1lKSkpIGluIHJlc3VsdCcpKSkpIGVsc2UgKHJlbmRlcl92YWx1ZV90b19odG1sICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZXhwcikgKGVudikpKSkpIChlbnYpKSkpKSkpKSkpKSkpKSkpXG5cbigqIHJlbmRlci1sYW1iZGEtaHRtbCAqKVxuYW5kIHJlbmRlcl9sYW1iZGFfaHRtbCBmIGFyZ3MgZW52ID1cbiAgKGxldCBsb2NhbCA9IChlbnZfbWVyZ2UgKChsYW1iZGFfY2xvc3VyZSAoZikpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGZvcl9lYWNoX2luZGV4ZWQgKChOYXRpdmVGbiAoXCJcXDIwNlxcMTg3XCIsIGZ1biBfYXJncyAtPiBtYXRjaCBfYXJncyB3aXRoIFtpOyBwXSAtPiAoZnVuIGkgcCAtPiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSAobnRoIChhcmdzKSAoaSkpKSkgaSBwIHwgXyAtPiBOaWwpKSkgKChsYW1iZGFfcGFyYW1zIChmKSkpKSkgaW4gKHJlbmRlcl90b19odG1sICgobGFtYmRhX2JvZHkgKGYpKSkgKGxvY2FsKSkpKVxuXG4oKiByZW5kZXItaHRtbC1jb21wb25lbnQgKilcbmFuZCByZW5kZXJfaHRtbF9jb21wb25lbnQgY29tcCBhcmdzIGVudiA9XG4gIChsZXQga3dhcmdzID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiBsZXQgY2hpbGRyZW4gPSByZWYgKChMaXN0IFtdKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuZm9sZF9sZWZ0IChmdW4gc3RhdGUgYXJnIC0+IChsZXQgc2tpcCA9IChnZXQgKHN0YXRlKSAoKFN0cmluZyBcInNraXBcIikpKSBpbiAoaWYgc3hfdHJ1dGh5IChza2lwKSB0aGVuIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcInNraXBcIik7IChCb29sIGZhbHNlKTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaVwiKSkpXSldKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChhcmcpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPFwiIFsocHJpbV9jYWxsIFwiaW5jXCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKV0pOyAobGVuIChhcmdzKSldKSkpIHRoZW4gKGxldCB2YWwnID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgocHJpbV9jYWxsIFwiaW5jXCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKV0pKSkpIChlbnYpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIGt3YXJncyAoa2V5d29yZF9uYW1lIChhcmcpKSB2YWwnKSkgaW4gKHByaW1fY2FsbCBcImFzc29jXCIgW3N0YXRlOyAoU3RyaW5nIFwic2tpcFwiKTsgKEJvb2wgdHJ1ZSk7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKV0pXSkpKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChjaGlsZHJlbiA6PSBzeF9hcHBlbmRfYiAhY2hpbGRyZW4gYXJnOyBOaWwpKSBpbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgWyhnZXQgKHN0YXRlKSAoKFN0cmluZyBcImlcIikpKV0pXSkpKSkpKSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgX2QgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwiaVwiKSkgKE51bWJlciAwLjApOyBIYXNodGJsLnJlcGxhY2UgX2QgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwic2tpcFwiKSkgKEJvb2wgZmFsc2UpOyAgRGljdCBfZCkgKHN4X3RvX2xpc3QgYXJncykpKSBpbiAobGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGNvbXBvbmVudF9jbG9zdXJlIChjb21wKSkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIChpZiBzeF90cnV0aHkgKChkaWN0X2hhcyAoa3dhcmdzKSAocCkpKSB0aGVuIChkaWN0X2dldCAoa3dhcmdzKSAocCkpIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAoY29tcG9uZW50X3BhcmFtcyAoY29tcCkpKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGNvbXBvbmVudF9oYXNfY2hpbGRyZW4gKGNvbXApKSkgdGhlbiAoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiY2hpbGRyZW5cIikpIChtYWtlX3Jhd19odG1sICgocHJpbV9jYWxsIFwiam9pblwiIFsoU3RyaW5nIFwiXCIpOyAoTGlzdCAoTGlzdC5tYXAgKGZ1biBjIC0+IChyZW5kZXJfdG9faHRtbCAoYykgKGVudikpKSAoc3hfdG9fbGlzdCAhY2hpbGRyZW4pKSldKSkpKSBlbHNlIE5pbCkpIGluIChyZW5kZXJfdG9faHRtbCAoKGNvbXBvbmVudF9ib2R5IChjb21wKSkpIChsb2NhbCkpKSkpKSlcblxuKCogcmVuZGVyLWh0bWwtZWxlbWVudCAqKVxuYW5kIHJlbmRlcl9odG1sX2VsZW1lbnQgdGFnIGFyZ3MgZW52ID1cbiAgKGxldCBwYXJzZWQgPSAocGFyc2VfZWxlbWVudF9hcmdzIChhcmdzKSAoZW52KSkgaW4gbGV0IGF0dHJzID0gKGZpcnN0IChwYXJzZWQpKSBpbiBsZXQgY2hpbGRyZW4gPSAobnRoIChwYXJzZWQpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgaXNfdm9pZCA9IChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbdm9pZF9lbGVtZW50c192YWw7IHRhZ10pIGluIChpZiBzeF90cnV0aHkgKGlzX3ZvaWQpIHRoZW4gKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiPFwiKTsgdGFnOyAocmVuZGVyX2F0dHJzIChhdHRycykpOyAoU3RyaW5nIFwiIC8+XCIpXSkpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3B1c2ggKChTdHJpbmcgXCJlbGVtZW50LWF0dHJzXCIpKSAoTmlsKSkpIGluIChsZXQgY29udGVudCA9IChwcmltX2NhbGwgXCJqb2luXCIgWyhTdHJpbmcgXCJcIik7IChMaXN0IChMaXN0Lm1hcCAoZnVuIGMgLT4gKHJlbmRlcl90b19odG1sIChjKSAoZW52KSkpIChzeF90b19saXN0IGNoaWxkcmVuKSkpXSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHNwcmVhZF9kaWN0IC0+IGlnbm9yZSAoKG1lcmdlX3NwcmVhZF9hdHRycyAoYXR0cnMpIChzcHJlYWRfZGljdCkpKSkgKHN4X3RvX2xpc3QgKHNjb3BlX2VtaXR0ZWQgKChTdHJpbmcgXCJlbGVtZW50LWF0dHJzXCIpKSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcG9wICgoU3RyaW5nIFwiZWxlbWVudC1hdHRyc1wiKSkpKSBpbiAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCI8XCIpOyB0YWc7IChyZW5kZXJfYXR0cnMgKGF0dHJzKSk7IChTdHJpbmcgXCI+XCIpOyBjb250ZW50OyAoU3RyaW5nIFwiPC9cIik7IHRhZzsgKFN0cmluZyBcIj5cIildKSkpKSkpKSlcblxuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFdpcmUgdXAgZm9yd2FyZCByZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCAoKSA9IHJlbmRlcl90b19odG1sX3JlZiA6PSByZW5kZXJfdG9faHRtbFxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBCdWZmZXItYmFzZWQgc3RyZWFtaW5nIHJlbmRlcmVyIOKAlCB6ZXJvIGludGVybWVkaWF0ZSBzdHJpbmcgYWxsb2NhdGlvbiAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqKiBFc2NhcGUgSFRNTCBkaXJlY3RseSBpbnRvIGEgYnVmZmVyLiAqKVxubGV0IGVzY2FwZV9odG1sX2J1ZiBidWYgcyA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICB8ICcmJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImYW1wO1wiXG4gICAgfCAnPCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJmx0O1wiXG4gICAgfCAnPicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJmd0O1wiXG4gICAgfCAnXCInIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZxdW90O1wiXG4gICAgfCBjIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgY1xuICBkb25lXG5cbmxldCByZW5kZXJfYXR0cnNfYnVmIGJ1ZiBhdHRycyA9XG4gIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPlxuICAgIGlmIGlzX2Jvb2xlYW5fYXR0ciBrIHRoZW4gYmVnaW5cbiAgICAgIGlmIHN4X3RydXRoeSB2IHRoZW4gYmVnaW5cbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBrXG4gICAgICBlbmRcbiAgICBlbmQgZWxzZSBpZiB2IDw+IE5pbCB0aGVuIGJlZ2luXG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICcgJztcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBrO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiPVxcXCJcIjtcbiAgICAgIGVzY2FwZV9odG1sX2J1ZiBidWYgKHZhbHVlX3RvX3N0cmluZyB2KTtcbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuICAgIGVuZCkgYXR0cnNcblxuKCoqIFJlbmRlciB0byBwcmUtYWxsb2NhdGVkIGJ1ZmZlciDigJQgZGVsZWdhdGVzIHRvIHRyYW5zcGlsZWQgcmVuZGVyX3RvX2h0bWxcbiAgICBhbmQgZXh0cmFjdHMgdGhlIHN0cmluZyByZXN1bHQuICopXG5sZXQgcmVuZGVyX3RvX2J1ZiBidWYgZXhwciAoZW52IDogZW52KSA9XG4gIG1hdGNoICFyZW5kZXJfdG9faHRtbF9yZWYgZXhwciAoRW52IGVudikgd2l0aFxuICB8IFN0cmluZyBzIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gIHwgUmF3SFRNTCBzIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gIHwgdiAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHZhbHVlX3RvX3N0ciB2KVxuXG4oKiogUHVibGljIEFQSTogcmVuZGVyIHRvIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIuICopXG5sZXQgcmVuZGVyX3RvX2J1ZmZlciBidWYgZXhwciBlbnYgPSByZW5kZXJfdG9fYnVmIGJ1ZiBleHByIGVudlxuXG4oKiogQ29udmVuaWVuY2U6IHJlbmRlciB0byBzdHJpbmcuICopXG5sZXQgcmVuZGVyX3RvX2h0bWxfc3RyZWFtaW5nIGV4cHIgKGVudiA6IGVudikgPVxuICBtYXRjaCAhcmVuZGVyX3RvX2h0bWxfcmVmIGV4cHIgKEVudiBlbnYpIHdpdGhcbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgUmF3SFRNTCBzIC0+IHNcbiAgfCB2IC0+IHZhbHVlX3RvX3N0ciB2XG5cbigqKiBUaGUgbmF0aXZlIE9DYW1sIHJlbmRlcmVyIOKAlCB1c2VkIGJ5IHN4X3NlcnZlciB3aGVuIFNYIGFkYXB0ZXIgaXNuJ3QgbG9hZGVkLiAqKVxubGV0IGRvX3JlbmRlcl90b19odG1sIGV4cHIgKGVudl92YWwgOiB2YWx1ZSkgPVxuICBtYXRjaCAhcmVuZGVyX3RvX2h0bWxfcmVmIGV4cHIgZW52X3ZhbCB3aXRoXG4gIHwgU3RyaW5nIHMgLT4gc1xuICB8IFJhd0hUTUwgcyAtPiBzXG4gIHwgdiAtPiB2YWx1ZV90b19zdHIgdlxuXG4oKiogUmVuZGVyIHZpYSB0aGUgU1ggYWRhcHRlciAocmVuZGVyLXRvLWh0bWwgZnJvbSBhZGFwdGVyLWh0bWwuc3gpLlxuICAgIEZhbGxzIGJhY2sgdG8gdGhlIG5hdGl2ZSByZWYgaWYgdGhlIFNYIGFkYXB0ZXIgaXNuJ3QgbG9hZGVkLiAqKVxubGV0IHN4X3JlbmRlcl90b19odG1sIChyZW5kZXJfZW52IDogZW52KSBleHByIChldmFsX2VudiA6IGVudikgPVxuICBpZiBTeF90eXBlcy5lbnZfaGFzIHJlbmRlcl9lbnYgXCJyZW5kZXItdG8taHRtbFwiIHRoZW5cbiAgICBsZXQgZm4gPSBTeF90eXBlcy5lbnZfZ2V0IHJlbmRlcl9lbnYgXCJyZW5kZXItdG8taHRtbFwiIGluXG4gICAgbGV0IHJlc3VsdCA9IFN4X3JlZi5jZWtfY2FsbCBmbiAoTGlzdCBbZXhwcjsgRW52IGV2YWxfZW52XSkgaW5cbiAgICBtYXRjaCByZXN1bHQgd2l0aCBTdHJpbmcgcyAtPiBzIHwgUmF3SFRNTCBzIC0+IHMgfCBfIC0+IHZhbHVlX3RvX3N0ciByZXN1bHRcbiAgZWxzZVxuICAgIGRvX3JlbmRlcl90b19odG1sIGV4cHIgKEVudiBldmFsX2VudilcblxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBTZXR1cCDigJQgYmluZCByZW5kZXIgcHJpbWl0aXZlcyBpbiBhbiBlbnYgYW5kIHdpcmUgdXAgdGhlIHJlZiAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCBpc19odG1sX3RhZyBuYW1lID0gTGlzdC5tZW0gbmFtZSBodG1sX3RhZ3NfbGlzdFxubGV0IGlzX3ZvaWQgbmFtZSA9IExpc3QubWVtIG5hbWUgdm9pZF9lbGVtZW50c19saXN0XG5cbigqIGVzY2FwZV9odG1sX3N0cjogdGFrZXMgcmF3IE9DYW1sIHN0cmluZywgcmV0dXJucyByYXcgc3RyaW5nIOKAlCBmb3IgY2FsbGVycyAqKVxubGV0IGVzY2FwZV9odG1sX3N0ciA9IGVzY2FwZV9odG1sX3Jhd1xuXG5sZXQgc2V0dXBfcmVuZGVyX2VudiAocmF3X2VudiA6IGVudikgPVxuICBsZXQgZW52ID0gRW52IHJhd19lbnYgaW5cbiAgbGV0IGJpbmQgbmFtZSBmbiA9XG4gICAgaWdub3JlIChTeF90eXBlcy5lbnZfYmluZCByYXdfZW52IG5hbWUgKE5hdGl2ZUZuIChuYW1lLCBmbikpKVxuICBpblxuXG4gIGJpbmQgXCJyZW5kZXItaHRtbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmNdIC0+XG4gICAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgICAgbGV0IGV4cHIgPSBtYXRjaCBleHBycyB3aXRoXG4gICAgICAgIHwgW2VdIC0+IGVcbiAgICAgICAgfCBbXSAtPiBOaWxcbiAgICAgICAgfCBfIC0+IExpc3QgKFN5bWJvbCBcImRvXCIgOjogZXhwcnMpXG4gICAgICBpblxuICAgICAgIXJlbmRlcl90b19odG1sX3JlZiBleHByIGVudlxuICAgIHwgW2V4cHJdIC0+XG4gICAgICAhcmVuZGVyX3RvX2h0bWxfcmVmIGV4cHIgZW52XG4gICAgfCBbZXhwcjsgRW52IGVdIC0+XG4gICAgICAhcmVuZGVyX3RvX2h0bWxfcmVmIGV4cHIgKEVudiBlKVxuICAgIHwgXyAtPiBTdHJpbmcgXCJcIik7XG5cbiAgYmluZCBcInJlbmRlci10by1odG1sXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNyY10gLT5cbiAgICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgICBsZXQgZXhwciA9IG1hdGNoIGV4cHJzIHdpdGhcbiAgICAgICAgfCBbZV0gLT4gZVxuICAgICAgICB8IFtdIC0+IE5pbFxuICAgICAgICB8IF8gLT4gTGlzdCAoU3ltYm9sIFwiZG9cIiA6OiBleHBycylcbiAgICAgIGluXG4gICAgICAhcmVuZGVyX3RvX2h0bWxfcmVmIGV4cHIgZW52XG4gICAgfCBbZXhwcl0gLT5cbiAgICAgICFyZW5kZXJfdG9faHRtbF9yZWYgZXhwciBlbnZcbiAgICB8IFtleHByOyBFbnYgZV0gLT5cbiAgICAgICFyZW5kZXJfdG9faHRtbF9yZWYgZXhwciAoRW52IGUpXG4gICAgfCBfIC0+IFN0cmluZyBcIlwiKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2VxdWFsIiwiY2FtbF9saXN0X29mX2pzX2FycmF5IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwyIiwiZiIsImEwIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsImJvb2xlYW5fYXR0cnNfc2V0IiwiY3N0X2JyIiwiY3N0X2NvbCIsImNzdF9maWx0ZXIiLCJjc3RfaHIiLCJjc3RfaSIsImNzdF9pbWciLCJjc3RfaW5wdXQiLCJjc3RfbGluayIsImNzdF9tZXRhIiwiY3N0X3NvdXJjZSIsImNzdF9zdHlsZSIsImNzdF93YnIiLCJodG1sX3RhZ3NfbGlzdCIsInZvaWRfZWxlbWVudHNfbGlzdCIsImNzdF9iZWdpbiIsImNzdF9jYXNlIiwiY3N0X2NvbmQiLCJjc3RfZGVmY29tcCIsImNzdF9kZWZlZmZlY3QiLCJjc3RfZGVmaW5lIiwiY3N0X2RlZmlzbGFuZCIsImNzdF9kZWZtYWNybyIsImNzdF9kZWZzdHlsZSIsImNzdF9kZWZ0eXBlIiwiY3N0X2RvIiwiY3N0X2Zvcl9lYWNoIiwiY3N0X2lmIiwiY3N0X2xldCIsImNzdF9sZXRyZWMiLCJjc3RfbWFwIiwiY3N0X21hcF9pbmRleGVkIiwiY3N0X3Byb3ZpZGUiLCJjc3Rfc2NvcGUiLCJjc3Rfd2hlbiIsInJlbmRlcl9odG1sX2Zvcm1zIiwiU3hfcnVudGltZSIsIlN4X3R5cGVzIiwiU3RkbGliX0hhc2h0YmwiLCJTdGRsaWJfTGlzdCIsIlN4X3BhcnNlciIsIlN4X3JlZiIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfU3RyaW5nIiwiU3hfdm0iLCJTdGRsaWJfUHJpbnRleGMiLCJldmFsX2V4cHIiLCJleHByIiwiZW52IiwiY29uZF9zY2hlbWVfcCIsImNzdCIsInJhd19odG1sX2NvbnRlbnQiLCJ2IiwicyIsIm1ha2VfcmF3X2h0bWwiLCJzY29wZV9lbWl0IiwidjEiLCJ2MiIsImluaXQiLCJkaWN0X2hhcyIsImEiLCJiIiwiZGljdF9nZXQiLCJpc19jb21wb25lbnQiLCJpc19pc2xhbmQiLCJpc19tYWNybyIsImlzX2xhbWJkYSIsImlzX25pbCIsInJlbmRlcl9odG1sX2xha2VfcmVmIiwicGFyYW0iLCJyZW5kZXJfaHRtbF9tYXJzaF9yZWYiLCJyZW5kZXJfaHRtbF9pc2xhbmRfcmVmIiwicmVuZGVyX2h0bWxfbGFrZSIsImFyZ3MiLCJyZW5kZXJfaHRtbF9tYXJzaCIsInJlbmRlcl9odG1sX2lzbGFuZCIsImNvbXAiLCJjZWtfY2FsbCIsInRyYW1wb2xpbmUiLCJleHBhbmRfbWFjcm8iLCJtIiwiYXJnc192YWwiLCJtYWMiLCJsb2NhbCIsInBzIiwicCIsImFzIiwibWF0Y2giLCJycCIsInBzX3Jlc3QiLCJhc19yZXN0IiwidHJ5X2NhdGNoIiwidHJ5X2ZuIiwiY2F0Y2hfZm4iLCJlIiwibXNnIiwic2V0X3JlbmRlcl9hY3RpdmVfYiIsImlzX2Jvb2xlYW5fYXR0ciIsIm5hbWUiLCJodG1sX3RhZ3NfdmFsIiwidm9pZF9lbGVtZW50c192YWwiLCJib29sZWFuX2F0dHJzX3ZhbCIsImNzdF9hbXAiLCJjc3RfZ3QiLCJjc3RfbHQiLCJjc3RfcXVvdCIsImVzY2FwZV9odG1sX3JhdyIsImJ1ZiIsImMiLCJlc2NhcGVfaHRtbF92YWwiLCJlc2NhcGVfYXR0cl92YWwiLCJyZW5kZXJfYXR0cnMiLCJhdHRycyIsImQiLCJrIiwicmVuZGVyX3RvX2h0bWxfcmVmIiwic2NvcGVfZW1pdHRlZCIsImNzdF9jb250YWlucyIsImRlZmluaXRpb25fZm9ybV9leHRlbnNpb25zIiwiZGVmaW5pdGlvbl9mb3JtX3AiLCJvciIsImNzdF9hc3NvYyIsImNzdF9pbmMiLCJjc3Rfa2V5d29yZCIsImNzdF9za2lwIiwicGFyc2VfZWxlbWVudF9hcmdzIiwiY2hpbGRyZW4iLCJzdGF0ZSIsImFyZyIsInNraXAiLCJhbmQiLCJ2YWwiLCJldmFsX2NvbmQiLCJjbGF1c2VzIiwiZXZhbF9jb25kX3NjaGVtZSIsImNsYXVzZSIsInRlc3QiLCJib2R5IiwiY3N0X3NsaWNlIiwiZXZhbF9jb25kX2Nsb2p1cmUiLCJjc3RfbGlzdCIsImNzdF9zeW1ib2wiLCJwcm9jZXNzX2JpbmRpbmdzIiwiYmluZGluZ3MiLCJwYWlyIiwiY3N0X3JhdyIsImNzdF9zdGFydHNfd2l0aCIsImlzX3JlbmRlcl9leHByX3AiLCJoIiwibiIsImNzdF9jbGFzcyIsIm1lcmdlX3NwcmVhZF9hdHRycyIsInRhcmdldCIsInNwcmVhZF9kaWN0Iiwia2V5IiwiZXhpc3RpbmciLCJjc3RfYm9vbGVhbiIsImNzdF9lbGVtZW50X2F0dHJzIiwiY3N0X2ZhbHNlIiwiY3N0X25pbCIsImNzdF9udW1iZXIiLCJjc3RfcmF3X2h0bWwiLCJjc3Rfc3ByZWFkIiwiY3N0X3N0cmluZyIsImNzdF90aHVuayIsImNzdF90cnVlIiwicmVuZGVyX3RvX2h0bWwiLCJjb3VudGVyIiwibWF0Y2hfdmFsIiwicmVuZGVyX3ZhbHVlX3RvX2h0bWwiLCJyZW5kZXJfaHRtbF9mb3JtX3AiLCJjc3RfZGl2IiwiY3N0X2Rpdl9jbGFzc19zeF9yZW5kZXJfZXJyb3JfIiwiY3N0X2pvaW4iLCJyZW5kZXJfbGlzdF90b19odG1sIiwiaGVhZCIsIngiLCJoYXNfZmFsbGJhY2siLCJib2R5X2V4cHJzIiwiZmFsbGJhY2tfZXhwciIsImVyciIsImNzdF9yZXBsYWNlIiwic2FmZV9lcnIiLCJib2R5X3N0YXJ0IiwiZGlzcGF0Y2hfaHRtbF9mb3JtIiwiY29uZF92YWwiLCJjc3RfcmFuZ2UiLCJpIiwiYnJhbmNoIiwicG5hbWUiLCJjb2xsIiwiaXRlbSIsInByb3ZfbmFtZSIsInByb3ZfdmFsIiwiYm9keV9jb3VudCIsInJlc3VsdCIsInNjb3BlX25hbWUiLCJyZXN0X2FyZ3MiLCJzY29wZV92YWwiLCJyZW5kZXJfbGFtYmRhX2h0bWwiLCJyZW5kZXJfaHRtbF9jb21wb25lbnQiLCJrd2FyZ3MiLCJyZW5kZXJfaHRtbF9lbGVtZW50IiwidGFnIiwicGFyc2VkIiwiaXNfdm9pZCIsImNvbnRlbnQiLCJlc2NhcGVfaHRtbF9idWYiLCJyZW5kZXJfYXR0cnNfYnVmIiwicmVuZGVyX3RvX2J1ZiIsInJlbmRlcl90b19idWZmZXIiLCJyZW5kZXJfdG9faHRtbF9zdHJlYW1pbmciLCJkb19yZW5kZXJfdG9faHRtbCIsImVudl92YWwiLCJjc3RfcmVuZGVyX3RvX2h0bWwiLCJzeF9yZW5kZXJfdG9faHRtbCIsInJlbmRlcl9lbnYiLCJldmFsX2VudiIsImZuIiwiaXNfaHRtbF90YWciLCJzZXR1cF9yZW5kZXJfZW52IiwicmF3X2VudiIsImJpbmQiLCJzcmMiLCJleHBycyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUMsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFILEdBQUFDLElBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQztBQUFBQSxNQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJ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O0FBQUEsRUQxSDdFIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NjYxMzAsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvb19ydW50aW1lLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiXSwibmFtZXMiOlsicnVudGltZSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUEiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo2NjE0MywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJqc29vX3J1bnRpbWUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9qc19vZl9vY2FtbC1jb21waWxlci9ydW50aW1lL2pzb29fcnVudGltZS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIEpzX29mX29jYW1sIGxpYnJhcnlcbiAqIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbiAqIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuICopXG5cbm1vZHVsZSBKcyA9IHN0cnVjdFxuICB0eXBlIHRcblxuICB0eXBlICdhIGpzX2FycmF5ID0gdFxuXG4gIHR5cGUgKCdhLCAnYikgbWV0aF9jYWxsYmFjayA9IHRcblxuICBleHRlcm5hbCBzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX3N0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgYnl0ZXN0cmluZyA6IHN0cmluZyAtPiB0ID0gXCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19ieXRlc3RyaW5nIDogdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcIlxuXG4gIGV4dGVybmFsIGJvb2wgOiBib29sIC0+IHQgPSBcImNhbWxfanNfZnJvbV9ib29sXCJcblxuICBleHRlcm5hbCB0b19ib29sIDogdCAtPiBib29sID0gXCJjYW1sX2pzX3RvX2Jvb2xcIlxuXG4gIGV4dGVybmFsIGFycmF5IDogJ2EgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2FycmF5XCJcblxuICBleHRlcm5hbCB0b19hcnJheSA6IHQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfanNfdG9fYXJyYXlcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9mbG9hdCA6IGZsb2F0IC0+IHQgPSBcImNhbWxfanNfZnJvbV9mbG9hdFwiXG5cbiAgZXh0ZXJuYWwgZmxvYXRfb2ZfbnVtYmVyIDogdCAtPiBmbG9hdCA9IFwiY2FtbF9qc190b19mbG9hdFwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX2ludDMyIDogaW50MzIgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2ludDMyXCJcblxuICBleHRlcm5hbCBpbnQzMl9vZl9udW1iZXIgOiB0IC0+IGludDMyID0gXCJjYW1sX2pzX3RvX2ludDMyXCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfbmF0aXZlaW50IDogbmF0aXZlaW50IC0+IHQgPSBcImNhbWxfanNfZnJvbV9uYXRpdmVpbnRcIlxuXG4gIGV4dGVybmFsIG5hdGl2ZWludF9vZl9udW1iZXIgOiB0IC0+IG5hdGl2ZWludCA9IFwiY2FtbF9qc190b19uYXRpdmVpbnRcIlxuXG4gIGV4dGVybmFsIHR5cGVvZiA6IHQgLT4gdCA9IFwiY2FtbF9qc190eXBlb2ZcIlxuXG4gIGV4dGVybmFsIGluc3RhbmNlb2YgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19pbnN0YW5jZW9mXCJcblxuICBleHRlcm5hbCBkZWJ1Z2dlciA6IHVuaXQgLT4gdW5pdCA9IFwiZGVidWdnZXJcIlxuXG4gIGV4dGVybmFsIGdldCA6IHQgLT4gdCAtPiB0ID0gXCJjYW1sX2pzX2dldFwiXG5cbiAgZXh0ZXJuYWwgc2V0IDogdCAtPiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19zZXRcIlxuXG4gIGV4dGVybmFsIGRlbGV0ZSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2pzX2RlbGV0ZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbCA6IHQgLT4gdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfY2FsbFwiXG5cbiAgZXh0ZXJuYWwgZnVuX2NhbGwgOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19mdW5fY2FsbFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsIDogdCAtPiBzdHJpbmcgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX21ldGhfY2FsbFwiXG5cbiAgZXh0ZXJuYWwgbmV3X29iaiA6IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX25ld1wiXG5cbiAgZXh0ZXJuYWwgbmV3X29ial9hcnIgOiB0IC0+IHQganNfYXJyYXkgLT4gdCA9IFwiY2FtbF9vanNfbmV3X2FyclwiXG5cbiAgZXh0ZXJuYWwgb2JqIDogKHN0cmluZyAqIHQpIGFycmF5IC0+IHQgPSBcImNhbWxfanNfb2JqZWN0XCJcblxuICBleHRlcm5hbCBlcXVhbHMgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcblxuICBleHRlcm5hbCBwdXJlX2V4cHIgOiAodW5pdCAtPiAnYSkgLT4gJ2EgPSBcImNhbWxfanNfcHVyZV9leHByXCJcblxuICBleHRlcm5hbCBldmFsX3N0cmluZyA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19ldmFsX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwganNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19leHByXCJcblxuICBleHRlcm5hbCBwdXJlX2pzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfcHVyZV9qc19leHByXCJcblxuICBleHRlcm5hbCBjYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlXCJcblxuICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgKHQganNfYXJyYXkgLT4gJ2IpIC0+ICgnYywgdCBqc19hcnJheSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3RcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICgnYiAtPiB0IGpzX2FycmF5IC0+ICdhKSAtPiAoJ2IsIHQganNfYXJyYXkgLT4gJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICBleHRlcm5hbCB3cmFwX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9tZXRoX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrXCJcblxuICBleHRlcm5hbCBydW50aW1lX3ZhbHVlIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzb29fcnVudGltZV92YWx1ZVwiXG4gICgqKiBbcnVudGltZV92YWx1ZSBcIkZPT1wiXSByZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHZhbHVlIEZPTyBwcm92aWRlZCBieSB0aGUgSmF2YVNjcmlwdCBydW50aW1lICh3aXRoICcvL1Byb3ZpZGVzOiBGT08nKS4gVGhlIHN0cmluZyBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIGxpdGVyYWwuICopXG5cbiAgZXh0ZXJuYWwgY3VzdG9tX2lkZW50aWZpZXIgOiBPYmoudCAtPiBzdHJpbmcgPSBcImNhbWxfY3VzdG9tX2lkZW50aWZpZXJcIlxuZW5kXG5cbm1vZHVsZSBTeXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBjYWxsYmFjayA9ICdhXG5cbiAgZXh0ZXJuYWwgY3JlYXRlX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBjb250ZW50OnN0cmluZyAtPiB1bml0ID0gXCJjYW1sX2NyZWF0ZV9maWxlXCJcblxuICBleHRlcm5hbCByZWFkX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfcmVhZF9maWxlX2NvbnRlbnRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX291dHB1dCcgOiBvdXRfY2hhbm5lbCAtPiAoanNfc3RyaW5nOkpzLnQgLT4gdW5pdCkgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfaW5wdXQnIDogaW5fY2hhbm5lbCAtPiAodW5pdCAtPiBzdHJpbmcpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcIlxuXG4gIGV4dGVybmFsIG1vdW50X3BvaW50IDogdW5pdCAtPiBzdHJpbmcgbGlzdCA9IFwiY2FtbF9saXN0X21vdW50X3BvaW50XCJcblxuICBleHRlcm5hbCBtb3VudF9hdXRvbG9hZCA6IHN0cmluZyAtPiAoc3RyaW5nIC0+IHN0cmluZyAtPiBzdHJpbmcgb3B0aW9uKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbW91bnRfYXV0b2xvYWRcIlxuXG4gIGV4dGVybmFsIHVubW91bnQgOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF91bm1vdW50XCJcblxuICB0eXBlIHJlZGlyZWN0aW9uXG5cbiAgZXh0ZXJuYWwgcmVkaXJlY3RfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IGludG86b3V0X2NoYW5uZWwgLT4gcmVkaXJlY3Rpb25cbiAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XCJcblxuICBleHRlcm5hbCByZXN0b3JlX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiByZWRpcmVjdGlvbiAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfY2hhbm5lbF9yZXN0b3JlXCJcblxuICBtb2R1bGUgQ29uZmlnID0gc3RydWN0XG4gICAgZXh0ZXJuYWwgdXNlX2pzX3N0cmluZyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmdcIlxuXG4gICAgdHlwZSBlZmZlY3RzX2JhY2tlbmQgPVxuICAgICAgWyBgRGlzYWJsZWRcbiAgICAgIHwgYENwc1xuICAgICAgfCBgRG91YmxlX3RyYW5zbGF0aW9uXG4gICAgICBdXG5cbiAgICBleHRlcm5hbCBlZmZlY3RzXyA6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1wiXG5cbiAgICBsZXQgZWZmZWN0cyAoKSA9XG4gICAgICBtYXRjaCBlZmZlY3RzXyAoKSB3aXRoXG4gICAgICB8IFwiZGlzYWJsZWRcIiAtPiBgRGlzYWJsZWRcbiAgICAgIHwgXCJjcHNcIiAtPiBgQ3BzXG4gICAgICB8IFwiZG91YmxlLXRyYW5zbGF0aW9uXCIgLT4gYERvdWJsZV90cmFuc2xhdGlvblxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICBlbmRcblxuICBsZXQgdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5zXG5cbiAgbGV0IGdpdF92ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLmdpdF92ZXJzaW9uXG5lbmRcblxubW9kdWxlIEVycm9yIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCByYWlzZV8gOiB0IC0+ICdhXG5cbiAgdmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG5cbiAgKCoqIEF0dGFjaCBhIEphdmFTY3JpcHQgZXJyb3IgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLiAgaWYgW2ZvcmNlID0gZmFsc2VdIGFuZCBhXG4gICAgSmF2YVNjcmlwdCBlcnJvciBpcyBhbHJlYWR5IGF0dGFjaGVkLCBpdCB3aWxsIGRvIG5vdGhpbmcuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHRvXG4gICAgc3RvcmUgYW5kIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IEphdmFTY3JpcHQgc3RhY2sgdHJhY2VzLlxuXG4gICAgQXR0YWNoaW5nIEphdmFTY3JpcHQgZXJyb3JzIHdpbGwgaGFwcGVuIGF1dG9tYXRpY2FsbHkgd2hlbiBjb21waWxpbmcgd2l0aFxuICAgIFstLWVuYWJsZSB3aXRoLWpzLWVycm9yXS4gKilcblxuICB2YWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uXG4gICgqKiBFeHRyYWN0IGEgSmF2YVNjcmlwdCBlcnJvciBhdHRhY2hlZCB0byBhbiBPQ2FtbCBleGNlcHRpb24sIGlmIGFueS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICAgICBpbnNwZWN0IGFuIGV2ZW50dWFsIHN0YWNrIHRyYWNlLCBlc3BlY2lhbGx5IHdoZW4gc291cmNlbWFwIGlzIGVuYWJsZWQuICopXG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG4gICgqKiBUaGUgW0Vycm9yXSBleGNlcHRpb24gd3JhcCBqYXZhc2NyaXB0IGV4Y2VwdGlvbnMgd2hlbiBjYXVnaHQgYnkgT0NhbWwgY29kZS5cbiAgICAgIEluIGNhc2UgdGhlIGphdmFzY3JpcHQgZXhjZXB0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBqYXZhc2NyaXB0IFtFcnJvcl0sXG4gICAgICBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYW5kIHdyYXBwZWQgaW50byBhIFtGYWlsdXJlXSBleGNlcHRpb24uXG4gICopXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG5cbiAgbGV0IF8gPSBDYWxsYmFjay5yZWdpc3Rlcl9leGNlcHRpb24gXCJqc0Vycm9yXCIgKEV4biAoT2JqLm1hZ2ljIFt8fF0pKVxuXG4gIGV4dGVybmFsIHJhaXNlXyA6IHQgLT4gJ2EgPSBcImNhbWxfdGhyb3dfanNfZXhjZXB0aW9uXCJcblxuICBleHRlcm5hbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb24gPSBcImNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvblwiXG5cbiAgZXh0ZXJuYWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4biA9IFwiY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2VcIlxuZW5kXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyLTYwXCJdXG5cbm1vZHVsZSBGb3JfY29tcGF0aWJpbGl0eV9vbmx5ID0gc3RydWN0XG4gICgqIEFkZCBwcmltaXRpdmVzIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIEV4aXN0aW5nIHVzZXJzIG1pZ2h0XG4gICAgIGRlcGVuZCBvbiBpdCAoZS5nLiBnZW5fanNfYXBpKSwgd2UgZG9uJ3Qgd2FudCB0aGUgb2NhbWwgY29tcGlsZXJcbiAgICAgdG8gY29tcGxhaW4gYWJvdXQgdGhlc2UgbWlzc2luZyBwcmltaXRpdmVzLiAqKVxuXG4gIGV4dGVybmFsIGNhbWxfanNfZnJvbV9zdHJpbmcgOiBzdHJpbmcgLT4gSnMudCA9IFwiY2FtbF9qc19mcm9tX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19ieXRlX3N0cmluZyA6IEpzLnQgLT4gc3RyaW5nID0gXCJjYW1sX2pzX3RvX2J5dGVfc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2pzX3RvX3N0cmluZyA6IEpzLnQgLT4gc3RyaW5nID0gXCJjYW1sX2pzX3RvX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X29mX2pzX2FycmF5IDogJ2EgSnMuanNfYXJyYXkgLT4gJ2EgbGlzdCA9IFwiY2FtbF9saXN0X29mX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCBjYW1sX2xpc3RfdG9fanNfYXJyYXkgOiAnYSBsaXN0IC0+ICdhIEpzLmpzX2FycmF5ID0gXCJjYW1sX2xpc3RfdG9fanNfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHZhcmlhYmxlIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX3ZhclwiXG5cbiAgZXh0ZXJuYWwgY2FtbF9zdHJpbmdfb2ZfYXJyYXkgOiAnYSBhcnJheSAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2FycmF5XCJcbmVuZFxuXG5tb2R1bGUgVHlwZWRfYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiKSB0eXBlZEFycmF5ID0gSnMudFxuXG4gIHR5cGUgYXJyYXlCdWZmZXIgPSBKcy50XG5cbiAgdHlwZSB1aW50OEFycmF5ID0gSnMudFxuXG4gIGV4dGVybmFsIGtpbmQgOiAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IpIEJpZ2FycmF5LmtpbmRcbiAgICA9IFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCBmcm9tX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudCAtPiAoJ2EsICdiKSB0eXBlZEFycmF5XG4gICAgPSBcImNhbWxfYmFfdG9fdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50XG4gICAgPSBcImNhbWxfYmFfZnJvbV90eXBlZF9hcnJheVwiXG5cbiAgbW9kdWxlIEJpZ3N0cmluZyA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IChjaGFyLCBCaWdhcnJheS5pbnQ4X3Vuc2lnbmVkX2VsdCwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkFycmF5MS50XG5cbiAgICBleHRlcm5hbCB0b19hcnJheUJ1ZmZlciA6IHQgLT4gYXJyYXlCdWZmZXIgPSBcImJpZ3N0cmluZ190b19hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgdG9fdWludDhBcnJheSA6IHQgLT4gdWludDhBcnJheSA9IFwiYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5XCJcblxuICAgIGV4dGVybmFsIG9mX2FycmF5QnVmZmVyIDogYXJyYXlCdWZmZXIgLT4gdCA9IFwiYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXlcIlxuICBlbmRcblxuICBleHRlcm5hbCBzdHJpbmdfb2ZfdWludDhBcnJheSA6IHVpbnQ4QXJyYXkgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgYnl0ZXNfb2ZfdWludDhBcnJheSA6IHVpbnQ4QXJyYXkgLT4gYnl0ZXMgPSBcImNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHVpbnQ4QXJyYXlfb2ZfYnl0ZXMgOiBieXRlcyAtPiB1aW50OEFycmF5ID0gXCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXCJcbmVuZFxuXG5tb2R1bGUgSW50NjQgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlX2ludDY0X2xvX21pX2hpIDogaW50IC0+IGludCAtPiBpbnQgLT4gSW50NjQudFxuICAgID0gXCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVwiXG5lbmRcblxubW9kdWxlIEVmZmVjdCA6IHNpZ1xuICBleHRlcm5hbCBhc3N1bWVfbm9fcGVyZm9ybSA6ICh1bml0IC0+ICdhKSAtPiAnYSA9IFwiY2FtbF9hc3N1bWVfbm9fcGVyZm9ybVwiXG4gICgqKiBQYXNzaW5nIGEgZnVuY3Rpb24gW2ZdIGFzIGFyZ3VtZW50IG9mIGBhc3N1bWVfbm9fcGVyZm9ybWAgZ3VhcmFudGVlcyB0aGF0LFxuICAgICAgd2hlbiBjb21waWxpbmcgd2l0aCBgLS1lZmZlY3RzPWRvdWJsZS10cmFuc2xhdGlvbmAsIHRoZSBkaXJlY3Qtc3R5bGVcbiAgICAgIHZlcnNpb24gb2YgW2ZdIGlzIGNhbGxlZCwgd2hpY2ggaXMgZmFzdGVyIHRoYW4gdGhlIENQUyB2ZXJzaW9uLiBBcyBhXG4gICAgICBjb25zZXF1ZW5jZSwgcGVyZm9ybWluZyBhbiBlZmZlY3QgaW4gYSB0cmFuc2l0aXZlIGNhbGxlZSBvZiBbZl0gd2lsbFxuICAgICAgcmFpc2UgYEVmZmVjdC5VbmhhbmRsZWRgLCByZWdhcmRsZXNzIG9mIGFueSBlZmZlY3QgaGFuZGxlcnMgaW5zdGFsbGVkXG4gICAgICBiZWZvcmUgdGhlIGNhbGwgdG8gYGFzc3VtZV9ub19wZXJmb3JtYCwgdW5sZXNzIGEgbmV3IGVmZmVjdCBoYW5kbGVyIHdhc1xuICAgICAgaW5zdGFsbGVkIGluIHRoZSBtZWFudGltZS5cblxuICAgICAgVGhpcyBiZWhhdmlvdXIgaXMgdGhlIHNhbWUgd2hlbiBkb3VibGUgdHJhbnNsYXRpb24gaXMgZGlzYWJsZWQuICopXG5lbmQgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgYXNzdW1lX25vX3BlcmZvcm0gOiAodW5pdCAtPiAnYSkgLT4gJ2EgPSBcImNhbWxfYXNzdW1lX25vX3BlcmZvcm1cIlxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImdsb2JhbF9kYXRhIiwiQXNzZXJ0X2ZhaWx1cmUiLCJKc29vX3J1bnRpbWVfUnVudGltZV92ZXJzaW9uIiwiU3RkbGliX0NhbGxiYWNrIiwiZWZmZWN0cyIsInBhcmFtIiwibWF0Y2giLCJ2ZXJzaW9uIiwiZ2l0X3ZlcnNpb24iLCJFeG4iLCJFcnJvciJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLCtCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQTtBQUFBLFlBQUFDLFFBQUFDO0FBQUFBLFFBQUFDLFFDaUtZO0FBQUEsSUFBVyxvQkFFTjtBQUFBLElBRk0seUJBQ0Q7QUFBQSxJQURDO0FBQUEsS0FJVjtBQUFBLElBRG1CO0FBQUEsR0FDUDtBQUFBO0FBQUEsSUFBQUMsVURyS3pCO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxHQ3dNVTtBQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBNEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEeE10RSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjY2MTkxLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6ImpzX29mX29jYW1sLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvanNfb2Zfb2NhbWwvaW1wb3J0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCogSnNfb2Zfb2NhbWxcbiAqIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbiAqIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuICopXG5cbm1vZHVsZSBQb2x5ID0gc3RydWN0XG4gIGV4dGVybmFsICggPCApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3N0aGFuXCJcblxuICBleHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcblxuICBleHRlcm5hbCAoIDw+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuXG4gIGV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcblxuICBleHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5cbiAgZXh0ZXJuYWwgKCA+PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG4gIGV4dGVybmFsIGVxdWFsIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmVuZFxuXG5tb2R1bGUgSW50X3JlcGxhY2VfcG9seW1vcnBoaWNfY29tcGFyZSA9IHN0cnVjdFxuICBleHRlcm5hbCAoIDwgKSA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJWxlc3N0aGFuXCJcblxuICBleHRlcm5hbCAoIDw9ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVsZXNzZXF1YWxcIlxuXG4gIGV4dGVybmFsICggPD4gKSA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJW5vdGVxdWFsXCJcblxuICBleHRlcm5hbCAoID0gKSA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJWVxdWFsXCJcblxuICBleHRlcm5hbCAoID4gKSA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJWdyZWF0ZXJ0aGFuXCJcblxuICBleHRlcm5hbCAoID49ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuXG4gIGV4dGVybmFsIGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG4gIGV4dGVybmFsIGVxdWFsIDogaW50IC0+IGludCAtPiBib29sID0gXCIlZXF1YWxcIlxuXG4gIGxldCBtYXggKHggOiBpbnQpIHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG4gIGxldCBtaW4gKHggOiBpbnQpIHkgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxuZW5kXG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcblxuICBsZXQgZXF1YWwgKHggOiBzdHJpbmcpICh5IDogc3RyaW5nKSA9IFBvbHkuZXF1YWwgeCB5XG5lbmRcblxubW9kdWxlIENoYXIgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBDaGFyXG5cbiAgbGV0IGVxdWFsICh4IDogY2hhcikgKHkgOiBjaGFyKSA9IFBvbHkuZXF1YWwgeCB5XG5lbmRcblxuaW5jbHVkZSBJbnRfcmVwbGFjZV9wb2x5bW9ycGhpY19jb21wYXJlXG4iXSwibmFtZXMiOlsicnVudGltZSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9DaGFyIiwibWF4IiwieCIsInkiLCJtaW4iLCJtYWtlIiwiaW5pdCIsImVtcHR5Iiwib2ZfYnl0ZXMiLCJ0b19ieXRlcyIsImJsaXQiLCJjb25jYXQiLCJjYXQiLCJjb21wYXJlIiwic3RhcnRzX3dpdGgiLCJlbmRzX3dpdGgiLCJjb250YWluc19mcm9tIiwicmNvbnRhaW5zX2Zyb20iLCJjb250YWlucyIsInN1YiIsInNwbGl0X29uX2NoYXIiLCJtYXAiLCJtYXBpIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImZvcl9hbGwiLCJleGlzdHMiLCJ0cmltIiwiZXNjYXBlZCIsInVwcGVyY2FzZV9hc2NpaSIsImxvd2VyY2FzZV9hc2NpaSIsImNhcGl0YWxpemVfYXNjaWkiLCJ1bmNhcGl0YWxpemVfYXNjaWkiLCJpdGVyIiwiaXRlcmkiLCJpbmRleF9mcm9tIiwiaW5kZXhfZnJvbV9vcHQiLCJyaW5kZXhfZnJvbSIsInJpbmRleF9mcm9tX29wdCIsImluZGV4IiwiaW5kZXhfb3B0IiwicmluZGV4IiwicmluZGV4X29wdCIsInRvX3NlcSIsInRvX3NlcWkiLCJvZl9zZXEiLCJnZXRfdXRmXzhfdWNoYXIiLCJpc192YWxpZF91dGZfOCIsImdldF91dGZfMTZiZV91Y2hhciIsImlzX3ZhbGlkX3V0Zl8xNmJlIiwiZ2V0X3V0Zl8xNmxlX3VjaGFyIiwiaXNfdmFsaWRfdXRmXzE2bGUiLCJnZXRfdWludDgiLCJnZXRfaW50OCIsImdldF91aW50MTZfbmUiLCJnZXRfdWludDE2X2JlIiwiZ2V0X3VpbnQxNl9sZSIsImdldF9pbnQxNl9uZSIsImdldF9pbnQxNl9iZSIsImdldF9pbnQxNl9sZSIsImdldF9pbnQzMl9uZSIsImhhc2giLCJzZWVkZWRfaGFzaCIsImdldF9pbnQzMl9iZSIsImdldF9pbnQzMl9sZSIsImdldF9pbnQ2NF9uZSIsImdldF9pbnQ2NF9iZSIsImdldF9pbnQ2NF9sZSIsImVxdWFsIiwiY2hyIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxZQUFBQyxJQUFBQyxHQUFBQyxHQ3FEd0IscUJBQXVCO0FBQUEsWUFBQUMsSUFBQUYsR0FBQUMsR0FFdkIscUJBQXVCO0FBQUE7QUFBQSxJQUFBRSxPRHZEL0M7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQXpDLFlBQUE7QUFBQSxJQUFBRSxvQkFBQTtBQUFBLElBQUFELG9CQUFBO0FBQUEsSUFBQWhCLFlBQUE7QUFBQSxJQUFBaUQsZ0JBQUE7QUFBQSxJQUFBRCxTQUFBO0FBQUEsWUFBQU8sUUFBQWxFLEdBQUFDLEdDbUVvQyx1QkFBYztBQUFBLEdEbkVsRCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjY2MzYzLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6ImpzX29mX29jYW1sLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvanNfb2Zfb2NhbWwvanMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBKc19vZl9vY2FtbCBsaWJyYXJ5XG4gKiBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuICogQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4gKiBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3RcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuICogZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG4gKilcbm9wZW4hIEltcG9ydFxuXG4oKiBUaGlzIGxvY2FsIG1vZHVsZSBbSnNdIGlzIG5lZWRlZCBzbyB0aGF0IHRoZSBwcHhfanMgZXh0ZW5zaW9uIHdvcmsgd2l0aGluIHRoYXQgZmlsZS4gKilcbm1vZHVsZSBKcyA9IHN0cnVjdFxuICB0eXBlICsnYSB0XG5cbiAgdHlwZSAoLSdhLCArJ2IpIG1ldGhfY2FsbGJhY2tcblxuICBtb2R1bGUgVW5zYWZlID0gc3RydWN0XG4gICAgdHlwZSB0b3BcblxuICAgIHR5cGUgYW55ID0gdG9wIHRcblxuICAgIHR5cGUgYW55X2pzX2FycmF5ID0gYW55XG5cbiAgICBleHRlcm5hbCBpbmplY3QgOiAnYSAtPiBhbnkgPSBcIiVpZGVudGl0eVwiXG5cbiAgICBleHRlcm5hbCBjb2VyY2UgOiBfIHQgLT4gXyB0ID0gXCIlaWRlbnRpdHlcIlxuXG4gICAgZXh0ZXJuYWwgZ2V0IDogJ2EgLT4gJ2IgLT4gJ2MgPSBcImNhbWxfanNfZ2V0XCJcblxuICAgIGV4dGVybmFsIHNldCA6ICdhIC0+ICdiIC0+ICdjIC0+IHVuaXQgPSBcImNhbWxfanNfc2V0XCJcblxuICAgIGV4dGVybmFsIGRlbGV0ZSA6ICdhIC0+ICdiIC0+IHVuaXQgPSBcImNhbWxfanNfZGVsZXRlXCJcblxuICAgIGV4dGVybmFsIGNhbGwgOiAnYSAtPiAnYiAtPiBhbnkgYXJyYXkgLT4gJ2MgPSBcImNhbWxfanNfY2FsbFwiXG5cbiAgICBleHRlcm5hbCBmdW5fY2FsbCA6ICdhIC0+IGFueSBhcnJheSAtPiAnYiA9IFwiY2FtbF9qc19mdW5fY2FsbFwiXG5cbiAgICBleHRlcm5hbCBtZXRoX2NhbGwgOiAnYSAtPiBzdHJpbmcgLT4gYW55IGFycmF5IC0+ICdiID0gXCJjYW1sX2pzX21ldGhfY2FsbFwiXG5cbiAgICBleHRlcm5hbCBuZXdfb2JqIDogJ2EgLT4gYW55IGFycmF5IC0+ICdiID0gXCJjYW1sX2pzX25ld1wiXG5cbiAgICBleHRlcm5hbCBuZXdfb2JqX2FyciA6ICdhIC0+IGFueV9qc19hcnJheSAtPiAnYiA9IFwiY2FtbF9vanNfbmV3X2FyclwiXG5cbiAgICBleHRlcm5hbCBvYmogOiAoc3RyaW5nICogYW55KSBhcnJheSAtPiAnYSA9IFwiY2FtbF9qc19vYmplY3RcIlxuXG4gICAgZXh0ZXJuYWwgZXF1YWxzIDogJ2EgLT4gJ2IgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gICAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6ICdhIC0+ICdiIC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgICBleHRlcm5hbCBwdXJlX2V4cHIgOiAodW5pdCAtPiAnYSkgLT4gJ2EgPSBcImNhbWxfanNfcHVyZV9leHByXCJcblxuICAgIGV4dGVybmFsIGV2YWxfc3RyaW5nIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V2YWxfc3RyaW5nXCJcblxuICAgIGV4dGVybmFsIGpzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXhwclwiXG5cbiAgICBleHRlcm5hbCBwdXJlX2pzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfcHVyZV9qc19leHByXCJcblxuICAgIGxldCBnbG9iYWwgPSBwdXJlX2pzX2V4cHIgXCJnbG9iYWxUaGlzXCJcblxuICAgIGV4dGVybmFsIGNhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgICAoYW55X2pzX2FycmF5IC0+ICdiKSAtPiAoJ2MsIGFueV9qc19hcnJheSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gICAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0XCJcblxuICAgIGV4dGVybmFsIG1ldGhfY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmVcIlxuXG4gICAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAgICgnYiAtPiBhbnlfanNfYXJyYXkgLT4gJ2EpIC0+ICgnYiwgYW55X2pzX2FycmF5IC0+ICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICAgIGV4dGVybmFsIHJ1bnRpbWVfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNvb19ydW50aW1lX3ZhbHVlXCJcblxuICAgICgqIERFUFJFQ0FURUQgKilcbiAgICBleHRlcm5hbCB2YXJpYWJsZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc192YXJcIlxuICBlbmRcblxuICAoKioqKilcblxuICB0eXBlICdhIG9wdCA9ICdhXG5cbiAgdHlwZSAnYSBvcHRkZWYgPSAnYVxuXG4gIGV4dGVybmFsIGRlYnVnZ2VyIDogdW5pdCAtPiB1bml0ID0gXCJkZWJ1Z2dlclwiXG5cbiAgbGV0IG51bGwgOiAnYSBvcHQgPSBVbnNhZmUucHVyZV9qc19leHByIFwibnVsbFwiXG5cbiAgZXh0ZXJuYWwgc29tZSA6ICdhIC0+ICdhIG9wdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgdW5kZWZpbmVkIDogJ2Egb3B0ZGVmID0gVW5zYWZlLnB1cmVfanNfZXhwciBcInVuZGVmaW5lZFwiXG5cbiAgZXh0ZXJuYWwgZGVmIDogJ2EgLT4gJ2Egb3B0ZGVmID0gXCIlaWRlbnRpdHlcIlxuXG4gIG1vZHVsZSB0eXBlIE9QVCA9IHNpZ1xuICAgIHR5cGUgJ2EgdFxuXG4gICAgdmFsIGVtcHR5IDogJ2EgdFxuXG4gICAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcblxuICAgIHZhbCBtYXAgOiAnYSB0IC0+ICgnYSAtPiAnYikgLT4gJ2IgdFxuXG4gICAgdmFsIGJpbmQgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5cbiAgICB2YWwgdGVzdCA6ICdhIHQgLT4gYm9vbFxuXG4gICAgdmFsIGl0ZXIgOiAnYSB0IC0+ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbiAgICB2YWwgY2FzZSA6ICdhIHQgLT4gKHVuaXQgLT4gJ2IpIC0+ICgnYSAtPiAnYikgLT4gJ2JcblxuICAgIHZhbCBnZXQgOiAnYSB0IC0+ICh1bml0IC0+ICdhKSAtPiAnYVxuXG4gICAgdmFsIG9wdGlvbiA6ICdhIG9wdGlvbiAtPiAnYSB0XG5cbiAgICB2YWwgdG9fb3B0aW9uIDogJ2EgdCAtPiAnYSBvcHRpb25cblxuICAgIGV4dGVybmFsIGVxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gICAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcbiAgZW5kXG5cbiAgbW9kdWxlIE9wdCA6IE9QVCB3aXRoIHR5cGUgJ2EgdCA9ICdhIG9wdCA9IHN0cnVjdFxuICAgIHR5cGUgJ2EgdCA9ICdhIG9wdFxuXG4gICAgbGV0IGVtcHR5ID0gbnVsbFxuXG4gICAgbGV0IHJldHVybiA9IHNvbWVcblxuICAgIGV4dGVybmFsIGVxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gICAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcblxuICAgIGxldCBtYXAgeCBmID0gaWYgZXF1YWxzIHggbnVsbCB0aGVuIG51bGwgZWxzZSByZXR1cm4gKGYgeClcblxuICAgIGxldCBiaW5kIHggZiA9IGlmIGVxdWFscyB4IG51bGwgdGhlbiBudWxsIGVsc2UgZiB4XG5cbiAgICBsZXQgdGVzdCB4ID0gbm90IChlcXVhbHMgeCBudWxsKVxuXG4gICAgbGV0IGl0ZXIgeCBmID0gaWYgbm90IChlcXVhbHMgeCBudWxsKSB0aGVuIGYgeFxuXG4gICAgbGV0IGNhc2UgeCBmIGcgPSBpZiBlcXVhbHMgeCBudWxsIHRoZW4gZiAoKSBlbHNlIGcgeFxuXG4gICAgbGV0IGdldCB4IGYgPSBpZiBlcXVhbHMgeCBudWxsIHRoZW4gZiAoKSBlbHNlIHhcblxuICAgIGxldCBvcHRpb24geCA9XG4gICAgICBtYXRjaCB4IHdpdGhcbiAgICAgIHwgTm9uZSAtPiBlbXB0eVxuICAgICAgfCBTb21lIHggLT4gcmV0dXJuIHhcblxuICAgIGxldCB0b19vcHRpb24geCA9IGNhc2UgeCAoZnVuICgpIC0+IE5vbmUpIChmdW4geCAtPiBTb21lIHgpXG4gIGVuZFxuXG4gIG1vZHVsZSBPcHRkZWYgOiBPUFQgd2l0aCB0eXBlICdhIHQgPSAnYSBvcHRkZWYgPSBzdHJ1Y3RcbiAgICB0eXBlICdhIHQgPSAnYSBvcHRkZWZcblxuICAgIGxldCBlbXB0eSA9IHVuZGVmaW5lZFxuXG4gICAgbGV0IHJldHVybiA9IGRlZlxuXG4gICAgZXh0ZXJuYWwgZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gICAgbGV0IG1hcCB4IGYgPSBpZiBzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkIHRoZW4gdW5kZWZpbmVkIGVsc2UgcmV0dXJuIChmIHgpXG5cbiAgICBsZXQgYmluZCB4IGYgPSBpZiBzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkIHRoZW4gdW5kZWZpbmVkIGVsc2UgZiB4XG5cbiAgICBsZXQgdGVzdCB4ID0gbm90IChzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkKVxuXG4gICAgbGV0IGl0ZXIgeCBmID0gaWYgbm90IChzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkKSB0aGVuIGYgeFxuXG4gICAgbGV0IGNhc2UgeCBmIGcgPSBpZiBzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkIHRoZW4gZiAoKSBlbHNlIGcgeFxuXG4gICAgbGV0IGdldCB4IGYgPSBpZiBzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkIHRoZW4gZiAoKSBlbHNlIHhcblxuICAgIGxldCBvcHRpb24geCA9XG4gICAgICBtYXRjaCB4IHdpdGhcbiAgICAgIHwgTm9uZSAtPiBlbXB0eVxuICAgICAgfCBTb21lIHggLT4gcmV0dXJuIHhcblxuICAgIGxldCB0b19vcHRpb24geCA9IGNhc2UgeCAoZnVuICgpIC0+IE5vbmUpIChmdW4geCAtPiBTb21lIHgpXG4gIGVuZFxuXG4gICgqKioqKVxuXG4gIGxldCBjb2VyY2UgeCBmIGcgPSBPcHQuZ2V0IChmIHgpIChmdW4gKCkgLT4gZyB4KVxuXG4gIGxldCBjb2VyY2Vfb3B0IHggZiBnID0gT3B0LmdldCAoT3B0LmJpbmQgeCBmKSAoZnVuICgpIC0+IGcgeClcblxuICAoKioqKilcblxuICB0eXBlICsnYSBtZXRoXG5cbiAgdHlwZSArJ2EgZ2VuX3Byb3BcblxuICB0eXBlICdhIHJlYWRvbmx5X3Byb3AgPSA8IGdldCA6ICdhID4gZ2VuX3Byb3BcblxuICB0eXBlICdhIHdyaXRlb25seV9wcm9wID0gPCBzZXQgOiAnYSAtPiB1bml0ID4gZ2VuX3Byb3BcblxuICB0eXBlICdhIHByb3AgPSA8IGdldCA6ICdhIDsgc2V0IDogJ2EgLT4gdW5pdCA+IGdlbl9wcm9wXG5cbiAgdHlwZSAnYSBvcHRkZWZfcHJvcCA9IDwgZ2V0IDogJ2Egb3B0ZGVmIDsgc2V0IDogJ2EgLT4gdW5pdCA+IGdlbl9wcm9wXG5cbiAgdHlwZSArJ2EgY29uc3RyXG5cbiAgKCoqKiopXG5cbiAgdHlwZSAnYSBjYWxsYmFjayA9ICh1bml0LCAnYSkgbWV0aF9jYWxsYmFja1xuXG4gIGV4dGVybmFsIHdyYXBfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrXCJcblxuICBleHRlcm5hbCB3cmFwX21ldGhfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tcIlxuXG4gICgqKioqKVxuXG4gIGV4dGVybmFsIGVxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgKCoqKiopXG5cbiAgbGV0IF90cnVlID0gVW5zYWZlLnB1cmVfanNfZXhwciBcInRydWVcIlxuXG4gIGxldCBfZmFsc2UgPSBVbnNhZmUucHVyZV9qc19leHByIFwiZmFsc2VcIlxuXG4gIHR5cGUgbWF0Y2hfcmVzdWx0X2hhbmRsZVxuXG4gIHR5cGUgc3RyaW5nX2FycmF5XG5cbiAgY2xhc3MgdHlwZSBudW1iZXIgPSBvYmplY3RcbiAgICBtZXRob2QgdG9TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9TdHJpbmdfcmFkaXggOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvTG9jYWxlU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvRml4ZWQgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvRXhwb25lbnRpYWwgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9FeHBvbmVudGlhbF9kaWdpdHMgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvUHJlY2lzaW9uIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcbiAgZW5kXG5cbiAgYW5kIGpzX3N0cmluZyA9IG9iamVjdFxuICAgIG1ldGhvZCB0b1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB2YWx1ZU9mIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNoYXJBdCA6IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgY2hhckNvZGVBdCA6IGludCAtPiBudW1iZXIgdCBtZXRoXG5cbiAgICBtZXRob2QgY29kZVBvaW50QXQgOiBpbnQgLT4gbnVtYmVyIHQgb3B0ZGVmIG1ldGhcblxuICAgICgqIFRoaXMgbWF5IHJldHVybiBOYU4uLi4gKilcbiAgICBtZXRob2QgY29uY2F0IDoganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNvbmNhdF8yIDoganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNvbmNhdF8zIDoganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNvbmNhdF80IDpcbiAgICAgIGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBpbmRleE9mIDoganNfc3RyaW5nIHQgLT4gaW50IG1ldGhcblxuICAgIG1ldGhvZCBpbmRleE9mX2Zyb20gOiBqc19zdHJpbmcgdCAtPiBpbnQgLT4gaW50IG1ldGhcblxuICAgIG1ldGhvZCBsYXN0SW5kZXhPZiA6IGpzX3N0cmluZyB0IC0+IGludCBtZXRoXG5cbiAgICBtZXRob2QgbGFzdEluZGV4T2ZfZnJvbSA6IGpzX3N0cmluZyB0IC0+IGludCAtPiBpbnQgbWV0aFxuXG4gICAgbWV0aG9kIGxvY2FsZUNvbXBhcmUgOiBqc19zdHJpbmcgdCAtPiBudW1iZXIgdCBtZXRoXG5cbiAgICBtZXRob2QgX21hdGNoIDogcmVnRXhwIHQgLT4gbWF0Y2hfcmVzdWx0X2hhbmRsZSB0IG9wdCBtZXRoXG5cbiAgICBtZXRob2Qgbm9ybWFsaXplIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIG5vcm1hbGl6ZV9mb3JtIDogbm9ybWFsaXphdGlvbiB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCByZXBsYWNlIDogcmVnRXhwIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHJlcGxhY2Vfc3RyaW5nIDoganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHNlYXJjaCA6IHJlZ0V4cCB0IC0+IGludCBtZXRoXG5cbiAgICBtZXRob2Qgc2xpY2UgOiBpbnQgLT4gaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBzbGljZV9lbmQgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHNwbGl0IDoganNfc3RyaW5nIHQgLT4gc3RyaW5nX2FycmF5IHQgbWV0aFxuXG4gICAgbWV0aG9kIHNwbGl0X2xpbWl0ZWQgOiBqc19zdHJpbmcgdCAtPiBpbnQgLT4gc3RyaW5nX2FycmF5IHQgbWV0aFxuXG4gICAgbWV0aG9kIHNwbGl0X3JlZ0V4cCA6IHJlZ0V4cCB0IC0+IHN0cmluZ19hcnJheSB0IG1ldGhcblxuICAgIG1ldGhvZCBzcGxpdF9yZWdFeHBMaW1pdGVkIDogcmVnRXhwIHQgLT4gaW50IC0+IHN0cmluZ19hcnJheSB0IG1ldGhcblxuICAgIG1ldGhvZCBzdWJzdHJpbmcgOiBpbnQgLT4gaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBzdWJzdHJpbmdfdG9FbmQgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvTG93ZXJDYXNlIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvTG9jYWxlTG93ZXJDYXNlIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvVXBwZXJDYXNlIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvTG9jYWxlVXBwZXJDYXNlIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRyaW0gOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgbGVuZ3RoIDogaW50IHJlYWRvbmx5X3Byb3BcbiAgZW5kXG5cbiAgYW5kIHJlZ0V4cCA9IG9iamVjdFxuICAgIG1ldGhvZCBleGVjIDoganNfc3RyaW5nIHQgLT4gbWF0Y2hfcmVzdWx0X2hhbmRsZSB0IG9wdCBtZXRoXG5cbiAgICBtZXRob2QgdGVzdCA6IGpzX3N0cmluZyB0IC0+IGJvb2wgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2Qgc291cmNlIDoganNfc3RyaW5nIHQgcmVhZG9ubHlfcHJvcFxuXG4gICAgbWV0aG9kIGdsb2JhbCA6IGJvb2wgdCByZWFkb25seV9wcm9wXG5cbiAgICBtZXRob2QgaWdub3JlQ2FzZSA6IGJvb2wgdCByZWFkb25seV9wcm9wXG5cbiAgICBtZXRob2QgbXVsdGlsaW5lIDogYm9vbCB0IHJlYWRvbmx5X3Byb3BcblxuICAgIG1ldGhvZCBsYXN0SW5kZXggOiBpbnQgcHJvcFxuICBlbmRcblxuICBhbmQgbm9ybWFsaXphdGlvbiA9IGpzX3N0cmluZ1xuXG4gIHR5cGUgbnVtYmVyX3QgPSBudW1iZXIgdFxuXG4gICgqIHN0cmluZyBpcyB1c2VkIGJ5IHBweF9qcywgaXQgbmVlZHMgdG8gY29tZSBiZWZvcmUgYW55IHVzZSBvZiB0aGVcbiAgICAgbmV3IHN5bnRheCBpbiB0aGlzIGZpbGUgKilcbiAgZXh0ZXJuYWwgc3RyaW5nIDogc3RyaW5nIC0+IGpzX3N0cmluZyB0ID0gXCJjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fc3RyaW5nIDoganNfc3RyaW5nIHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1wiXG5cbiAgbGV0IG5mYyA9IHN0cmluZyBcIk5GQ1wiXG5cbiAgbGV0IG5mZCA9IHN0cmluZyBcIk5GRFwiXG5cbiAgbGV0IG5ma2MgPSBzdHJpbmcgXCJORktDXCJcblxuICBsZXQgbmZrZCA9IHN0cmluZyBcIk5GS0RcIlxuZW5kXG5cbmluY2x1ZGUgSnNcblxuY2xhc3MgdHlwZSBzdHJpbmdfY29uc3RyID0gb2JqZWN0XG4gIG1ldGhvZCBmcm9tQ2hhckNvZGUgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuZW5kXG5cbmxldCBzdHJpbmdfY29uc3RyID0gVW5zYWZlLmdsb2JhbCMjLl9TdHJpbmdcblxubGV0IHJlZ0V4cCA9IFVuc2FmZS5nbG9iYWwjIy5fUmVnRXhwXG5cbmxldCByZWdFeHBfY29weSA9IHJlZ0V4cFxuXG5sZXQgcmVnRXhwX3dpdGhGbGFncyA9IHJlZ0V4cFxuXG5jbGFzcyB0eXBlIFsnYV0ganNfYXJyYXkgPSBvYmplY3RcbiAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0xvY2FsZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgY29uY2F0IDogJ2EganNfYXJyYXkgdCAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgam9pbiA6IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgcG9wIDogJ2Egb3B0ZGVmIG1ldGhcblxuICBtZXRob2QgcHVzaCA6ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHB1c2hfMiA6ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHB1c2hfMyA6ICdhIC0+ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHB1c2hfNCA6ICdhIC0+ICdhIC0+ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHJldmVyc2UgOiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc2hpZnQgOiAnYSBvcHRkZWYgbWV0aFxuXG4gIG1ldGhvZCBzbGljZSA6IGludCAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNsaWNlX2VuZCA6IGludCAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc29ydCA6ICgnYSAtPiAnYSAtPiBudW1iZXJfdCkgY2FsbGJhY2sgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNvcnRfYXNTdHJpbmdzIDogJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNwbGljZSA6IGludCAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNwbGljZV8xIDogaW50IC0+IGludCAtPiAnYSAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc3BsaWNlXzIgOiBpbnQgLT4gaW50IC0+ICdhIC0+ICdhIC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzcGxpY2VfMyA6IGludCAtPiBpbnQgLT4gJ2EgLT4gJ2EgLT4gJ2EgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNwbGljZV80IDogaW50IC0+IGludCAtPiAnYSAtPiAnYSAtPiAnYSAtPiAnYSAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2QgdW5zaGlmdCA6ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHVuc2hpZnRfMiA6ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHVuc2hpZnRfMyA6ICdhIC0+ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHVuc2hpZnRfNCA6ICdhIC0+ICdhIC0+ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHNvbWUgOiAoJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gYm9vbCB0KSBjYWxsYmFjayAtPiBib29sIHQgbWV0aFxuXG4gIG1ldGhvZCBldmVyeSA6ICgnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiBib29sIHQpIGNhbGxiYWNrIC0+IGJvb2wgdCBtZXRoXG5cbiAgbWV0aG9kIGZvckVhY2ggOiAoJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gdW5pdCkgY2FsbGJhY2sgLT4gdW5pdCBtZXRoXG5cbiAgbWV0aG9kIG1hcCA6ICgnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiAnYikgY2FsbGJhY2sgLT4gJ2IganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIGZpbHRlciA6ICgnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiBib29sIHQpIGNhbGxiYWNrIC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCByZWR1Y2VfaW5pdCA6ICgnYiAtPiAnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiAnYikgY2FsbGJhY2sgLT4gJ2IgLT4gJ2IgbWV0aFxuXG4gIG1ldGhvZCByZWR1Y2UgOiAoJ2EgLT4gJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gJ2EpIGNhbGxiYWNrIC0+ICdhIG1ldGhcblxuICBtZXRob2QgcmVkdWNlUmlnaHRfaW5pdCA6XG4gICAgKCdiIC0+ICdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+ICdiKSBjYWxsYmFjayAtPiAnYiAtPiAnYiBtZXRoXG5cbiAgbWV0aG9kIHJlZHVjZVJpZ2h0IDogKCdhIC0+ICdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+ICdhKSBjYWxsYmFjayAtPiAnYSBtZXRoXG5cbiAgbWV0aG9kIGxlbmd0aCA6IGludCBwcm9wXG5lbmRcblxubGV0IG9iamVjdF9jb25zdHJ1Y3RvciA9IFVuc2FmZS5nbG9iYWwjIy5fT2JqZWN0XG5cbmxldCBvYmplY3Rfa2V5cyBvIDoganNfc3RyaW5nIHQganNfYXJyYXkgdCA9IG9iamVjdF9jb25zdHJ1Y3RvciMja2V5cyBvXG5cbmxldCBhcnJheV9jb25zdHJ1Y3RvciA9IFVuc2FmZS5nbG9iYWwjIy5fQXJyYXlcblxubGV0IGFycmF5X2VtcHR5ID0gYXJyYXlfY29uc3RydWN0b3JcblxubGV0IGFycmF5X2xlbmd0aCA9IGFycmF5X2NvbnN0cnVjdG9yXG5cbmxldCBhcnJheV9nZXQgOiAnYSAjanNfYXJyYXkgdCAtPiBpbnQgLT4gJ2Egb3B0ZGVmID0gVW5zYWZlLmdldFxuXG5sZXQgYXJyYXlfc2V0IDogJ2EgI2pzX2FycmF5IHQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBVbnNhZmUuc2V0XG5cbmxldCBhcnJheV9tYXBfcG9seSA6XG4gICAgJ2EgI2pzX2FycmF5IHQgLT4gKCdhIC0+IGludCAtPiAnYSAjanNfYXJyYXkgdCAtPiAnYikgY2FsbGJhY2sgLT4gJ2IgI2pzX2FycmF5IHQgPVxuIGZ1biBhIGNiIC0+IChVbnNhZmUuY29lcmNlIGEpIyNtYXAgY2JcblxubGV0IGFycmF5X21hcCBmIGEgPSBhcnJheV9tYXBfcG9seSBhICh3cmFwX2NhbGxiYWNrIChmdW4geCBfaWR4IF8gLT4gZiB4KSlcblxubGV0IGFycmF5X21hcGkgZiBhID0gYXJyYXlfbWFwX3BvbHkgYSAod3JhcF9jYWxsYmFjayAoZnVuIHggaWR4IF8gLT4gZiBpZHggeCkpXG5cbmNsYXNzIHR5cGUgbWF0Y2hfcmVzdWx0ID0gb2JqZWN0XG4gIGluaGVyaXQgW2pzX3N0cmluZyB0XSBqc19hcnJheVxuXG4gIG1ldGhvZCBpbmRleCA6IGludCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIGlucHV0IDoganNfc3RyaW5nIHQgcmVhZG9ubHlfcHJvcFxuZW5kXG5cbmxldCBzdHJfYXJyYXkgOiBzdHJpbmdfYXJyYXkgdCAtPiBqc19zdHJpbmcgdCBqc19hcnJheSB0ID0gVW5zYWZlLmNvZXJjZVxuXG5sZXQgbWF0Y2hfcmVzdWx0IDogbWF0Y2hfcmVzdWx0X2hhbmRsZSB0IC0+IG1hdGNoX3Jlc3VsdCB0ID0gVW5zYWZlLmNvZXJjZVxuXG5jbGFzcyB0eXBlIGRhdGUgPSBvYmplY3RcbiAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0RhdGVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvVGltZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9Mb2NhbGVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvTG9jYWxlRGF0ZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9Mb2NhbGVUaW1lU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB2YWx1ZU9mIDogbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBnZXRUaW1lIDogbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBnZXRGdWxsWWVhciA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ0Z1bGxZZWFyIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0TW9udGggOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENNb250aCA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldERhdGUgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENEYXRlIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0RGF5IDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDRGF5IDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0SG91cnMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENIb3VycyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldE1pbnV0ZXMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENNaW51dGVzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0U2Vjb25kcyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ1NlY29uZHMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRNaWxsaXNlY29uZHMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENNaWxsaXNlY29uZHMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRUaW1lem9uZU9mZnNldCA6IGludCBtZXRoXG5cbiAgbWV0aG9kIHNldFRpbWUgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldEZ1bGxZZWFyIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0VVRDRnVsbFllYXIgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRNb250aCA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ01vbnRoIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0RGF0ZSA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ0RhdGUgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRIb3VycyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ0hvdXJzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0TWludXRlcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ01pbnV0ZXMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRTZWNvbmRzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0VVRDU2Vjb25kcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldE1pbGxpc2Vjb25kcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ01pbGxpc2Vjb25kcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHRvVVRDU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0lTT1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9KU09OIDogJ2EgLT4ganNfc3RyaW5nIHQgbWV0aFxuZW5kXG5cbmNsYXNzIHR5cGUgZGF0ZV9jb25zdHIgPSBvYmplY3RcbiAgbWV0aG9kIHBhcnNlIDoganNfc3RyaW5nIHQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX21vbnRoIDogaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIF9VVENfZGF5IDogaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIF9VVENfaG91ciA6IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIF9VVENfbWluIDogaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIF9VVENfc2VjIDogaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX21zIDogaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgbm93IDogbnVtYmVyX3QgbWV0aFxuZW5kXG5cbmxldCBkYXRlX2NvbnN0ciA9IFVuc2FmZS5nbG9iYWwjIy5fRGF0ZVxuXG5sZXQgZGF0ZSA6IGRhdGVfY29uc3RyIHQgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9ub3cgOiBkYXRlIHQgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfZnJvbVRpbWVWYWx1ZSA6IChudW1iZXJfdCAtPiBkYXRlIHQpIGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX21vbnRoIDogKGludCAtPiBpbnQgLT4gZGF0ZSB0KSBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9kYXkgOiAoaW50IC0+IGludCAtPiBpbnQgLT4gZGF0ZSB0KSBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9ob3VyIDogKGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBkYXRlIHQpIGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX21pbiA6IChpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfc2VjIDogKGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfbXMgOiAoaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID1cbiAgZGF0ZV9jb25zdHJcblxuY2xhc3MgdHlwZSBtYXRoID0gb2JqZWN0XG4gIG1ldGhvZCBfRSA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX0xOMiA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX0xOMTAgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9MT0cyRSA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX0xPRzEwRSA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX1BJIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBfU1FSVDFfMl8gOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9TUVJUMiA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgYWJzIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBhY29zIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBhc2luIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBhdGFuIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBhdGFuMiA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgY2VpbCA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgY29zIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBleHAgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGZsb29yIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBsb2cgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG1heCA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbWF4XzMgOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG1heF80IDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtaW4gOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG1pbl8zIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtaW5fNCA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgcG93IDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCByYW5kb20gOiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHJvdW5kIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzaW4gOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNxcnQgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHRhbiA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcbmVuZFxuXG5sZXQgbWF0aCA9IFVuc2FmZS5nbG9iYWwjIy5fTWF0aFxuXG5jbGFzcyB0eXBlIGVycm9yID0gb2JqZWN0XG4gIG1ldGhvZCBuYW1lIDoganNfc3RyaW5nIHQgcHJvcFxuXG4gIG1ldGhvZCBtZXNzYWdlIDoganNfc3RyaW5nIHQgcHJvcFxuXG4gIG1ldGhvZCBzdGFjayA6IGpzX3N0cmluZyB0IG9wdGRlZiBwcm9wXG5cbiAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuZW5kXG5cbmxldCBlcnJvcl9jb25zdHIgPSBVbnNhZmUuZ2xvYmFsIyMuX0Vycm9yXG5cbm1vZHVsZSBKc19lcnJvciA9IHN0cnVjdFxuICB0eXBlIGVycm9yX3QgPSBlcnJvciB0XG5cbiAgaW5jbHVkZSBKc29vX3J1bnRpbWUuRXJyb3JcblxuICBleHRlcm5hbCBvZl9lcnJvciA6IGVycm9yX3QgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICBleHRlcm5hbCB0b19lcnJvciA6IHQgLT4gZXJyb3JfdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgbmFtZSBlID0gdG9fc3RyaW5nICh0b19lcnJvciBlKSMjLm5hbWVcblxuICBsZXQgbWVzc2FnZSBlID0gdG9fc3RyaW5nICh0b19lcnJvciBlKSMjLm1lc3NhZ2VcblxuICBsZXQgc3RhY2sgKGUgOiB0KSA6IHN0cmluZyBvcHRpb24gPVxuICAgIE9wdC50b19vcHRpb24gKE9wdC5tYXAgKHRvX2Vycm9yIGUpIyMuc3RhY2sgdG9fc3RyaW5nKVxuXG4gIGxldCB0b19zdHJpbmcgZSA9IHRvX3N0cmluZyAodG9fZXJyb3IgZSkjI3RvU3RyaW5nXG5lbmRcblxubW9kdWxlIE1hZ2ljID0gc3RydWN0XG4gIG1vZHVsZSB0eXBlIFQgPSBzaWdcbiAgICBleGNlcHRpb24gRXJyb3Igb2YgZXJyb3IgdFxuICBlbmRcblxuICB0eXBlICgnYSwgJ2IpIGVxID0gRXEgOiAoJ2EsICdhKSBlcVxuXG4gIGxldCAoZXEgOiAoZXJyb3IgdCwgSnNfZXJyb3IudCkgZXEpID0gT2JqLm1hZ2ljIEVxXG5cbiAgbGV0IG0gPVxuICAgIG1hdGNoIGVxIHdpdGhcbiAgICB8IEVxIC0+XG4gICAgICAgIChtb2R1bGUgc3RydWN0XG4gICAgICAgICAgZXhjZXB0aW9uIEVycm9yID0gSnNfZXJyb3IuRXhuXG4gICAgICAgIGVuZCA6IFQpXG5cbiAgbW9kdWxlIEVycm9yID0gKHZhbCBtIDogVClcbmVuZFxuXG5pbmNsdWRlIE1hZ2ljLkVycm9yXG5cbmxldCByYWlzZV9qc19lcnJvciBlID0gSnNfZXJyb3IucmFpc2VfIChKc19lcnJvci5vZl9lcnJvciBlKVxuXG5sZXQgc3RyaW5nX29mX2Vycm9yIGUgPSBKc19lcnJvci50b19zdHJpbmcgKEpzX2Vycm9yLm9mX2Vycm9yIGUpXG5cbmxldCBleG5fd2l0aF9qc19iYWNrdHJhY2UgPSBKc19lcnJvci5hdHRhY2hfanNfYmFja3RyYWNlXG5cbmV4dGVybmFsIGpzX2Vycm9yX29mX2V4biA6IGV4biAtPiBlcnJvciB0IG9wdCA9IFwiY2FtbF9qc19lcnJvcl9vZl9leGNlcHRpb25cIlxuXG5jbGFzcyB0eXBlIGpzb24gPSBvYmplY3RcbiAgbWV0aG9kIHBhcnNlIDoganNfc3RyaW5nIHQgLT4gJ2EgbWV0aFxuXG4gIG1ldGhvZCBzdHJpbmdpZnkgOiAnYSAtPiBqc19zdHJpbmcgdCBtZXRoXG5lbmRcblxubGV0IF9KU09OIDoganNvbiB0ID0gVW5zYWZlLmdsb2JhbCMjLl9KU09OXG5cbmxldCBkZWNvZGVVUkkgKHMgOiBqc19zdHJpbmcgdCkgOiBqc19zdHJpbmcgdCA9XG4gIFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMuZGVjb2RlVVJJIFt8IFVuc2FmZS5pbmplY3QgcyB8XVxuXG5sZXQgZGVjb2RlVVJJQ29tcG9uZW50IChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmRlY29kZVVSSUNvbXBvbmVudCBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxubGV0IGVuY29kZVVSSSAocyA6IGpzX3N0cmluZyB0KSA6IGpzX3N0cmluZyB0ID1cbiAgVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5lbmNvZGVVUkkgW3wgVW5zYWZlLmluamVjdCBzIHxdXG5cbmxldCBlbmNvZGVVUklDb21wb25lbnQgKHMgOiBqc19zdHJpbmcgdCkgOiBqc19zdHJpbmcgdCA9XG4gIFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMuZW5jb2RlVVJJQ29tcG9uZW50IFt8IFVuc2FmZS5pbmplY3QgcyB8XVxuXG5sZXQgZXNjYXBlIChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmVzY2FwZSBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxubGV0IHVuZXNjYXBlIChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLnVuZXNjYXBlIFt8IFVuc2FmZS5pbmplY3QgcyB8XVxuXG5leHRlcm5hbCBib29sIDogYm9vbCAtPiBib29sIHQgPSBcImNhbWxfanNfZnJvbV9ib29sXCJcblxuZXh0ZXJuYWwgdG9fYm9vbCA6IGJvb2wgdCAtPiBib29sID0gXCJjYW1sX2pzX3RvX2Jvb2xcIlxuXG5leHRlcm5hbCBhcnJheSA6ICdhIGFycmF5IC0+ICdhIGpzX2FycmF5IHQgPSBcImNhbWxfanNfZnJvbV9hcnJheVwiXG5cbmV4dGVybmFsIHRvX2FycmF5IDogJ2EganNfYXJyYXkgdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9qc190b19hcnJheVwiXG5cbmV4dGVybmFsIGJ5dGVzdHJpbmcgOiBzdHJpbmcgLT4ganNfc3RyaW5nIHQgPSBcImNhbWxfanNieXRlc19vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCB0b19ieXRlc3RyaW5nIDoganNfc3RyaW5nIHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzXCJcblxuZXh0ZXJuYWwgZmxvYXQgOiBmbG9hdCAtPiBudW1iZXJfdCA9IFwiY2FtbF9qc19mcm9tX2Zsb2F0XCJcblxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBudW1iZXJfdCAtPiBmbG9hdCA9IFwiY2FtbF9qc190b19mbG9hdFwiXG5cbmV4dGVybmFsIG51bWJlcl9vZl9mbG9hdCA6IGZsb2F0IC0+IG51bWJlciB0ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG5leHRlcm5hbCBmbG9hdF9vZl9udW1iZXIgOiBudW1iZXIgdCAtPiBmbG9hdCA9IFwiY2FtbF9qc190b19mbG9hdFwiXG5cbmV4dGVybmFsIGludDMyIDogaW50MzIgLT4gbnVtYmVyX3QgPSBcImNhbWxfanNfZnJvbV9pbnQzMlwiXG5cbmV4dGVybmFsIHRvX2ludDMyIDogbnVtYmVyX3QgLT4gaW50MzIgPSBcImNhbWxfanNfdG9faW50MzJcIlxuXG5leHRlcm5hbCBuYXRpdmVpbnQgOiBuYXRpdmVpbnQgLT4gbnVtYmVyX3QgPSBcImNhbWxfanNfZnJvbV9uYXRpdmVpbnRcIlxuXG5leHRlcm5hbCB0b19uYXRpdmVpbnQgOiBudW1iZXJfdCAtPiBuYXRpdmVpbnQgPSBcImNhbWxfanNfdG9fbmF0aXZlaW50XCJcblxuZXh0ZXJuYWwgdHlwZW9mIDogXyB0IC0+IGpzX3N0cmluZyB0ID0gXCJjYW1sX2pzX3R5cGVvZlwiXG5cbmV4dGVybmFsIGluc3RhbmNlb2YgOiBfIHQgLT4gXyBjb25zdHIgLT4gYm9vbCA9IFwiY2FtbF9qc19pbnN0YW5jZW9mXCJcblxubGV0IGlzTmFOIChpIDogJ2EpIDogYm9vbCA9XG4gIHRvX2Jvb2wgKFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMuaXNOYU4gW3wgVW5zYWZlLmluamVjdCBpIHxdKVxuXG5sZXQgcGFyc2VJbnQgKHMgOiBqc19zdHJpbmcgdCkgOiBpbnQgPVxuICBsZXQgcyA9IFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMucGFyc2VJbnQgW3wgVW5zYWZlLmluamVjdCBzIHxdIGluXG4gIGlmIGlzTmFOIHMgdGhlbiBmYWlsd2l0aCBcInBhcnNlSW50XCIgZWxzZSBzXG5cbmxldCBwYXJzZUZsb2F0IChzIDoganNfc3RyaW5nIHQpIDogbnVtYmVyX3QgPVxuICBsZXQgcyA9IFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMucGFyc2VGbG9hdCBbfCBVbnNhZmUuaW5qZWN0IHMgfF0gaW5cbiAgaWYgaXNOYU4gcyB0aGVuIGZhaWx3aXRoIFwicGFyc2VGbG9hdFwiIGVsc2Ugc1xuXG5sZXQgXyA9XG4gIFByaW50ZXhjLnJlZ2lzdGVyX3ByaW50ZXIgKGZ1biBlIC0+XG4gICAgICBpZiBpbnN0YW5jZW9mIChPYmoubWFnaWMgZSA6IDwgLi4gPiB0KSBlcnJvcl9jb25zdHJcbiAgICAgIHRoZW5cbiAgICAgICAgbGV0IGUgPSBKc19lcnJvci5vZl9lcnJvciAoT2JqLm1hZ2ljIGUgOiBlcnJvciB0KSBpblxuICAgICAgICBTb21lIChKc19lcnJvci50b19zdHJpbmcgZSlcbiAgICAgIGVsc2VcbiAgICAgICAgbWF0Y2ggZSB3aXRoXG4gICAgICAgIHwgSnNfZXJyb3IuRXhuIGUgLT4gU29tZSAoSnNfZXJyb3IudG9fc3RyaW5nIGUpXG4gICAgICAgIHwgXyAtPiBOb25lKVxuXG5sZXQgZXhwb3J0X2pzIChmaWVsZCA6IGpzX3N0cmluZyB0KSB4ID1cbiAgVW5zYWZlLnNldFxuICAgIChVbnNhZmUucHVyZV9qc19leHByIFwianNvb19leHBvcnRzXCIpXG4gICAgZmllbGRcbiAgICAoaWZcbiAgICAgICBTdHJpbmcuZXF1YWwgKEpzLnRvX3N0cmluZyAodHlwZW9mIChPYmoubWFnaWMgeCkpKSBcImZ1bmN0aW9uXCJcbiAgICAgICAoKiBmdW5jdGlvbiB3aXRoIGFyaXR5L2xlbmd0aCBlcXVhbCB0byB6ZXJvIGFyZSBhbHJlYWR5IHdyYXBwZWQgKilcbiAgICAgICAmJiBVbnNhZmUuZ2V0IChPYmoubWFnaWMgeCkgKEpzLnN0cmluZyBcImxlbmd0aFwiKSA+IDBcbiAgICAgdGhlbiBPYmoubWFnaWMgKHdyYXBfY2FsbGJhY2sgKE9iai5tYWdpYyB4KSlcbiAgICAgZWxzZSB4KVxuXG5sZXQgZXhwb3J0IGZpZWxkIHggPSBleHBvcnRfanMgKHN0cmluZyBmaWVsZCkgeFxuXG5sZXQgZXhwb3J0X2FsbCBvYmogPVxuICBsZXQga2V5cyA9IG9iamVjdF9rZXlzIG9iaiBpblxuICBrZXlzIyNmb3JFYWNoXG4gICAgKHdyYXBfY2FsbGJhY2sgKGZ1biAoa2V5IDoganNfc3RyaW5nIHQpIF8gXyAtPiBleHBvcnRfanMga2V5IChVbnNhZmUuZ2V0IG9iaiBrZXkpKSlcblxuKCoqKiopXG5cbigqIERFUFJFQ0FURUQgKilcblxudHlwZSBmbG9hdF9wcm9wID0gbnVtYmVyX3QgcHJvcFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2pzX2dldCIsImNhbWxfanNfc2V0IiwiY2FtbF9qc193cmFwX2NhbGxiYWNrIiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJKc19vZl9vY2FtbF9JbXBvcnQiLCJTdGRsaWIiLCJKc29vX3J1bnRpbWUiLCJTdGRsaWJfUHJpbnRleGMiLCJnbG9iYWwiLCJudWxsJCIsInVuZGVmaW5lZCQiLCJyZXR1cm4kIiwibWFwIiwieCIsImJpbmQiLCJ0ZXN0IiwiaXRlciIsImNhc2UkIiwiZyIsImdldCIsIm9wdGlvbiIsInRvX29wdGlvbiIsImNvZXJjZSIsImNvZXJjZV9vcHQiLCJzdHJpbmdfY29uc3RyIiwicmVnRXhwIiwib2JqZWN0X2NvbnN0cnVjdG9yIiwib2JqZWN0X2tleXMiLCJ0NCIsImFycmF5X2NvbnN0cnVjdG9yIiwiYXJyYXlfbWFwIiwidDYiLCJjYiIsImlkeCIsInBhcmFtIiwiYXJyYXlfbWFwaSIsInN0cl9hcnJheSIsIm1hdGNoX3Jlc3VsdCIsImRhdGVfY29uc3RyIiwibWF0aCIsImVycm9yX2NvbnN0ciIsImluY2x1ZGUiLCJyYWlzZSIsImV4bl93aXRoX2pzX2JhY2t0cmFjZSIsIm9mX2V4biIsIkVycm9yIiwibmFtZSIsInQxMSIsIm1lc3NhZ2UiLCJ0MTIiLCJzdGFjayIsInQxMyIsInRvX3N0cmluZyIsInQxNCIsInJhaXNlX2pzX2Vycm9yIiwiZSIsInN0cmluZ19vZl9lcnJvciIsIkpTT04iLCJkZWNvZGVVUkkiLCJzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwidW5lc2NhcGUiLCJpc05hTiIsImkiLCJwYXJzZUludCIsInBhcnNlRmxvYXQiLCJleHBvcnRfanMiLCJmaWVsZCIsImV4cG9ydCQiLCJleHBvcnRfYWxsIiwib2JqIiwia2V5cyIsInQyNiIsImtleSIsIkpzX29mX29jYW1sX0pzIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQywwQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsU0NvRWlCO0FBQUEsSUFBQUMsUUFvQ0s7QUFBQSxJQUFBQyxhQUlRO0FBQUEsWUFBQUMsUUFBQSxHRDVHOUI7QUFBQSxZQUFBQyxJQUFBQyxHQUFBZCxHQ3VKa0MsNEJBQXVCLGdCQUFLO0FBQUEsWUFBQWUsS0FBQUQsR0FBQWQsR0FFM0IsNEJBQWdCLGdCQUFHO0FBQUEsWUFBQWdCLEtBQUFGLEdBRWxCO0FBQUEsWUFBQUcsS0FBQUgsR0FBQWQ7QUFBQUEsUUFBQSxJQUVLO0FBQUEsZUFBTSxvQkFBRztBQUFBO0FBQUEsWUFBQWtCLE1BQUFKLEdBQUFkLEdBQUFtQjtBQUFBQSxJQUViLG9CQUFNLG1CQUFVLGdCQUFHO0FBQUE7QUFBQSxZQUFBQyxJQUFBTixHQUFBZCxHQUV0QixvQkFBTSxvQkFBVztBQUFBLFlBQUFxQixPQUFBUCxHQUc3QyxRQUNVLGtCQUFBQSxNQURWLE1BRVksV0FBUTtBQUFBLFlBQUFRLFVBQUFSLEdBUFcsOEJBUzBCO0FBQUEsWUFBQUYsU0FBQSxHRHhLL0Q7QUFBQSxZQUFBQyxNQUFBQyxHQUFBZDtBQUFBQSxJQ3NMOEMsdUNBQTRCLGdCQUFLO0FBQUE7QUFBQSxZQUFBZSxPQUFBRCxHQUFBZDtBQUFBQSxJQUVoQyx1Q0FBcUIsZ0JBQUc7QUFBQTtBQUFBLFlBQUFnQixPQUFBRixHQUV2QjtBQUFBLFlBQUFHLE9BQUFILEdBQUFkO0FBQUFBLFFBQUEsSUFFSztBQUFBLGVBQU0sb0JBQUc7QUFBQTtBQUFBLFlBQUFrQixPQUFBSixHQUFBZCxHQUFBbUI7QUFBQUEsSUFFYiwwQkFBTSxtQkFBVSxnQkFBRztBQUFBO0FBQUEsWUFBQUMsTUFBQU4sR0FBQWQsR0FFdEIsMEJBQU0sb0JBQVc7QUFBQSxZQUFBcUIsU0FBQVA7QUFBQUEsSUFHekQsUUFDVTtBQUFBLFFBQUFBLE1BRFY7QUFBQSxJQUVZO0FBQUEsR0FBUTtBQUFBLFlBQUFRLFlBQUFSLEdBUHVCLG9DQVNjO0FBQUEsWUFBQVMsT0FBQVQsR0FBQWQsR0FBQW1CO0FBQUFBLFFBQUFMLE1BS2xDO0FBQUEsSUEzQ0ssc0JBMkNZLHNCQUFJO0FBQUE7QUFBQSxZQUFBVSxXQUFBVixHQUFBZCxHQUFBbUI7QUFBQUEsUUFBQUwsTUFFakI7QUFBQSxJQTdDQyxzQkE2Q3lCLHNCQUFJO0FBQUE7QUFBQTtBQUFBLElBQUFXLGdCQStLM0M7QUFBQSxJQUFBQyxTQUVQO0FBQUEsSUFBQUMscUJBNkVZO0FBQUEsWUFBQUMsWUFBQUMsSUFFb0Isa0NBQTBCO0FBQUEsT0FBQUMsb0JBRS9DO0FBQUEsWUFBQUMsVUFBQS9CLEdBQUFnQztBQUFBQTtBQUFBQSxLQUFBQztBQUFBQSxPQWNhO0FBQUEsa0JBQUFuQixHQUFBb0IsS0FBQUMsT0FBZ0MsdUJBQUc7QUFBQSxJQUYzRCxpQkFFNkQ7QUFBQTtBQUFBLFlBQUFDLFdBQUFwQyxHQUFBZ0M7QUFBQUE7QUFBQUEsS0FBQUM7QUFBQUEsT0FFcEM7QUFBQSxrQkFBQW5CLEdBQUFvQixLQUFBQyxPQUErQiw0QkFBTztBQUFBLElBSi9ELGlCQUlpRTtBQUFBO0FBQUEsWUFBQUUsVUFBQSxHRGhlOUU7QUFBQSxZQUFBQyxhQUFBO0FBQUE7QUFBQSxJQUFBQyxjQ3dsQmtCO0FBQUEsSUFBQUMsT0FtRlA7QUFBQSxJQUFBQyxlQVlRO0FBQUEsSUFBQUMsVUFBc0I7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLFlBQUFDLEtBQUFDLEtBVzFCLHdDQUE2QjtBQUFBLFlBQUFDLFFBQUFDLEtBRTFCLDJDQUFnQztBQUFBLFlBQUFDLE1BQUFDO0FBQUFBLFFBQUF0QyxJQUd2QixlQWhqQk8scUJBQXVCO0FBQUEsSUFnakJDO0FBQUE7QUFBQSxZQUFBdUMsVUFBQUMsS0FFNUIsT0FBVix3QkFBVSxlQUFzQjtBQUFBLFlBQUFDLGVBQUFDLEdBd0I3QixlQUFxQztBQUFBLFlBQUFDLGdCQUFBRCxHQUVwQyxtQkFBd0M7QUFBQSxPQUFBRSxPQVkzQztBQUFBLFlBQUFDLFVBQUFDLEdBR25CLDBCQUErRDtBQUFBLFlBQUFDLG1CQUFBRCxHQUcvRCxtQ0FBd0U7QUFBQSxZQUFBRSxVQUFBRixHQUd4RSwwQkFBK0Q7QUFBQSxZQUFBRyxtQkFBQUgsR0FHL0QsbUNBQXdFO0FBQUEsWUFBQUksT0FBQUosR0FHeEUsdUJBQTREO0FBQUEsWUFBQUssU0FBQUwsR0FHNUQseUJBQThEO0FBQUEsWUFBQU0sTUFBQUMsR0FtQ3RELDBCQUE2RDtBQUFBLFlBQUFDLFNBQUFSO0FBQUFBLFFBQUFBLE1BRzdEO0FBQUEsSUFDTCxvQkFBYSxzQ0FBMEI7QUFBQTtBQUFBLFlBQUFTLFdBQUFUO0FBQUFBLFFBQUFBLE1BR2xDO0FBQUEsSUFDTCxvQkFBYSx3Q0FBNEI7QUFBQTtBQUFBLEdBRzVDO0FBQUE7QUFBQSxjQUFBSjtBQUFBQSxNQUN1RCw4QkFHNUMsd0JBQXNCO0FBQUEsTUFFM0IsbUJBRU87QUFBQSxVQUFBQSxNQUZQO0FBQUEsTUFDeUIsMEJBQXNCO0FBQUEsS0FDcEM7QUFBQSxZQUFBYyxVQUFBQyxPQUFBekQ7QUFBQUE7QUFBQUEsS0FBQSxJQU9DO0FBQUE7QUFBQSxPQUFiO0FBQUEseUJBR2E7QUFBQTtBQUFBLElBQ1I7QUFBQTtBQUFBLFlBQUEwRCxRQUFBRCxPQUFBekQ7QUFBQUEsSUFFbUIsT0FBYyxVQUFkLDBDQUFnQjtBQUFBO0FBQUEsWUFBQTJELFdBQUFDO0FBQUFBO0FBQUFBLEtBQUFDLE9BdFhGO0FBQUEsS0FBQUM7QUFBQUEsT0EyWHpDO0FBQUEsa0JBQUFDLEtBQUEsR0FBQTFDLE9BQWlGO0FBQUEsSUFBRTtBQUFBO0FBQUE7QUFBQSxJQUFBMkM7QUFBQUEsTUFsQm5FO0FBQUE7QUFBQSxtQkR2ekJwQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0N1ekJvQjtBQUFBO0FBQUEsRUR2ekJwQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjY2NjE2LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeF9icm93c2VyLmVvYmpzL2pzb28vZHVuZV9fZXhlX19TeF9icm93c2VyLmNtby5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvYnJvd3Nlci9zeF9icm93c2VyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIHN4X2Jyb3dzZXIubWwg4oCUIE9DYW1sIFNYIGtlcm5lbCBjb21waWxlZCB0byBXQVNNL0pTIGZvciBicm93c2VyIHVzZS5cblxuICAgIEV4cG9zZXMgdGhlIENFSyBtYWNoaW5lLCBieXRlY29kZSBWTSwgcGFyc2VyLCBhbmQgcHJpbWl0aXZlcyBhcyBhXG4gICAgZ2xvYmFsIFtTeEtlcm5lbF0gb2JqZWN0IHRoYXQgdGhlIEpTIHBsYXRmb3JtIGxheWVyIGJpbmRzIHRvLlxuXG4gICAgRnJlc2ggaW1wbGVtZW50YXRpb24gb24gdGhlIG9jYW1sLXZtIGJyYW5jaCDigJQgYnVpbGRzIG9uIHRoZSBieXRlY29kZVxuICAgIFZNICsgbGF6eSBKSVQgaW5mcmFzdHJ1Y3R1cmUuICopXG5cbm9wZW4gSnNfb2Zfb2NhbWxcbm9wZW4gU3hfdHlwZXNcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBPcGFxdWUgdmFsdWUgaGFuZGxlIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiBOb24tcHJpbWl0aXZlIFNYIHZhbHVlcyAobGFtYmRhcywgY29tcG9uZW50cywgc2lnbmFscywgZXRjLikgYXJlICAgICopXG4oKiBzdG9yZWQgaGVyZSBhbmQgcmVwcmVzZW50ZWQgb24gdGhlIEpTIHNpZGUgYXMgb2JqZWN0cyB3aXRoIGFuICAgICAgICopXG4oKiBfX3N4X2hhbmRsZSBpbnRlZ2VyIGtleS4gIFByZXNlcnZlcyBpZGVudGl0eSBhY3Jvc3MgSlPihpRPQ2FtbC4gICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCBfbmV4dF9oYW5kbGUgPSByZWYgMFxubGV0IF9oYW5kbGVfdGFibGUgOiAoaW50LCB2YWx1ZSkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgMjU2XG5cbmxldCBhbGxvY19oYW5kbGUgKHYgOiB2YWx1ZSkgOiBpbnQgPVxuICBsZXQgaWQgPSAhX25leHRfaGFuZGxlIGluXG4gIGluY3IgX25leHRfaGFuZGxlO1xuICBIYXNodGJsLnJlcGxhY2UgX2hhbmRsZV90YWJsZSBpZCB2O1xuICBpZFxuXG5sZXQgZ2V0X2hhbmRsZSAoaWQgOiBpbnQpIDogdmFsdWUgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IF9oYW5kbGVfdGFibGUgaWQgd2l0aFxuICB8IFNvbWUgdiAtPiB2XG4gIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJJbnZhbGlkIFNYIGhhbmRsZTogJWRcIiBpZCkpXG5cbigqIEpTLXNpZGUgb3BhcXVlIGhvc3Qgb2JqZWN0IHRhYmxlLlxuICAgSG9zdCBvYmplY3RzIChET00gZWxlbWVudHMsIGNvbnNvbGUsIGV0Yy4pIGFyZSBzdG9yZWQgaGVyZSB0byBwcmVzZXJ2ZVxuICAgaWRlbnRpdHkgYWNyb3NzIHRoZSBPQ2FtbOKGlEpTIGJvdW5kYXJ5LiBSZXByZXNlbnRlZCBhcyBEaWN0IHdpdGhcbiAgIF9faG9zdF9oYW5kbGUga2V5IG9uIHRoZSBPQ2FtbCBzaWRlLiAqKVxubGV0IF9uZXh0X2hvc3RfaGFuZGxlID0gcmVmIDBcbmxldCBfYWxsb2NfaG9zdF9oYW5kbGUgPSBKcy5VbnNhZmUucHVyZV9qc19leHByXG4gIFwiKGZ1bmN0aW9uKCkgeyB2YXIgdCA9IHt9OyB2YXIgbiA9IDA7IHJldHVybiB7IHB1dDogZnVuY3Rpb24ob2JqKSB7IHZhciBpZCA9IG4rKzsgdFtpZF0gPSBvYmo7IHJldHVybiBpZDsgfSwgZ2V0OiBmdW5jdGlvbihpZCkgeyByZXR1cm4gdFtpZF07IH0gfTsgfSkoKVwiXG5sZXQgaG9zdF9wdXQgKG9iaiA6IEpzLlVuc2FmZS5hbnkpIDogaW50ID1cbiAgbGV0IGlkID0gIV9uZXh0X2hvc3RfaGFuZGxlIGluXG4gIGluY3IgX25leHRfaG9zdF9oYW5kbGU7XG4gIGlnbm9yZSAoSnMuVW5zYWZlLm1ldGhfY2FsbCBfYWxsb2NfaG9zdF9oYW5kbGUgXCJwdXRcIiBbfCBvYmogfF0pO1xuICBpZFxubGV0IGhvc3RfZ2V0X2pzIChpZCA6IGludCkgOiBKcy5VbnNhZmUuYW55ID1cbiAgSnMuVW5zYWZlLm1ldGhfY2FsbCBfYWxsb2NfaG9zdF9oYW5kbGUgXCJnZXRcIiBbfCBKcy5VbnNhZmUuaW5qZWN0IGlkIHxdXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogR2xvYmFsIGVudmlyb25tZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqIENsZWFyIHNjb3BlIHN0YWNrcyBhdCBzdGFydHVwICopXG5sZXQgKCkgPSBTeF9wcmltaXRpdmVzLnNjb3BlX2NsZWFyX2FsbCAoKVxuXG5sZXQgZ2xvYmFsX2VudiA9IG1ha2VfZW52ICgpXG5sZXQgX3N4X3JlbmRlcl9tb2RlID0gcmVmIGZhbHNlXG5cbmxldCBjYWxsX3N4X2ZuIChmbiA6IHZhbHVlKSAoYXJncyA6IHZhbHVlIGxpc3QpIDogdmFsdWUgPVxuICBsZXQgcmVzdWx0ID0gU3hfcnVudGltZS5zeF9jYWxsIGZuIGFyZ3MgaW5cbiAgIVN4X3ByaW1pdGl2ZXMuX3N4X3RyYW1wb2xpbmVfZm4gcmVzdWx0XG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogVmFsdWUgY29udmVyc2lvbjogT0NhbWwgPC0+IEpTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqKiBUYWcgYSBKUyBmdW5jdGlvbiB3aXRoIF9fc3hfaGFuZGxlIGFuZCBfdHlwZSBwcm9wZXJ0aWVzLiAqKVxubGV0IF90YWdfZm4gPSBKcy5VbnNhZmUucHVyZV9qc19leHByXG4gIFwiKGZ1bmN0aW9uKGZuLCBoYW5kbGUsIHR5cGUpIHsgZm4uX19zeF9oYW5kbGUgPSBoYW5kbGU7IGZuLl90eXBlID0gdHlwZTsgcmV0dXJuIGZuOyB9KVwiXG5cbmxldCByZWMgdmFsdWVfdG9fanMgKHYgOiB2YWx1ZSkgOiBKcy5VbnNhZmUuYW55ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgTmlsIC0+IEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbFxuICB8IEJvb2wgYiAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5ib29sIGIpXG4gIHwgTnVtYmVyIG4gLT4gSnMuVW5zYWZlLmluamVjdCAoSnMubnVtYmVyX29mX2Zsb2F0IG4pXG4gIHwgU3RyaW5nIHMgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIHMpXG4gIHwgUmF3SFRNTCBzIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBzKVxuICB8IFN5bWJvbCBzIC0+XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuVW5zYWZlLm9iaiBbfFxuICAgICAgKFwiX3R5cGVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwic3ltYm9sXCIpKTtcbiAgICAgIChcIm5hbWVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIHMpKSB8XSlcbiAgfCBLZXl3b3JkIGsgLT5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5VbnNhZmUub2JqIFt8XG4gICAgICAoXCJfdHlwZVwiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJrZXl3b3JkXCIpKTtcbiAgICAgIChcIm5hbWVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIGspKSB8XSlcbiAgfCBMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSAtPlxuICAgIGxldCBhcnIgPSBpdGVtcyB8PiBMaXN0Lm1hcCB2YWx1ZV90b19qcyB8PiBBcnJheS5vZl9saXN0IGluXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuVW5zYWZlLm9iaiBbfFxuICAgICAgKFwiX3R5cGVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwibGlzdFwiKSk7XG4gICAgICAoXCJpdGVtc1wiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5hcnJheSBhcnIpKSB8XSlcbiAgfCBEaWN0IGQgLT5cbiAgICAoKiBDaGVjayBmb3IgX19ob3N0X2hhbmRsZSDigJQgcmV0dXJuIG9yaWdpbmFsIEpTIG9iamVjdCAqKVxuICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfX2hvc3RfaGFuZGxlXCIgd2l0aFxuICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBob3N0X2dldF9qcyAoaW50X29mX2Zsb2F0IG4pXG4gICAgIHwgXyAtPlxuICAgICAgIGxldCBvYmogPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwiX3R5cGVcIikgKEpzLnN0cmluZyBcImRpY3RcIik7XG4gICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+XG4gICAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIGspICh2YWx1ZV90b19qcyB2KSkgZDtcbiAgICAgICBKcy5VbnNhZmUuaW5qZWN0IG9iailcbiAgKCogQ2FsbGFibGUgdmFsdWVzOiB3cmFwIGFzIEpTIGZ1bmN0aW9ucyB3aXRoIF9fc3hfaGFuZGxlICopXG4gIHwgTGFtYmRhIF8gfCBOYXRpdmVGbiBfIHwgQ29udGludWF0aW9uIF8gfCBDYWxsY2NDb250aW51YXRpb24gXyB8IFZtQ2xvc3VyZSBfIC0+XG4gICAgbGV0IGhhbmRsZSA9IGFsbG9jX2hhbmRsZSB2IGluXG4gICAgbGV0IGlubmVyID0gSnMud3JhcF9jYWxsYmFjayAoZnVuIGFyZ3NfanMgLT5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYXJnID0ganNfdG9fdmFsdWUgYXJnc19qcyBpblxuICAgICAgICBsZXQgYXJncyA9IG1hdGNoIGFyZyB3aXRoIE5pbCAtPiBbXSB8IF8gLT4gW2FyZ10gaW5cbiAgICAgICAgbGV0IHJlc3VsdCA9IGNhbGxfc3hfZm4gdiBhcmdzIGluXG4gICAgICAgIHZhbHVlX3RvX2pzIHJlc3VsdFxuICAgICAgd2l0aFxuICAgICAgfCBTeF92bS5WbVN1c3BlbmRlZCAocmVxdWVzdCwgdm0pIC0+XG4gICAgICAgICgqIFRyYW5zZmVyIHJldXNlX3N0YWNrIGZyb20gdGhlIGFjdGl2ZSBWTSB0byB0aGUgc3VzcGVuc2lvbiBWTS5cbiAgICAgICAgICAgY2FsbF9jbG9zdXJlX3JldXNlIHNhdmVzIGNhbGxlciBmcmFtZXMgb24gX2FjdGl2ZV92bSBBRlRFUiB0aGVcbiAgICAgICAgICAgaW5uZXIgVm1TdXNwZW5kZWQgcHJvcGFnYXRlcywgc28gdGhlIHN1c3BlbnNpb24gVk0gZG9lc24ndCBoYXZlIHRoZW0uICopXG4gICAgICAgIChtYXRjaCAhU3hfdm0uX2FjdGl2ZV92bSB3aXRoXG4gICAgICAgICB8IFNvbWUgYWN0aXZlIHdoZW4gYWN0aXZlLlN4X3ZtLnJldXNlX3N0YWNrIDw+IFtdIC0+XG4gICAgICAgICAgIHZtLlN4X3ZtLnJldXNlX3N0YWNrIDwtIHZtLlN4X3ZtLnJldXNlX3N0YWNrIEAgYWN0aXZlLlN4X3ZtLnJldXNlX3N0YWNrO1xuICAgICAgICAgICBhY3RpdmUuU3hfdm0ucmV1c2Vfc3RhY2sgPC0gW11cbiAgICAgICAgIHwgXyAtPiAoKSk7XG4gICAgICAgICgqIEJ1aWxkIHtzdXNwZW5kZWQsIHJlcXVlc3QsIHJlc3VtZX0gYW5kIGhhbmQgdG8gX2RyaXZlQXN5bmMuXG4gICAgICAgICAgIFRoZSByZXN1bWUgY2FsbGJhY2sgbXVzdCBhbHNvIGNhdGNoIFZtU3VzcGVuZGVkIGZvciBjaGFpbmluZ1xuICAgICAgICAgICAoZS5nLiByZXBlYXQgMyB0aW1lcyAuLi4gd2FpdCAuLi4gZW5kKS4gKilcbiAgICAgICAgbGV0IHJlYyBtYWtlX3N1c3BlbnNpb24gcmVxIHYgPVxuICAgICAgICAgIGxldCBvYmogPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgICAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwic3VzcGVuZGVkXCIpIChKcy5VbnNhZmUuaW5qZWN0IEpzLl90cnVlKTtcbiAgICAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwicmVxdWVzdFwiKSAodmFsdWVfdG9fanMgcmVxKTtcbiAgICAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwicmVzdW1lXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gcmVzdWx0X2pzIC0+XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0ganNfdG9fdmFsdWUgcmVzdWx0X2pzIGluXG4gICAgICAgICAgICB0cnkgdmFsdWVfdG9fanMgKFN4X3ZtLnJlc3VtZV92bSB2IHJlc3VsdClcbiAgICAgICAgICAgIHdpdGhcbiAgICAgICAgICAgIHwgU3hfdm0uVm1TdXNwZW5kZWQgKHJlcTIsIHZtMikgLT5cbiAgICAgICAgICAgICAgKCogUmV0dXJuIHN1c3BlbnNpb24gb2JqZWN0IOKAlCB0aGUgSlMgZHJpdmVBc3luYyBjYWxsZXIgaGFuZGxlcyBzY2hlZHVsaW5nICopXG4gICAgICAgICAgICAgIEpzLlVuc2FmZS5pbmplY3QgKG1ha2Vfc3VzcGVuc2lvbiByZXEyIHZtMilcbiAgICAgICAgICAgIHwgRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICAgICAgICAgKCogRW5oYW5jZWQgZXJyb3I6IHNob3cgcGVuZGluZ19jZWsga29udCwgcmV1c2Vfc3RhY2ssIGFuZCBWTSBmcmFtZSBpbmZvICopXG4gICAgICAgICAgICAgIGxldCB2bV9mcmFtZV9uYW1lcyA9IFN0cmluZy5jb25jYXQgXCIsXCIgKExpc3QubWFwIChmdW4gZiAtPlxuICAgICAgICAgICAgICAgIG1hdGNoIGYuU3hfdm0uY2xvc3VyZS5TeF90eXBlcy52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiXG4gICAgICAgICAgICAgICkgdi5TeF92bS5mcmFtZXMpIGluXG4gICAgICAgICAgICAgIGxldCBleHRyYSA9IFByaW50Zi5zcHJpbnRmIFwiIFt2bTogcGVuZGluZ19jZWs9JWIgcmV1c2U9JWQgZnJhbWVzPVslc10gc3A9JWRdXCJcbiAgICAgICAgICAgICAgICAodi5TeF92bS5wZW5kaW5nX2NlayA8PiBOb25lKVxuICAgICAgICAgICAgICAgIChMaXN0Lmxlbmd0aCB2LlN4X3ZtLnJldXNlX3N0YWNrKVxuICAgICAgICAgICAgICAgIHZtX2ZyYW1lX25hbWVzXG4gICAgICAgICAgICAgICAgdi5TeF92bS5zcCBpblxuICAgICAgICAgICAgICBpZ25vcmUgKEpzLlVuc2FmZS5tZXRoX2NhbGxcbiAgICAgICAgICAgICAgICAoSnMuVW5zYWZlLmdldCBKcy5VbnNhZmUuZ2xvYmFsIChKcy5zdHJpbmcgXCJjb25zb2xlXCIpKVxuICAgICAgICAgICAgICAgIFwiZXJyb3JcIiBbfCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiW3N4XSByZXN1bWU6IFwiIF4gbXNnIF4gZXh0cmEpKSB8XSk7XG4gICAgICAgICAgICAgIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuICAgICAgICAgIG9ialxuICAgICAgICBpblxuICAgICAgICBsZXQgcyA9IG1ha2Vfc3VzcGVuc2lvbiByZXF1ZXN0IHZtIGluXG4gICAgICAgIGxldCBkcml2ZSA9IEpzLlVuc2FmZS5nZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiX2RyaXZlQXN5bmNcIikgaW5cbiAgICAgICAgaWYgbm90IChKcy5VbnNhZmUuZXF1YWxzIGRyaXZlIEpzLnVuZGVmaW5lZCkgdGhlblxuICAgICAgICAgIGlnbm9yZSAoSnMuVW5zYWZlLmZ1bl9jYWxsIGRyaXZlIFt8IEpzLlVuc2FmZS5pbmplY3QgcyB8XSk7XG4gICAgICAgIEpzLlVuc2FmZS5pbmplY3Qgc1xuICAgICAgfCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICBsZXQgZm5faW5mbyA9IFByaW50Zi5zcHJpbnRmIFwiIFtjYWxsYmFjayAlcyBoYW5kbGU9JWRdXCIgKHR5cGVfb2YgdikgaGFuZGxlIGluXG4gICAgICAgIGlnbm9yZSAoSnMuVW5zYWZlLm1ldGhfY2FsbFxuICAgICAgICAgIChKcy5VbnNhZmUuZ2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcImNvbnNvbGVcIikpXG4gICAgICAgICAgXCJlcnJvclwiIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJbc3hdIFwiIF4gbXNnIF4gZm5faW5mbykpIHxdKTtcbiAgICAgICAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsXG4gICAgICB8IGV4biAtPlxuICAgICAgICBsZXQgZm5faW5mbyA9IFByaW50Zi5zcHJpbnRmIFwiIFtjYWxsYmFjayAlcyBoYW5kbGU9JWRdXCIgKHR5cGVfb2YgdikgaGFuZGxlIGluXG4gICAgICAgIGlnbm9yZSAoSnMuVW5zYWZlLm1ldGhfY2FsbFxuICAgICAgICAgIChKcy5VbnNhZmUuZ2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcImNvbnNvbGVcIikpXG4gICAgICAgICAgXCJlcnJvclwiIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJbc3hdIFVOQ0FVR0hUOiBcIiBeIFByaW50ZXhjLnRvX3N0cmluZyBleG4gXiBmbl9pbmZvKSkgfF0pO1xuICAgICAgICBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGwpIGluXG4gICAgSnMuVW5zYWZlLmZ1bl9jYWxsIF90YWdfZm4gW3xcbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgaW5uZXI7XG4gICAgICBKcy5VbnNhZmUuaW5qZWN0IGhhbmRsZTtcbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAodHlwZV9vZiB2KSkgfF1cbiAgKCogTm9uLWNhbGxhYmxlIGNvbXBvdW5kOiB0YWdnZWQgb2JqZWN0IHdpdGggaGFuZGxlICopXG4gIHwgXyAtPlxuICAgIGxldCBoYW5kbGUgPSBhbGxvY19oYW5kbGUgdiBpblxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLlVuc2FmZS5vYmogW3xcbiAgICAgIChcIl90eXBlXCIsIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAodHlwZV9vZiB2KSkpO1xuICAgICAgKFwiX19zeF9oYW5kbGVcIiwgSnMuVW5zYWZlLmluamVjdCBoYW5kbGUpIHxdKVxuXG5hbmQganNfdG9fdmFsdWUgKGpzIDogSnMuVW5zYWZlLmFueSkgOiB2YWx1ZSA9XG4gIGlmIEpzLlVuc2FmZS5lcXVhbHMganMgSnMubnVsbCB8fCBKcy5VbnNhZmUuZXF1YWxzIGpzIEpzLnVuZGVmaW5lZCB0aGVuIE5pbFxuICBlbHNlXG4gICAgbGV0IHR5ID0gSnMudG9fc3RyaW5nIChKcy50eXBlb2YganMpIGluXG4gICAgbWF0Y2ggdHkgd2l0aFxuICAgIHwgXCJudW1iZXJcIiAtPiBOdW1iZXIgKEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSBqcykpXG4gICAgfCBcImJvb2xlYW5cIiAtPiBCb29sIChKcy50b19ib29sIChKcy5VbnNhZmUuY29lcmNlIGpzKSlcbiAgICB8IFwic3RyaW5nXCIgLT4gU3RyaW5nIChKcy50b19zdHJpbmcgKEpzLlVuc2FmZS5jb2VyY2UganMpKVxuICAgIHwgXCJmdW5jdGlvblwiIC0+XG4gICAgICBsZXQgaCA9IEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIl9fc3hfaGFuZGxlXCIpIGluXG4gICAgICBsZXQgaGFzX2hvc3RfY2IgPSBKcy50b19ib29sIChKcy5VbnNhZmUuY29lcmNlIChKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJfX2hvc3RfY2FsbGJhY2tcIikpKSBpblxuICAgICAgaWYgbm90IChKcy5VbnNhZmUuZXF1YWxzIGggSnMudW5kZWZpbmVkKSAmJiBub3QgaGFzX2hvc3RfY2IgdGhlblxuICAgICAgICBnZXRfaGFuZGxlIChKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgaCkgfD4gaW50X29mX2Zsb2F0KVxuICAgICAgZWxzZVxuICAgICAgICAoKiBQbGFpbiBKUyBmdW5jdGlvbiDigJQgc3RvcmUgYXMgaG9zdCBvYmplY3Qgc28gdmFsdWVfdG9fanNcbiAgICAgICAgICAgcmV0dXJucyB0aGUgT1JJR0lOQUwgSlMgZnVuY3Rpb24gd2hlbiBwYXNzZWQgdG8gaG9zdC1jYWxsLlxuICAgICAgICAgICBUaGlzIHByZXNlcnZlcyB3cmFwcGVycyBsaWtlIF9kcml2ZUFzeW5jIHRoYXQgaG9zdC1jYWxsYmFja1xuICAgICAgICAgICBhdHRhY2hlcyBmb3IgSU8gc3VzcGVuc2lvbiBoYW5kbGluZy4gKilcbiAgICAgICAgbGV0IGlkID0gaG9zdF9wdXQganMgaW5cbiAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAyIGluXG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiX19ob3N0X2hhbmRsZVwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBpZCkpO1xuICAgICAgICBEaWN0IGRcbiAgICB8IFwib2JqZWN0XCIgLT5cbiAgICAgIGxldCBoID0gSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIFwiX19zeF9oYW5kbGVcIikgaW5cbiAgICAgIGlmIG5vdCAoSnMuVW5zYWZlLmVxdWFscyBoIEpzLnVuZGVmaW5lZCkgdGhlblxuICAgICAgICBnZXRfaGFuZGxlIChKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgaCkgfD4gaW50X29mX2Zsb2F0KVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgdHlwZV9maWVsZCA9IEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIl90eXBlXCIpIGluXG4gICAgICAgIGlmIEpzLlVuc2FmZS5lcXVhbHMgdHlwZV9maWVsZCBKcy51bmRlZmluZWQgdGhlbiBiZWdpblxuICAgICAgICAgIGlmIEpzLnRvX2Jvb2wgKEpzLlVuc2FmZS5nbG9iYWwjIy5fQXJyYXkjI2lzQXJyYXkganMpIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGxldCBuID0gSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIChKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJsZW5ndGhcIikpKSB8PiBpbnRfb2ZfZmxvYXQgaW5cbiAgICAgICAgICAgIExpc3QgKExpc3QuaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgICAgICBqc190b192YWx1ZSAoSnMuYXJyYXlfZ2V0IChKcy5VbnNhZmUuY29lcmNlIGpzKSBpIHw+IEpzLk9wdGRlZi50b19vcHRpb24gfD4gT3B0aW9uLmdldCkpKVxuICAgICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgICAoKiBPcGFxdWUgaG9zdCBvYmplY3Qg4oCUIHN0b3JlIGluIEpTLXNpZGUgdGFibGUsIHJldHVybiBEaWN0IHdpdGggX19ob3N0X2hhbmRsZSAqKVxuICAgICAgICAgICAgbGV0IGlkID0gaG9zdF9wdXQganMgaW5cbiAgICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJfX2hvc3RfaGFuZGxlXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGlkKSk7XG4gICAgICAgICAgICBEaWN0IGRcbiAgICAgICAgICBlbmRcbiAgICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgICBsZXQgdGFnID0gSnMudG9fc3RyaW5nIChKcy5VbnNhZmUuY29lcmNlIHR5cGVfZmllbGQpIGluXG4gICAgICAgICAgbWF0Y2ggdGFnIHdpdGhcbiAgICAgICAgICB8IFwic3ltYm9sXCIgLT4gU3ltYm9sIChKcy50b19zdHJpbmcgKEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIm5hbWVcIikpKVxuICAgICAgICAgIHwgXCJrZXl3b3JkXCIgLT4gS2V5d29yZCAoSnMudG9fc3RyaW5nIChKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJuYW1lXCIpKSlcbiAgICAgICAgICB8IFwibGlzdFwiIC0+XG4gICAgICAgICAgICBsZXQgaXRlbXNfanMgPSBKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJpdGVtc1wiKSBpblxuICAgICAgICAgICAgbGV0IG4gPSBKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgKEpzLlVuc2FmZS5nZXQgaXRlbXNfanMgKEpzLnN0cmluZyBcImxlbmd0aFwiKSkpIHw+IGludF9vZl9mbG9hdCBpblxuICAgICAgICAgICAgTGlzdCAoTGlzdC5pbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgICAgIGpzX3RvX3ZhbHVlIChKcy5hcnJheV9nZXQgKEpzLlVuc2FmZS5jb2VyY2UgaXRlbXNfanMpIGkgfD4gSnMuT3B0ZGVmLnRvX29wdGlvbiB8PiBPcHRpb24uZ2V0KSkpXG4gICAgICAgICAgfCBcImRpY3RcIiAtPlxuICAgICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgICAgICAgICBsZXQga2V5cyA9IEpzLlVuc2FmZS5nbG9iYWwjIy5fT2JqZWN0IyNrZXlzIGpzIGluXG4gICAgICAgICAgICBsZXQgbGVuID0ga2V5cyMjLmxlbmd0aCBpblxuICAgICAgICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgICAgICAgbGV0IGsgPSBKcy50b19zdHJpbmcgKEpzLmFycmF5X2dldCBrZXlzIGkgfD4gSnMuT3B0ZGVmLnRvX29wdGlvbiB8PiBPcHRpb24uZ2V0KSBpblxuICAgICAgICAgICAgICBpZiBrIDw+IFwiX3R5cGVcIiB0aGVuXG4gICAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgayAoanNfdG9fdmFsdWUgKEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBrKSkpXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgRGljdCBkXG4gICAgICAgICAgfCBfIC0+IE5pbFxuICAgICAgICBlbmRcbiAgICB8IF8gLT4gTmlsXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogU2lkZS1jaGFubmVsIHJldHVybiAoYnlwYXNzZXMganNfb2Zfb2NhbWwgc3RyaXBwaW5nIHByb3BlcnRpZXMpICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCByZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCAodiA6IEpzLlVuc2FmZS5hbnkpIDogSnMuVW5zYWZlLmFueSA9XG4gIEpzLlVuc2FmZS5zZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiX19zeFJcIikgdjsgdlxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFBlcnNpc3RlbnQgVk0gZ2xvYmFscyDigJQgc3luY2VkIHdpdGggZ2xvYmFsX2VudiAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqIFN0cmluZy1rZXllZCBtaXJyb3Igb2YgZ2xvYmFsX2Vudi5iaW5kaW5ncyBmb3IgVm1DbG9zdXJlcy5cbiAgIFZtQ2xvc3VyZXMgZnJvbSBieXRlY29kZSBtb2R1bGVzIGhvbGQgdm1fZW52X3JlZiBwb2ludGluZyBoZXJlLlxuICAgTXVzdCBzdGF5IGluIHN5bmMgc28gVm1DbG9zdXJlcyBzZWUgcG9zdC1ib290IGRlZmluaXRpb25zLiAqKVxubGV0IF92bV9nbG9iYWxzIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDUxMlxubGV0ICgpID0gU3hfdHlwZXMuX2RlZmF1bHRfdm1fZ2xvYmFscyA6PSBfdm1fZ2xvYmFsc1xubGV0IF9pbl9iYXRjaCA9IHJlZiBmYWxzZVxuXG4oKiBTeW5jIGVuduKGklZNOiBjb3B5IGFsbCBiaW5kaW5ncyBmcm9tIGdsb2JhbF9lbnYuYmluZGluZ3MgdG8gX3ZtX2dsb2JhbHMuXG4gICBDYWxsZWQgYWZ0ZXIgQ0VLIGV2YWwvbG9hZCBzbyBWbUNsb3N1cmVzIGNhbiBzZWUgbmV3IGRlZmluaXRpb25zLiAqKVxubGV0IHN5bmNfZW52X3RvX3ZtICgpID1cbiAgSGFzaHRibC5pdGVyIChmdW4gaWQgdiAtPlxuICAgIEhhc2h0YmwucmVwbGFjZSBfdm1fZ2xvYmFscyAodW5pbnRlcm4gaWQpIHZcbiAgKSBnbG9iYWxfZW52LmJpbmRpbmdzXG5cbigqIEhvb2s6IGludGVyY2VwdCBlbnZfYmluZCBvbiBnbG9iYWxfZW52IHRvIGFsc28gdXBkYXRlIF92bV9nbG9iYWxzLlxuICAgT25seSBzeW5jIGJpbmRpbmdzIG9uIHRoZSBnbG9iYWwgZW52IOKAlCBsZXQgYmluZGluZ3MgaW4gY2hpbGQgZW52c1xuICAgbXVzdCBOT1QgbGVhayBpbnRvIF92bV9nbG9iYWxzICh0aGV5J2Qgb3ZlcndyaXRlIHJlYWwgZGVmaW5pdGlvbnMpLiAqKVxubGV0ICgpID1cbiAgU3hfdHlwZXMuX2Vudl9iaW5kX2hvb2sgOj0gU29tZSAoZnVuIGVudiBuYW1lIHYgLT5cbiAgICBpZiBlbnYgPT0gZ2xvYmFsX2VudiB0aGVuXG4gICAgICBIYXNodGJsLnJlcGxhY2UgX3ZtX2dsb2JhbHMgbmFtZSB2KVxuXG4oKiBSZXZlcnNlIGhvb2s6IHN5bmMgVk0gR0xPQkFMX1NFVCBtdXRhdGlvbnMgYmFjayB0byBnbG9iYWxfZW52LlxuICAgV2l0aG91dCB0aGlzLCBzZXQhIGluc2lkZSBKSVQtY29tcGlsZWQgZnVuY3Rpb25zIHdyaXRlcyB0byBfdm1fZ2xvYmFsc1xuICAgYnV0IGxlYXZlcyBnbG9iYWxfZW52IHN0YWxlIOKAlCBDRUsgcmVhZHMgdGhlbiBzZWUgdGhlIG9sZCB2YWx1ZS4gKilcbmxldCAoKSA9XG4gIFN4X3R5cGVzLl92bV9nbG9iYWxfc2V0X2hvb2sgOj0gU29tZSAoZnVuIG5hbWUgdiAtPlxuICAgIEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIChTeF90eXBlcy5pbnRlcm4gbmFtZSkgdilcblxuKCogU3ltYm9sIHJlc29sdmUgaG9vazogdHJhbnNwYXJlbnQgbGF6eSBtb2R1bGUgbG9hZGluZy5cbiAgIFdoZW4gR0xPQkFMX0dFVCBjYW4ndCBmaW5kIGEgc3ltYm9sLCB0aGlzIGNhbGxzIHRoZSBKUyBfX3Jlc29sdmUtc3ltYm9sXG4gICBuYXRpdmUgd2hpY2ggY2hlY2tzIHRoZSBtYW5pZmVzdCdzIHN5bWJvbOKGkmxpYnJhcnkgaW5kZXggYW5kIGxvYWRzIHRoZVxuICAgbGlicmFyeSB0aGF0IGV4cG9ydHMgaXQuICBBZnRlciBsb2FkaW5nLCB0aGUgc3ltYm9sIGlzIGluIF92bV9nbG9iYWxzLiAqKVxubGV0ICgpID1cbiAgU3hfdHlwZXMuX3N5bWJvbF9yZXNvbHZlX2hvb2sgOj0gU29tZSAoZnVuIG5hbWUgLT5cbiAgICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIl9fcmVzb2x2ZS1zeW1ib2xcIiB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgcmVzb2x2ZV9mbiAtPlxuICAgICAgKHRyeSBpZ25vcmUgKHJlc29sdmVfZm4gW1N0cmluZyBuYW1lXSkgd2l0aCBfIC0+ICgpKTtcbiAgICAgICgqIENoZWNrIGlmIHRoZSBzeW1ib2wgYXBwZWFyZWQgaW4gZ2xvYmFscyBhZnRlciB0aGUgbG9hZCAqKVxuICAgICAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBfdm1fZ2xvYmFscyBuYW1lIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IFNvbWUgdlxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICgqIEZhbGxiYWNrOiBjaGVjayBnbG9iYWxfZW52IGRpcmVjdGx5IGlmIHZtX2dsb2JhbHMgbWlzc2VkIHRoZSBzeW5jICopXG4gICAgICAgIEhhc2h0YmwuZmluZF9vcHQgZ2xvYmFsX2Vudi5iaW5kaW5ncyAoU3hfdHlwZXMuaW50ZXJuIG5hbWUpKVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIENvcmUgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgYXBpX3BhcnNlIHNyY19qcyA9XG4gIGxldCBzcmMgPSBKcy50b19zdHJpbmcgc3JjX2pzIGluXG4gIHRyeVxuICAgIGxldCB2YWx1ZXMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLmFycmF5ICh2YWx1ZXMgfD4gTGlzdC5tYXAgdmFsdWVfdG9fanMgfD4gQXJyYXkub2ZfbGlzdCkpXG4gIHdpdGggUGFyc2VfZXJyb3IgbXNnIC0+XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIlBhcnNlIGVycm9yOiBcIiBeIG1zZykpXG5cbigqKiBCdWlsZCBhIEpTIHN1c3BlbnNpb24gbWFya2VyIGZvciB0aGUgcGxhdGZvcm0gdG8gaGFuZGxlLlxuICAgIFJldHVybnMge3N1c3BlbmRlZDogdHJ1ZSwgb3A6IHN0cmluZywgcmVxdWVzdDogb2JqLCByZXN1bWU6IGZuKHJlc3VsdCl9ICopXG5sZXQgX21ha2VfanNfc3VzcGVuc2lvbiByZXF1ZXN0IHJlc3VtZV9mbiA9XG4gIGxldCBvYmogPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcInN1c3BlbmRlZFwiKSAoSnMuVW5zYWZlLmluamVjdCAoSnMuYm9vbCB0cnVlKSk7XG4gIGxldCBvcCA9IG1hdGNoIHJlcXVlc3Qgd2l0aFxuICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJvcFwiIHdpdGggU29tZSAoU3RyaW5nIHMpIC0+IHMgfCBfIC0+IFwidW5rbm93blwiKVxuICAgIHwgXyAtPiBcInVua25vd25cIiBpblxuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwib3BcIikgKEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBvcCkpO1xuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwicmVxdWVzdFwiKSAodmFsdWVfdG9fanMgcmVxdWVzdCk7XG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJyZXN1bWVcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biByZXN1bHRfanMgLT5cbiAgICBsZXQgcmVzdWx0ID0ganNfdG9fdmFsdWUgcmVzdWx0X2pzIGluXG4gICAgcmVzdW1lX2ZuIHJlc3VsdCkpO1xuICBvYmpcblxuKCoqIEhhbmRsZSBhbiBpbXBvcnQgc3VzcGVuc2lvbjogbG9hZCB0aGUgbGlicmFyeSBmcm9tIHRoZSBsaWJyYXJ5IHJlZ2lzdHJ5XG4gICAgb3IgcmV0dXJuIGEgc3VzcGVuc2lvbiBtYXJrZXIgdG8gSlMgZm9yIGFzeW5jIGxvYWRpbmcuICopXG5sZXQgaGFuZGxlX2ltcG9ydF9zdXNwZW5zaW9uIHJlcXVlc3QgPVxuICBsZXQgbGliX3NwZWMgPSBtYXRjaCByZXF1ZXN0IHdpdGhcbiAgICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwibGlicmFyeVwiIHdpdGggU29tZSB2IC0+IHYgfCBfIC0+IE5pbClcbiAgICB8IF8gLT4gTmlsIGluXG4gIGxldCBrZXkgPSBTeF9yZWYubGlicmFyeV9uYW1lX2tleSBsaWJfc3BlYyBpblxuICBpZiBTeF90eXBlcy5zeF90cnV0aHkgKFN4X3JlZi5saWJyYXJ5X2xvYWRlZF9wIGtleSkgdGhlblxuICAgIFNvbWUgTmlsICAoKiBBbHJlYWR5IGxvYWRlZCDigJQgcmVzdW1lIGltbWVkaWF0ZWx5ICopXG4gIGVsc2VcbiAgICBOb25lICAoKiBOb3QgbG9hZGVkIOKAlCBKUyBwbGF0Zm9ybSBtdXN0IGZldGNoIGl0ICopXG5cbmxldCBhcGlfZXZhbCBzcmNfanMgPVxuICBsZXQgc3JjID0gSnMudG9fc3RyaW5nIHNyY19qcyBpblxuICB0cnlcbiAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgIGxldCBlbnYgPSBFbnYgZ2xvYmFsX2VudiBpblxuICAgIGxldCByZXN1bHQgPSBMaXN0LmZvbGRfbGVmdCAoZnVuIF9hY2MgZXhwciAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgZW52KSBOaWwgZXhwcnMgaW5cbiAgICBzeW5jX2Vudl90b192bSAoKTtcbiAgICByZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCAodmFsdWVfdG9fanMgcmVzdWx0KVxuICB3aXRoXG4gIHwgRXZhbF9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpXG4gIHwgUGFyc2VfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJQYXJzZSBlcnJvcjogXCIgXiBtc2cpKVxuXG4oKiogZXZhbFZNOiBjb21waWxlIFNYIHNvdXJjZSB0byBieXRlY29kZSBhbmQgcnVuIHRocm91Z2ggdGhlIFZNLlxuICAgIEdsb2JhbHMgZGVmaW5lZCB3aXRoIGBkZWZpbmVgIGFyZSB2aXNpYmxlIHRvIHN1YnNlcXVlbnQgZXZhbFZNL2V2YWwgY2FsbHMuXG4gICAgVGhpcyB0ZXN0cyB0aGUgZXhhY3Qgc2FtZSBjb2RlIHBhdGggYXMgaXNsYW5kIGh5ZHJhdGlvbiBhbmQgY2xpY2sgaGFuZGxlcnMuICopXG5sZXQgYXBpX2V2YWxfdm0gc3JjX2pzID1cbiAgbGV0IHNyYyA9IEpzLnRvX3N0cmluZyBzcmNfanMgaW5cbiAgdHJ5XG4gICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICBsZXQgY29tcGlsZV9mbiA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgX3ZtX2dsb2JhbHMgXCJjb21waWxlLW1vZHVsZVwiIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgIHwgTm9uZSAtPiBlbnZfZ2V0IGdsb2JhbF9lbnYgXCJjb21waWxlLW1vZHVsZVwiIGluXG4gICAgbGV0IGNvZGVfdmFsID0gU3hfcmVmLnRyYW1wb2xpbmUgKFN4X3J1bnRpbWUuc3hfY2FsbCBjb21waWxlX2ZuIFtMaXN0IGV4cHJzXSkgaW5cbiAgICBsZXQgY29kZSA9IFN4X3ZtLmNvZGVfZnJvbV92YWx1ZSBjb2RlX3ZhbCBpblxuICAgIGxldCByZXN1bHQgPSBTeF92bV9yZWYuZXhlY3V0ZV9tb2R1bGUgY29kZSBfdm1fZ2xvYmFscyBpblxuICAgICgqIFN5bmMgVk0gZ2xvYmFscyDihpIgQ0VLIGVudiBzbyBzdWJzZXF1ZW50IGV2YWwoKSBjYWxscyBzZWUgZGVmaW5lcyAqKVxuICAgIEhhc2h0YmwuaXRlciAoZnVuIG5hbWUgdiAtPlxuICAgICAgbGV0IGlkID0gaW50ZXJuIG5hbWUgaW5cbiAgICAgIGlmIG5vdCAoSGFzaHRibC5tZW0gZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCkgdGhlblxuICAgICAgICBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCB2XG4gICAgICBlbHNlIChtYXRjaCBIYXNodGJsLmZpbmQgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCwgdiB3aXRoXG4gICAgICAgIHwgVm1DbG9zdXJlIF8sIFZtQ2xvc3VyZSBfIHwgXywgVm1DbG9zdXJlIF8gLT4gSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgdlxuICAgICAgICB8IF8gLT4gKCkpXG4gICAgKSBfdm1fZ2xvYmFscztcbiAgICByZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCAodmFsdWVfdG9fanMgcmVzdWx0KVxuICB3aXRoXG4gIHwgRXZhbF9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpXG4gIHwgUGFyc2VfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJQYXJzZSBlcnJvcjogXCIgXiBtc2cpKVxuICB8IE5vdF9mb3VuZCAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJFcnJvcjogY29tcGlsZS1tb2R1bGUgbm90IGxvYWRlZFwiKVxuXG5sZXQgYXBpX2V2YWxfZXhwciBleHByX2pzIF9lbnZfanMgPVxuICBsZXQgZXhwciA9IGpzX3RvX3ZhbHVlIGV4cHJfanMgaW5cbiAgdHJ5XG4gICAgbGV0IHJlc3VsdCA9IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpIGluXG4gICAgc3luY19lbnZfdG9fdm0gKCk7XG4gICAgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHZhbHVlX3RvX2pzIHJlc3VsdClcbiAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuXG5sZXQgYXBpX2xvYWQgc3JjX2pzID1cbiAgbGV0IHNyYyA9IEpzLnRvX3N0cmluZyBzcmNfanMgaW5cbiAgdHJ5XG4gICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICBsZXQgZW52ID0gRW52IGdsb2JhbF9lbnYgaW5cbiAgICBsZXQgY291bnQgPSByZWYgMCBpblxuICAgIExpc3QuaXRlciAoZnVuIGV4cHIgLT5cbiAgICAgICgqIFVzZSBJTy1hd2FyZSBldmFsIGZvciBlYWNoIGV4cHJlc3Npb24gdG8gaGFuZGxlIGltcG9ydCBzdXNwZW5zaW9ucyAqKVxuICAgICAgbGV0IHN0YXRlID0gU3hfcmVmLm1ha2VfY2VrX3N0YXRlIGV4cHIgZW52IChMaXN0IFtdKSBpblxuICAgICAgbGV0IGZpbmFsID0gcmVmIChTeF9yZWYuY2VrX3N0ZXBfbG9vcCBzdGF0ZSkgaW5cbiAgICAgIHdoaWxlIFN4X3R5cGVzLnN4X3RydXRoeSAoU3hfcmVmLmNla19zdXNwZW5kZWRfcCAhZmluYWwpIGRvXG4gICAgICAgIGxldCByZXF1ZXN0ID0gU3hfcmVmLmNla19pb19yZXF1ZXN0ICFmaW5hbCBpblxuICAgICAgICBsZXQgb3AgPSBtYXRjaCByZXF1ZXN0IHdpdGhcbiAgICAgICAgICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwib3BcIiB3aXRoIFNvbWUgKFN0cmluZyBzKSAtPiBzIHwgXyAtPiBcIlwiKVxuICAgICAgICAgIHwgXyAtPiBcIlwiIGluXG4gICAgICAgIGxldCByZXNwb25zZSA9IGlmIG9wID0gXCJpbXBvcnRcIiB0aGVuIGJlZ2luXG4gICAgICAgICAgbWF0Y2ggaGFuZGxlX2ltcG9ydF9zdXNwZW5zaW9uIHJlcXVlc3Qgd2l0aFxuICAgICAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgICAgICB8IE5vbmUgLT4gTmlsICAoKiBMaWJyYXJ5IG5vdCBmb3VuZCDigJQgcmVzdW1lIHdpdGggbmlsLCBpbXBvcnQgd2lsbCB1c2Ugd2hhdCdzIGluIGVudiAqKVxuICAgICAgICBlbmQgZWxzZSBOaWwgaW5cbiAgICAgICAgZmluYWwgOj0gU3hfcmVmLmNla19yZXN1bWUgIWZpbmFsIHJlc3BvbnNlXG4gICAgICBkb25lO1xuICAgICAgaWdub3JlIChTeF9yZWYuY2VrX3ZhbHVlICFmaW5hbCk7XG4gICAgICBpbmNyIGNvdW50XG4gICAgKSBleHBycztcbiAgICBzeW5jX2Vudl90b192bSAoKTtcbiAgICBKcy5VbnNhZmUuaW5qZWN0ICFjb3VudFxuICB3aXRoXG4gIHwgRXZhbF9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpXG4gIHwgUGFyc2VfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJQYXJzZSBlcnJvcjogXCIgXiBtc2cpKVxuXG5sZXQgYXBpX2JlZ2luX21vZHVsZV9sb2FkICgpID1cbiAgKCogU25hcHNob3QgY3VycmVudCBlbnYgaW50byB0aGUgcGVyc2lzdGVudCBWTSBnbG9iYWxzIHRhYmxlICopXG4gIEhhc2h0YmwuY2xlYXIgX3ZtX2dsb2JhbHM7XG4gIEhhc2h0YmwuaXRlciAoZnVuIGlkIHYgLT4gSGFzaHRibC5yZXBsYWNlIF92bV9nbG9iYWxzICh1bmludGVybiBpZCkgdikgZ2xvYmFsX2Vudi5iaW5kaW5ncztcbiAgX2luX2JhdGNoIDo9IHRydWU7XG4gIEpzLlVuc2FmZS5pbmplY3QgdHJ1ZVxuXG5sZXQgYXBpX2VuZF9tb2R1bGVfbG9hZCAoKSA9XG4gIGlmICFfaW5fYmF0Y2ggdGhlbiBiZWdpblxuICAgICgqIENvcHkgVk0gZ2xvYmFscyBiYWNrIHRvIGVudiAoYnl0ZWNvZGUgbW9kdWxlcyBkZWZpbmVkIG5ldyBzeW1ib2xzKSAqKVxuICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPlxuICAgICAgSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgKGludGVybiBrKSB2XG4gICAgKSBfdm1fZ2xvYmFscztcbiAgICBfaW5fYmF0Y2ggOj0gZmFsc2VcbiAgZW5kO1xuICBKcy5VbnNhZmUuaW5qZWN0IHRydWVcblxubGV0IHN5bmNfdm1fdG9fZW52ICgpID1cbiAgSGFzaHRibC5pdGVyIChmdW4gbmFtZSB2IC0+XG4gICAgbGV0IGlkID0gaW50ZXJuIG5hbWUgaW5cbiAgICBpZiBub3QgKEhhc2h0YmwubWVtIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQpIHRoZW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIGlkIHZcbiAgICBlbHNlIGJlZ2luXG4gICAgICAoKiBVcGRhdGUgZXhpc3RpbmcgYmluZGluZyBpZiB0aGUgVk0gaGFzIGEgbmV3ZXIgdmFsdWUgKilcbiAgICAgIGxldCBleGlzdGluZyA9IEhhc2h0YmwuZmluZCBnbG9iYWxfZW52LmJpbmRpbmdzIGlkIGluXG4gICAgICBtYXRjaCBleGlzdGluZywgdiB3aXRoXG4gICAgICB8IFZtQ2xvc3VyZSBfLCBWbUNsb3N1cmUgXyAtPiBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCB2XG4gICAgICB8IF8sIFZtQ2xvc3VyZSBfIC0+IEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIGlkIHZcbiAgICAgIHwgXyAtPiAoKVxuICAgIGVuZFxuICApIF92bV9nbG9iYWxzXG5cbigqKiBDb252ZXJ0IGEgVk0gc3VzcGVuc2lvbiBkaWN0IHRvIGEgSlMgc3VzcGVuc2lvbiBvYmplY3QgZm9yIHRoZSBwbGF0Zm9ybS4gKilcbmxldCByZWMgbWFrZV9qc19pbXBvcnRfc3VzcGVuc2lvbiAoZCA6IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQpID1cbiAgbGV0IG9iaiA9IEpzLlVuc2FmZS5vYmogW3x8XSBpblxuICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwic3VzcGVuZGVkXCIpIChKcy5VbnNhZmUuaW5qZWN0IEpzLl90cnVlKTtcbiAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcIm9wXCIpIChKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJpbXBvcnRcIikpO1xuICBsZXQgcmVxdWVzdCA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInJlcXVlc3RcIiB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBOaWwgaW5cbiAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcInJlcXVlc3RcIikgKHZhbHVlX3RvX2pzIHJlcXVlc3QpO1xuICAoKiByZXN1bWUgY2FsbGJhY2s6IGNsZWFycyBfX2lvX3JlcXVlc3QsIHB1c2hlcyBuaWwsIHJlLXJ1bnMgVk0gKilcbiAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcInJlc3VtZVwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuIF9yZXN1bHRfanMgLT5cbiAgICBsZXQgcmVzdW1lZCA9IFN4X3ZtX3JlZi5yZXN1bWVfbW9kdWxlIChEaWN0IGQpIGluXG4gICAgc3luY192bV90b19lbnYgKCk7XG4gICAgbWF0Y2ggcmVzdW1lZCB3aXRoXG4gICAgfCBEaWN0IGQyIHdoZW4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZDIgXCJzdXNwZW5kZWRcIiB3aXRoIFNvbWUgKEJvb2wgdHJ1ZSkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UpIC0+XG4gICAgICBKcy5VbnNhZmUuaW5qZWN0IChtYWtlX2pzX2ltcG9ydF9zdXNwZW5zaW9uIGQyKVxuICAgIHwgcmVzdWx0IC0+IHZhbHVlX3RvX2pzIHJlc3VsdCkpO1xuICBvYmpcblxubGV0IGFwaV9sb2FkX21vZHVsZSBtb2R1bGVfanMgPVxuICB0cnlcbiAgICBsZXQgY29kZV92YWwgPSBqc190b192YWx1ZSBtb2R1bGVfanMgaW5cbiAgICBsZXQgY29kZSA9IFN4X3ZtLmNvZGVfZnJvbV92YWx1ZSBjb2RlX3ZhbCBpblxuICAgIGxldCByZXN1bHQgPSBTeF92bV9yZWYuZXhlY3V0ZV9tb2R1bGUgY29kZSBfdm1fZ2xvYmFscyBpblxuICAgIG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgfCBEaWN0IGQgd2hlbiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwic3VzcGVuZGVkXCIgd2l0aCBTb21lIChCb29sIHRydWUpIC0+IHRydWUgfCBfIC0+IGZhbHNlKSAtPlxuICAgICAgKCogVk0gc3VzcGVuZGVkIG9uIE9QX1BFUkZPUk0gKGltcG9ydCkg4oCUIHJldHVybiBKUyBzdXNwZW5zaW9uIG9iamVjdCAqKVxuICAgICAgSnMuVW5zYWZlLmluamVjdCAobWFrZV9qc19pbXBvcnRfc3VzcGVuc2lvbiBkKVxuICAgIHwgXyAtPlxuICAgICAgc3luY192bV90b19lbnYgKCk7XG4gICAgICBKcy5VbnNhZmUuaW5qZWN0IChIYXNodGJsLmxlbmd0aCBfdm1fZ2xvYmFscylcbiAgd2l0aFxuICB8IEV2YWxfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuICB8IGV4biAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gUHJpbnRleGMudG9fc3RyaW5nIGV4bikpXG5cbmxldCBhcGlfZGVidWdfZW52IG5hbWVfanMgPVxuICBsZXQgbmFtZSA9IEpzLnRvX3N0cmluZyBuYW1lX2pzIGluXG4gIGxldCBpZCA9IGludGVybiBuYW1lIGluXG4gIGxldCBmb3VuZF9lbnYgPSBIYXNodGJsLmZpbmRfb3B0IGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgaW5cbiAgbGV0IGZvdW5kX3ZtID0gSGFzaHRibC5maW5kX29wdCBfdm1fZ2xvYmFscyBuYW1lIGluXG4gIGxldCB0b3RhbF9lbnYgPSBIYXNodGJsLmxlbmd0aCBnbG9iYWxfZW52LmJpbmRpbmdzIGluXG4gIGxldCB0b3RhbF92bSA9IEhhc2h0YmwubGVuZ3RoIF92bV9nbG9iYWxzIGluXG4gIGxldCBlbnZfcyA9IG1hdGNoIGZvdW5kX2VudiB3aXRoIFNvbWUgdiAtPiBcImVudjpcIiBeIHR5cGVfb2YgdiB8IE5vbmUgLT4gXCJlbnY6TUlTU0lOR1wiIGluXG4gIGxldCB2bV9zID0gbWF0Y2ggZm91bmRfdm0gd2l0aCBTb21lIHYgLT4gXCJ2bTpcIiBeIHR5cGVfb2YgdiB8IE5vbmUgLT4gXCJ2bTpNSVNTSU5HXCIgaW5cbiAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChQcmludGYuc3ByaW50ZiBcIiVzICVzIChlbnY9JWQgdm09JWQpXCIgZW52X3Mgdm1fcyB0b3RhbF9lbnYgdG90YWxfdm0pKVxuXG5sZXQgYXBpX2NvbXBpbGVfbW9kdWxlIHNyY19qcyA9XG4gIGxldCBzcmMgPSBKcy50b19zdHJpbmcgc3JjX2pzIGluXG4gIHRyeVxuICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgbGV0IGNvbXBpbGVfZm4gPSBlbnZfZ2V0IGdsb2JhbF9lbnYgXCJjb21waWxlLW1vZHVsZVwiIGluXG4gICAgbGV0IGNvZGUgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IFtjb21waWxlX2ZuOyBMaXN0IGV4cHJzXSkgKEVudiBnbG9iYWxfZW52KSBpblxuICAgIHJldHVybl92aWFfc2lkZV9jaGFubmVsICh2YWx1ZV90b19qcyBjb2RlKVxuICB3aXRoXG4gIHwgRXZhbF9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpXG4gIHwgUGFyc2VfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJQYXJzZSBlcnJvcjogXCIgXiBtc2cpKVxuICB8IE5vdF9mb3VuZCAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJFcnJvcjogY29tcGlsZS1tb2R1bGUgbm90IGxvYWRlZFwiKVxuXG5sZXQgYXBpX3JlbmRlcl90b19odG1sIGV4cHJfanMgPVxuICBsZXQgZXhwciA9IGpzX3RvX3ZhbHVlIGV4cHJfanMgaW5cbiAgbGV0IHByZXYgPSAhX3N4X3JlbmRlcl9tb2RlIGluXG4gIF9zeF9yZW5kZXJfbW9kZSA6PSB0cnVlO1xuICAodHJ5XG4gICAgbGV0IGh0bWwgPSBTeF9yZW5kZXIuc3hfcmVuZGVyX3RvX2h0bWwgZ2xvYmFsX2VudiBleHByIGdsb2JhbF9lbnYgaW5cbiAgICBfc3hfcmVuZGVyX21vZGUgOj0gcHJldjtcbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgaHRtbClcbiAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgIF9zeF9yZW5kZXJfbW9kZSA6PSBwcmV2O1xuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKSlcblxubGV0IGFwaV9zdHJpbmdpZnkgdl9qcyA9XG4gIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoaW5zcGVjdCAoanNfdG9fdmFsdWUgdl9qcykpKVxuXG5sZXQgYXBpX3R5cGVfb2Ygdl9qcyA9XG4gIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAodHlwZV9vZiAoanNfdG9fdmFsdWUgdl9qcykpKVxuXG5sZXQgYXBpX2luc3BlY3Qgdl9qcyA9XG4gIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoaW5zcGVjdCAoanNfdG9fdmFsdWUgdl9qcykpKVxuXG5sZXQgYXBpX2VuZ2luZSAoKSA9XG4gIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBcIm9jYW1sLXZtLXdhc21cIilcblxubGV0IGFwaV9yZWdpc3Rlcl9uYXRpdmUgbmFtZV9qcyBjYWxsYmFja19qcyA9XG4gIGxldCBuYW1lID0gSnMudG9fc3RyaW5nIG5hbWVfanMgaW5cbiAgbGV0IG5hdGl2ZV9mbiBhcmdzID1cbiAgICBsZXQganNfYXJncyA9IGFyZ3MgfD4gTGlzdC5tYXAgdmFsdWVfdG9fanMgfD4gQXJyYXkub2ZfbGlzdCBpblxuICAgIGpzX3RvX3ZhbHVlIChKcy5VbnNhZmUuZnVuX2NhbGwgY2FsbGJhY2tfanMgW3wgSnMuVW5zYWZlLmluamVjdCAoSnMuYXJyYXkganNfYXJncykgfF0pXG4gIGluXG4gIGxldCB2ID0gTmF0aXZlRm4gKG5hbWUsIG5hdGl2ZV9mbikgaW5cbiAgU3hfcHJpbWl0aXZlcy5yZWdpc3RlciBuYW1lIG5hdGl2ZV9mbjtcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IG5hbWUgdik7XG4gIEhhc2h0YmwucmVwbGFjZSBfdm1fZ2xvYmFscyBuYW1lIHY7XG4gIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbFxuXG5sZXQgcmVjIG1ha2VfanNfY2FsbEZuX3N1c3BlbnNpb24gcmVxdWVzdCB2bSA9XG4gIGxldCBvYmogPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcInN1c3BlbmRlZFwiKSAoSnMuVW5zYWZlLmluamVjdCBKcy5fdHJ1ZSk7XG4gIEpzLlVuc2FmZS5zZXQgb2JqIChKcy5zdHJpbmcgXCJyZXF1ZXN0XCIpICh2YWx1ZV90b19qcyByZXF1ZXN0KTtcbiAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcInJlc3VtZVwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuIHJlc3VsdF9qcyAtPlxuICAgIGxldCByZXN1bHQgPSBqc190b192YWx1ZSByZXN1bHRfanMgaW5cbiAgICB0cnlcbiAgICAgIGxldCB2ID0gU3hfdm0ucmVzdW1lX3ZtIHZtIHJlc3VsdCBpblxuICAgICAgc3luY192bV90b19lbnYgKCk7XG4gICAgICB2YWx1ZV90b19qcyB2XG4gICAgd2l0aFxuICAgIHwgU3hfdm0uVm1TdXNwZW5kZWQgKHJlcTIsIHZtMikgLT5cbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgKG1ha2VfanNfY2FsbEZuX3N1c3BlbnNpb24gcmVxMiB2bTIpXG4gICAgfCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgbGV0IHZtX2ZyYW1lX25hbWVzID0gU3RyaW5nLmNvbmNhdCBcIixcIiAoTGlzdC5tYXAgKGZ1biBmIC0+XG4gICAgICAgIG1hdGNoIGYuU3hfdm0uY2xvc3VyZS5TeF90eXBlcy52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiXG4gICAgICApIHZtLlN4X3ZtLmZyYW1lcykgaW5cbiAgICAgIGxldCBleHRyYSA9IFByaW50Zi5zcHJpbnRmIFwiIFt2bTogcGVuZGluZ19jZWs9JWIgcmV1c2U9JWQgZnJhbWVzPVslc10gc3A9JWRdXCJcbiAgICAgICAgKHZtLlN4X3ZtLnBlbmRpbmdfY2VrIDw+IE5vbmUpXG4gICAgICAgIChMaXN0Lmxlbmd0aCB2bS5TeF92bS5yZXVzZV9zdGFjaylcbiAgICAgICAgdm1fZnJhbWVfbmFtZXNcbiAgICAgICAgdm0uU3hfdm0uc3AgaW5cbiAgICAgIGlnbm9yZSAoSnMuVW5zYWZlLm1ldGhfY2FsbFxuICAgICAgICAoSnMuVW5zYWZlLmdldCBKcy5VbnNhZmUuZ2xvYmFsIChKcy5zdHJpbmcgXCJjb25zb2xlXCIpKVxuICAgICAgICBcImVycm9yXCIgW3wgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIltzeF0gcmVzdW1lOiBcIiBeIG1zZyBeIGV4dHJhKSkgfF0pO1xuICAgICAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsKSk7XG4gIG9ialxuXG5sZXQgYXBpX2NhbGxfZm4gZm5fanMgYXJnc19qcyA9XG4gIHRyeVxuICAgIGxldCBmbiA9IGpzX3RvX3ZhbHVlIGZuX2pzIGluXG4gICAgbGV0IGFyZ3MgPSBBcnJheS50b19saXN0IChBcnJheS5tYXAganNfdG9fdmFsdWUgKEpzLnRvX2FycmF5IChKcy5VbnNhZmUuY29lcmNlIGFyZ3NfanMpKSkgaW5cbiAgICByZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCAodmFsdWVfdG9fanMgKGNhbGxfc3hfZm4gZm4gYXJncykpXG4gIHdpdGhcbiAgfCBTeF92bS5WbVN1c3BlbmRlZCAocmVxdWVzdCwgdm0pIC0+XG4gICAgKCogVHJhbnNmZXIgcmV1c2Vfc3RhY2sgZnJvbSBhY3RpdmUgVk0gKilcbiAgICAobWF0Y2ggIVN4X3ZtLl9hY3RpdmVfdm0gd2l0aFxuICAgICB8IFNvbWUgYWN0aXZlIHdoZW4gYWN0aXZlLlN4X3ZtLnJldXNlX3N0YWNrIDw+IFtdIC0+XG4gICAgICAgdm0uU3hfdm0ucmV1c2Vfc3RhY2sgPC0gdm0uU3hfdm0ucmV1c2Vfc3RhY2sgQCBhY3RpdmUuU3hfdm0ucmV1c2Vfc3RhY2s7XG4gICAgICAgYWN0aXZlLlN4X3ZtLnJldXNlX3N0YWNrIDwtIFtdXG4gICAgIHwgXyAtPiAoKSk7XG4gICAgc3luY192bV90b19lbnYgKCk7XG4gICAgSnMuVW5zYWZlLmluamVjdCAobWFrZV9qc19jYWxsRm5fc3VzcGVuc2lvbiByZXF1ZXN0IHZtKVxuICB8IEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgKCogU3RvcmUgdGhlIGVycm9yIG1lc3NhZ2Ugc28gY2FsbGVycyBjYW4gZGV0ZWN0IGl0ICopXG4gICAgbGV0IGVycl9vYmogPSBKcy5VbnNhZmUub2JqIFt8IChcIl9fc3hfZXJyb3JcIiwgSnMuVW5zYWZlLmluamVjdCBKcy5fdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXCJtZXNzYWdlXCIsIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBtc2cpKSB8XSBpblxuICAgIEpzLlVuc2FmZS5pbmplY3QgZXJyX29ialxuICB8IGV4biAtPlxuICAgIGxldCBlcnJfb2JqID0gSnMuVW5zYWZlLm9iaiBbfCAoXCJfX3N4X2Vycm9yXCIsIEpzLlVuc2FmZS5pbmplY3QgSnMuX3RydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFwibWVzc2FnZVwiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFByaW50ZXhjLnRvX3N0cmluZyBleG4pKSkgfF0gaW5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IGVycl9vYmpcblxubGV0IGFwaV9pc19jYWxsYWJsZSBmbl9qcyA9XG4gIGlmIEpzLlVuc2FmZS5lcXVhbHMgZm5fanMgSnMubnVsbCB8fCBKcy5VbnNhZmUuZXF1YWxzIGZuX2pzIEpzLnVuZGVmaW5lZCB0aGVuXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuYm9vbCBmYWxzZSlcbiAgZWxzZVxuICAgIGxldCBoID0gSnMuVW5zYWZlLmdldCBmbl9qcyAoSnMuc3RyaW5nIFwiX19zeF9oYW5kbGVcIikgaW5cbiAgICBpZiBKcy5VbnNhZmUuZXF1YWxzIGggSnMudW5kZWZpbmVkIHRoZW4gSnMuVW5zYWZlLmluamVjdCAoSnMuYm9vbCBmYWxzZSlcbiAgICBlbHNlIEpzLlVuc2FmZS5pbmplY3QgKEpzLmJvb2wgKGlzX2NhbGxhYmxlIChnZXRfaGFuZGxlIChKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgaCkgfD4gaW50X29mX2Zsb2F0KSkpKVxuXG5sZXQgYXBpX2ZuX2FyaXR5IGZuX2pzID1cbiAgbGV0IGggPSBKcy5VbnNhZmUuZ2V0IGZuX2pzIChKcy5zdHJpbmcgXCJfX3N4X2hhbmRsZVwiKSBpblxuICBpZiBKcy5VbnNhZmUuZXF1YWxzIGggSnMudW5kZWZpbmVkIHRoZW4gSnMuVW5zYWZlLmluamVjdCAoSnMubnVtYmVyX29mX2Zsb2F0ICgtMS4wKSlcbiAgZWxzZVxuICAgIGxldCB2ID0gZ2V0X2hhbmRsZSAoSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIGgpIHw+IGludF9vZl9mbG9hdCkgaW5cbiAgICBtYXRjaCB2IHdpdGhcbiAgICB8IExhbWJkYSBsIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLm51bWJlcl9vZl9mbG9hdCAoZmxvYXRfb2ZfaW50IChMaXN0Lmxlbmd0aCBsLmxfcGFyYW1zKSkpXG4gICAgfCBfIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLm51bWJlcl9vZl9mbG9hdCAoLTEuMCkpXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogUGxhdGZvcm0gYmluZGluZ3MgKHJlZ2lzdGVyZWQgaW4gZ2xvYmFsIGVudikgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCAoKSA9XG4gIGxldCBiaW5kIG5hbWUgZm4gPSBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgbmFtZSAoTmF0aXZlRm4gKG5hbWUsIGZuKSkpIGluXG5cbiAgKCogY2xpZW50PyByZXR1cm5zIHRydWUgaW4gYnJvd3NlciDigJQgc2V0IHRoZSByZWYgc28gdGhlIHByaW1pdGl2ZSByZXR1cm5zIHRydWUgKilcbiAgU3hfcHJpbWl0aXZlcy5faXNfY2xpZW50IDo9IHRydWU7XG5cbiAgKCogLS0tIEV2YWx1YXRpb24gLS0tICopXG4gIGJpbmQgXCJjZWstZXZhbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiBsZXQgZSA9IFN4X3BhcnNlci5wYXJzZV9hbGwgcyBpbiAobWF0Y2ggZSB3aXRoIGggOjogXyAtPiBTeF9yZWYuZXZhbF9leHByIGggKEVudiBnbG9iYWxfZW52KSB8IFtdIC0+IE5pbClcbiAgICB8IFtleHByXSAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBnbG9iYWxfZW52KVxuICAgIHwgW2V4cHI7IGVudl92YWxdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciBlbnZfdmFsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLWV2YWw6IGV4cGVjdGVkIDEtMiBhcmdzXCIpKTtcblxuICBiaW5kIFwiZXZhbC1leHByLWNla1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2V4cHI7IGVdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciBlXG4gICAgfCBbZXhwcl0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZ2xvYmFsX2VudilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJldmFsLWV4cHItY2VrOiBleHBlY3RlZCAxLTIgYXJnc1wiKSk7XG5cbiAgYmluZCBcImNlay1jYWxsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgYV0gd2hlbiBpc19jYWxsYWJsZSBmIC0+XG4gICAgICBsZXQgYXJnX2xpc3QgPSBtYXRjaCBhIHdpdGggTGlzdCBsIC0+IGwgfCBOaWwgLT4gW10gfCB2IC0+IFt2XSBpblxuICAgICAgU3hfcmVmLnRyYW1wb2xpbmUgKFN4X3J1bnRpbWUuc3hfY2FsbCBmIGFyZ19saXN0KVxuICAgIHwgW2Y7IF9dIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImNlay1jYWxsOiBub3QgY2FsbGFibGU6IFwiIF4gdHlwZV9vZiBmKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWstY2FsbDogZXhwZWN0ZWQgKGZuIGFyZ3MpXCIpKTtcblxuICBiaW5kIFwic3gtcGFyc2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc3JjXSAtPiBMaXN0IChTeF9wYXJzZXIucGFyc2VfYWxsIHNyYylcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzeC1wYXJzZTogZXhwZWN0ZWQgc3RyaW5nXCIpKTtcblxuICAoKiBwYXJzZTogc2FtZSBhcyBzZXJ2ZXIg4oCUIHVud3JhcHMgc2luZ2xlIHJlc3VsdHMsIHJldHVybnMgbGlzdCBmb3IgbXVsdGlwbGUuXG4gICAgIFVzZWQgYnkgYm9vdC5zeCAocGFnZSBzY3JpcHRzLCBzdXNwZW5zZSkgYW5kIGVuZ2luZS5zeCAobWFyc2ggdXBkYXRlKS4gKilcbiAgYmluZCBcInBhcnNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNyY10gfCBbU3hFeHByIHNyY10gLT5cbiAgICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgICAobWF0Y2ggZXhwcnMgd2l0aCBbZV0gLT4gZSB8IF8gLT4gTGlzdCBleHBycylcbiAgICB8IFt2XSAtPiB2XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicGFyc2U6IGV4cGVjdGVkIHN0cmluZ1wiKSk7XG5cbiAgYmluZCBcInN4LXNlcmlhbGl6ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+IFN0cmluZyAoaW5zcGVjdCB2KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN4LXNlcmlhbGl6ZTogZXhwZWN0ZWQgMSBhcmdcIikpO1xuXG4gICgqIC0tLSBBc3NlcnRpb25zICYgZXF1YWxpdHkgLS0tICopXG4gIGxldCByZWMgZGVlcF9lcXVhbCBhIGIgPVxuICAgIG1hdGNoIGEsIGIgd2l0aFxuICAgIHwgTmlsLCBOaWwgLT4gdHJ1ZSB8IEJvb2wgYSwgQm9vbCBiIC0+IGEgPSBiXG4gICAgfCBJbnRlZ2VyIGEsIEludGVnZXIgYiAtPiBhID0gYlxuICAgIHwgTnVtYmVyIGEsIE51bWJlciBiIC0+IGEgPSBiXG4gICAgfCBJbnRlZ2VyIGEsIE51bWJlciBiIC0+IGZsb2F0X29mX2ludCBhID0gYlxuICAgIHwgTnVtYmVyIGEsIEludGVnZXIgYiAtPiBhID0gZmxvYXRfb2ZfaW50IGJcbiAgICB8IFN0cmluZyBhLCBTdHJpbmcgYiAtPiBhID0gYlxuICAgIHwgU3ltYm9sIGEsIFN5bWJvbCBiIC0+IGEgPSBiIHwgS2V5d29yZCBhLCBLZXl3b3JkIGIgLT4gYSA9IGJcbiAgICB8IChMaXN0IGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBhIH0pLCAoTGlzdCBiIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gYiB9KSAtPlxuICAgICAgTGlzdC5sZW5ndGggYSA9IExpc3QubGVuZ3RoIGIgJiYgTGlzdC5mb3JfYWxsMiBkZWVwX2VxdWFsIGEgYlxuICAgIHwgRGljdCBhLCBEaWN0IGIgLT5cbiAgICAgIGxldCBrYSA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhY2MgLT4gayA6OiBhY2MpIGEgW10gaW5cbiAgICAgIGxldCBrYiA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhY2MgLT4gayA6OiBhY2MpIGIgW10gaW5cbiAgICAgIExpc3QubGVuZ3RoIGthID0gTGlzdC5sZW5ndGgga2IgJiZcbiAgICAgIExpc3QuZm9yX2FsbCAoZnVuIGsgLT4gSGFzaHRibC5tZW0gYiBrICYmXG4gICAgICAgIGRlZXBfZXF1YWwgKEhhc2h0YmwuZmluZCBhIGspIChIYXNodGJsLmZpbmQgYiBrKSkga2FcbiAgICB8IF8gLT4gZmFsc2VcbiAgaW5cbiAgYmluZCBcImVxdWFsP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IEJvb2wgKGRlZXBfZXF1YWwgYSBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlcXVhbD86IDIgYXJnc1wiKSk7XG4gIGJpbmQgXCJhc3NlcnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtjb25kXSAtPiBpZiBub3QgKHN4X3RydXRoeSBjb25kKSB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwiQXNzZXJ0aW9uIGZhaWxlZFwiKTsgQm9vbCB0cnVlXG4gICAgfCBbY29uZDsgbXNnXSAtPiBpZiBub3QgKHN4X3RydXRoeSBjb25kKSB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIChcIkFzc2VydGlvbjogXCIgXiB2YWx1ZV90b19zdHJpbmcgbXNnKSk7IEJvb2wgdHJ1ZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFzc2VydDogMS0yIGFyZ3NcIikpO1xuXG4gIGJpbmQgXCJ0cnktY2FsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3RodW5rXSAtPlxuICAgICAgKHRyeSBpZ25vcmUgKFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgW3RodW5rXSkgKEVudiBnbG9iYWxfZW52KSk7XG4gICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgZCBcIm9rXCIgKEJvb2wgdHJ1ZSk7IERpY3QgZFxuICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIGQgXCJva1wiIChCb29sIGZhbHNlKTsgSGFzaHRibC5yZXBsYWNlIGQgXCJlcnJvclwiIChTdHJpbmcgbXNnKTsgRGljdCBkKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRyeS1jYWxsOiAxIGFyZ1wiKSk7XG5cbiAgKCogLS0tIEJ5dGVjb2RlIGxvYWRpbmcgZnJvbSBzLWV4cHJlc3Npb24gZm9ybWF0IC0tLVxuICAgICAoc3hiYyB2ZXJzaW9uIGhhc2ggKGNvZGUgOmFyaXR5IE4gOnVwdmFsdWUtY291bnQgTiA6Ynl0ZWNvZGUgKC4uLikgOmNvbnN0YW50cyAoLi4uKSkpXG4gICAgIFJlY3Vyc2l2ZWx5IGNvbnZlcnRzIHRoZSBTWCB0cmVlIGludG8gdGhlIGRpY3QgZm9ybWF0IHRoYXQgbG9hZE1vZHVsZSBleHBlY3RzLiAqKVxuICBiaW5kIFwibG9hZC1zeGJjXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCAoXyA6OiBfIDo6IF8gOjogY29kZV9mb3JtIDo6IF8pXSB8IFtMaXN0IChfIDo6IF8gOjogY29kZV9mb3JtIDo6IF8pXSAtPlxuICAgICAgbGV0IHJlYyBjb252ZXJ0X2NvZGUgZm9ybSA9XG4gICAgICAgIG1hdGNoIGZvcm0gd2l0aFxuICAgICAgICB8IExpc3QgKFN5bWJvbCBcImNvZGVcIiA6OiByZXN0KSAtPlxuICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgICAgICAgIGxldCByZWMgcGFyc2Vfa3YgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCBLZXl3b3JkIFwiYXJpdHlcIiA6OiBOdW1iZXIgbiA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBkIFwiYXJpdHlcIiAoTnVtYmVyIG4pOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IEtleXdvcmQgXCJ1cHZhbHVlLWNvdW50XCIgOjogTnVtYmVyIG4gOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgZCBcInVwdmFsdWUtY291bnRcIiAoTnVtYmVyIG4pOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IEtleXdvcmQgXCJieXRlY29kZVwiIDo6IExpc3QgbnVtcyA6OiByZXN0IC0+XG4gICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiYnl0ZWNvZGVcIiAoTGlzdCBudW1zKTsgcGFyc2Vfa3YgcmVzdFxuICAgICAgICAgICAgfCBLZXl3b3JkIFwiY29uc3RhbnRzXCIgOjogTGlzdCBjb25zdHMgOjogcmVzdCAtPlxuICAgICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbnN0YW50c1wiIChMaXN0IChMaXN0Lm1hcCBjb252ZXJ0X2NvbnN0IGNvbnN0cykpOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IF8gOjogcmVzdCAtPiBwYXJzZV9rdiByZXN0ICAoKiBza2lwIHVua25vd24ga2V5d29yZHMgKilcbiAgICAgICAgICAgIHwgW10gLT4gKClcbiAgICAgICAgICBpblxuICAgICAgICAgIHBhcnNlX2t2IHJlc3Q7XG4gICAgICAgICAgRGljdCBkXG4gICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJsb2FkLXN4YmM6IGV4cGVjdGVkIChjb2RlIC4uLiksIGdvdCBcIiBeIHR5cGVfb2YgZm9ybSkpXG4gICAgICBhbmQgY29udmVydF9jb25zdCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgTGlzdCAoU3ltYm9sIFwiY29kZVwiIDo6IF8pIGFzIGZvcm0gLT4gY29udmVydF9jb2RlIGZvcm1cbiAgICAgICAgfCBMaXN0IChTeW1ib2wgXCJsaXN0XCIgOjogaXRlbXMpIC0+IExpc3QgKExpc3QubWFwIGNvbnZlcnRfY29uc3QgaXRlbXMpXG4gICAgICAgIHwgdiAtPiB2ICAoKiBzdHJpbmdzLCBudW1iZXJzLCBib29sZWFucywgbmlsLCBzeW1ib2xzLCBrZXl3b3JkcyBwYXNzIHRocm91Z2ggKilcbiAgICAgIGluXG4gICAgICBsZXQgbW9kdWxlX3ZhbCA9IGNvbnZlcnRfY29kZSBjb2RlX2Zvcm0gaW5cbiAgICAgIGxldCBjb2RlID0gU3hfdm0uY29kZV9mcm9tX3ZhbHVlIG1vZHVsZV92YWwgaW5cbiAgICAgICgqIFVzZSBleGVjdXRlX21vZHVsZV9zYWZlIHRvIGhhbmRsZSBpbXBvcnQgc3VzcGVuc2lvbi5cbiAgICAgICAgIExpYnJhcmllcyBjb21waWxlZCBmcm9tIGRlZmluZS1saWJyYXJ5ICsgaW1wb3J0IGVtaXQgT1BfUEVSRk9STVxuICAgICAgICAgYXQgdGhlIGVuZDsgd2UgY2F0Y2ggYW5kIHJlc29sdmUgdGhlIGltcG9ydCBpbmxpbmUuICopXG4gICAgICAodHJ5XG4gICAgICAgIGlnbm9yZSAoU3hfdm0uZXhlY3V0ZV9tb2R1bGUgY29kZSBfdm1fZ2xvYmFscylcbiAgICAgICB3aXRoXG4gICAgICAgfCBTeF92bS5WbVN1c3BlbmRlZCBfIC0+ICgpICAoKiBJbXBvcnQgc3VzcGVuc2lvbiDigJQgZGVmaW5lcyBhbHJlYWR5IGluIGdsb2JhbHMgKilcbiAgICAgICB8IF8gLT4gKCkpO1xuICAgICAgc3luY192bV90b19lbnYgKCk7XG4gICAgICBOdW1iZXIgKGZsb2F0X29mX2ludCAoSGFzaHRibC5sZW5ndGggX3ZtX2dsb2JhbHMpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxvYWQtc3hiYzogZXhwZWN0ZWQgKHN4YmMgdmVyc2lvbiBoYXNoIChjb2RlIC4uLikpXCIpKTtcblxuICAoKiAtLS0gTGlzdCBtdXRhdGlvbiAtLS0gKilcbiAgYmluZCBcImFwcGVuZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHI7IHZdIC0+IHIgOj0gIXIgQCBbdl07IExpc3RSZWYgclxuICAgIHwgW0xpc3QgaXRlbXM7IHZdIC0+IExpc3QgKGl0ZW1zIEAgW3ZdKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFwcGVuZCE6IGV4cGVjdGVkIGxpc3QgYW5kIHZhbHVlXCIpKTtcblxuICAoKiByZW1vdmUhIOKAlCBtdXRhdGUgTGlzdFJlZiBpbi1wbGFjZSwgcmVtb3ZpbmcgYnkgaWRlbnRpdHkgKD09KSAqKVxuICBiaW5kIFwicmVtb3ZlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgdGFyZ2V0XSAtPlxuICAgICAgciA6PSBMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSB0YXJnZXQpICFyOyBMaXN0UmVmIHJcbiAgICB8IFtMaXN0IGl0ZW1zOyB0YXJnZXRdIC0+XG4gICAgICBMaXN0IChMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSB0YXJnZXQpIGl0ZW1zKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFwcGVuZCE6IGxpc3QgYW5kIHZhbHVlXCIpKTtcblxuICAoKiAtLS0gRW52aXJvbm1lbnQgb3BzIC0tLSAqKVxuICAoKiBVc2UgdW53cmFwX2VudiBmb3IgbmlsL2RpY3QgdG9sZXJhbmNlLCBtYXRjaGluZyB0aGUgc2VydmVyIGtlcm5lbCAqKVxuICBsZXQgdXcgPSBTeF9ydW50aW1lLnVud3JhcF9lbnYgaW5cbiAgYmluZCBcIm1ha2UtZW52XCIgKGZ1biBfIC0+IEVudiAobWFrZV9lbnYgKCkpKTtcbiAgYmluZCBcImdsb2JhbC1lbnZcIiAoZnVuIF8gLT4gRW52IGdsb2JhbF9lbnYpO1xuICBiaW5kIFwiZW52LWhhcz9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtlOyBTdHJpbmcga10gfCBbZTsgS2V5d29yZCBrXSAtPiBCb29sIChlbnZfaGFzICh1dyBlKSBrKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtaGFzP1wiKSk7XG4gIGJpbmQgXCJlbnYtZ2V0XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbZTsgU3RyaW5nIGtdIHwgW2U7IEtleXdvcmQga10gLT4gZW52X2dldCAodXcgZSkgayB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtZ2V0XCIpKTtcbiAgYmluZCBcImVudi1iaW5kIVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2U7IFN0cmluZyBrOyB2XSB8IFtlOyBLZXl3b3JkIGs7IHZdIC0+IGVudl9iaW5kICh1dyBlKSBrIHYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LWJpbmQhXCIpKTtcbiAgYmluZCBcImVudi1zZXQhXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbZTsgU3RyaW5nIGs7IHZdIHwgW2U7IEtleXdvcmQgazsgdl0gLT4gZW52X3NldCAodXcgZSkgayB2IHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1zZXQhXCIpKTtcbiAgYmluZCBcImVudi1leHRlbmRcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtlXSAtPiBFbnYgKGVudl9leHRlbmQgKHV3IGUpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtZXh0ZW5kXCIpKTtcbiAgYmluZCBcImVudi1tZXJnZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IFN4X3J1bnRpbWUuZW52X21lcmdlIGEgYiB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtbWVyZ2VcIikpO1xuXG4gICgqIC0tLSBUeXBlIGNvbnN0cnVjdG9ycyAtLS0gKilcbiAgYmluZCBcIm1ha2Utc3ltYm9sXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IFN5bWJvbCBzIHwgW3ZdIC0+IFN5bWJvbCAodmFsdWVfdG9fc3RyaW5nIHYpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc3ltYm9sXCIpKTtcbiAgYmluZCBcIm1ha2Uta2V5d29yZFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBLZXl3b3JkIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1rZXl3b3JkXCIpKTtcbiAgYmluZCBcImtleXdvcmQtbmFtZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0tleXdvcmQga10gLT4gU3RyaW5nIGsgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwia2V5d29yZC1uYW1lXCIpKTtcbiAgYmluZCBcInN5bWJvbC1uYW1lXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3ltYm9sIHNdIC0+IFN0cmluZyBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN5bWJvbC1uYW1lXCIpKTtcblxuICAoKiAtLS0gQ29tcG9uZW50L0lzbGFuZCBhY2Nlc3NvcnMgKG11c3QgaGFuZGxlIGJvdGggdHlwZXMpIC0tLSAqKVxuICBiaW5kIFwiY29tcG9uZW50LW5hbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBjXSAtPiBTdHJpbmcgYy5jX25hbWUgfCBbSXNsYW5kIGldIC0+IFN0cmluZyBpLmlfbmFtZSB8IF8gLT4gU3RyaW5nIFwiXCIpO1xuICBiaW5kIFwiY29tcG9uZW50LWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBjXSAtPiBFbnYgYy5jX2Nsb3N1cmUgfCBbSXNsYW5kIGldIC0+IEVudiBpLmlfY2xvc3VyZSB8IF8gLT4gRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpO1xuICBiaW5kIFwiY29tcG9uZW50LXBhcmFtc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NvbXBvbmVudCBjXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGMuY19wYXJhbXMpXG4gICAgfCBbSXNsYW5kIGldIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgaS5pX3BhcmFtcylcbiAgICB8IF8gLT4gTmlsKTtcbiAgYmluZCBcImNvbXBvbmVudC1ib2R5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgY10gLT4gYy5jX2JvZHkgfCBbSXNsYW5kIGldIC0+IGkuaV9ib2R5IHwgXyAtPiBOaWwpO1xuICBsZXQgaGFzX2NoaWxkcmVuX2ltcGwgPSBOYXRpdmVGbiAoXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuP1wiLCBmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbQ29tcG9uZW50IGNdIC0+IEJvb2wgYy5jX2hhc19jaGlsZHJlbiB8IFtJc2xhbmQgaV0gLT4gQm9vbCBpLmlfaGFzX2NoaWxkcmVuIHwgXyAtPiBCb29sIGZhbHNlKSBpblxuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuXCIgaGFzX2NoaWxkcmVuX2ltcGwpO1xuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuP1wiIGhhc19jaGlsZHJlbl9pbXBsKTtcbiAgYmluZCBcImNvbXBvbmVudC1hZmZpbml0eVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbQ29tcG9uZW50IGNdIC0+IFN0cmluZyBjLmNfYWZmaW5pdHkgfCBbSXNsYW5kIF9dIC0+IFN0cmluZyBcImNsaWVudFwiIHwgXyAtPiBTdHJpbmcgXCJhdXRvXCIpO1xuICBiaW5kIFwiY29tcG9uZW50LXBhcmFtLXR5cGVzXCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJjb21wb25lbnQtc2V0LXBhcmFtLXR5cGVzIVwiIChmdW4gXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBDRUsgc3RlcHBpbmcgLS0tICopXG4gIGJpbmQgXCJtYWtlLWNlay1zdGF0ZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2M7IGU7IGtdIC0+IFN4X3JlZi5tYWtlX2Nla19zdGF0ZSBjIGUgayB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLWNlay1zdGF0ZVwiKSk7XG4gIGJpbmQgXCJjZWstc3RlcFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfc3RlcCBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1zdGVwXCIpKTtcbiAgYmluZCBcImNlay1waGFzZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfcGhhc2UgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWstcGhhc2VcIikpO1xuICBiaW5kIFwiY2VrLXZhbHVlXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbc10gLT4gU3hfcmVmLmNla192YWx1ZSBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay12YWx1ZVwiKSk7XG4gIGJpbmQgXCJjZWstdGVybWluYWw/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbc10gLT4gU3hfcmVmLmNla190ZXJtaW5hbF9wIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLXRlcm1pbmFsP1wiKSk7XG4gIGJpbmQgXCJjZWsta29udFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfa29udCBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1rb250XCIpKTtcbiAgYmluZCBcImZyYW1lLXR5cGVcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtmXSAtPiBTeF9yZWYuZnJhbWVfdHlwZSBmIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZyYW1lLXR5cGVcIikpO1xuXG4gICgqIC0tLSBTdHJpY3QgbW9kZSAtLS0gKilcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiKnN0cmljdCpcIiAoQm9vbCBmYWxzZSkpO1xuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCIqcHJpbS1wYXJhbS10eXBlcypcIiBOaWwpO1xuICBiaW5kIFwic2V0LXN0cmljdCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFt2XSAtPiBTeF9yZWYuX3N0cmljdF9yZWYgOj0gdjsgaWdub3JlIChlbnZfc2V0IGdsb2JhbF9lbnYgXCIqc3RyaWN0KlwiIHYpOyBOaWwgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJzZXQtcHJpbS1wYXJhbS10eXBlcyFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFt2XSAtPiBTeF9yZWYuX3ByaW1fcGFyYW1fdHlwZXNfcmVmIDo9IHY7IGlnbm9yZSAoZW52X3NldCBnbG9iYWxfZW52IFwiKnByaW0tcGFyYW0tdHlwZXMqXCIgdik7IE5pbCB8IF8gLT4gTmlsKTtcbiAgYmluZCBcInZhbHVlLW1hdGNoZXMtdHlwZT9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFt2OyB0XSAtPiBTeF9yZWYudmFsdWVfbWF0Y2hlc190eXBlX3AgdiB0IHwgXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBBcHBseSAtLS0gKilcbiAgYmluZCBcImFwcGx5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBmIDo6IHJlc3QgLT5cbiAgICAgIGxldCBhbGxfYXJncyA9IG1hdGNoIExpc3QucmV2IHJlc3Qgd2l0aCBMaXN0IGxhc3QgOjogcHJlZml4IC0+IExpc3QucmV2IHByZWZpeCBAIGxhc3QgfCBfIC0+IHJlc3QgaW5cbiAgICAgIFN4X3J1bnRpbWUuc3hfY2FsbCBmIGFsbF9hcmdzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXBwbHlcIikpO1xuXG4gICgqIC0tLSBTY29wZSBzdGFjayAtLS0gKilcbiAgKCogU2NvcGUgcHJpbWl0aXZlcyAoc2NvcGUtcHVzaCEsIHNjb3BlLXBvcCEsIGNvbnRleHQsIGNvbGxlY3QhLCBjb2xsZWN0ZWQsXG4gICAgIGVtaXQhLCBlbWl0dGVkLCBzY29wZS1lbWl0ISwgc2NvcGUtZW1pdHRlZCwgZXRjLikgYXJlIHJlZ2lzdGVyZWQgYnlcbiAgICAgU3hfcHJpbWl0aXZlcyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gaW4gdGhlIHByaW1pdGl2ZXMgdGFibGUuXG4gICAgIFRoZSBDRUsgZXZhbHVhdG9yIGZhbGxzIHRocm91Z2ggdG8gdGhlIHByaW1pdGl2ZXMgdGFibGUgd2hlbiBhIHN5bWJvbFxuICAgICBpc24ndCBpbiB0aGUgZW52LCBzbyB0aGVzZSB3b3JrIGF1dG9tYXRpY2FsbHkuXG4gICAgIE9ubHkgcHJvdmlkZS1wdXNoIS9wcm92aWRlLXBvcCEgbmVlZCBleHBsaWNpdCBlbnYgYmluZGluZ3MgYXMgYWxpYXNlcy4gKilcbiAgYmluZCBcInByb3ZpZGUtcHVzaCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtuOyB2XSAtPiBTeF9ydW50aW1lLnByb3ZpZGVfcHVzaCBuIHYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicHJvdmlkZS1wdXNoIVwiKSk7XG4gIGJpbmQgXCJwcm92aWRlLXBvcCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtuXSAtPiBTeF9ydW50aW1lLnByb3ZpZGVfcG9wIG4gfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicHJvdmlkZS1wb3AhXCIpKTtcblxuICAoKiBSdW50aW1lIGhlbHBlcnMgZm9yIGJ5dGVjb2RlZCBkZWZjb21wL2RlZmlzbGFuZC9kZWZtYWNybyBmb3Jtcy5cbiAgICAgVGhlIGNvbXBpbGVyIGVtaXRzIEdMT0JBTF9HRVQgXCJldmFsLWRlZmNvbXBcIiArIENBTEwg4oCUIHRoZXNlIG11c3RcbiAgICAgZXhpc3QgYXMgY2FsbGFibGUgdmFsdWVzIGZvciBieXRlY29kZWQgLnN4IGZpbGVzIHRoYXQgY29udGFpblxuICAgICBjb21wb25lbnQgZGVmaW5pdGlvbnMgKGUuZy4gY3NzeC5zeCkuICopXG4gIGJpbmQgXCJldmFsLWRlZmNvbXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xpc3QgKF8gOjogcmVzdCldIC0+IFN4X3JlZi5zZl9kZWZjb21wIChMaXN0IHJlc3QpIChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJldmFsLWRlZmlzbGFuZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGlzdCAoXyA6OiByZXN0KV0gLT4gU3hfcmVmLnNmX2RlZmlzbGFuZCAoTGlzdCByZXN0KSAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwiZXZhbC1kZWZtYWNyb1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGlzdCAoXyA6OiByZXN0KV0gLT4gU3hfcmVmLnNmX2RlZm1hY3JvIChMaXN0IHJlc3QpIChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIEZyYWdtZW50IC8gcmF3IEhUTUwgLS0tICopXG4gIGJpbmQgXCI8PlwiIChmdW4gYXJncyAtPlxuICAgIFJhd0hUTUwgKFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgKGZ1biBhIC0+XG4gICAgICBtYXRjaCBhIHdpdGggU3RyaW5nIHMgfCBSYXdIVE1MIHMgLT4gcyB8IE5pbCAtPiBcIlwiXG4gICAgICB8IExpc3QgXyAtPiBTeF9yZW5kZXIuc3hfcmVuZGVyX3RvX2h0bWwgZ2xvYmFsX2VudiBhIGdsb2JhbF9lbnZcbiAgICAgIHwgXyAtPiB2YWx1ZV90b19zdHJpbmcgYSkgYXJncykpKTtcbiAgYmluZCBcInJhdyFcIiAoZnVuIGFyZ3MgLT5cbiAgICBSYXdIVE1MIChTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIChmdW4gYSAtPlxuICAgICAgbWF0Y2ggYSB3aXRoIFN0cmluZyBzIHwgUmF3SFRNTCBzIC0+IHMgfCBfIC0+IHZhbHVlX3RvX3N0cmluZyBhKSBhcmdzKSkpO1xuXG4gIGJpbmQgXCJkZWZpbmUtcGFnZS1oZWxwZXJcIiAoZnVuIF8gLT4gTmlsKTtcblxuICAoKiBJTyByZWdpc3RyeSDigJQgc3BlYy1sZXZlbCBkZWZpbyBwb3B1bGF0ZXMgKmlvLXJlZ2lzdHJ5KiBpbiBldmFsdWF0b3IuXG4gICAgIEFsaWFzIGFzIF9faW8tcmVnaXN0cnkgZm9yIGJhY2t3YXJkIGNvbXBhdC4gKilcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiX19pby1yZWdpc3RyeVwiIFN4X3JlZi5faW9fcmVnaXN0cnlfKTtcblxuICAoKiAtLS0gUmVuZGVyIC0tLSAqKVxuICBTeF9yZW5kZXIuc2V0dXBfcmVuZGVyX2VudiBnbG9iYWxfZW52O1xuICBiaW5kIFwic2V0LXJlbmRlci1hY3RpdmUhXCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJyZW5kZXItYWN0aXZlP1wiIChmdW4gXyAtPiBCb29sIHRydWUpO1xuICBiaW5kIFwiaXMtaHRtbC10YWc/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IEJvb2wgKFN4X3JlbmRlci5pc19odG1sX3RhZyBzKSB8IF8gLT4gQm9vbCBmYWxzZSk7XG5cbiAgKCogLS0tIFJlbmRlciBjb25zdGFudHMgbmVlZGVkIGJ5IHdlYiBhZGFwdGVycyAtLS0gKilcbiAgbGV0IGh0bWxfdGFncyA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgU3hfcmVuZGVyLmh0bWxfdGFncykgaW5cbiAgbGV0IHZvaWRfZWxlbWVudHMgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIFN4X3JlbmRlci52b2lkX2VsZW1lbnRzKSBpblxuICBsZXQgYm9vbGVhbl9hdHRycyA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgU3hfcmVuZGVyLmJvb2xlYW5fYXR0cnMpIGluXG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIkhUTUxfVEFHU1wiIGh0bWxfdGFncyk7XG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIlZPSURfRUxFTUVOVFNcIiB2b2lkX2VsZW1lbnRzKTtcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiQk9PTEVBTl9BVFRSU1wiIGJvb2xlYW5fYXR0cnMpO1xuXG4gICgqIC0tLSBIVE1MIHRhZyBzcGVjaWFsIGZvcm1zIChkaXYsIHNwYW4sIGgxLCAuLi4pIC0tLSAqKVxuICAoKiBSZWdpc3RlcmVkIGFzIGN1c3RvbSBzcGVjaWFsIGZvcm1zIHNvIGtleXdvcmRzIGFyZSBwcmVzZXJ2ZWQuXG4gICAgIEhhbmRsZXIgcmVjZWl2ZXMgKHJhdy1hcmdzIGVudiksIGV2YWx1YXRlcyBub24ta2V5d29yZCBhcmdzXG4gICAgIHdoaWxlIGtlZXBpbmcga2V5d29yZCBuYW1lcyBpbnRhY3QuICopXG4gIGxldCBldmFsX3RhZ19hcmdzIHJhd19hcmdzIGVudiA9XG4gICAgbGV0IGFyZ3MgPSBTeF9ydW50aW1lLnN4X3RvX2xpc3QgcmF3X2FyZ3MgaW5cbiAgICBsZXQgcmVjIHByb2Nlc3MgPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiBbXVxuICAgICAgfCAoS2V5d29yZCBfIGFzIGt3KSA6OiB2YWx1ZSA6OiByZXN0IC0+XG4gICAgICAgICgqIGtleXdvcmQgKyBpdHMgdmFsdWU6IGtlZXAga2V5d29yZCwgZXZhbHVhdGUgdmFsdWUgKilcbiAgICAgICAga3cgOjogU3hfcmVmLmV2YWxfZXhwciB2YWx1ZSBlbnYgOjogcHJvY2VzcyByZXN0XG4gICAgICB8IChLZXl3b3JkIF8gYXMga3cpIDo6IFtdIC0+XG4gICAgICAgICgqIHRyYWlsaW5nIGtleXdvcmQgd2l0aCBubyB2YWx1ZSDigJQgYm9vbGVhbiBhdHRyICopXG4gICAgICAgIFtrd11cbiAgICAgIHwgZXhwciA6OiByZXN0IC0+XG4gICAgICAgICgqIG5vbi1rZXl3b3JkOiBldmFsdWF0ZSAqKVxuICAgICAgICBTeF9yZWYuZXZhbF9leHByIGV4cHIgZW52IDo6IHByb2Nlc3MgcmVzdFxuICAgIGluXG4gICAgcHJvY2VzcyBhcmdzXG4gIGluXG4gIExpc3QuaXRlciAoZnVuIHRhZyAtPlxuICAgIGlnbm9yZSAoU3hfcmVmLnJlZ2lzdGVyX3NwZWNpYWxfZm9ybSAoU3RyaW5nIHRhZylcbiAgICAgIChOYXRpdmVGbiAoXCJzZjpcIiBeIHRhZywgZnVuIGhhbmRsZXJfYXJncyAtPlxuICAgICAgICBtYXRjaCBoYW5kbGVyX2FyZ3Mgd2l0aFxuICAgICAgICB8IFtyYXdfYXJnczsgZW52XSAtPiBMaXN0IChTeW1ib2wgdGFnIDo6IGV2YWxfdGFnX2FyZ3MgcmF3X2FyZ3MgZW52KVxuICAgICAgICB8IF8gLT4gTmlsKSkpXG4gICkgU3hfcmVuZGVyLmh0bWxfdGFncztcblxuICAoKiAtLS0gRXJyb3IgaGFuZGxpbmcgLS0tICopXG4gIGJpbmQgXCJjZWstdHJ5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdGh1bms7IGhhbmRsZXJdIC0+XG4gICAgICAodHJ5IFN4X3JlZi5jZWtfY2FsbCB0aHVuayBOaWxcbiAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+IFN4X3JlZi5jZWtfY2FsbCBoYW5kbGVyIChMaXN0IFtTdHJpbmcgbXNnXSkpXG4gICAgfCBbdGh1bmtdIC0+XG4gICAgICAodHJ5IGxldCByID0gU3hfcmVmLmNla19jYWxsIHRodW5rIE5pbCBpblxuICAgICAgICBMaXN0IFtTeW1ib2wgXCJva1wiOyByXVxuICAgICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT4gTGlzdCBbU3ltYm9sIFwiZXJyb3JcIjsgU3RyaW5nIG1zZ10pXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIEV2YWx1YXRvciBicmlkZ2UgZnVuY3Rpb25zIG5lZWRlZCBieSBzcGVjIC5zeCBmaWxlcyAtLS0gKilcbiAgYmluZCBcImV2YWwtZXhwclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbZXhwcjsgZV0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGUgfCBbZXhwcl0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJ0cmFtcG9saW5lXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gIVN4X3ByaW1pdGl2ZXMuX3N4X3RyYW1wb2xpbmVfZm4gdiB8IF8gLT4gTmlsKTtcbiAgYmluZCBcImV4cGFuZC1tYWNyb1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbbWFjOyByYXc7IEVudiBlXSAtPiBTeF9yZWYuZXhwYW5kX21hY3JvIG1hYyByYXcgKEVudiBlKSB8IFttYWM7IHJhd10gLT4gU3hfcmVmLmV4cGFuZF9tYWNybyBtYWMgcmF3IChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJjYWxsLWxhbWJkYVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IGE7IF9dIHwgW2Y7IGFdIHdoZW4gaXNfY2FsbGFibGUgZiAtPlxuICAgICAgKCogVXNlIGNla19jYWxsIGluc3RlYWQgb2Ygc3hfY2FsbCB0byBhdm9pZCBldmFsX2V4cHIgY29weWluZ1xuICAgICAgICAgRGljdCB2YWx1ZXMgKHNpZ25hbHMpLiBzeF9jYWxsIHJldHVybnMgYSBUaHVuayByZXNvbHZlZCB2aWFcbiAgICAgICAgIGV2YWxfZXhwciB3aGljaCBkZWVwLWNvcGllcyBkaWN0cywgYnJlYWtpbmcgc2lnbmFsIG11dGF0aW9uLiAqKVxuICAgICAgU3hfcmVmLmNla19jYWxsIGYgYVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNhbGwtbGFtYmRhOiBleHBlY3RlZCAoZm4gYXJncyBlbnY/KVwiKSk7XG4gIGJpbmQgXCJjZWstY2FsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IGFdIHdoZW4gaXNfY2FsbGFibGUgZiAtPlxuICAgICAgbGV0IGFyZ19saXN0ID0gbWF0Y2ggYSB3aXRoIExpc3QgbCAtPiBsIHwgTmlsIC0+IFtdIHwgdiAtPiBbdl0gaW5cbiAgICAgIFN4X3JlZi50cmFtcG9saW5lIChTeF9ydW50aW1lLnN4X2NhbGwgZiBhcmdfbGlzdClcbiAgICB8IFtmOyBfXSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJjZWstY2FsbDogbm90IGNhbGxhYmxlOiBcIiBeIHR5cGVfb2YgZikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLWNhbGw6IGV4cGVjdGVkIChmbiBhcmdzKVwiKSk7XG4gIGJpbmQgXCJjZWstZXZhbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbZXhwcl0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZ2xvYmFsX2VudikgfCBbZXhwcjsgZV0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGUgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJxcS1leHBhbmQtcnVudGltZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdGVtcGxhdGVdIC0+IFN4X3JlZi5xcV9leHBhbmQgdGVtcGxhdGUgKEVudiBnbG9iYWxfZW52KSB8IFt0ZW1wbGF0ZTsgRW52IGVdIC0+IFN4X3JlZi5xcV9leHBhbmQgdGVtcGxhdGUgKEVudiBlKSB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gVHlwZSBwcmVkaWNhdGVzIG5lZWRlZCBieSBhZGFwdGVycyAtLS0gKilcbiAgYmluZCBcInRodW5rP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1RodW5rIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJ0aHVuay1leHByXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gdGh1bmtfZXhwciB2IHwgXyAtPiBOaWwpO1xuICBiaW5kIFwidGh1bmstZW52XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gdGh1bmtfZW52IHYgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJsYW1iZGE/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJtYWNybz9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtNYWNybyBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwiaXNsYW5kP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0lzbGFuZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwiY29tcG9uZW50P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBfXSB8IFtJc2xhbmQgX10gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgYmluZCBcImNhbGxhYmxlP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW05hdGl2ZUZuIF9dIHwgW0xhbWJkYSBfXSB8IFtDb21wb25lbnQgX10gfCBbSXNsYW5kIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJzcHJlYWQ/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3ByZWFkIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJjb250aW51YXRpb24/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ29udGludWF0aW9uIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJsYW1iZGEtcGFyYW1zXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIGxdIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgbC5sX3BhcmFtcykgfCBfIC0+IExpc3QgW10pO1xuICBiaW5kIFwibGFtYmRhLWJvZHlcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgbF0gLT4gbC5sX2JvZHkgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJsYW1iZGEtY2xvc3VyZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBsXSAtPiBFbnYgbC5sX2Nsb3N1cmUgfCBfIC0+IERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKTtcblxuICAoKiAtLS0gQ29yZSBvcGVyYXRpb25zIG5lZWRlZCBieSBhZGFwdGVycyAtLS0gKilcbiAgYmluZCBcInNwcmVhZC1hdHRyc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3ByZWFkIHBhaXJzXSAtPiBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW4gTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IEhhc2h0YmwucmVwbGFjZSBkIGsgdikgcGFpcnM7IERpY3QgZCB8IF8gLT4gRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpO1xuICBiaW5kIFwibWFrZS1zcHJlYWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gU3ByZWFkIChIYXNodGJsLmZvbGQgKGZ1biBrIHYgYWNjIC0+IChrLCB2KSA6OiBhY2MpIGQgW10pIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwibWFrZS1yYXctaHRtbFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBSYXdIVE1MIHMgfCBbdl0gLT4gUmF3SFRNTCAodmFsdWVfdG9fc3RyaW5nIHYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwicmF3LWh0bWwtY29udGVudFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1Jhd0hUTUwgc10gLT4gU3RyaW5nIHMgfCBbU3RyaW5nIHNdIC0+IFN0cmluZyBzIHwgXyAtPiBTdHJpbmcgXCJcIik7XG4gIGJpbmQgXCJlbXB0eS1kaWN0P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gQm9vbCAoSGFzaHRibC5sZW5ndGggZCA9IDApIHwgXyAtPiBCb29sIHRydWUpO1xuICBiaW5kIFwiaWRlbnRpY2FsP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IEJvb2wgKGEgPT0gYikgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaWRlbnRpY2FsP1wiKSk7XG4gIGJpbmQgXCJmb3ItZWFjaC1pbmRleGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZm5fdmFsOyBMaXN0IGl0ZW1zXSB8IFtmbl92YWw7IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH1dIC0+XG4gICAgICBMaXN0Lml0ZXJpIChmdW4gaSBpdGVtIC0+XG4gICAgICAgIGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciAoTGlzdCBbZm5fdmFsOyBOdW1iZXIgKGZsb2F0X29mX2ludCBpKTsgaXRlbV0pIChFbnYgZ2xvYmFsX2VudikpXG4gICAgICApIGl0ZW1zOyBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gU3RyaW5nL251bWJlciBoZWxwZXJzIHVzZWQgYnkgb3JjaGVzdHJhdGlvbi9icm93c2VyIC0tLSAqKVxuICBiaW5kIFwibWFrZS1zeC1leHByXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IFN4RXhwciBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc3gtZXhwclwiKSk7XG4gIGJpbmQgXCJzeC1leHByLXNvdXJjZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N4RXhwciBzXSAtPiBTdHJpbmcgcyB8IFtTdHJpbmcgc10gLT4gU3RyaW5nIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3gtZXhwci1zb3VyY2VcIikpO1xuICBiaW5kIFwicGFyc2UtaW50XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+ICh0cnkgTnVtYmVyIChmbG9hdF9vZl9pbnQgKGludF9vZl9zdHJpbmcgcykpIHdpdGggXyAtPiBOaWwpXG4gICAgfCBbU3RyaW5nIHM7IGRlZmF1bHRfdmFsXSAtPiAodHJ5IE51bWJlciAoZmxvYXRfb2ZfaW50IChpbnRfb2Zfc3RyaW5nIHMpKSB3aXRoIF8gLT4gZGVmYXVsdF92YWwpXG4gICAgfCBbTnVtYmVyIG5dIHwgW051bWJlciBuOyBfXSAtPiBOdW1iZXIgKEZsb2F0LnJvdW5kIG4pXG4gICAgfCBbXzsgZGVmYXVsdF92YWxdIC0+IGRlZmF1bHRfdmFsIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwicGFyc2UtbnVtYmVyXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+ICh0cnkgTnVtYmVyIChmbG9hdF9vZl9zdHJpbmcgcykgd2l0aCBfIC0+IE5pbCkgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFNlcnZlci1vbmx5IHN0dWJzIChuby1vcHMgaW4gYnJvd3NlcikgLS0tICopXG4gIGJpbmQgXCJxdWVyeVwiIChmdW4gXyAtPiBOaWwpO1xuICBiaW5kIFwiYWN0aW9uXCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJyZXF1ZXN0LWFyZ1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW187IGRdIC0+IGQgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJyZXF1ZXN0LW1ldGhvZFwiIChmdW4gXyAtPiBTdHJpbmcgXCJHRVRcIik7XG4gIGJpbmQgXCJjdHhcIiAoZnVuIF8gLT4gTmlsKTtcbiAgYmluZCBcImhlbHBlclwiIChmdW4gXyAtPiBOaWwpO1xuICAoKVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEpJVCBjb21waWxhdGlvbiBob29rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqIE9uIGZpcnN0IGNhbGwgdG8gYSBuYW1lZCBsYW1iZGEsIHRyeSB0byBjb21waWxlIGl0IHRvIGJ5dGVjb2RlIHZpYSAgKilcbigqIGNvbXBpbGVyLnN4IChsb2FkZWQgYXMgYW4gLnN4IHBsYXRmb3JtIGZpbGUpLiBDb21waWxlZCBjbG9zdXJlcyBydW4gKilcbigqIG9uIHRoZSBieXRlY29kZSBWTTsgZmFpbHVyZXMgZmFsbCBiYWNrIHRvIHRoZSBDRUsgaW50ZXJwcmV0ZXIuICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgX2ppdF9jb21waWxpbmcgPSByZWYgZmFsc2VcbmxldCBfaml0X2VuYWJsZWQgPSByZWYgZmFsc2VcblxubGV0ICgpID1cbiAgU3hfcnVudGltZS5faml0X3RyeV9jYWxsX2ZuIDo9IFNvbWUgKGZ1biBmIGFyZ3MgLT5cbiAgICBtYXRjaCBmIHdpdGhcbiAgICB8IExhbWJkYSBsIHdoZW4gIV9qaXRfZW5hYmxlZCAtPlxuICAgICAgKG1hdGNoIGwubF9jb21waWxlZCB3aXRoXG4gICAgICAgfCBTb21lIGNsIHdoZW4gbm90IChTeF92bS5pc19qaXRfZmFpbGVkIGNsKSAtPlxuICAgICAgICAgKHRyeSBTb21lIChTeF92bS5jYWxsX2Nsb3N1cmUgY2wgYXJncyBfdm1fZ2xvYmFscylcbiAgICAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgICAgICBsZXQgZm5fbmFtZSA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIEZBSUwgJXM6ICVzIChiYz0lZCBjb25zdHM9JWQgdXB2PSVkKVxcbiUhXCJcbiAgICAgICAgICAgICAgZm5fbmFtZSBtc2dcbiAgICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBjbC52bV9jb2RlLnZjX2J5dGVjb2RlKVxuICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX2NvZGUudmNfY29uc3RhbnRzKVxuICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX3VwdmFsdWVzKTtcbiAgICAgICAgICAgICgqIE1hcmsgYXMgZmFpbGVkIHRvIHN0b3AgcmV0cnlpbmcgKilcbiAgICAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIChTeF92bS5qaXRfZmFpbGVkX3NlbnRpbmVsKTtcbiAgICAgICAgICAgIE5vbmUpXG4gICAgICAgfCBTb21lIF8gLT4gTm9uZVxuICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgaWYgIV9qaXRfY29tcGlsaW5nIHRoZW4gTm9uZVxuICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICBfaml0X2NvbXBpbGluZyA6PSB0cnVlO1xuICAgICAgICAgICBsZXQgY29tcGlsZWQgPSBTeF92bS5qaXRfY29tcGlsZV9sYW1iZGEgbCBfdm1fZ2xvYmFscyBpblxuICAgICAgICAgICBfaml0X2NvbXBpbGluZyA6PSBmYWxzZTtcbiAgICAgICAgICAgKG1hdGNoIGNvbXBpbGVkIHdpdGhcbiAgICAgICAgICAgfCBTb21lIGNsIC0+XG4gICAgICAgICAgICAgbC5sX2NvbXBpbGVkIDwtIFNvbWUgY2w7XG4gICAgICAgICAgICAgKHRyeSBTb21lIChTeF92bS5jYWxsX2Nsb3N1cmUgY2wgYXJncyBfdm1fZ2xvYmFscylcbiAgICAgICAgICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgICAgICAgIGxldCBmbl9uYW1lMiA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiAlcyAoYmM9JWQgY29uc3RzPSVkIHVwdj0lZClcXG4lIVwiXG4gICAgICAgICAgICAgICAgICBmbl9uYW1lMiBtc2dcbiAgICAgICAgICAgICAgICAgIChBcnJheS5sZW5ndGggY2wudm1fY29kZS52Y19ieXRlY29kZSlcbiAgICAgICAgICAgICAgICAgIChBcnJheS5sZW5ndGggY2wudm1fY29kZS52Y19jb25zdGFudHMpXG4gICAgICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX3VwdmFsdWVzKTtcbiAgICAgICAgICAgICAgICBsLmxfY29tcGlsZWQgPC0gU29tZSAoU3hfdm0uaml0X2ZhaWxlZF9zZW50aW5lbCk7XG4gICAgICAgICAgICAgICAgTm9uZSlcbiAgICAgICAgICAgfCBOb25lIC0+IE5vbmUpXG4gICAgICAgICBlbmQpXG4gICAgfCBfIC0+IE5vbmUpXG5cbmxldCAoKSA9IGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcImVuYWJsZS1qaXQhXCIgKE5hdGl2ZUZuIChcImVuYWJsZS1qaXQhXCIsIGZ1biBfIC0+IF9qaXRfZW5hYmxlZCA6PSB0cnVlOyBOaWwpKSlcblxuKCogU2VlZCBCT1RIIF92bV9nbG9iYWxzIEFORCBnbG9iYWxfZW52IHdpdGggQUxMIHByaW1pdGl2ZXMgYXMgTmF0aXZlRm4gdmFsdWVzLlxuICAgVW5jb25kaXRpb25hbCDigJQgbmF0aXZlIHByaW1pdGl2ZXMgYXJlIGF1dGhvcml0YXRpdmUgZm9yIENBTExfUFJJTSBkaXNwYXRjaC5cbiAgIE11c3QgYmUgaW4gYm90aCBiZWNhdXNlIHN5bmNfZW52X3RvX3ZtKCkgY29waWVzIGdsb2JhbF9lbnYg4oaSIF92bV9nbG9iYWxzLiAqKVxubGV0ICgpID1cbiAgSGFzaHRibC5pdGVyIChmdW4gbmFtZSBmbiAtPlxuICAgIGxldCB2ID0gTmF0aXZlRm4gKG5hbWUsIGZuKSBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBfdm1fZ2xvYmFscyBuYW1lIHY7XG4gICAgSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgKGludGVybiBuYW1lKSB2XG4gICkgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogUmVnaXN0ZXIgZ2xvYmFsIFN4S2VybmVsIG9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCAoKSA9XG4gIGxldCBzeCA9IEpzLlVuc2FmZS5vYmogW3x8XSBpblxuICBsZXQgd3JhcCBmbiA9IEpzLlVuc2FmZS5mdW5fY2FsbFxuICAgIChKcy5VbnNhZmUucHVyZV9qc19leHByIFwiKGZ1bmN0aW9uKGZuKSB7IHJldHVybiBmdW5jdGlvbigpIHsgZ2xvYmFsVGhpcy5fX3N4UiA9IHVuZGVmaW5lZDsgdmFyIHIgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpOyByZXR1cm4gZ2xvYmFsVGhpcy5fX3N4UiAhPT0gdW5kZWZpbmVkID8gZ2xvYmFsVGhpcy5fX3N4UiA6IHI7IH07IH0pXCIpXG4gICAgW3wgSnMuVW5zYWZlLmluamVjdCAoSnMud3JhcF9jYWxsYmFjayBmbikgfF0gaW5cblxuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJwYXJzZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfcGFyc2UpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzdHJpbmdpZnlcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX3N0cmluZ2lmeSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImV2YWxcIikgKHdyYXAgYXBpX2V2YWwpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJldmFsVk1cIikgKHdyYXAgYXBpX2V2YWxfdm0pO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJldmFsRXhwclwiKSAod3JhcCBhcGlfZXZhbF9leHByKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwicmVuZGVyVG9IdG1sXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9yZW5kZXJfdG9faHRtbCk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImxvYWRcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2xvYWQpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJsb2FkTW9kdWxlXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9sb2FkX21vZHVsZSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImJlZ2luTW9kdWxlTG9hZFwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuICgpIC0+IGFwaV9iZWdpbl9tb2R1bGVfbG9hZCAoKSkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJlbmRNb2R1bGVMb2FkXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT4gYXBpX2VuZF9tb2R1bGVfbG9hZCAoKSkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJjb21waWxlTW9kdWxlXCIpICh3cmFwIGFwaV9jb21waWxlX21vZHVsZSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInR5cGVPZlwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfdHlwZV9vZik7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImluc3BlY3RcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2luc3BlY3QpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJlbmdpbmVcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2VuZ2luZSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInJlZ2lzdGVyTmF0aXZlXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9yZWdpc3Rlcl9uYXRpdmUpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJsb2FkU291cmNlXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9sb2FkKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiY2FsbEZuXCIpICh3cmFwIGFwaV9jYWxsX2ZuKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiaXNDYWxsYWJsZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfaXNfY2FsbGFibGUpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJmbkFyaXR5XCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9mbl9hcml0eSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImRlYnVnRW52XCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9kZWJ1Z19lbnYpO1xuXG4gICgqIFNjb3BlIHRyYWNpbmcgQVBJICopXG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInNjb3BlVHJhY2VPblwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuICgpIC0+XG4gICAgU3hfcHJpbWl0aXZlcy5zY29wZV90cmFjZV9lbmFibGUgKCk7IEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzY29wZVRyYWNlT2ZmXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT5cbiAgICBTeF9wcmltaXRpdmVzLnNjb3BlX3RyYWNlX2Rpc2FibGUgKCk7IEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzY29wZVRyYWNlRHJhaW5cIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biAoKSAtPlxuICAgIGxldCBsb2cgPSBTeF9wcmltaXRpdmVzLnNjb3BlX3RyYWNlX2RyYWluICgpIGluXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuYXJyYXkgKEFycmF5Lm9mX2xpc3QgKExpc3QubWFwIChmdW4gcyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgcykpIGxvZykpKSkpO1xuXG4gICgqIFN0ZXAgbGltaXQgZm9yIHRpbWVvdXQgcHJvdGVjdGlvbiAqKVxuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzZXRTdGVwTGltaXRcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biBuIC0+XG4gICAgbGV0IGxpbWl0ID0gSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIG4pIHw+IGludF9vZl9mbG9hdCBpblxuICAgIFN4X3JlZi5zdGVwX2xpbWl0IDo9IGxpbWl0O1xuICAgIFN4X3JlZi5zdGVwX2NvdW50IDo9IDA7XG4gICAgU3hfdm0udm1fcmVzZXRfY291bnRlcnMgKCk7XG4gICAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsKSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInJlc2V0U3RlcENvdW50XCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT5cbiAgICBTeF9yZWYuc3RlcF9jb3VudCA6PSAwO1xuICAgIFN4X3ZtLnZtX3Jlc2V0X2NvdW50ZXJzICgpO1xuICAgIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuXG4gIEpzLlVuc2FmZS5zZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiU3hLZXJuZWxcIikgc3hcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwiY2FtbF9qc19mcm9tX2FycmF5IiwiY2FtbF9qc193cmFwX2NhbGxiYWNrIiwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmciLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZyIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsNCIsImEyIiwiYTMiLCJjYW1sX2NhbGw1IiwiYTQiLCJnbG9iYWxfZGF0YSIsIlN4X3ZtIiwiU3hfdHlwZXMiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliIiwiSnNfb2Zfb2NhbWxfSnMiLCJTdGRsaWJfUHJpbnRleGMiLCJTdGRsaWJfSGFzaHRibCIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9PcHRpb24iLCJTeF92bV9yZWYiLCJTeF9yZWYiLCJTeF9wcmltaXRpdmVzIiwiU3hfcnVudGltZSIsIlN4X3JlbmRlciIsIlN4X3BhcnNlciIsImhhbmRsZV90YWJsZSIsIm5leHRfaGFuZGxlIiwiYWxsb2NfaGFuZGxlIiwidiIsImlkIiwiZ2V0X2hhbmRsZSIsIm1hdGNoIiwiYWxsb2NfaG9zdF9oYW5kbGUiLCJuZXh0X2hvc3RfaGFuZGxlIiwiaG9zdF9wdXQiLCJvYmoiLCJnbG9iYWxfZW52IiwiY2FsbF9zeF9mbiIsImZuIiwiYXJncyIsInJlc3VsdCIsInRhZ19mbiIsImNzdF9jYWxsYmFjayIsImNzdF9jYWxsYmFja19zX2hhbmRsZV9kIiwiY3N0X3ZtX3BlbmRpbmdfY2VrIiwiY3N0X3ZtX3BlbmRpbmdfY2VrX2JfcmV1c2VfZF9mIiwiY3N0X2ZyYW1lcyIsImNzdF9oYW5kbGUiLCJjc3RfcmV1c2UiLCJjc3QiLCJjc3Rfc3hfcmVzdW1lIiwiY3N0X3NwIiwiY3N0X2hvc3RfaGFuZGxlIiwiY3N0X2RpY3QiLCJjc3Rfa2V5d29yZCIsImNzdF9saXN0IiwiY3N0X3N5bWJvbCIsInZhbHVlX3RvX2pzIiwiYiIsIm4iLCJzIiwiayIsIml0ZW1zIiwiZCIsImhhbmRsZSIsImlubmVyIiwiYXJnc19qcyIsImFyZyIsImV4biIsIm1zZyIsImZuX2luZm8iLCJ2bSIsInJlcXVlc3QiLCJhY3RpdmUiLCJtYWtlX3N1c3BlbnNpb24iLCJyZXEiLCJyZXN1bHRfanMiLCJ2bTIiLCJyZXEyIiwidm1fZnJhbWVfbmFtZXMiLCJleHRyYSIsImRyaXZlIiwiYXJyIiwianNfdG9fdmFsdWUiLCJqcyIsInR5IiwiaCIsImhhc19ob3N0X2NiIiwidHlwZV9maWVsZCIsInQwIiwidDEiLCJpIiwidGFnIiwiaXRlbXNfanMiLCJ0MyIsInQ0Iiwia2V5cyIsImxlbiIsInJldHVybl92aWFfc2lkZV9jaGFubmVsIiwidm1fZ2xvYmFscyIsInN5bmNfZW52X3RvX3ZtIiwicGFyYW0iLCJlbnYiLCJuYW1lIiwicmVzb2x2ZV9mbiIsImR1bW15IiwiY3N0X1BhcnNlX2Vycm9yIiwiYXBpX3BhcnNlIiwic3JjX2pzIiwic3JjIiwidmFsdWVzIiwiY3N0X0Vycm9yIiwiYXBpX2V2YWwiLCJleHBycyIsImFjYyIsImV4cHIiLCJjc3RfRXJyb3JfY29tcGlsZV9tb2R1bGVfbm90X2wiLCJjc3RfY29tcGlsZV9tb2R1bGUiLCJhcGlfZXZhbF92bSIsImNvbXBpbGVfZm4iLCJjb2RlX3ZhbCIsImNvZGUiLCJhcGlfZXZhbF9leHByIiwiZXhwcl9qcyIsImVudl9qcyIsImNzdF9pbXBvcnQiLCJhcGlfbG9hZCIsImNvdW50Iiwic3RhdGUiLCJmaW5hbCIsIm9wIiwibGliX3NwZWMiLCJrZXkiLCJyZXNwb25zZSIsInN5bmNfdm1fdG9fZW52IiwiZXhpc3RpbmciLCJjc3Rfc3VzcGVuZGVkIiwibWFrZV9qc19pbXBvcnRfc3VzcGVuc2lvbiIsInJlc3VtZWQiLCJkMiIsImFwaV9sb2FkX21vZHVsZSIsIm1vZHVsZV9qcyIsImFwaV9kZWJ1Z19lbnYiLCJuYW1lX2pzIiwiZm91bmRfZW52IiwiZm91bmRfdm0iLCJ0b3RhbF9lbnYiLCJ0b3RhbF92bSIsImVudl9zIiwidm1fcyIsImFwaV9jb21waWxlX21vZHVsZSIsInN4X3JlbmRlcl9tb2RlIiwiYXBpX3JlbmRlcl90b19odG1sIiwicHJldiIsImh0bWwiLCJhcGlfc3RyaW5naWZ5Iiwidl9qcyIsImFwaV90eXBlX29mIiwiYXBpX2luc3BlY3QiLCJhcGlfZW5naW5lIiwiYXBpX3JlZ2lzdGVyX25hdGl2ZSIsImNhbGxiYWNrX2pzIiwibmF0aXZlX2ZuIiwianNfYXJncyIsIm1ha2VfanNfY2FsbEZuX3N1c3BlbnNpb24iLCJhcGlfY2FsbF9mbiIsImZuX2pzIiwiZXJyX29iaiIsImFwaV9pc19jYWxsYWJsZSIsImFwaV9mbl9hcml0eSIsImwiLCJiaW5kIiwiY3N0X2Nla19ldmFsIiwiZSIsImVudl92YWwiLCJjc3RfY2VrX2NhbGwiLCJjc3RfY2VrX2NhbGxfZXhwZWN0ZWRfZm5fYXJncyIsImNzdF9jZWtfY2FsbF9ub3RfY2FsbGFibGUiLCJhIiwiYXJnX2xpc3QiLCJkZWVwX2VxdWFsIiwia2EiLCJrYiIsImNvbmQiLCJjc3RfZXJyb3IiLCJjc3Rfb2siLCJ0aHVuayIsImNvZGVfZm9ybSIsImNzdF9jb2RlIiwiY29udmVydF9jb2RlIiwiZm9ybSIsInJlc3QiLCJjc3RfYXJpdHkiLCJjc3RfYnl0ZWNvZGUiLCJjc3RfY29uc3RhbnRzIiwiY3N0X3VwdmFsdWVfY291bnQiLCJjb25zdHMiLCJudW1zIiwiY29udmVydF9jb25zdCIsIm1vZHVsZV92YWwiLCJyIiwidGFyZ2V0IiwieCIsInV3IiwiY3N0X2Vudl9oYXMiLCJjc3RfZW52X2dldCIsImNzdF9lbnZfYmluZCIsImNzdF9lbnZfc2V0IiwiY3N0X2Vudl9leHRlbmQiLCJjc3RfZW52X21lcmdlIiwiY3N0X21ha2Vfc3ltYm9sIiwiY3N0X21ha2Vfa2V5d29yZCIsImNzdF9rZXl3b3JkX25hbWUiLCJjc3Rfc3ltYm9sX25hbWUiLCJjIiwiY3N0X2NvbXBvbmVudF9oYXNfY2hpbGRyZW4iLCJoYXNfY2hpbGRyZW5faW1wbCIsImNzdF9tYWtlX2Nla19zdGF0ZSIsImNzdF9jZWtfc3RlcCIsImNzdF9jZWtfcGhhc2UiLCJjc3RfY2VrX3ZhbHVlIiwiY3N0X2Nla190ZXJtaW5hbCIsImNzdF9jZWtfa29udCIsImNzdF9mcmFtZV90eXBlIiwiY3N0X3N0cmljdCIsImNzdF9wcmltX3BhcmFtX3R5cGVzIiwidCIsImNzdF9hcHBseSIsImFsbF9hcmdzIiwicHJlZml4IiwibGFzdCIsImNzdF9wcm92aWRlX3B1c2giLCJjc3RfcHJvdmlkZV9wb3AiLCJodG1sX3RhZ3MiLCJ2b2lkX2VsZW1lbnRzIiwiYm9vbGVhbl9hdHRycyIsImV2YWxfdGFnX2FyZ3MiLCJyYXdfYXJncyIsInByb2Nlc3MiLCJrdyIsInZhbHVlIiwiaGFuZGxlcl9hcmdzIiwiaGFuZGxlciIsInJhdyIsIm1hYyIsInRlbXBsYXRlIiwicGFpcnMiLCJjc3RfaWRlbnRpY2FsIiwiZm5fdmFsIiwiaXRlbSIsImNzdF9tYWtlX3N4X2V4cHIiLCJjc3Rfc3hfZXhwcl9zb3VyY2UiLCJkZWZhdWx0X3ZhbCIsImNzdF9iYyIsImNzdF9jb25zdHMiLCJjc3RfdXB2IiwiY3N0X2ppdF9GQUlMIiwiY3N0X2ppdF9GQUlMX3Nfc19iY19kX2NvbnN0c19kIiwiaml0X2NvbXBpbGluZyIsImppdF9lbmFibGVkIiwiY2wiLCJmbl9uYW1lIiwiY29tcGlsZWQiLCJmbl9uYW1lMiIsImNzdF9lbmFibGVfaml0Iiwid3JhcCIsInN4IiwiaW5fYmF0Y2giLCJsb2ciLCJsaW1pdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQywwQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsMEJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUUsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFQLEdBQUFDLElBQUFFLElBQUFFLElBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FB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QUFBQSxHQUF3RDtBQUFBO0FBQUEsRURqbEMxRCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjY5MzI3LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZF9leGl0LmNtby5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RkX2V4aXQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEVuc3VyZSB0aGF0IFthdF9leGl0XSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHByb2dyYW0gKilcblxubGV0IF8gPSBkb19hdF9leGl0KClcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsIlN0ZGxpYiJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQUMsU0FBQTtBQUFBLEdDaUJRO0FBQUEsR0FBWTtBQUFBO0FBQUEsRURqQnBCIiwiaWdub3JlTGlzdCI6WzBdfX1dfQ==